<?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>225756</bug_id>
          
          <creation_ts>2021-05-13 04:49:40 -0700</creation_ts>
          <short_desc>[LFC] Move block formatting geometry to its own class</short_desc>
          <delta_ts>2021-05-15 15: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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>225731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1759635</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 04:49:40 -0700</bug_when>
    <thetext>This is part of bug 225731 activity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759665</commentid>
    <comment_count>1</comment_count>
      <attachid>428504</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 05:51:14 -0700</bug_when>
    <thetext>Created attachment 428504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760473</commentid>
    <comment_count>2</comment_count>
      <attachid>428742</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 14:41:44 -0700</bug_when>
    <thetext>Created attachment 428742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760474</commentid>
    <comment_count>3</comment_count>
      <attachid>428743</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 14:55:15 -0700</bug_when>
    <thetext>Created attachment 428743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760480</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-15 15:30:45 -0700</bug_when>
    <thetext>Committed r277549 (237777@main): &lt;https://commits.webkit.org/237777@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428743.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760481</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-15 15:31:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78064643&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428504</attachid>
            <date>2021-05-13 05:51:14 -0700</date>
            <delta_ts>2021-05-15 14:41:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225756-20210513055113.patch</filename>
            <type>text/plain</type>
            <size>71348</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE5ZDEyNDY2NTYyNDFh
MTM2ZGYzNzJjYjQxZjMyZGViNWY0MzYwNy4uNjc1OTI3ZjEyZGQ5MzQzMzZkMTdjYTU3MTkzNDVm
MmEzYWEyNmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA1LTEzICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGJsb2NrIGZv
cm1hdHRpbmcgZ2VvbWV0cnkgdG8gaXRzIG93biBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nUXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nUXVpcmtzOjpzdHJldGNoZWRJbkZsb3dIZWlnaHQpOgorICAgICAgICAqIGxheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ1F1aXJrczo6Zm9ybWF0dGluZ0Nv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdR
dWlya3M6Omdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHA6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgICogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nUXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVy
UXVpcmtzOjpvdmVycmlkZGVuVGFibGVIZWlnaHQgY29uc3QpOgorCiAyMDIxLTA1LTA1ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbTVNFXVtHU3Ry
ZWFtZXJdIFdlYktpdE1lZGlhU3JjIHJld29yayB2MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBkMjAyZGQw
Y2ZjNzQzMDFiNmM2N2I0MWE1N2ZiNjM5NmQyZjI2NTg5Li4zMDc2YjYwNDNlNzUyYjk0MTRhZDg3
NTkyMjdkNTk0YjdiMDAwOWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTUyMCw3ICsxNTIwLDcgQEAg
bGF5b3V0L0xheW91dFN0YXRlLmNwcAogbGF5b3V0L0xheW91dFVuaXRzLmNwcAogbGF5b3V0L1Zl
cmlmaWNhdGlvbi5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9i
bG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZDU1ZjI4OTE2ZTE1YjE0
YTA5MzU4NDAyMTc1ODVjNzY1NWVjYTEwLi4yMGZlYjNhOGNlZTk4NjU0ZWUyNDU2MDcyOTk3YmU5
MzU2YTNkMTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yMTM3LDYgKzIxMzcsNyBAQAogCQk2RjU2QjQ0NzI2NDc5RTYyMDBB
QUUyNTcgLyogRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkY1NkI0NDYyNjQ3OUU2MTAwQUFFMjU3IC8qIEZvcm1hdHRpbmdR
dWlya3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2RjYzODNGNjI0MjdBRjRBMDBEQUJBNTMgLyogTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY2Mzgz
RjQyNDI3QUY0OTAwREFCQTUzIC8qIExheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjZERjM2RjI2
NDcyMkVBMDA5M0U4MzQgLyogQmxvY2tNYXJnaW5Db2xsYXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY2REYzNkUyNjQ3MjJFQTAwOTNFODM0IC8q
IEJsb2NrTWFyZ2luQ29sbGFwc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk2Rjc5RjBDMTI2NDg3QzRDMDA2OTgyQjYgLyogQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZGNzlGMEMwMjY0ODdDNEMwMDY5ODJCNiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NB
M0M2MjA4QzI5NTcwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExh
eW91dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNkY3Q0EzQ0EyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTND
ODIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjkxNDIxMTI1MTUyMTM4
MDA0RTRGRUEgLyogSW5saW5lTGluZUdlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjkxNDIwRjI1MTUyMTM3MDA0RTRGRUEgLyogSW5saW5l
TGluZUdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTk5NDIsNyArOTk0Myw3IEBACiAJCTZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAv
KiBCb3hTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb3hTaGFwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MDEwRjgwM0YzMDA1QTRBMjQg
LyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMDgzMERG
MjBCNDY5NTEwMDhBOTQ1QiAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQjk4QjMy
M0YyNjhFQjAwRUVDMkYyIC8qIExheW91dElubGluZVRleHRCb3guaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW5saW5lVGV4dEJveC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjBCOThCNjIzRjI2OTA2MDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4
dEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJbmxpbmVUZXh0Qm94LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElu
bGluZUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTc0LDYgKzk5NzUsNyBAQAogCQk2RjZERjM2RTI2NDcy
MkVBMDA5M0U4MzQgLyogQmxvY2tNYXJnaW5Db2xsYXBzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCbG9ja01hcmdpbkNvbGxhcHNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZGNzBERUREMjUxMTI2RjMwMEYwRkM3OCAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGV4Rm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNzM5MThDMjEwNkNF
REQwMDZBRjI2MiAvKiBMYXlvdXRVbml0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRVbml0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2Rjc5RjBDMDI2NDg3QzRDMDA2OTgyQjYg
LyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkY3QjhDRUMyMzYyNkU2NjAwQzlGRjE1IC8qIElubGluZUl0ZW0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5saW5lSXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYXlvdXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjdDQTNDNTIw
OEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5
b3V0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyNDQsNyArMTgy
NDYsOCBAQAogCQkJCTZGRDRGRTNFMjQ3MEIzQUQwMDczNzRDQyAvKiB0YWJsZXdyYXBwZXIgKi8s
CiAJCQkJMTE1Q0ZBNkQyMDhBRkFCNjAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQu
Y3BwICovLAogCQkJCTExNUNGQTZDMjA4QUZBQjYwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0LmggKi8sCi0JCQkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkY3OUYwQzAyNjQ4N0M0QzAwNjk4MkI2
IC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCisJCQkJNkYwODMwREYyMEI0Njk1MTAw
OEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywKIAkJCQk2RjlEMUFGOTI2
NDc2MTM1MDBGNUQzQUQgLyogQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggKi8sCiAJCQkJNkY4RjQ2
MDMyMUIwM0JDNjAwNDFBQzNBIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCiAJCQkJ
MTE1Q0ZBNzkyMDhCOEQ5RDAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywK
QEAgLTM1NjI5LDYgKzM1NjMyLDcgQEAKIAkJCQlGNTEzQTNFQTE1RkY0ODQxMDAxNTI2REIgLyog
VmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1Qzc3MDhEMTAw
RDNDNkIwMDVCQTI2NyAvKiBWYWxpZGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMx
NjBBRjEyQjAyNkY3MDBDMUEzNTkgLyogVmVjdG9yTWF0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NkY3OUYwQzEyNjQ4N0M0QzAwNjk4MkI2IC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjFBMEMzODIyOUE0ODE4MDBEMzdBREIgLyogVmVsb2NpdHlEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlERjRFMzhFMDI1Mjc5NTk1MDAyQTc0ODEgLyogVmVyc2lv
bkNoZWNrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMjU3MTUxMjkzQzAxMDAwN0EyNjNEIC8q
IFZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9i
bG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA5OGJlMzg3MDczNTc3ODU0OTQ5
ZjgwOGZkZWRlMDAyMmRkNjI2NmMwLi4yZTYzOGViZWI3Y2I5NmZkYzVhOWIxOWE1Y2EzMjM5ZGI3
ZmU5ZmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5j
cHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQogCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCIKICNpbmNsdWRlICJC
bG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1F1aXJrcy5o
IgogI2luY2x1ZGUgIkJsb2NrTWFyZ2luQ29sbGFwc2UuaCIKQEAgLTYwMSw2ICs2MDIsMTEgQEAg
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3Vz
U2libGluZyhjb25zdCBCb3gmIGxheW8KICAgICB9CiB9CiAKK0Jsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpOworfQorCiBCbG9ja01hcmdpbkNvbGxh
cHNlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Om1hcmdpbkNvbGxhcHNlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gQmxvY2tNYXJnaW5Db2xsYXBzZSgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2sv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDJkOTA0OGM1OGFiY2Y0YjQ5MjdlMDZlYjJh
OTEwM2VlNjU4ZGE3NTcuLjU0NDQ4ZTcwNjFlMGM1OTI4MjEwMTk3YTdkNGJiYzIwYTRlZWVjZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0zOSw2
ICszOSw3IEBAIGNsYXNzIExheW91dFVuaXQ7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3Mg
Qm94OworY2xhc3MgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk7CiBjbGFzcyBCbG9ja0Zvcm1hdHRp
bmdRdWlya3M7CiBjbGFzcyBCbG9ja01hcmdpbkNvbGxhcHNlOwogY2xhc3MgRmxvYXRpbmdDb250
ZXh0OwpAQCAtNTUsMzQgKzU2LDEwIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEJsb2NrRm9ybWF0
dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxCbG9j
a0Zvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsg
fQogCisgICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdDsKICAgICBC
bG9ja0Zvcm1hdHRpbmdRdWlya3MgcXVpcmtzKCkgY29uc3Q7CiAgICAgQmxvY2tNYXJnaW5Db2xs
YXBzZSBtYXJnaW5Db2xsYXBzZSgpIGNvbnN0OwogCi0gICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1l
bnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGJveGVzIHBhcnRpY2lwYXRpbmcgaW4gYSBi
bG9jayBmb3JtYXR0aW5nIGNvbnRleHQuCi0gICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdlb21ldHJ5
KGNvbnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsKLQotICAgICAgICBDb250ZW50SGVpZ2h0
QW5kTWFyZ2luIGluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJik7
Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dDb250ZW50V2lkdGhBbmRNYXJn
aW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBQb2ludCBzdGF0aWNQb3NpdGlvbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJikgY29uc3Q7Ci0gICAgICAgIExheW91dFVuaXQgc3RhdGljVmVydGljYWxQb3Np
dGlvbihjb25zdCBCb3gmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0gICAg
ICAgIExheW91dFVuaXQgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJveCYsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0OwotCi0gICAgICAgIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBCb3gmKTsKLQotICAg
ICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
Y29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRB
bmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
T3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJik7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdp
biBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cyYpOwotICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5GbG93UmVwbGFjZWRDb250ZW50
V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwotCi0gICAgICAgIGNv
bnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgpKTsgfQotICAgIH07Ci0gICAgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBHZW9tZXRy
eSgqdGhpcyk7IH0KLQogcHJvdGVjdGVkOgogICAgIHN0cnVjdCBDb25zdHJhaW50c1BhaXIgewog
ICAgICAgICBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgZm9ybWF0dGluZ0NvbnRleHRSb290
OwpAQCAtMTE4LDExICs5NSw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxjb25zdCBCb3gqLCBQ
cmVjb21wdXRlZE1hcmdpbkJlZm9yZT4gbV9wcmVjb21wdXRlZE1hcmdpbkJlZm9yZUxpc3Q7CiB9
OwogCi1pbmxpbmUgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KGNv
bnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmIGJsb2NrRm9ybWF0dGluZ0NvbnRleHQpCi0gICAg
OiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkoYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLXsK
LX0KLQogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMWEy
YjQxNmM2N2RlNWYyNDVkNTJjMTVkYjYzNDM1OGRjY2I1YjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0
ZS5oIgotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKLSNpbmNsdWRl
ICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2lu
Y2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKLSNpbmNsdWRlICJMYXlvdXRS
ZXBsYWNlZEJveC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewot
Ci1Db250ZW50SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cykKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYgIWxheW91dEJveC5pc1Jl
cGxhY2VkQm94KCkpOwotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSk7
Ci0KLSAgICBhdXRvIGNvbXB1dGUgPSBbJl0oY29uc3QgYXV0byYgb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzKSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsKLQotICAgICAgICAvLyAxMC42LjMg
QmxvY2stbGV2ZWwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292
ZXJmbG93JyBjb21wdXRlcyB0byAndmlzaWJsZScKLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYg
J21hcmdpbi10b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgdGhlaXIgdXNlZCB2
YWx1ZSBpcyAwLgotICAgICAgICAvLyBJZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQg
ZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBhbnkgYmxvY2stbGV2ZWwgY2hpbGRy
ZW4gYW5kIHdoZXRoZXIgaXQgaGFzIHBhZGRpbmcgb3IgYm9yZGVyczoKLSAgICAgICAgLy8gVGhl
IGVsZW1lbnQncyBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gaXRzIHRvcCBjb250ZW50IGVk
Z2UgdG8gdGhlIGZpcnN0IGFwcGxpY2FibGUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgLy8g
MS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFi
bGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVz
Ci0gICAgICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBj
b2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQn
cyBib3R0b20gbWFyZ2luCi0gICAgICAgIC8vICAgIGRvZXMgbm90IGNvbGxhcHNlIHdpdGggdGhl
IGVsZW1lbnQncyBib3R0b20gbWFyZ2luCi0gICAgICAgIC8vIDMuIHRoZSBib3R0b20gYm9yZGVy
IGVkZ2Ugb2YgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFyZ2luIGRvZXNuJ3Qg
Y29sbGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KLSAgICAgICAgLy8gNC4g
emVybywgb3RoZXJ3aXNlCi0gICAgICAgIC8vIE9ubHkgY2hpbGRyZW4gaW4gdGhlIG5vcm1hbCBm
bG93IGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGkuZS4sIGZsb2F0aW5nIGJveGVzIGFuZCBhYnNv
bHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGlnbm9yZWQsCi0gICAgICAgIC8vIGFuZCByZWxh
dGl2ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGNvbnNpZGVyZWQgd2l0aG91dCB0aGVpciBvZmZz
ZXQpLiBOb3RlIHRoYXQgdGhlIGNoaWxkIGJveCBtYXkgYmUgYW4gYW5vbnltb3VzIGJsb2NrIGJv
eC4KLQotICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9u
dGFsQ29uc3RyYWludHMpOwotICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9y
KDApIH07IAotICAgICAgICBhdXRvIGJvcmRlckFuZFBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5i
b3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAg
ICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChsYXlvdXRC
b3gpOwotCi0gICAgICAgIGlmIChoZWlnaHQpCi0gICAgICAgICAgICByZXR1cm4geyAqaGVpZ2h0
LCBub25Db2xsYXBzZWRNYXJnaW4gfTsKLQotICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4o
bGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxv
d0NoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm4geyAwLCBub25Db2xsYXBzZWRNYXJnaW4gfTsK
LQotICAgICAgICAvLyAxLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGxhc3QgbGluZSBib3gsIGlm
IHRoZSBib3ggZXN0YWJsaXNoZXMgYSBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IHdpdGggb25l
IG9yIG1vcmUgbGluZXMKLSAgICAgICAgYXV0byYgbGF5b3V0Q29udGFpbmVyID0gZG93bmNhc3Q8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOwotICAgICAgICBpZiAobGF5b3V0Q29udGFpbmVyLmVz
dGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgYXV0byYg
aW5saW5lRm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZv
cm1hdHRpbmdTdGF0ZShsYXlvdXRDb250YWluZXIpOwotICAgICAgICAgICAgYXV0byYgbGluZXMg
PSBpbmxpbmVGb3JtYXR0aW5nU3RhdGUubGluZXMoKTsKLSAgICAgICAgICAgIC8vIEV2ZW4gZW1w
dHkgY29udGFpbmVycyBnZW5lcmF0ZSBvbmUgbGluZS4gCi0gICAgICAgICAgICBBU1NFUlQoIWxp
bmVzLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICByZXR1cm4geyB0b0xheW91dFVuaXQobGluZXMu
bGFzdCgpLmxpbmVCb3hMb2dpY2FsUmVjdCgpLmJvdHRvbSgpICsgaW5saW5lRm9ybWF0dGluZ1N0
YXRlLmNsZWFyR2FwQWZ0ZXJMYXN0TGluZSgpKSAtIGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNv
bGxhcHNlZE1hcmdpbiB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMi4gdGhlIGJvdHRvbSBl
ZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxhcHNlZCkgbWFyZ2luIG9mIGl0cyBsYXN0
IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJvdHRvbSBtYXJnaW4uLi4KLSAgICAgICAg
YXV0byYgbGFzdEluRmxvd0NoaWxkID0gKmxheW91dENvbnRhaW5lci5sYXN0SW5GbG93Q2hpbGQo
KTsKLSAgICAgICAgaWYgKCFmb3JtYXR0aW5nQ29udGV4dCgpLm1hcmdpbkNvbGxhcHNlKCkubWFy
Z2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIobGFzdEluRmxvd0NoaWxkKSkg
ewotICAgICAgICAgICAgYXV0byYgbGFzdEluRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0Nv
bnRleHQoKS5nZW9tZXRyeUZvckJveChsYXN0SW5GbG93Q2hpbGQpOwotICAgICAgICAgICAgYXV0
byBib3R0b21FZGdlT2ZCb3R0b21NYXJnaW4gPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChs
YXN0SW5GbG93Qm94R2VvbWV0cnkpLmJvdHRvbSgpICsgbGFzdEluRmxvd0JveEdlb21ldHJ5Lm1h
cmdpbkFmdGVyKCk7Ci0gICAgICAgICAgICByZXR1cm4geyBib3R0b21FZGdlT2ZCb3R0b21NYXJn
aW4gLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIDMuIHRoZSBib3R0b20gYm9yZGVyIGVkZ2Ugb2YgdGhlIGxhc3QgaW4t
ZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFyZ2luIGRvZXNuJ3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxl
bWVudCdzIGJvdHRvbSBtYXJnaW4KLSAgICAgICAgYXV0byogaW5GbG93Q2hpbGQgPSAmbGFzdElu
Rmxvd0NoaWxkOwotICAgICAgICB3aGlsZSAoaW5GbG93Q2hpbGQgJiYgZm9ybWF0dGluZ0NvbnRl
eHQoKS5tYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJn
aW5BZnRlcigqaW5GbG93Q2hpbGQpKQotICAgICAgICAgICAgaW5GbG93Q2hpbGQgPSBpbkZsb3dD
aGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChpbkZsb3dDaGlsZCkg
ewotICAgICAgICAgICAgYXV0byYgaW5GbG93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KCppbkZsb3dDaGlsZCk7Ci0gICAgICAgICAgICByZXR1cm4geyBC
b3hHZW9tZXRyeTo6Ym9yZGVyQm94VG9wKGluRmxvd0JveEdlb21ldHJ5KSArIGluRmxvd0JveEdl
b21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29s
bGFwc2VkTWFyZ2luIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LiB6ZXJvLCBvdGhlcndp
c2UKLSAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07Ci0gICAgfTsKLQot
ICAgIC8vIDEwLjYuNyAnQXV0bycgaGVpZ2h0cyBmb3IgYmxvY2stbGV2ZWwgZm9ybWF0dGluZyBj
b250ZXh0IGJveGVzLgotICAgIGF1dG8gaXNBdXRvSGVpZ2h0ID0gIW92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcy5oZWlnaHQgJiYgIWNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7Ci0gICAgaWYgKGlz
QXV0b0hlaWdodCAmJiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSAm
JiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkpCi0gICAg
ICAgIHJldHVybiBjb21wdXRlKCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMgeyBjb250ZW50SGVp
Z2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0
Qm94KSkgfSk7Ci0gICAgcmV0dXJuIGNvbXB1dGUob3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsK
LX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcykKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwotCi0gICAgYXV0
byBjb21wdXRlID0gWyZdKCkgewotCi0gICAgICAgIC8vIDEwLjMuMyBCbG9jay1sZXZlbCwgbm9u
LXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
IFRoZSBmb2xsb3dpbmcgY29uc3RyYWludHMgbXVzdCBob2xkIGFtb25nIHRoZSB1c2VkIHZhbHVl
cyBvZiB0aGUgb3RoZXIgcHJvcGVydGllczoKLSAgICAgICAgLy8gJ21hcmdpbi1sZWZ0JyArICdi
b3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcgKyAncGFkZGluZy1y
aWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQnID0gd2lkdGggb2Yg
Y29udGFpbmluZyBibG9jawotICAgICAgICAvLwotICAgICAgICAvLyAxLiBJZiAnd2lkdGgnIGlz
IG5vdCAnYXV0bycgYW5kICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3
aWR0aCcgKyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyAKLSAgICAgICAg
Ly8gICAgKHBsdXMgYW55IG9mICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgdGhhdCBh
cmUgbm90ICdhdXRvJykgaXMgbGFyZ2VyIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBjb250YWluaW5n
IGJsb2NrLCB0aGVuCi0gICAgICAgIC8vICAgIGFueSAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2lu
LWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGFyZSwgZm9yIHRoZSBmb2xsb3dpbmcgcnVsZXMsIHRy
ZWF0ZWQgYXMgemVyby4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gMi4gSWYgYWxsIG9mIHRoZSBh
Ym92ZSBoYXZlIGEgY29tcHV0ZWQgdmFsdWUgb3RoZXIgdGhhbiAnYXV0bycsIHRoZSB2YWx1ZXMg
YXJlIHNhaWQgdG8gYmUgIm92ZXItY29uc3RyYWluZWQiIGFuZCBvbmUgb2YgdGhlIHVzZWQgdmFs
dWVzIHdpbGwKLSAgICAgICAgLy8gICAgaGF2ZSB0byBiZSBkaWZmZXJlbnQgZnJvbSBpdHMgY29t
cHV0ZWQgdmFsdWUuIElmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmlu
ZyBibG9jayBoYXMgdGhlIHZhbHVlICdsdHInLCB0aGUgc3BlY2lmaWVkIHZhbHVlCi0gICAgICAg
IC8vICAgIG9mICdtYXJnaW4tcmlnaHQnIGlzIGlnbm9yZWQgYW5kIHRoZSB2YWx1ZSBpcyBjYWxj
dWxhdGVkIHNvIGFzIHRvIG1ha2UgdGhlIGVxdWFsaXR5IHRydWUuIElmIHRoZSB2YWx1ZSBvZiAn
ZGlyZWN0aW9uJyBpcyAncnRsJywKLSAgICAgICAgLy8gICAgdGhpcyBoYXBwZW5zIHRvICdtYXJn
aW4tbGVmdCcgaW5zdGVhZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gMy4gSWYgdGhlcmUgaXMg
ZXhhY3RseSBvbmUgdmFsdWUgc3BlY2lmaWVkIGFzICdhdXRvJywgaXRzIHVzZWQgdmFsdWUgZm9s
bG93cyBmcm9tIHRoZSBlcXVhbGl0eS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gNC4gSWYgJ3dp
ZHRoJyBpcyBzZXQgdG8gJ2F1dG8nLCBhbnkgb3RoZXIgJ2F1dG8nIHZhbHVlcyBiZWNvbWUgJzAn
IGFuZCAnd2lkdGgnIGZvbGxvd3MgZnJvbSB0aGUgcmVzdWx0aW5nIGVxdWFsaXR5LgotICAgICAg
ICAvLwotICAgICAgICAvLyA1LiBJZiBib3RoICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmln
aHQnIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWVzIGFyZSBlcXVhbC4gVGhpcyBob3Jpem9u
dGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCB3aXRoIHJlc3BlY3QgdG8gdGhlCi0gICAgICAgIC8v
ICAgIGVkZ2VzIG9mIHRoZSBjb250YWluaW5nIGJsb2NrLgotCi0gICAgICAgIGF1dG8gY29udGFp
bmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotICAg
ICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tTdHlsZSA9IGxheW91dEJveC5jb250YWluaW5nQmxv
Y2soKS5zdHlsZSgpOwotICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLQotICAgICAgICBhdXRvIHdpZHRoID0g
b3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRhbFZh
bHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tXaWR0
aCk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7
Ci0gICAgICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAg
ICAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCk7Ci0gICAgICAg
IGF1dG8gYm9yZGVyUmlnaHQgPSBib3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpOwotICAgICAgICBh
dXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwot
ICAgICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZh
bHVlT3IoMCk7Ci0KLSAgICAgICAgLy8gIzEKLSAgICAgICAgaWYgKHdpZHRoKSB7Ci0gICAgICAg
ICAgICBhdXRvIGhvcml6b250YWxTcGFjZUZvck1hcmdpbiA9IGNvbnRhaW5pbmdCbG9ja1dpZHRo
IC0gKGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApICsgYm9yZGVyTGVm
dCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyBj
b21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkpOwotICAgICAgICAgICAgaWYg
KGhvcml6b250YWxTcGFjZUZvck1hcmdpbiA8IDApCi0gICAgICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDAp
LCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vICMyCi0gICAgICAgIGlmICh3aWR0aCAmJiBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQgJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAgICAgICAg
ICAgaWYgKGNvbnRhaW5pbmdCbG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewot
ICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gKmNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbi5zdGFydDsKLSAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJv
cmRlclJpZ2h0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7Ci0gICAg
ICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtIChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQg
KyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAjMwotICAgICAgICBpZiAoIWNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCAmJiB3aWR0aCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5k
KSB7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSAqY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLmVuZDsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3
aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4u
ZW5kKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
JiYgIXdpZHRoICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCB9OwotICAgICAgICAgICAgd2lkdGggPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uc3RhcnQgJiYgd2lkdGggJiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQp
IHsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gKmNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbi5zdGFydDsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsg
Ym9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVy
UmlnaHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gIzQKLSAgICAgICAgaWYgKCF3aWR0aCkg
ewotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZh
bHVlT3IoMCkgfTsKLSAgICAgICAgICAgIHdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAo
dXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyAjNQotICAgICAgICBpZiAoIWNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbi5zdGFydCAmJiAhY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAgICAg
ICAgICAgYXV0byBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPSBjb250YWluaW5nQmxvY2tXaWR0
aCAtIChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQpOwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4gPSB7IGhvcml6
b250YWxTcGFjZUZvck1hcmdpbiAvIDIsIGhvcml6b250YWxTcGFjZUZvck1hcmdpbiAvIDIgfTsK
LSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gc2hvdWxkQXBwbHlDZW50ZXJBbGlnbkZvckJsb2Nr
Q29udGVudCA9IGNvbnRhaW5pbmdCbG9ja1N0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1v
ZGU6OldlYktpdENlbnRlciAmJiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0IHx8IGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICBpZiAoc2hvdWxkQXBwbHlDZW50
ZXJBbGlnbkZvckJsb2NrQ29udGVudCkgewotICAgICAgICAgICAgYXV0byBib3JkZXJCb3hXaWR0
aCA9IChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQpOwotICAgICAgICAgICAgYXV0byBtYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApOwotICAgICAgICAgICAgYXV0byBtYXJnaW5F
bmQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCk7Ci0gICAgICAgICAg
ICBhdXRvIGNlbnRlcmVkTG9naWNhbExlZnRGb3JNYXJnaW5Cb3ggPSBzdGQ6Om1heCgoY29udGFp
bmluZ0Jsb2NrV2lkdGggLSBib3JkZXJCb3hXaWR0aCAtIG1hcmdpblN0YXJ0IC0gbWFyZ2luRW5k
KSAvIDIsIDBfbHUpOwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBj
ZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFyZ2luQm94ICsgbWFyZ2luU3RhcnQ7Ci0gICAgICAgICAg
ICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIGJvcmRl
ckJveFdpZHRoIC0gbWFyZ2luU3RhcnQgKyBtYXJnaW5FbmQ7Ci0gICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKHdpZHRoKTsKLQotICAgICAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsg
KndpZHRoLCB1c2VkSG9yaXpvbnRhbE1hcmdpbiB9OwotICAgIH07Ci0KLSAgICBhdXRvIGNvbnRl
bnRXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGluZmxvdyBu
b24tcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCBjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdp
ZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4u
c3RhcnQgPDwgInB4LCAiIDw8IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCA8
PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4g
Y29udGVudFdpZHRoQW5kTWFyZ2luOwotfQotCi1Db250ZW50V2lkdGhBbmRNYXJnaW4gQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1JlcGxhY2VkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKLXsKLSAgICBBU1NFUlQocmVw
bGFjZWRCb3guaXNJbkZsb3coKSk7Ci0KLSAgICAvLyAxMC4zLjQgQmxvY2stbGV2ZWwsIHJlcGxh
Y2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93Ci0gICAgLy8KLSAgICAvLyAxLiBUaGUgdXNlZCB2
YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVt
ZW50cy4KLSAgICAvLyAyLiBUaGVuIHRoZSBydWxlcyBmb3Igbm9uLXJlcGxhY2VkIGJsb2NrLWxl
dmVsIGVsZW1lbnRzIGFyZSBhcHBsaWVkIHRvIGRldGVybWluZSB0aGUgbWFyZ2lucy4KLQotICAg
IC8vICMxCi0gICAgYXV0byB1c2VkV2lkdGggPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFu
ZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzKS5jb250ZW50V2lkdGg7Ci0gICAgLy8gIzIKLSAgICBhdXRvIG5v
blJlcGxhY2VkV2lkdGhBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFu
ZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcyB7IHVzZWRXaWR0aCwgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFy
Z2luIH0pOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBz
dHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBpbmZsb3cgcmVwbGFjZWQgLT4gd2lkdGgoIiA8
PCB1c2VkV2lkdGggIDw8ICJweCkgbWFyZ2luKCIgPDwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdp
bi51c2VkTWFyZ2luLnN0YXJ0IDw8ICJweCwgIiA8PCBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2lu
LnVzZWRNYXJnaW4uZW5kIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8
ICIpIik7Ci0gICAgcmV0dXJuIHsgdXNlZFdpZHRoLCBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2lu
LnVzZWRNYXJnaW4gfTsKLX0KLQotTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6c3RhdGljVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykgY29uc3QKLXsKLSAg
ICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1h
dHRpbmcKLSAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgYm94ZXMgYXJlIGxh
aWQgb3V0IG9uZSBhZnRlciB0aGUgb3RoZXIsIHZlcnRpY2FsbHksIGJlZ2lubmluZyBhdCB0aGUg
dG9wIG9mIGEgY29udGFpbmluZyBibG9jay4KLSAgICAvLyBUaGUgdmVydGljYWwgZGlzdGFuY2Ug
YmV0d2VlbiB0d28gc2libGluZyBib3hlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSAnbWFyZ2luJyBw
cm9wZXJ0aWVzLgotICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMgYmV0d2VlbiBhZGphY2VudCBibG9j
ay1sZXZlbCBib3hlcyBpbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBjb2xsYXBzZS4KLSAg
ICBpZiAoYXV0byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3VzSW5G
bG93U2libGluZygpKSB7Ci0gICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpwcmV2aW91c0luRmxvd1NpYmxp
bmcpOwotICAgICAgICByZXR1cm4gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QocHJldmlvdXNJ
bkZsb3dCb3hHZW9tZXRyeSkuYm90dG9tKCkgKyBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5Lm1h
cmdpbkFmdGVyKCk7Ci0gICAgfQotICAgIHJldHVybiB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2lj
YWxUb3A7Ci19Ci0KLUxheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0
aW5nCi0gICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGVhY2ggYm94J3MgbGVm
dCBvdXRlciBlZGdlIHRvdWNoZXMgdGhlIGxlZnQgZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9j
ayAoZm9yIHJpZ2h0LXRvLWxlZnQgZm9ybWF0dGluZywgcmlnaHQgZWRnZXMgdG91Y2gpLgotICAg
IHJldHVybiBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbExlZnQgKyBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkubWFyZ2luU3RhcnQoKTsKLX0KLQotUG9p
bnQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Bvc2l0aW9uKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxD
b25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50
cykgY29uc3QKLXsKLSAgICByZXR1cm4geyBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpLCBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91
dEJveCwgdmVydGljYWxDb25zdHJhaW50cykgfTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1hcmdp
biBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Q29udGVudEhlaWdodEFu
ZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRz
JiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYg
b3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZs
b3coKSk7Ci0KLSAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCBibG9jay1s
ZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGluZS1ibG9jaycKLSAg
ICAvLyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFj
ZWQgZWxlbWVudHMKLSAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAg
cmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihkb3duY2FzdDxSZXBs
YWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyk7Ci0KLSAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW47Ci0gICAgaWYgKGxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpICYm
ICFsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSB7Ci0gICAgICAgIC8vIFRPRE86IEZpZ3VyZSBv
dXQgdGhlIGNhc2UgZm9yIHRoZSBkb2N1bWVudCBlbGVtZW50LiBMZXQncyBqdXN0IGNvbXBsaWNh
dGVkLWNhc2UgaXQgZm9yIG5vdy4KLSAgICAgICAgY29udGVudEhlaWdodEFuZE1hcmdpbiA9IGlu
Rmxvd05vblJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250
YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKLSAgICAgICAgLy8gQmxvY2stbGV2
ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyB3aGVuICdvdmVyZmxvdycg
ZG9lcyBub3QgY29tcHV0ZSB0byAndmlzaWJsZScgKGV4Y2VwdCBpZiB0aGUgJ292ZXJmbG93JyBw
cm9wZXJ0eSdzIHZhbHVlIGhhcyBiZWVuIHByb3BhZ2F0ZWQgdG8gdGhlIHZpZXdwb3J0KS4KLSAg
ICAgICAgY29udGVudEhlaWdodEFuZE1hcmdpbiA9IGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94
LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci0gICAg
fQotCi0gICAgYXV0byBxdWlya3MgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpOwotICAg
IGlmICghcXVpcmtzLm5lZWRzU3RyZXRjaGluZyhsYXlvdXRCb3gpKQotICAgICAgICByZXR1cm4g
Y29udGVudEhlaWdodEFuZE1hcmdpbjsKLQotICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29u
dGVudEhlaWdodCA9IHF1aXJrcy5zdHJldGNoZWRJbkZsb3dIZWlnaHQobGF5b3V0Qm94LCBjb250
ZW50SGVpZ2h0QW5kTWFyZ2luKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29u
dGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGluZmxvdyBub24tcmVw
bGFjZWQgLT4gc3RyZWNoZWQgdG8gdmlld3BvcnQgLT4gaGVpZ2h0KCIgPDwgY29udGVudEhlaWdo
dEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgY29udGVudEhlaWdo
dEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYmVmb3JlIDw8ICJweCwgIiA8PCBjb250ZW50
SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5hZnRlciA8PCAicHgpIC0+IGxheW91
dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4gY29udGVudEhlaWdodEFu
ZE1hcmdpbjsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjppbkZsb3dDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKLQotICAgIGlmICgh
bGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgcmV0dXJuIGluRmxvd05vblJlcGxh
Y2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIGluRmxvd1JlcGxhY2Vk
Q29udGVudFdpZHRoQW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBo
b3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKLX0KLQot
Q29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpj
b21wdXRlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPExh
eW91dFVuaXQ+IGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyKQotewotICAgIGF1dG8gY29tcHV0
ZSA9IFsmXSAoYXV0byBjb25zdHJhaW50c0ZvcldpZHRoLCBPcHRpb25hbDxMYXlvdXRVbml0PiB1
c2VkV2lkdGgpIHsKLSAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91
dEJveCwgY29uc3RyYWludHNGb3JXaWR0aCwgeyB1c2VkV2lkdGgsIHsgfSB9KTsKLQotICAgICAg
ICBpZiAobGF5b3V0Qm94LmlzSW5GbG93KCkpCi0gICAgICAgICAgICByZXR1cm4gaW5GbG93Q29u
dGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgY29uc3RyYWludHNGb3JXaWR0aCwgeyB1c2Vk
V2lkdGgsIHsgfSB9KTsKLQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7IH07Ci0gICAgfTsKLQotICAgIGF1dG8gaG9y
aXpvbnRhbENvbnN0cmFpbnRzRm9yV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHM7Ci0gICAg
aWYgKGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLmlzQXV0bygpICYmIGF2YWlsYWJs
ZVdpZHRoRmxvYXRBdm9pZGVyKSB7Ci0gICAgICAgIC8vIFdoaWxlIHRoZSBub24tYXV0byB3aWR0
aCB2YWx1ZXMgc2hvdWxkIGFsbCBiZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSBjb250YWluaW5nIGJs
b2NrJ3Mgd2lkdGgsIHdoZW4KLSAgICAgICAgLy8gdGhlIHdpZHRoIGlzIGF1dG8gdGhlIGF2YWls
YWJsZSBob3Jpem9udGFsIHNwYWNlIGlzIHNocnVuayBieSBuZWlnaGJvcmluZyBmbG9hdHMuCi0g
ICAgICAgIGhvcml6b250YWxDb25zdHJhaW50c0ZvcldpZHRoLmxvZ2ljYWxXaWR0aCA9ICphdmFp
bGFibGVXaWR0aEZsb2F0QXZvaWRlcjsKLSAgICB9Ci0gICAgYXV0byBjb250ZW50V2lkdGhBbmRN
YXJnaW4gPSBjb21wdXRlKGhvcml6b250YWxDb25zdHJhaW50c0ZvcldpZHRoLCB7IH0pOwotICAg
IGF1dG8gYXZhaWxhYmxlV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRo
OwotICAgIGlmIChhdXRvIG1heFdpZHRoID0gY29tcHV0ZWRNYXhXaWR0aChsYXlvdXRCb3gsIGF2
YWlsYWJsZVdpZHRoKSkgewotICAgICAgICBhdXRvIG1heFdpZHRoQW5kTWFyZ2luID0gY29tcHV0
ZShob3Jpem9udGFsQ29uc3RyYWludHMsIG1heFdpZHRoKTsKLSAgICAgICAgaWYgKGNvbnRlbnRX
aWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGggPiBtYXhXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lk
dGgpCi0gICAgICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBtYXhXaWR0aEFuZE1hcmdp
bjsKLSAgICB9Ci0KLSAgICBhdXRvIG1pbldpZHRoID0gY29tcHV0ZWRNaW5XaWR0aChsYXlvdXRC
b3gsIGF2YWlsYWJsZVdpZHRoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gbWluV2lkdGhBbmRNYXJn
aW4gPSBjb21wdXRlKGhvcml6b250YWxDb25zdHJhaW50cywgbWluV2lkdGgpOwotICAgIGlmIChj
b250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoIDwgbWluV2lkdGhBbmRNYXJnaW4uY29u
dGVudFdpZHRoKQotICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBtaW5XaWR0aEFuZE1h
cmdpbjsKLSAgICByZXR1cm4gY29udGVudFdpZHRoQW5kTWFyZ2luOwotfQotCi1Gb3JtYXR0aW5n
Q29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBCb3gmIGxheW91dEJv
eCkKLXsKLSAgICBhdXRvIGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyA9IFsmXShhdXRvJiBs
YXlvdXRCb3gpIHsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAg
ICAgICAgcmV0dXJuIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKQot
ICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkgfQotICAg
ICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdMZWZ0KCkpLnZhbHVlT3IoMCkKLSAg
ICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKQot
ICAgICAgICAgICAgKyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpIH0KLSAg
ICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5FbmQoKSkudmFsdWVPcigwKTsKLSAg
ICB9OwotCi0gICAgYXV0byBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0o
KSAtPiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKLSAgICAgICAgYXV0byBsb2dpY2FsV2lk
dGggPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgLy8gTWluaW11
bS9tYXhpbXVtIHdpZHRoIGNhbid0IGJlIGRlcGVuZGluZyBvbiB0aGUgY29udGFpbmluZyBibG9j
aydzIHdpZHRoLgotICAgICAgICBhdXRvIG5lZWRzUmVzb2x2ZWRDb250YWluaW5nQmxvY2tXaWR0
aCA9IGxvZ2ljYWxXaWR0aC5pc0NhbGN1bGF0ZWQoKSB8fCBsb2dpY2FsV2lkdGguaXNQZXJjZW50
KCkgfHwgbG9naWNhbFdpZHRoLmlzUmVsYXRpdmUoKTsKLSAgICAgICAgaWYgKG5lZWRzUmVzb2x2
ZWRDb250YWluaW5nQmxvY2tXaWR0aCkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAg
ICAgaWYgKGF1dG8gd2lkdGggPSBmaXhlZFZhbHVlKGxvZ2ljYWxXaWR0aCkpCi0gICAgICAgICAg
ICByZXR1cm4geyAqd2lkdGgsICp3aWR0aCB9OwotCi0gICAgICAgIGlmIChsYXlvdXRCb3guaXNS
ZXBsYWNlZEJveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiByZXBsYWNlZEJveCA9IGRvd25jYXN0
PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VkQm94Lmhh
c0ludHJpbnNpY1dpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlcGxhY2VkV2lkdGgg
PSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybiB7
IHJlcGxhY2VkV2lkdGgsIHJlcGxhY2VkV2lkdGggfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJv
eD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0lu
Rmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgICAg
ICBpZiAobGF5b3V0Qm94LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCkpIHsKLSAgICAgICAgICAgIC8v
IFRoZSBpbnRyaW5zaWMgc2l6ZXMgb2YgdGhlIHNpemUgY29udGFpbm1lbnQgYm94IGFyZSBkZXRl
cm1pbmVkIGFzIGlmIHRoZSBlbGVtZW50IGhhZCBubyBjb250ZW50LAotICAgICAgICAgICAgLy8g
Zm9sbG93aW5nIHRoZSBzYW1lIGxvZ2ljIGFzIHdoZW4gc2l6aW5nIGFzIGlmIGVtcHR5LgotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXlvdXRCb3gu
ZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29u
dGV4dChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCksIGxheW91dFN0YXRlKCkpLT5j
b21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLSAgICAgICAgICAgIGlmIChsb2dp
Y2FsV2lkdGguaXNNaW5Db250ZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1p
bmltdW0gfTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNYXhDb250ZW50KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVt
LCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0gfTsKLSAgICAgICAgICAgIHJldHVy
biBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07
Ci0gICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZm9ybWF0dGlu
Z1N0YXRlRm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxCb3g+KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSkpIHsKLSAg
ICAgICAgICAgIGlmIChjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCAoY2hpbGQuaXNG
bG9hdEF2b2lkZXIoKSAmJiAhY2hpbGQuaGFzRmxvYXRDbGVhcigpKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2hp
bGQpOwotICAgICAgICAgICAgQVNTRVJUKGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7
Ci0KLSAgICAgICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSA9IHN0ZDo6
bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzLT5taW5pbXVtKTsKLSAgICAgICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMubWF4aW11bSA9IHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11
bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLT5tYXhpbXVtKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLSAgICB9OwotICAgIC8v
IEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIGF1dG8gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgobGF5b3V0Qm94LCBj
b21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSk7Ci0gICAgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy5leHBhbmQoZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCkp
OwotICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwotfQotCi19Ci19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41ZmZjODBlMWZiZTJjMjlmZmE2YjY3OTQwYjc0ODEyYzMxM2FjOGU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9i
bG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnkuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5j
bHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91
dEJveEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Q2hpbGRJdGVyYXRvci5oIgorI2luY2x1
ZGUgIkxheW91dENvbnRleHQuaCIKKyNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Js
b2NrLmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OkJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmIGJsb2NrRm9y
bWF0dGluZ0NvbnRleHQpCisgICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkoYmxvY2tG
b3JtYXR0aW5nQ29udGV4dCkKK3sKK30KKworQ29udGVudEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpICYm
ICFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3Zl
cmZsb3dWaXNpYmxlKCkpOworCisgICAgYXV0byBjb21wdXRlID0gWyZdKGNvbnN0IGF1dG8mIG92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgLT4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7CisKKyAg
ICAgICAgLy8gMTAuNi4zIEJsb2NrLWxldmVsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3Jt
YWwgZmxvdyB3aGVuICdvdmVyZmxvdycgY29tcHV0ZXMgdG8gJ3Zpc2libGUnCisgICAgICAgIC8v
CisgICAgICAgIC8vIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0
bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KKyAgICAgICAgLy8gSWYgJ2hlaWdodCcgaXMgJ2F1
dG8nLCB0aGUgaGVpZ2h0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgYW55IGJs
b2NrLWxldmVsIGNoaWxkcmVuIGFuZCB3aGV0aGVyIGl0IGhhcyBwYWRkaW5nIG9yIGJvcmRlcnM6
CisgICAgICAgIC8vIFRoZSBlbGVtZW50J3MgaGVpZ2h0IGlzIHRoZSBkaXN0YW5jZSBmcm9tIGl0
cyB0b3AgY29udGVudCBlZGdlIHRvIHRoZSBmaXJzdCBhcHBsaWNhYmxlIG9mIHRoZSBmb2xsb3dp
bmc6CisgICAgICAgIC8vIDEuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgbGFzdCBsaW5lIGJveCwg
aWYgdGhlIGJveCBlc3RhYmxpc2hlcyBhIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgd2l0aCBv
bmUgb3IgbW9yZSBsaW5lcworICAgICAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJv
dHRvbSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGls
ZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdpbgorICAgICAgICAvLyAgICBkb2VzIG5vdCBj
b2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50J3MgYm90dG9tIG1hcmdpbgorICAgICAgICAvLyAzLiB0
aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hvc2UgdG9w
IG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2lu
CisgICAgICAgIC8vIDQuIHplcm8sIG90aGVyd2lzZQorICAgICAgICAvLyBPbmx5IGNoaWxkcmVu
IGluIHRoZSBub3JtYWwgZmxvdyBhcmUgdGFrZW4gaW50byBhY2NvdW50IChpLmUuLCBmbG9hdGlu
ZyBib3hlcyBhbmQgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBpZ25vcmVkLAorICAg
ICAgICAvLyBhbmQgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRlcmVkIHdp
dGhvdXQgdGhlaXIgb2Zmc2V0KS4gTm90ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJlIGFuIGFu
b255bW91cyBibG9jayBib3guCisKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgIGF1dG8gY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxh
eW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgYXV0byBub25Db2xsYXBz
ZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1
dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJn
aW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKKyAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9w
ID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFs
dWVPcigwKTsKKyAgICAgICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMu
aGVpZ2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0
ZWRIZWlnaHQobGF5b3V0Qm94KTsKKworICAgICAgICBpZiAoaGVpZ2h0KQorICAgICAgICAgICAg
cmV0dXJuIHsgKmhlaWdodCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisKKyAgICAgICAgaWYgKCFp
czxDb250YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5
b3V0Qm94KS5oYXNJbkZsb3dDaGlsZCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29s
bGFwc2VkTWFyZ2luIH07CisKKyAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBs
YXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcg
Y29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCisgICAgICAgIGF1dG8mIGxheW91dENvbnRh
aW5lciA9IGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KTsKKyAgICAgICAgaWYgKGxh
eW91dENvbnRhaW5lci5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAg
ICAgICAgICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0
YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUobGF5b3V0Q29udGFpbmVyKTsKKyAgICAgICAg
ICAgIGF1dG8mIGxpbmVzID0gaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7CisgICAgICAg
ICAgICAvLyBFdmVuIGVtcHR5IGNvbnRhaW5lcnMgZ2VuZXJhdGUgb25lIGxpbmUuIAorICAgICAg
ICAgICAgQVNTRVJUKCFsaW5lcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgcmV0dXJuIHsgdG9M
YXlvdXRVbml0KGxpbmVzLmxhc3QoKS5saW5lQm94TG9naWNhbFJlY3QoKS5ib3R0b20oKSArIGlu
bGluZUZvcm1hdHRpbmdTdGF0ZS5jbGVhckdhcEFmdGVyTGFzdExpbmUoKSkgLSBib3JkZXJBbmRQ
YWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1h
cmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFy
Z2luLi4uCisgICAgICAgIGF1dG8mIGxhc3RJbkZsb3dDaGlsZCA9ICpsYXlvdXRDb250YWluZXIu
bGFzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGlmICghZm9ybWF0dGluZ0NvbnRleHQoKS5tYXJn
aW5Db2xsYXBzZSgpLm1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGxh
c3RJbkZsb3dDaGlsZCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGxhc3RJbkZsb3dCb3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGFzdEluRmxvd0NoaWxkKTsK
KyAgICAgICAgICAgIGF1dG8gYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luID0gQm94R2VvbWV0cnk6
OmJvcmRlckJveFJlY3QobGFzdEluRmxvd0JveEdlb21ldHJ5KS5ib3R0b20oKSArIGxhc3RJbkZs
b3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpOworICAgICAgICAgICAgcmV0dXJuIHsgYm90dG9t
RWRnZU9mQm90dG9tTWFyZ2luIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFy
Z2luIH07CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdl
IG9mIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxh
cHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCisgICAgICAgIGF1dG8qIGluRmxv
d0NoaWxkID0gJmxhc3RJbkZsb3dDaGlsZDsKKyAgICAgICAgd2hpbGUgKGluRmxvd0NoaWxkICYm
IGZvcm1hdHRpbmdDb250ZXh0KCkubWFyZ2luQ29sbGFwc2UoKS5tYXJnaW5CZWZvcmVDb2xsYXBz
ZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoKmluRmxvd0NoaWxkKSkKKyAgICAgICAgICAgIGluRmxv
d0NoaWxkID0gaW5GbG93Q2hpbGQtPnByZXZpb3VzSW5GbG93U2libGluZygpOworICAgICAgICBp
ZiAoaW5GbG93Q2hpbGQpIHsKKyAgICAgICAgICAgIGF1dG8mIGluRmxvd0JveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOworICAgICAg
ICAgICAgcmV0dXJuIHsgQm94R2VvbWV0cnk6OmJvcmRlckJveFRvcChpbkZsb3dCb3hHZW9tZXRy
eSkgKyBpbkZsb3dCb3hHZW9tZXRyeS5ib3JkZXJCb3goKS5oZWlnaHQoKSAtIGJvcmRlckFuZFBh
ZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OworICAgICAgICB9CisKKyAgICAgICAgLy8g
NC4gemVybywgb3RoZXJ3aXNlCisgICAgICAgIHJldHVybiB7IDAsIG5vbkNvbGxhcHNlZE1hcmdp
biB9OworICAgIH07CisKKyAgICAvLyAxMC42LjcgJ0F1dG8nIGhlaWdodHMgZm9yIGJsb2NrLWxl
dmVsIGZvcm1hdHRpbmcgY29udGV4dCBib3hlcy4KKyAgICBhdXRvIGlzQXV0b0hlaWdodCA9ICFv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ICYmICFjb21wdXRlZEhlaWdodChsYXlvdXRC
b3gpOworICAgIGlmIChpc0F1dG9IZWlnaHQgJiYgKGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1h
dHRpbmdDb250ZXh0KCkgJiYgIWxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdD
b250ZXh0KCkpKQorICAgICAgICByZXR1cm4gY29tcHV0ZSggT3ZlcnJpZGRlblZlcnRpY2FsVmFs
dWVzIHsgY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3duY2FzdDxDb250
YWluZXJCb3g+KGxheW91dEJveCkpIH0pOworICAgIHJldHVybiBjb21wdXRlKG92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcyk7Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRp
bmdHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKKwor
ICAgIGF1dG8gY29tcHV0ZSA9IFsmXSgpIHsKKworICAgICAgICAvLyAxMC4zLjMgQmxvY2stbGV2
ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworICAgICAgICAvLworICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzIG11c3QgaG9sZCBhbW9uZyB0aGUgdXNl
ZCB2YWx1ZXMgb2YgdGhlIG90aGVyIHByb3BlcnRpZXM6CisgICAgICAgIC8vICdtYXJnaW4tbGVm
dCcgKyAnYm9yZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3Bh
ZGRpbmctcmlnaHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcgKyAnbWFyZ2luLXJpZ2h0JyA9IHdp
ZHRoIG9mIGNvbnRhaW5pbmcgYmxvY2sKKyAgICAgICAgLy8KKyAgICAgICAgLy8gMS4gSWYgJ3dp
ZHRoJyBpcyBub3QgJ2F1dG8nIGFuZCAnYm9yZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVm
dCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcgCisg
ICAgICAgIC8vICAgIChwbHVzIGFueSBvZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQn
IHRoYXQgYXJlIG5vdCAnYXV0bycpIGlzIGxhcmdlciB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgY29u
dGFpbmluZyBibG9jaywgdGhlbgorICAgICAgICAvLyAgICBhbnkgJ2F1dG8nIHZhbHVlcyBmb3Ig
J21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBhcmUsIGZvciB0aGUgZm9sbG93aW5nIHJ1
bGVzLCB0cmVhdGVkIGFzIHplcm8uCisgICAgICAgIC8vCisgICAgICAgIC8vIDIuIElmIGFsbCBv
ZiB0aGUgYWJvdmUgaGF2ZSBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ2F1dG8nLCB0aGUg
dmFsdWVzIGFyZSBzYWlkIHRvIGJlICJvdmVyLWNvbnN0cmFpbmVkIiBhbmQgb25lIG9mIHRoZSB1
c2VkIHZhbHVlcyB3aWxsCisgICAgICAgIC8vICAgIGhhdmUgdG8gYmUgZGlmZmVyZW50IGZyb20g
aXRzIGNvbXB1dGVkIHZhbHVlLiBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaGFzIHRoZSB2YWx1ZSAnbHRyJywgdGhlIHNwZWNpZmllZCB2YWx1ZQor
ICAgICAgICAvLyAgICBvZiAnbWFyZ2luLXJpZ2h0JyBpcyBpZ25vcmVkIGFuZCB0aGUgdmFsdWUg
aXMgY2FsY3VsYXRlZCBzbyBhcyB0byBtYWtlIHRoZSBlcXVhbGl0eSB0cnVlLiBJZiB0aGUgdmFs
dWUgb2YgJ2RpcmVjdGlvbicgaXMgJ3J0bCcsCisgICAgICAgIC8vICAgIHRoaXMgaGFwcGVucyB0
byAnbWFyZ2luLWxlZnQnIGluc3RlYWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIDMuIElmIHRo
ZXJlIGlzIGV4YWN0bHkgb25lIHZhbHVlIHNwZWNpZmllZCBhcyAnYXV0bycsIGl0cyB1c2VkIHZh
bHVlIGZvbGxvd3MgZnJvbSB0aGUgZXF1YWxpdHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIDQu
IElmICd3aWR0aCcgaXMgc2V0IHRvICdhdXRvJywgYW55IG90aGVyICdhdXRvJyB2YWx1ZXMgYmVj
b21lICcwJyBhbmQgJ3dpZHRoJyBmb2xsb3dzIGZyb20gdGhlIHJlc3VsdGluZyBlcXVhbGl0eS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gNS4gSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFy
Z2luLXJpZ2h0JyBhcmUgJ2F1dG8nLCB0aGVpciB1c2VkIHZhbHVlcyBhcmUgZXF1YWwuIFRoaXMg
aG9yaXpvbnRhbGx5IGNlbnRlcnMgdGhlIGVsZW1lbnQgd2l0aCByZXNwZWN0IHRvIHRoZQorICAg
ICAgICAvLyAgICBlZGdlcyBvZiB0aGUgY29udGFpbmluZyBibG9jay4KKworICAgICAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0
aDsKKyAgICAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCkuc3R5bGUoKTsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisKKyAgICAgICAgYXV0byB3
aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Js
b2NrV2lkdGgpOworICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21l
dHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludHMpOworICAgICAgICBVc2VkSG9yaXpvbnRhbE1hcmdpbiB1c2VkSG9yaXpvbnRhbE1hcmdp
bjsKKyAgICAgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpOwor
ICAgICAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKKyAg
ICAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVP
cigwKTsKKyAgICAgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmln
aHQoKS52YWx1ZU9yKDApOworCisgICAgICAgIC8vICMxCisgICAgICAgIGlmICh3aWR0aCkgewor
ICAgICAgICAgICAgYXV0byBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPSBjb250YWluaW5nQmxv
Y2tXaWR0aCAtIChjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJp
Z2h0ICsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApKTsKKyAgICAgICAg
ICAgIGlmIChob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPCAwKQorICAgICAgICAgICAgICAgIHVz
ZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFs
dWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CisgICAg
ICAgIH0KKworICAgICAgICAvLyAjMgorICAgICAgICBpZiAod2lkdGggJiYgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0ICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKKyAg
ICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpIHsKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CisgICAgICAgICAgICAgICAgdXNlZEhvcml6b250
YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJn
aW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmln
aHQgKyBib3JkZXJSaWdodCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5k
OworICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29udGFpbmlu
Z0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gIzMKKyAgICAgICAgaWYgKCFjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgd2lkdGggJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLmVuZCkgeworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gKmNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRlckxlZnQgKyBwYWRkaW5nTGVm
dCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0ICYmICF3aWR0aCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7CisgICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCwgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQgfTsKKyAgICAgICAgICAgIHdp
ZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
KyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIHdpZHRoICYmICFjb21wdXRlZEhvcml6b250YWxNYXJn
aW4uZW5kKSB7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1h
cmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCAr
IGJvcmRlclJpZ2h0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICM0CisgICAgICAgIGlmICgh
d2lkdGgpIHsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZC52YWx1ZU9yKDApIH07CisgICAgICAgICAgICB3aWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5l
bmQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIzUKKyAgICAgICAgaWYgKCFjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsK
KyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2luID0gY29udGFpbmluZ0Js
b2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0g
eyBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gLyAyLCBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4g
LyAyIH07CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHNob3VsZEFwcGx5Q2VudGVyQWxpZ25G
b3JCbG9ja0NvbnRlbnQgPSBjb250YWluaW5nQmxvY2tTdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0
QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXIgJiYgKGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dCB8fCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKTsKKyAgICAgICAgaWYgKHNob3VsZEFw
cGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVy
Qm94V2lkdGggPSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnQgPSBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKTsKKyAgICAgICAgICAgIGF1dG8g
bWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApOworICAg
ICAgICAgICAgYXV0byBjZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFyZ2luQm94ID0gc3RkOjptYXgo
KGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gYm9yZGVyQm94V2lkdGggLSBtYXJnaW5TdGFydCAtIG1h
cmdpbkVuZCkgLyAyLCAwX2x1KTsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ID0gY2VudGVyZWRMb2dpY2FsTGVmdEZvck1hcmdpbkJveCArIG1hcmdpblN0YXJ0OworICAg
ICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSBib3JkZXJCb3hXaWR0aCAtIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVCh3aWR0aCk7CisKKyAgICAgICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1h
cmdpbiB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxNYXJnaW4gfTsKKyAgICB9OworCisgICAgYXV0
byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKCk7CisgICAgTE9HX1dJVEhfU1RSRUFN
KEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBp
bmZsb3cgbm9uLXJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgY29udGVudFdpZHRoQW5kTWFyZ2luLmNv
bnRlbnRXaWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2Vk
TWFyZ2luLnN0YXJ0IDw8ICJweCwgIiA8PCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdp
bi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAg
cmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2lu
IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1h
cmdpbihjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKHJlcGxh
Y2VkQm94LmlzSW5GbG93KCkpOworCisgICAgLy8gMTAuMy40IEJsb2NrLWxldmVsLCByZXBsYWNl
ZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworICAgIC8vCisgICAgLy8gMS4gVGhlIHVzZWQgdmFs
dWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVu
dHMuCisgICAgLy8gMi4gVGhlbiB0aGUgcnVsZXMgZm9yIG5vbi1yZXBsYWNlZCBibG9jay1sZXZl
bCBlbGVtZW50cyBhcmUgYXBwbGllZCB0byBkZXRlcm1pbmUgdGhlIG1hcmdpbnMuCisKKyAgICAv
LyAjMQorICAgIGF1dG8gdXNlZFdpZHRoID0gaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRN
YXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcykuY29udGVudFdpZHRoOworICAgIC8vICMyCisgICAgYXV0byBub25S
ZXBsYWNlZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRN
YXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdp
biB9KTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3Ry
ZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdpZHRoKCIgPDwg
dXNlZFdpZHRoICA8PCAicHgpIG1hcmdpbigiIDw8IG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4u
dXNlZE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51
c2VkTWFyZ2luLmVuZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAi
KSIpOworICAgIHJldHVybiB7IHVzZWRXaWR0aCwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51
c2VkTWFyZ2luIH07Cit9CisKK0xheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OnN0
YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFZlcnRpY2Fs
Q29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCisgICAg
Ly8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91dCBvbmUg
YWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBhIGNv
bnRhaW5pbmcgYmxvY2suCisgICAgLy8gVGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdHdv
IHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGllcy4K
KyAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwgYm94
ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFwc2UuCisgICAgaWYgKGF1dG8q
IHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmco
KSkgeworICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKKyAgICAg
ICAgcmV0dXJuIEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZpb3VzSW5GbG93Qm94R2Vv
bWV0cnkpLmJvdHRvbSgpICsgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRlcigp
OworICAgIH0KKyAgICByZXR1cm4gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOworfQor
CitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0aWNIb3Jpem9udGFsUG9z
aXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYg
aG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjYmxvY2stZm9ybWF0dGluZworICAgIC8vIEluIGEgYmxv
Y2sgZm9ybWF0dGluZyBjb250ZXh0LCBlYWNoIGJveCdzIGxlZnQgb3V0ZXIgZWRnZSB0b3VjaGVz
IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgKGZvciByaWdodC10by1sZWZ0
IGZvcm1hdHRpbmcsIHJpZ2h0IGVkZ2VzIHRvdWNoKS4KKyAgICByZXR1cm4gaG9yaXpvbnRhbENv
bnN0cmFpbnRzLmxvZ2ljYWxMZWZ0ICsgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJv
eChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCk7Cit9CisKK1BvaW50IEJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSwg
c3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpIH07
Cit9CisKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6Omlu
Rmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykKK3sKKyAgICBBU1NF
UlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOworCisgICAgLy8gMTAuNi4yIElubGluZSByZXBsYWNl
ZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cs
ICdpbmxpbmUtYmxvY2snCisgICAgLy8gcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cg
YW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgaWYgKGxheW91dEJveC5pc1JlcGxh
Y2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRN
YXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJh
aW50cywgeyB9LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworCisgICAgQ29udGVudEhlaWdo
dEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5kTWFyZ2luOworICAgIGlmIChsYXlvdXRCb3guaXNP
dmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgeworICAgICAg
ICAvLyBUT0RPOiBGaWd1cmUgb3V0IHRoZSBjYXNlIGZvciB0aGUgZG9jdW1lbnQgZWxlbWVudC4g
TGV0J3MganVzdCBjb21wbGljYXRlZC1jYXNlIGl0IGZvciBub3cuCisgICAgICAgIGNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCisg
ICAgICAgIC8vIEJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZs
b3cgd2hlbiAnb3ZlcmZsb3cnIGRvZXMgbm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQg
aWYgdGhlICdvdmVyZmxvdycgcHJvcGVydHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRv
IHRoZSB2aWV3cG9ydCkuCisgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wbGlj
YXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMpOworICAgIH0KKworICAgIGF1dG8gcXVpcmtzID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5xdWlya3MoKTsKKyAgICBpZiAoIXF1aXJrcy5uZWVkc1N0cmV0Y2hpbmcobGF5b3V0Qm94
KSkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47CisKKyAgICBjb250ZW50
SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPSBxdWlya3Muc3RyZXRjaGVkSW5GbG93SGVp
Z2h0KGxheW91dEJveCwgY29udGVudEhlaWdodEFuZE1hcmdpbik7CisKKyAgICBMT0dfV0lUSF9T
VFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2lu
XSAtPiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+IHN0cmVjaGVkIHRvIHZpZXdwb3J0IC0+IGhlaWdo
dCgiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA8PCAicHgpIG1hcmdp
bigiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLmJlZm9yZSA8
PCAicHgsICIgPDwgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0
ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAgcmV0
dXJuIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBC
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxD
b25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7CisK
KyAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBpbkZs
b3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworICAgIHJldHVybiBpbkZs
b3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5
b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cyk7Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6
Y29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxM
YXlvdXRVbml0PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcikKK3sKKyAgICBhdXRvIGNvbXB1
dGUgPSBbJl0gKGF1dG8gY29uc3RyYWludHNGb3JXaWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4g
dXNlZFdpZHRoKSB7CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlv
dXRCb3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisKKyAgICAg
ICAgaWYgKGxheW91dEJveC5pc0luRmxvdygpKQorICAgICAgICAgICAgcmV0dXJuIGluRmxvd0Nv
bnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNl
ZFdpZHRoLCB7IH0gfSk7CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyB9OworICAgIH07CisKKyAgICBhdXRvIGhv
cml6b250YWxDb25zdHJhaW50c0ZvcldpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzOworICAg
IGlmIChsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSAmJiBhdmFpbGFi
bGVXaWR0aEZsb2F0QXZvaWRlcikgeworICAgICAgICAvLyBXaGlsZSB0aGUgbm9uLWF1dG8gd2lk
dGggdmFsdWVzIHNob3VsZCBhbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgY29udGFpbmluZyBi
bG9jaydzIHdpZHRoLCB3aGVuCisgICAgICAgIC8vIHRoZSB3aWR0aCBpcyBhdXRvIHRoZSBhdmFp
bGFibGUgaG9yaXpvbnRhbCBzcGFjZSBpcyBzaHJ1bmsgYnkgbmVpZ2hib3JpbmcgZmxvYXRzLgor
ICAgICAgICBob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aC5sb2dpY2FsV2lkdGggPSAqYXZh
aWxhYmxlV2lkdGhGbG9hdEF2b2lkZXI7CisgICAgfQorICAgIGF1dG8gY29udGVudFdpZHRoQW5k
TWFyZ2luID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aCwgeyB9KTsKKyAg
ICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0
aDsKKyAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBh
dmFpbGFibGVXaWR0aCkpIHsKKyAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1
dGUoaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBtYXhXaWR0aCk7CisgICAgICAgIGlmIChjb250ZW50
V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoID4gbWF4V2lkdGhBbmRNYXJnaW4uY29udGVudFdp
ZHRoKQorICAgICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWF4V2lkdGhBbmRNYXJn
aW47CisgICAgfQorCisgICAgYXV0byBtaW5XaWR0aCA9IGNvbXB1dGVkTWluV2lkdGgobGF5b3V0
Qm94LCBhdmFpbGFibGVXaWR0aCkudmFsdWVPcigwKTsKKyAgICBhdXRvIG1pbldpZHRoQW5kTWFy
Z2luID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWludHMsIG1pbldpZHRoKTsKKyAgICBpZiAo
Y29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNv
bnRlbnRXaWR0aCkKKyAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRN
YXJnaW47CisgICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKK30KKworRm9ybWF0dGlu
Z0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnk6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3QgQm94JiBsYXlvdXRCb3gpCit7Cisg
ICAgYXV0byBmaXhlZE1hcmdpbkJvcmRlckFuZFBhZGRpbmcgPSBbJl0oYXV0byYgbGF5b3V0Qm94
KSB7CisgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgICAgIHJl
dHVybiBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkKKyAgICAgICAg
ICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpIH0KKyAgICAgICAgICAg
ICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApCisgICAgICAgICAg
ICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkKKyAgICAgICAg
ICAgICsgTGF5b3V0VW5pdCB7IHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSB9CisgICAgICAgICAg
ICArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkpLnZhbHVlT3IoMCk7CisgICAgfTsKKwor
ICAgIGF1dG8gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdKCkgLT4gRm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeworICAgICAgICBhdXRv
IGxvZ2ljYWxXaWR0aCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpOworICAgICAg
ICAvLyBNaW5pbXVtL21heGltdW0gd2lkdGggY2FuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoZSBjb250
YWluaW5nIGJsb2NrJ3Mgd2lkdGguCisgICAgICAgIGF1dG8gbmVlZHNSZXNvbHZlZENvbnRhaW5p
bmdCbG9ja1dpZHRoID0gbG9naWNhbFdpZHRoLmlzQ2FsY3VsYXRlZCgpIHx8IGxvZ2ljYWxXaWR0
aC5pc1BlcmNlbnQoKSB8fCBsb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpOworICAgICAgICBpZiAo
bmVlZHNSZXNvbHZlZENvbnRhaW5pbmdCbG9ja1dpZHRoKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGZpeGVkVmFsdWUobG9naWNhbFdpZHRoKSkK
KyAgICAgICAgICAgIHJldHVybiB7ICp3aWR0aCwgKndpZHRoIH07CisKKyAgICAgICAgaWYgKGxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlcGxhY2VkQm94
ID0gZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCk7CisgICAgICAgICAgICBpZiAocmVw
bGFjZWRCb3guaGFzSW50cmluc2ljV2lkdGgoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVw
bGFjZWRXaWR0aCA9IHJlcGxhY2VkQm94LmludHJpbnNpY1dpZHRoKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgcmVwbGFjZWRXaWR0aCwgcmVwbGFjZWRXaWR0aCB9OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXM8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91
dEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCisgICAgICAgICAgICByZXR1cm4geyB9
OworCisgICAgICAgIGlmIChsYXlvdXRCb3guaXNTaXplQ29udGFpbm1lbnRCb3goKSkgeworICAg
ICAgICAgICAgLy8gVGhlIGludHJpbnNpYyBzaXplcyBvZiB0aGUgc2l6ZSBjb250YWlubWVudCBi
b3ggYXJlIGRldGVybWluZWQgYXMgaWYgdGhlIGVsZW1lbnQgaGFkIG5vIGNvbnRlbnQsCisgICAg
ICAgICAgICAvLyBmb2xsb3dpbmcgdGhlIHNhbWUgbG9naWMgYXMgd2hlbiBzaXppbmcgYXMgaWYg
ZW1wdHkuCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAg
IGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZv
cm1hdHRpbmdDb250ZXh0KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSwgbGF5b3V0
U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICAg
ICAgaWYgKGxvZ2ljYWxXaWR0aC5pc01pbkNvbnRlbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4geyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMubWluaW11bSB9OworICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc01heENv
bnRlbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzLm1heGltdW0sIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSB9OworICAgICAg
ICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CisgICAgICAgIH0KKworICAg
ICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdT
dGF0ZSA9IGxheW91dFN0YXRlKCkuZm9ybWF0dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCk7Cisg
ICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxCb3g+KGRvd25jYXN0PENv
bnRhaW5lckJveD4obGF5b3V0Qm94KSkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5pc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKSB8fCAoY2hpbGQuaXNGbG9hdEF2b2lkZXIoKSAmJiAhY2hpbGQuaGFz
RmxvYXRDbGVhcigpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1
dG8gY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJp
bnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2hpbGQpOworICAgICAgICAgICAgQVNTRVJUKGNo
aWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk7CisKKyAgICAgICAgICAgIGludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMubWluaW11bSA9IHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMubWluaW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLT5taW5pbXVtKTsKKyAg
ICAgICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSA9IHN0ZDo6bWF4KGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzLT5tYXhpbXVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50cmluc2ljV2lk
dGhDb25zdHJhaW50czsKKyAgICB9OworICAgIC8vIEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5n
OiBib3JkZXItYm94OworICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0
cmFpbkJ5TWluTWF4V2lkdGgobGF5b3V0Qm94LCBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMoKSk7CisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBhbmQoZml4ZWRNYXJn
aW5Cb3JkZXJBbmRQYWRkaW5nKGxheW91dEJveCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9t
ZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9C
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViMzI4ZjljNTZhNjNlZDcxYjBj
MzQ5ZDBlNDgxNTI5OWNjMmRhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworLy8gVGhp
cyBjbGFzcyBpbXBsZW1lbnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGJveGVzIHBhcnRp
Y2lwYXRpbmcgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQuCitjbGFzcyBCbG9ja0Zvcm1h
dHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgeworcHVi
bGljOgorICAgIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQmKTsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5GbG93Q29udGVudEhlaWdo
dEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKTsKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4g
aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBQ
b2ludCBzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBz
dGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWlu
dHMmKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKKworICAgIEZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMoY29uc3QgQm94Jik7CisKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gY29tcHV0
ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIp
OworCitwcml2YXRlOgorICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFj
ZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpOworICAgIENvbnRlbnRX
aWR0aEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcyYpOworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dSZXBsYWNl
ZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAg
ICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KK307CisKK30KK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKaW5kZXgg
YjkwOTY5Y2ViMjYwOTgyOTRmNzBhMGYyMGE5ZDNkYmMxYWU3MDY4MS4uNjA4OGRiZWRlYzE4YWVj
ZmNhMTRjM2Q5OWU2NDkyNzc0Y2Y4ZjYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tG
b3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eS5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0
Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKQEAgLTk3LDcgKzk4LDcgQEAg
TGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnN0cmV0Y2hlZEluRmxvd0hlaWdodChj
b25zdCBCb3gmIGxheW91dEJveCwgQ28KICAgICBib2R5Qm94Q29udGVudEhlaWdodCAtPSBkb2N1
bWVudEJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBkb2N1bWVudEJveEdlb21ldHJ5LnZl
cnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CiAgICAgLy8gSG93ZXZlciB0aGUgbm9uLWluLWZs
b3cgZG9jdW1lbnQgYm94J3MgdmVydGljYWwgbWFyZ2lucyBhcmUgaWdub3JlZC4gVGhleSBkb24n
dCBhZmZlY3QgdGhlIGJvZHkgYm94J3MgY29udGVudCBoZWlnaHQuCiAgICAgaWYgKGRvY3VtZW50
Qm94LmlzSW5GbG93KCkpIHsKLSAgICAgICAgYXV0byBnZW9tZXRyeSA9IHRoaXMtPmdlb21ldHJ5
KCk7CisgICAgICAgIGF1dG8gZ2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeSgp
OwogICAgICAgICBhdXRvIHByZWNvbXB1dGVEb2N1bWVudEJveFZlcnRpY2FsTWFyZ2luID0gZ2Vv
bWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgZ2VvbWV0cnkuY29uc3Ry
YWludHNGb3JJbkZsb3dDb250ZW50KGluaXRpYWxDb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdD
b250ZXh0OjpFc2NhcGVSZWFzb246OkJvZHlTdHJldGNoZXNUb1ZpZXdwb3J0UXVpcmspLmhvcml6
b250YWwpOwogICAgICAgICBib2R5Qm94Q29udGVudEhlaWdodCAtPSBwcmVjb21wdXRlRG9jdW1l
bnRCb3hWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSArIHByZWNvbXB1dGVEb2N1bWVu
dEJveFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1h
dHRpbmdRdWlya3MuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKaW5kZXggODA3ZGYzMzIyODFiYjc1ODk2MTVj
YzVhYzIwMThhNTY3MWZkNTRjOC4uODAyMWMxNDQyMTI4YWRjZmZiOWRkOTUzZDA1NmU1YTYwMzVm
NTA3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCkBAIC00
NSw4ICs0NSw2IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIGNvbnN0IEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
QmxvY2tGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ1F1aXJrczo6Zm9ybWF0dGluZ0NvbnRl
eHQoKSk7IH0KLSAgICBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgp
IGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnkoKTsgfQotCiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2Jsb2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5D
b2xsYXBzZS5jcHAKaW5kZXggMDIwMzRhYzM1ZDIzMWQ4YmNmMDE2ZDYyZmJjOWVkYTEzNzM4N2Q0
Mi4uYzViMjliNDJkZWNjOTdjZWUxOWYzZjZmMzY5OTkyNTYxYjM1OTcyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9QcmVjb21wdXRl
ZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvYmxvY2svUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxhcHNlLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CiAKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkJsb2Nr
Rm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCiAjaW5jbHVkZSAiTGF5
b3V0Q29udGFpbmVyQm94LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCmluZGV4IDM1OWRjM2RlM2RlYThiOTgzOWRkOGE4ZjJlMjk1MGJkNmQ3Njg0N2UuLjU1NGM4
OTIwZWI0YWQyMmU0NmEyYTQ1YTE1YjlhNjgyMGVhOTEwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxl
V3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJs
b2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5LmgiCiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJ
bnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3Rh
Ymxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCA2NWVkNGM1OWE1ODkyZTE2
NjM1YzVlNmQ4YWU4MzEwYTc0NzRhY2JiLi5lZjNjYTBmMmYzYTQwYTAxYzAzYmIzNzQzZDU3ZGYz
MDYwMzY5ZGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWly
a3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
CisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRT
dGF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw5ICs0Myw5IEBAIE9wdGlvbmFs
PExheW91dFVuaXQ+IFRhYmxlV3JhcHBlclF1aXJrczo6b3ZlcnJpZGRlblRhYmxlSGVpZ2h0KGNv
bnN0IENvbnRhaW5lckJvCiB7CiAgICAgaWYgKGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkp
IHsKICAgICAgICAgLy8gSW4gcXVpcmtzIG1vZGUgYWx3YXlzIHVzZSB0aGUgY29udGVudCBoZWln
aHQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHdpdGggY29udGVudCB0YWtlIGNvbXB1dGVkIHZhbHVl
cyBpbnRvIGFjY291bnQuCi0gICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFibGVCb3gpOworICAgICAgICByZXR1cm4gZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4
dFJvb3QodGFibGVCb3gpOwogICAgIH0KLSAgICByZXR1cm4gdGFibGVCb3guaGFzSW5GbG93T3JG
bG9hdGluZ0NoaWxkKCkgPyBnZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29u
dGV4dFJvb3QodGFibGVCb3gpIDogT3B0aW9uYWw8TGF5b3V0VW5pdD4geyB9OworICAgIHJldHVy
biB0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSA/IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnkoKS5jb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KHRhYmxl
Qm94KSA6IE9wdGlvbmFsPExheW91dFVuaXQ+IHsgfTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428742</attachid>
            <date>2021-05-15 14:41:44 -0700</date>
            <delta_ts>2021-05-15 14:55:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225756-20210515144143.patch</filename>
            <type>text/plain</type>
            <size>72921</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjcyZjk1MGFiMmExNWFj
YWM4YTI4MGViZTNkYjVhZWYzNjEzZTA3Yi4uYzc3NjUyOWRlODExMTI0MmMwZjU2MTcwNmQwMWNj
NzZlN2M2ODVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGJsb2NrIGZv
cm1hdHRpbmcgZ2VvbWV0cnkgdG8gaXRzIG93biBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nUXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nUXVpcmtzOjpzdHJldGNoZWRJbkZsb3dIZWlnaHQpOgorICAgICAgICAqIGxheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ1F1aXJrczo6Zm9ybWF0dGluZ0Nv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdR
dWlya3M6Omdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHA6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgICogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nUXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVy
UXVpcmtzOjpvdmVycmlkZGVuVGFibGVIZWlnaHQgY29uc3QpOgorCiAyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBNb3ZlIHRhYmxlIGZv
cm1hdHRpbmcgcXVpcmtzIHRvIGl0cyBvd24gY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDNkZWU0
Mzk5Nzc0YmMzMGI5ODUzZDFmYWY0MjdhZTUxY2UxZDJjNS4uODQzNGIwZmNmYzgyNTQ1MTY4ZDM1
OTIwMGI3NjQ2M2U1N2I3ODMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE1MTksNyArMTUxOSw3IEBA
IGxheW91dC9MYXlvdXRTdGF0ZS5jcHAKIGxheW91dC9MYXlvdXRVbml0cy5jcHAKIGxheW91dC9W
ZXJpZmljYXRpb24uY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9y
bWF0dGluZ0NvbnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2Nr
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2Jsb2NrL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWFhMmYxNjVjMGNlMzhi
OWQwY2RhZTI4MTIxMjdhOTM2NDJlNTU1Ny4uMTdjNDBmODQ0N2NjMzc1YjM4YWExMjQ1YzY4Yzc0
ZWNkZDM0YjM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTMzMyw2ICsxMzMzLDcgQEAKIAkJNDZFRkFGMTIxRTVGQjlGMTAw
RTdGMzRCIC8qIExvd1Bvd2VyTW9kZU5vdGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkVGQUYxMDFFNUZCOUUxMDBFN0YzNEIgLyogTG93UG93
ZXJNb2RlTm90aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk0NkYwMkExQTIzNzM3RjgzMDAxMDZBNjQgLyogRXZlbnRMb29wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjBBQkNBMTIzNjc5QUIz
MDBCNDUwODUgLyogRXZlbnRMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDZGQ0I2MTgxQTcwODIwRTAwQzVBMjFFIC8qIERpYWdub3N0aWNM
b2dnaW5nS2V5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0QzN0IzNzUxNUMxQTdFMTAwNkRDODk4IC8qIERpYWdub3N0aWNMb2dnaW5nS2V5cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ3RTlGOTU3
MjY1MDc0QUUwMDUyODYwQiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDdFOUY5NTYyNjUwNzRBRDAwNTI4
NjBCIC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDdGOTQ3REIyNjUwMkYyRjAwODc5NjhDIC8qIEJs
b2NrRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDdGOTQ3REEyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQ5MjkxRTRCMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5MjkxRTRBMTM0MTcyQzgw
MEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCAqLzsgfTsKIAkJNDkzRTVFMDkxMkQ2NDIw
NTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDkzRTVFMDgxMkQ2NDIwNTAwMDIwMDgxIC8qIFBs
YXRmb3JtQ0FMYXllckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC04Mzg1LDYgKzgzODYsNyBAQAogCQk0NkVGQUYwRjFFNUZCOUUxMDBF
N0YzNEIgLyogTG93UG93ZXJNb2RlTm90aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTG93UG93ZXJNb2RlTm90aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NkVGQUYxMDFFNUZCOUUxMDBFN0YzNEIgLyogTG93UG93ZXJNb2RlTm90
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG93UG93ZXJNb2RlTm90
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOTFCQzkxRkNERDBGRTAw
MTU5OUMzIC8qIEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDdFOUY5NTYyNjUwNzRBRDAwNTI4NjBCIC8qIEJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ3Rjk0
N0RBMjY1MDJGMkYwMDg3OTY4QyAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5MjkxRTRBMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJl
bmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VSZW5k
ZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5M0U1RTA4MTJENjQy
MDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1DQUxheWVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05OTQzLDcgKzk5NDUsNyBAQAogCQk2RUQ4QzM3ODE4M0JGRjhDMDA5RTUz
QkQgLyogQm94U2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm94U2hh
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0
QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RjA4
MzBERjIwQjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMDgzMERGMjBCNDY5NTEwMDhBOTQ1QiAv
KiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMEI5
OEIzMjNGMjY4RUIwMEVFQzJGMiAvKiBMYXlvdXRJbmxpbmVUZXh0Qm94LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dElubGluZVRleHRCb3guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQjk4QjYyM0YyNjkwNjAwRUVDMkYyIC8qIExheW91dElubGlu
ZVRleHRCb3guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW5saW5lVGV4dEJveC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMENENjkyMjI5RUQzMTkwMEM1OTk0RSAv
KiBJbmxpbmVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyMzcsNyArMTgyMzksOCBAQAogCQkJCTZGRDRG
RTNFMjQ3MEIzQUQwMDczNzRDQyAvKiB0YWJsZXdyYXBwZXIgKi8sCiAJCQkJMTE1Q0ZBNkQyMDhB
RkFCNjAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTExNUNG
QTZDMjA4QUZBQjYwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0JCQkJ
NkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5jcHAgKi8sCisJCQkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5LmNwcCAqLywKKwkJCQk0N0U5Rjk1NjI2NTA3NEFEMDA1Mjg2MEIgLyogQmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkuaCAqLywKIAkJCQk2RjhGNDYwMzIxQjAzQkM2MDA0MUFDM0EgLyog
QmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcCAqLywKIAkJCQk0N0Y5NDdEQTI2NTAyRjJGMDA4Nzk2
OEMgLyogQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggKi8sCiAJCQkJMTE1Q0ZBNzkyMDhCOEQ5RDAw
MUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywKQEAgLTMxNjc5LDYgKzMxNjgy
LDcgQEAKIAkJCQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM3RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYlVS
TC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZBNkUyMDhBRkFCNzAwMUU2OTkxIC8qIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ3RTlGOTU3MjY1MDc0QUUw
MDUyODYwQiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDdGOTQ3REIyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTE1Q0ZBN0EyMDhCOEQ5RDAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGlu
Z1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjZERjM2RjI2NDcyMkVBMDA5M0U4MzQgLyog
QmxvY2tNYXJnaW5Db2xsYXBzZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0
LmgKaW5kZXggNGY1YjFmN2I1NTQyNGRjZDYyNmQ2ZjdkODNjNzU2YTY5NjkwNDZmNy4uNmYwMzhm
YWI0MGUzYmFiYzk3MWI0MTkzODQ4NjM4YjU2OTNmNjY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRl
eHQuaApAQCAtMTI1LDE3ICsxMjUsNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBGb3JtYXR0aW5n
Q29udGV4dDo6UXVpcmtzIHF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIFF1aXJrcygqdGhpcyk7IH0K
IAotcHJvdGVjdGVkOgotICAgIHVzaW5nIExheW91dFF1ZXVlID0gVmVjdG9yPGNvbnN0IEJveCo+
OwotCi0gICAgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBtX2Zv
cm1hdHRpbmdTdGF0ZTsgfQotCi0gICAgdm9pZCBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKLQotI2lmbmRlZiBOREVCVUcK
LSAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVHZW9tZXRyeUNvbnN0cmFpbnRzQWZ0ZXJMYXlvdXQo
KSBjb25zdDsKLSNlbmRpZgotCiAgICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGdlbmVyaWMg
cG9zaXRpb25pbmcgYW5kIHNpemluZy4KICAgICBjbGFzcyBHZW9tZXRyeSB7CiAgICAgcHVibGlj
OgpAQCAtMjExLDYgKzIwMCwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgfTsKICAgICBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBHZW9tZXRyeSgqdGhp
cyk7IH0KIAorcHJvdGVjdGVkOgorICAgIHVzaW5nIExheW91dFF1ZXVlID0gVmVjdG9yPGNvbnN0
IEJveCo+OworCisgICAgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVy
biBtX2Zvcm1hdHRpbmdTdGF0ZTsgfQorCisgICAgdm9pZCBjb21wdXRlQm9yZGVyQW5kUGFkZGlu
Zyhjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKKworI2lmbmRlZiBO
REVCVUcKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVHZW9tZXRyeUNvbnN0cmFpbnRzQWZ0ZXJM
YXlvdXQoKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdE91dE9m
Rmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKTsKICAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dWZXJ0
aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29u
dGVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAK
aW5kZXggNWZkODk5ZGE4OGU2ZDVkZmE0Zjg5NTFjYjI4YmJkZjUwZTUxYTY5Mi4uNDYwMDM2YTk3
NDJkNDEwODAzZGVjZDk1ODAxNGI4YTM2MzUzYTBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5jbHVk
ZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJCbG9ja01hcmdpbkNvbGxhcHNl
LmgiCkBAIC02MDEsNiArNjAyLDExIEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dXBk
YXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoY29uc3QgQm94JiBsYXlvCiAgICAgfQog
fQogCitCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpnZW9t
ZXRyeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlz
KTsKK30KKwogQmxvY2tNYXJnaW5Db2xsYXBzZSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjptYXJn
aW5Db2xsYXBzZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEJsb2NrTWFyZ2luQ29sbGFwc2UoKnRo
aXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAy
ZDkwNDhjNThhYmNmNGI0OTI3ZTA2ZWIyYTkxMDNlZTY1OGRhNzU3Li41NDQ0OGU3MDYxZTBjNTky
ODIxMDE5N2E3ZDRiYmMyMGE0ZWVlY2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9y
bWF0dGluZ0NvbnRleHQuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBMYXlvdXRVbml0OwogbmFt
ZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEJveDsKK2NsYXNzIEJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5OwogY2xhc3MgQmxvY2tGb3JtYXR0aW5nUXVpcmtzOwogY2xhc3MgQmxvY2tNYXJnaW5Db2xs
YXBzZTsKIGNsYXNzIEZsb2F0aW5nQ29udGV4dDsKQEAgLTU1LDM0ICs1NiwxMCBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29u
c3QgeyByZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250
ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KIAorICAgIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5
IGdlb21ldHJ5KCkgY29uc3Q7CiAgICAgQmxvY2tGb3JtYXR0aW5nUXVpcmtzIHF1aXJrcygpIGNv
bnN0OwogICAgIEJsb2NrTWFyZ2luQ29sbGFwc2UgbWFyZ2luQ29sbGFwc2UoKSBjb25zdDsKIAot
ICAgIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nIGZvciBi
b3hlcyBwYXJ0aWNpcGF0aW5nIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgotICAgIGNs
YXNzIEdlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSB7Ci0gICAg
cHVibGljOgotICAgICAgICBHZW9tZXRyeShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Jik7
Ci0KLSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbkZsb3dDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpOwotICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4g
aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAg
ICAgUG9pbnQgc3RhdGljUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYpIGNvbnN0OwotICAgICAgICBMYXlv
dXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgVmVydGljYWxD
b25zdHJhaW50cyYpIGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0IHN0YXRpY0hvcml6b250YWxQ
b3NpdGlvbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsK
LQotICAgICAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMoY29uc3QgQm94Jik7Ci0KLSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGNvbXB1
dGVkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVy
KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5GbG93
Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpOwotICAg
ICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhB
bmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
T3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFy
Z2luIGluRmxvd1JlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250
YWxWYWx1ZXMmKTsKLQotICAgICAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7
IH0KLSAgICB9OwotICAgIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5
KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnkoKnRoaXMpOyB9Ci0KIHByb3RlY3RlZDoKICAgICBz
dHJ1Y3QgQ29uc3RyYWludHNQYWlyIHsKICAgICAgICAgQ29uc3RyYWludHNGb3JJbkZsb3dDb250
ZW50IGZvcm1hdHRpbmdDb250ZXh0Um9vdDsKQEAgLTExOCwxMSArOTUsNiBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8Y29uc3QgQm94KiwgUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmU+IG1fcHJlY29t
cHV0ZWRNYXJnaW5CZWZvcmVMaXN0OwogfTsKIAotaW5saW5lIEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBibG9j
a0Zvcm1hdHRpbmdDb250ZXh0KQotICAgIDogRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5KGJs
b2NrRm9ybWF0dGluZ0NvbnRleHQpCi17Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwYTFhMmI0MTZjNjdkZTVmMjQ1ZDUyYzE1ZGI2MzQzNThkY2Ni
NWIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5j
bHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4
dC5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIkxheW91
dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1
ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Js
b2NrLmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotQ29udGVudEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0
QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
JiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0lu
RmxvdygpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKLSAgICBBU1NFUlQobGF5b3V0
Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkpOwotCi0gICAgYXV0byBjb21wdXRlID0gWyZdKGNvbnN0
IGF1dG8mIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgLT4gQ29udGVudEhlaWdodEFuZE1hcmdp
biB7Ci0KLSAgICAgICAgLy8gMTAuNi4zIEJsb2NrLWxldmVsIG5vbi1yZXBsYWNlZCBlbGVtZW50
cyBpbiBub3JtYWwgZmxvdyB3aGVuICdvdmVyZmxvdycgY29tcHV0ZXMgdG8gJ3Zpc2libGUnCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0b20n
IGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KLSAgICAgICAgLy8gSWYgJ2hlaWdo
dCcgaXMgJ2F1dG8nLCB0aGUgaGVpZ2h0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgZWxlbWVudCBo
YXMgYW55IGJsb2NrLWxldmVsIGNoaWxkcmVuIGFuZCB3aGV0aGVyIGl0IGhhcyBwYWRkaW5nIG9y
IGJvcmRlcnM6Ci0gICAgICAgIC8vIFRoZSBlbGVtZW50J3MgaGVpZ2h0IGlzIHRoZSBkaXN0YW5j
ZSBmcm9tIGl0cyB0b3AgY29udGVudCBlZGdlIHRvIHRoZSBmaXJzdCBhcHBsaWNhYmxlIG9mIHRo
ZSBmb2xsb3dpbmc6Ci0gICAgICAgIC8vIDEuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgbGFzdCBs
aW5lIGJveCwgaWYgdGhlIGJveCBlc3RhYmxpc2hlcyBhIGlubGluZSBmb3JtYXR0aW5nIGNvbnRl
eHQgd2l0aCBvbmUgb3IgbW9yZSBsaW5lcwotICAgICAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ug
b2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4t
ZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdpbgotICAgICAgICAvLyAgICBk
b2VzIG5vdCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50J3MgYm90dG9tIG1hcmdpbgotICAgICAg
ICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQg
d2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0
b20gbWFyZ2luCi0gICAgICAgIC8vIDQuIHplcm8sIG90aGVyd2lzZQotICAgICAgICAvLyBPbmx5
IGNoaWxkcmVuIGluIHRoZSBub3JtYWwgZmxvdyBhcmUgdGFrZW4gaW50byBhY2NvdW50IChpLmUu
LCBmbG9hdGluZyBib3hlcyBhbmQgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBpZ25v
cmVkLAotICAgICAgICAvLyBhbmQgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBjb25z
aWRlcmVkIHdpdGhvdXQgdGhlaXIgb2Zmc2V0KS4gTm90ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5
IGJlIGFuIGFub255bW91cyBibG9jayBib3guCi0KLSAgICAgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAg
IGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAgICAgYXV0byBu
b25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVl
cyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKLSAgICAgICAgYXV0byBib3JkZXJBbmRQ
YWRkaW5nVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5n
VG9wKCkudmFsdWVPcigwKTsKLSAgICAgICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgp
IDogY29tcHV0ZWRIZWlnaHQobGF5b3V0Qm94KTsKLQotICAgICAgICBpZiAoaGVpZ2h0KQotICAg
ICAgICAgICAgcmV0dXJuIHsgKmhlaWdodCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07Ci0KLSAgICAg
ICAgaWYgKCFpczxDb250YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5l
ckJveD4obGF5b3V0Qm94KS5oYXNJbkZsb3dDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuIHsg
MCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07Ci0KLSAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdl
IG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZv
cm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCi0gICAgICAgIGF1dG8mIGxh
eW91dENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KTsKLSAgICAg
ICAgaWYgKGxheW91dENvbnRhaW5lci5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0
KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0
YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUobGF5b3V0Q29udGFpbmVyKTsK
LSAgICAgICAgICAgIGF1dG8mIGxpbmVzID0gaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVzKCk7
Ci0gICAgICAgICAgICAvLyBFdmVuIGVtcHR5IGNvbnRhaW5lcnMgZ2VuZXJhdGUgb25lIGxpbmUu
IAotICAgICAgICAgICAgQVNTRVJUKCFsaW5lcy5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcmV0
dXJuIHsgdG9MYXlvdXRVbml0KGxpbmVzLmxhc3QoKS5saW5lQm94TG9naWNhbFJlY3QoKS5ib3R0
b20oKSArIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5jbGVhckdhcEFmdGVyTGFzdExpbmUoKSkgLSBi
b3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBjb2xs
YXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBi
b3R0b20gbWFyZ2luLi4uCi0gICAgICAgIGF1dG8mIGxhc3RJbkZsb3dDaGlsZCA9ICpsYXlvdXRD
b250YWluZXIubGFzdEluRmxvd0NoaWxkKCk7Ci0gICAgICAgIGlmICghZm9ybWF0dGluZ0NvbnRl
eHQoKS5tYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdp
bkFmdGVyKGxhc3RJbkZsb3dDaGlsZCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGxhc3RJbkZsb3dC
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGFzdEluRmxv
d0NoaWxkKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luID0gQm94
R2VvbWV0cnk6OmJvcmRlckJveFJlY3QobGFzdEluRmxvd0JveEdlb21ldHJ5KS5ib3R0b20oKSAr
IGxhc3RJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpOwotICAgICAgICAgICAgcmV0dXJu
IHsgYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29s
bGFwc2VkTWFyZ2luIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiB0aGUgYm90dG9tIGJv
cmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vz
bid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCi0gICAgICAgIGF1
dG8qIGluRmxvd0NoaWxkID0gJmxhc3RJbkZsb3dDaGlsZDsKLSAgICAgICAgd2hpbGUgKGluRmxv
d0NoaWxkICYmIGZvcm1hdHRpbmdDb250ZXh0KCkubWFyZ2luQ29sbGFwc2UoKS5tYXJnaW5CZWZv
cmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoKmluRmxvd0NoaWxkKSkKLSAgICAgICAg
ICAgIGluRmxvd0NoaWxkID0gaW5GbG93Q2hpbGQtPnByZXZpb3VzSW5GbG93U2libGluZygpOwot
ICAgICAgICBpZiAoaW5GbG93Q2hpbGQpIHsKLSAgICAgICAgICAgIGF1dG8mIGluRmxvd0JveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqaW5GbG93Q2hpbGQp
OwotICAgICAgICAgICAgcmV0dXJuIHsgQm94R2VvbWV0cnk6OmJvcmRlckJveFRvcChpbkZsb3dC
b3hHZW9tZXRyeSkgKyBpbkZsb3dCb3hHZW9tZXRyeS5ib3JkZXJCb3goKS5oZWlnaHQoKSAtIGJv
cmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gNC4gemVybywgb3RoZXJ3aXNlCi0gICAgICAgIHJldHVybiB7IDAsIG5vbkNvbGxh
cHNlZE1hcmdpbiB9OwotICAgIH07Ci0KLSAgICAvLyAxMC42LjcgJ0F1dG8nIGhlaWdodHMgZm9y
IGJsb2NrLWxldmVsIGZvcm1hdHRpbmcgY29udGV4dCBib3hlcy4KLSAgICBhdXRvIGlzQXV0b0hl
aWdodCA9ICFvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ICYmICFjb21wdXRlZEhlaWdo
dChsYXlvdXRCb3gpOwotICAgIGlmIChpc0F1dG9IZWlnaHQgJiYgKGxheW91dEJveC5lc3RhYmxp
c2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkgJiYgIWxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZv
cm1hdHRpbmdDb250ZXh0KCkpKQotICAgICAgICByZXR1cm4gY29tcHV0ZSggT3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzIHsgY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3du
Y2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpIH0pOwotICAgIHJldHVybiBjb21wdXRlKG92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lk
dGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZh
bHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJv
eC5pc0luRmxvdygpKTsKLQotICAgIGF1dG8gY29tcHV0ZSA9IFsmXSgpIHsKLQotICAgICAgICAv
LyAxMC4zLjMgQmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxv
dwotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzIG11c3Qg
aG9sZCBhbW9uZyB0aGUgdXNlZCB2YWx1ZXMgb2YgdGhlIG90aGVyIHByb3BlcnRpZXM6Ci0gICAg
ICAgIC8vICdtYXJnaW4tbGVmdCcgKyAnYm9yZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVm
dCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcgKyAn
bWFyZ2luLXJpZ2h0JyA9IHdpZHRoIG9mIGNvbnRhaW5pbmcgYmxvY2sKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gMS4gSWYgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nIGFuZCAnYm9yZGVyLWxlZnQtd2lk
dGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsgJ2JvcmRl
ci1yaWdodC13aWR0aCcgCi0gICAgICAgIC8vICAgIChwbHVzIGFueSBvZiAnbWFyZ2luLWxlZnQn
IG9yICdtYXJnaW4tcmlnaHQnIHRoYXQgYXJlIG5vdCAnYXV0bycpIGlzIGxhcmdlciB0aGFuIHRo
ZSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBibG9jaywgdGhlbgotICAgICAgICAvLyAgICBhbnkg
J2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBhcmUsIGZv
ciB0aGUgZm9sbG93aW5nIHJ1bGVzLCB0cmVhdGVkIGFzIHplcm8uCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIDIuIElmIGFsbCBvZiB0aGUgYWJvdmUgaGF2ZSBhIGNvbXB1dGVkIHZhbHVlIG90aGVy
IHRoYW4gJ2F1dG8nLCB0aGUgdmFsdWVzIGFyZSBzYWlkIHRvIGJlICJvdmVyLWNvbnN0cmFpbmVk
IiBhbmQgb25lIG9mIHRoZSB1c2VkIHZhbHVlcyB3aWxsCi0gICAgICAgIC8vICAgIGhhdmUgdG8g
YmUgZGlmZmVyZW50IGZyb20gaXRzIGNvbXB1dGVkIHZhbHVlLiBJZiB0aGUgJ2RpcmVjdGlvbicg
cHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGFzIHRoZSB2YWx1ZSAnbHRyJywgdGhl
IHNwZWNpZmllZCB2YWx1ZQotICAgICAgICAvLyAgICBvZiAnbWFyZ2luLXJpZ2h0JyBpcyBpZ25v
cmVkIGFuZCB0aGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBzbyBhcyB0byBtYWtlIHRoZSBlcXVhbGl0
eSB0cnVlLiBJZiB0aGUgdmFsdWUgb2YgJ2RpcmVjdGlvbicgaXMgJ3J0bCcsCi0gICAgICAgIC8v
ICAgIHRoaXMgaGFwcGVucyB0byAnbWFyZ2luLWxlZnQnIGluc3RlYWQuCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIDMuIElmIHRoZXJlIGlzIGV4YWN0bHkgb25lIHZhbHVlIHNwZWNpZmllZCBhcyAn
YXV0bycsIGl0cyB1c2VkIHZhbHVlIGZvbGxvd3MgZnJvbSB0aGUgZXF1YWxpdHkuCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIDQuIElmICd3aWR0aCcgaXMgc2V0IHRvICdhdXRvJywgYW55IG90aGVy
ICdhdXRvJyB2YWx1ZXMgYmVjb21lICcwJyBhbmQgJ3dpZHRoJyBmb2xsb3dzIGZyb20gdGhlIHJl
c3VsdGluZyBlcXVhbGl0eS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gNS4gSWYgYm90aCAnbWFy
Z2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgJ2F1dG8nLCB0aGVpciB1c2VkIHZhbHVl
cyBhcmUgZXF1YWwuIFRoaXMgaG9yaXpvbnRhbGx5IGNlbnRlcnMgdGhlIGVsZW1lbnQgd2l0aCBy
ZXNwZWN0IHRvIHRoZQotICAgICAgICAvLyAgICBlZGdlcyBvZiB0aGUgY29udGFpbmluZyBibG9j
ay4KLQotICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0
cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrU3R5bGUg
PSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKTsKLSAgICAgICAgYXV0byYgYm94
R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7
Ci0KLSAgICAgICAgYXV0byB3aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRo
ID8gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91
dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94
LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAgICBVc2VkSG9yaXpvbnRhbE1hcmdpbiB1
c2VkSG9yaXpvbnRhbE1hcmdpbjsKLSAgICAgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0
cnkuYm9yZGVyTGVmdCgpOwotICAgICAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnku
Ym9yZGVyUmlnaHQoKTsKLSAgICAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBh
ZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKLSAgICAgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hH
ZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwotCi0gICAgICAgIC8vICMxCi0gICAg
ICAgIGlmICh3aWR0aCkgewotICAgICAgICAgICAgYXV0byBob3Jpem9udGFsU3BhY2VGb3JNYXJn
aW4gPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3Rh
cnQudmFsdWVPcigwKSArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRp
bmdSaWdodCArIGJvcmRlclJpZ2h0ICsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1
ZU9yKDApKTsKLSAgICAgICAgICAgIGlmIChob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPCAwKQot
ICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52
YWx1ZU9yKDApIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAjMgotICAgICAgICBpZiAod2lk
dGggJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIGNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2tTdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7Ci0gICAgICAgICAg
ICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAo
dXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAq
d2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uZW5kOwotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0
ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1h
cmdpbi5lbmQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gIzMKLSAg
ICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgd2lkdGggJiYgY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAgICAgICAgICAgdXNlZEhvcml6b250YWxN
YXJnaW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7Ci0gICAgICAgICAgICB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICF3aWR0aCAmJiBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uZW5kKSB7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgKmNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQg
fTsKLSAgICAgICAgICAgIHdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmln
aHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIHdpZHRoICYmICFjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7Ci0gICAgICAgICAg
ICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0
aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
ICM0Ci0gICAgICAgIGlmICghd2lkdGgpIHsKLSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFy
Z2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07Ci0gICAgICAgICAgICB3aWR0aCA9
IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gIzUKLSAgICAg
ICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbFNwYWNlRm9yTWFy
Z2luID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICAr
ICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKLSAgICAgICAgICAgIHVzZWRI
b3Jpem9udGFsTWFyZ2luID0geyBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gLyAyLCBob3Jpem9u
dGFsU3BhY2VGb3JNYXJnaW4gLyAyIH07Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHNob3Vs
ZEFwcGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQgPSBjb250YWluaW5nQmxvY2tTdHlsZS50
ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXIgJiYgKGNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbi5zdGFydCB8fCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKTsKLSAg
ICAgICAgaWYgKHNob3VsZEFwcGx5Q2VudGVyQWxpZ25Gb3JCbG9ja0NvbnRlbnQpIHsKLSAgICAg
ICAgICAgIGF1dG8gYm9yZGVyQm94V2lkdGggPSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICAr
ICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0KTsKLSAgICAgICAgICAgIGF1dG8g
bWFyZ2luU3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKTsK
LSAgICAgICAgICAgIGF1dG8gbWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZC52YWx1ZU9yKDApOwotICAgICAgICAgICAgYXV0byBjZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFy
Z2luQm94ID0gc3RkOjptYXgoKGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gYm9yZGVyQm94V2lkdGgg
LSBtYXJnaW5TdGFydCAtIG1hcmdpbkVuZCkgLyAyLCAwX2x1KTsKLSAgICAgICAgICAgIHVzZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY2VudGVyZWRMb2dpY2FsTGVmdEZvck1hcmdpbkJveCAr
IG1hcmdpblN0YXJ0OwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSBib3JkZXJCb3hXaWR0aCAtIG1hcmdpblN0YXJ0ICsgbWFyZ2lu
RW5kOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh3aWR0aCk7Ci0KLSAgICAgICAgcmV0dXJu
IENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxNYXJnaW4gfTsK
LSAgICB9OwotCi0gICAgYXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKCk7Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltX
aWR0aF1bTWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgY29udGVu
dFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IGNvbnRlbnRX
aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLnN0YXJ0IDw8ICJweCwgIiA8PCBjb250ZW50V2lkdGhB
bmRNYXJnaW4udXNlZE1hcmdpbi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0
Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFuZE1hcmdpbjsKLX0KLQotQ29u
dGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZs
b3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFj
ZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMpCi17Ci0gICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzSW5GbG93KCkpOwotCi0gICAgLy8g
MTAuMy40IEJsb2NrLWxldmVsLCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdwotICAg
IC8vCi0gICAgLy8gMS4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFz
IGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgLy8gMi4gVGhlbiB0aGUgcnVsZXMg
Zm9yIG5vbi1yZXBsYWNlZCBibG9jay1sZXZlbCBlbGVtZW50cyBhcmUgYXBwbGllZCB0byBkZXRl
cm1pbmUgdGhlIG1hcmdpbnMuCi0KLSAgICAvLyAjMQotICAgIGF1dG8gdXNlZFdpZHRoID0gaW5s
aW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykuY29udGVudFdpZHRo
OwotICAgIC8vICMyCi0gICAgYXV0byBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93
Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIG92ZXJy
aWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbiB9KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5m
bG93IHJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgdXNlZFdpZHRoICA8PCAicHgpIG1hcmdpbigiIDw8
IG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwg
bm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCA8PCAicHgpIC0+IGxheW91
dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7IHVzZWRXaWR0aCwg
bm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luIH07Ci19Ci0KLUxheW91dFVuaXQg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24o
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2Fs
Q29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIy
L3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCi0gICAgLy8gSW4gYSBibG9jayBmb3JtYXR0
aW5nIGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0
aWNhbGx5LCBiZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCi0gICAg
Ly8gVGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0
ZXJtaW5lZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGllcy4KLSAgICAvLyBWZXJ0aWNhbCBtYXJn
aW5zIGJldHdlZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwgYm94ZXMgaW4gYSBibG9jayBmb3JtYXR0
aW5nIGNvbnRleHQgY29sbGFwc2UuCi0gICAgaWYgKGF1dG8qIHByZXZpb3VzSW5GbG93U2libGlu
ZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSkgewotICAgICAgICBhdXRvJiBw
cmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZv
ckJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKLSAgICAgICAgcmV0dXJuIEJveEdlb21ldHJ5
Ojpib3JkZXJCb3hSZWN0KHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkpLmJvdHRvbSgpICsgcHJl
dmlvdXNJbkZsb3dCb3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpOwotICAgIH0KLSAgICByZXR1cm4g
dmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOwotfQotCi1MYXlvdXRVbml0IEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKSBjb25zdAotewotICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92
aXN1cmVuLmh0bWwjYmxvY2stZm9ybWF0dGluZwotICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0dGlu
ZyBjb250ZXh0LCBlYWNoIGJveCdzIGxlZnQgb3V0ZXIgZWRnZSB0b3VjaGVzIHRoZSBsZWZ0IGVk
Z2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgKGZvciByaWdodC10by1sZWZ0IGZvcm1hdHRpbmcs
IHJpZ2h0IGVkZ2VzIHRvdWNoKS4KLSAgICByZXR1cm4gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxv
Z2ljYWxMZWZ0ICsgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
Lm1hcmdpblN0YXJ0KCk7Ci19Ci0KLVBvaW50IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3Ry
YWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHsgc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSwgc3Rh
dGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpIH07Ci19
Ci0KLUNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBP
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykKLXsKLSAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwotCi0gICAgLy8gMTAuNi4yIElubGluZSBy
ZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFs
IGZsb3csICdpbmxpbmUtYmxvY2snCi0gICAgLy8gcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFs
IGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCi0gICAgaWYgKGxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWln
aHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxD
b25zdHJhaW50cywgeyB9LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotCi0gICAgQ29udGVu
dEhlaWdodEFuZE1hcmdpbiBjb250ZW50SGVpZ2h0QW5kTWFyZ2luOwotICAgIGlmIChsYXlvdXRC
b3guaXNPdmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewot
ICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHRoZSBjYXNlIGZvciB0aGUgZG9jdW1lbnQgZWxl
bWVudC4gTGV0J3MganVzdCBjb21wbGljYXRlZC1jYXNlIGl0IGZvciBub3cuCi0gICAgICAgIGNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRN
YXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNh
c2VzCi0gICAgICAgIC8vIEJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9y
bWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRvZXMgbm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChl
eGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJvcGVydHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdh
dGVkIHRvIHRoZSB2aWV3cG9ydCkuCi0gICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBj
b21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMpOwotICAgIH0KLQotICAgIGF1dG8gcXVpcmtzID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5xdWlya3MoKTsKLSAgICBpZiAoIXF1aXJrcy5uZWVkc1N0cmV0Y2hpbmcobGF5
b3V0Qm94KSkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47Ci0KLSAgICBj
b250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPSBxdWlya3Muc3RyZXRjaGVkSW5G
bG93SGVpZ2h0KGxheW91dEJveCwgY29udGVudEhlaWdodEFuZE1hcmdpbik7Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1b
TWFyZ2luXSAtPiBpbmZsb3cgbm9uLXJlcGxhY2VkIC0+IHN0cmVjaGVkIHRvIHZpZXdwb3J0IC0+
IGhlaWdodCgiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA8PCAicHgp
IG1hcmdpbigiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLmJl
Zm9yZSA8PCAicHgsICIgPDwgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJn
aW4uYWZ0ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0g
ICAgcmV0dXJuIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1h
cmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Q29udGVudFdpZHRo
QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1
ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3gu
aXNJbkZsb3coKSk7Ci0KLSAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAg
ICAgIHJldHVybiBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwot
ICAgIHJldHVybiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxS
ZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBPcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZv
aWRlcikKLXsKLSAgICBhdXRvIGNvbXB1dGUgPSBbJl0gKGF1dG8gY29uc3RyYWludHNGb3JXaWR0
aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoKSB7Ci0gICAgICAgIGlmIChsYXlvdXRC
b3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmbG9hdGluZ0Nv
bnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNl
ZFdpZHRoLCB7IH0gfSk7Ci0KLSAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvdygpKQotICAg
ICAgICAgICAgcmV0dXJuIGluRmxvd0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNv
bnN0cmFpbnRzRm9yV2lkdGgsIHsgdXNlZFdpZHRoLCB7IH0gfSk7Ci0KLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyB9
OwotICAgIH07Ci0KLSAgICBhdXRvIGhvcml6b250YWxDb25zdHJhaW50c0ZvcldpZHRoID0gaG9y
aXpvbnRhbENvbnN0cmFpbnRzOwotICAgIGlmIChsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsV2lk
dGgoKS5pc0F1dG8oKSAmJiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcikgewotICAgICAgICAv
LyBXaGlsZSB0aGUgbm9uLWF1dG8gd2lkdGggdmFsdWVzIHNob3VsZCBhbGwgYmUgcmVzb2x2ZWQg
YWdhaW5zdCB0aGUgY29udGFpbmluZyBibG9jaydzIHdpZHRoLCB3aGVuCi0gICAgICAgIC8vIHRo
ZSB3aWR0aCBpcyBhdXRvIHRoZSBhdmFpbGFibGUgaG9yaXpvbnRhbCBzcGFjZSBpcyBzaHJ1bmsg
YnkgbmVpZ2hib3JpbmcgZmxvYXRzLgotICAgICAgICBob3Jpem9udGFsQ29uc3RyYWludHNGb3JX
aWR0aC5sb2dpY2FsV2lkdGggPSAqYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXI7Ci0gICAgfQot
ICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3Ry
YWludHNGb3JXaWR0aCwgeyB9KTsKLSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRh
bENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGNvbXB1
dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkpIHsKLSAgICAgICAgYXV0byBt
YXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBtYXhXaWR0
aCk7Ci0gICAgICAgIGlmIChjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoID4gbWF4
V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQotICAgICAgICAgICAgY29udGVudFdpZHRoQW5k
TWFyZ2luID0gbWF4V2lkdGhBbmRNYXJnaW47Ci0gICAgfQotCi0gICAgYXV0byBtaW5XaWR0aCA9
IGNvbXB1dGVkTWluV2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkudmFsdWVPcigwKTsK
LSAgICBhdXRvIG1pbldpZHRoQW5kTWFyZ2luID0gY29tcHV0ZShob3Jpem9udGFsQ29uc3RyYWlu
dHMsIG1pbldpZHRoKTsKLSAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0
aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKLSAgICAgICAgY29udGVudFdpZHRo
QW5kTWFyZ2luID0gbWluV2lkdGhBbmRNYXJnaW47Ci0gICAgcmV0dXJuIGNvbnRlbnRXaWR0aEFu
ZE1hcmdpbjsKLX0KLQotRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMoY29uc3QgQm94JiBsYXlvdXRCb3gpCi17Ci0gICAgYXV0byBmaXhlZE1hcmdpbkJvcmRl
ckFuZFBhZGRpbmcgPSBbJl0oYXV0byYgbGF5b3V0Qm94KSB7Ci0gICAgICAgIGF1dG8mIHN0eWxl
ID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgICAgIHJldHVybiBmaXhlZFZhbHVlKHN0eWxlLm1h
cmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkKLSAgICAgICAgICAgICsgTGF5b3V0VW5pdCB7IHN0eWxl
LmJvcmRlckxlZnRXaWR0aCgpIH0KLSAgICAgICAgICAgICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRk
aW5nTGVmdCgpKS52YWx1ZU9yKDApCi0gICAgICAgICAgICArIGZpeGVkVmFsdWUoc3R5bGUucGFk
ZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkKLSAgICAgICAgICAgICsgTGF5b3V0VW5pdCB7IHN0eWxl
LmJvcmRlclJpZ2h0V2lkdGgoKSB9Ci0gICAgICAgICAgICArIGZpeGVkVmFsdWUoc3R5bGUubWFy
Z2luRW5kKCkpLnZhbHVlT3IoMCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzID0gWyZdKCkgLT4gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7
Ci0gICAgICAgIGF1dG8gbG9naWNhbFdpZHRoID0gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbFdp
ZHRoKCk7Ci0gICAgICAgIC8vIE1pbmltdW0vbWF4aW11bSB3aWR0aCBjYW4ndCBiZSBkZXBlbmRp
bmcgb24gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyB3aWR0aC4KLSAgICAgICAgYXV0byBuZWVkc1Jl
c29sdmVkQ29udGFpbmluZ0Jsb2NrV2lkdGggPSBsb2dpY2FsV2lkdGguaXNDYWxjdWxhdGVkKCkg
fHwgbG9naWNhbFdpZHRoLmlzUGVyY2VudCgpIHx8IGxvZ2ljYWxXaWR0aC5pc1JlbGF0aXZlKCk7
Ci0gICAgICAgIGlmIChuZWVkc1Jlc29sdmVkQ29udGFpbmluZ0Jsb2NrV2lkdGgpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIGlmIChhdXRvIHdpZHRoID0gZml4ZWRWYWx1ZShs
b2dpY2FsV2lkdGgpKQotICAgICAgICAgICAgcmV0dXJuIHsgKndpZHRoLCAqd2lkdGggfTsKLQot
ICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkgewotICAgICAgICAgICAgYXV0
byYgcmVwbGFjZWRCb3ggPSBkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KTsKLSAgICAg
ICAgICAgIGlmIChyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byByZXBsYWNlZFdpZHRoID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4geyByZXBsYWNlZFdpZHRoLCByZXBsYWNlZFdpZHRoIH07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFpczxDb250YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRh
aW5lckJveD4obGF5b3V0Qm94KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgaWYgKGxheW91dEJveC5pc1NpemVDb250YWlubWVu
dEJveCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW50cmluc2ljIHNpemVzIG9mIHRoZSBzaXpl
IGNvbnRhaW5tZW50IGJveCBhcmUgZGV0ZXJtaW5lZCBhcyBpZiB0aGUgZWxlbWVudCBoYWQgbm8g
Y29udGVudCwKLSAgICAgICAgICAgIC8vIGZvbGxvd2luZyB0aGUgc2FtZSBsb2dpYyBhcyB3aGVu
IHNpemluZyBhcyBpZiBlbXB0eS4KLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkg
ewotICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gTGF5b3V0Q29u
dGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlv
dXRCb3gpLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KCk7Ci0gICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzTWluQ29udGVudCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB7IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtIH07Ci0gICAgICAgICAgICBpZiAobG9naWNh
bFdpZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IGludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhp
bXVtIH07Ci0gICAgICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLSAg
ICAgICAgfQotCi0gICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUg
PSBsYXlvdXRTdGF0ZSgpLmZvcm1hdHRpbmdTdGF0ZUZvckJveChsYXlvdXRCb3gpOwotICAgICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8Qm94Pihkb3duY2FzdDxDb250YWlu
ZXJCb3g+KGxheW91dEJveCkpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgfHwgKGNoaWxkLmlzRmxvYXRBdm9pZGVyKCkgJiYgIWNoaWxkLmhhc0Zsb2F0
Q2xlYXIoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIGNo
aWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzRm9yQm94KGNoaWxkKTsKLSAgICAgICAgICAgIEFTU0VSVChjaGlsZElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOwotCi0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzLm1pbmltdW0gPSBzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1p
bmltdW0sIGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+bWluaW11bSk7Ci0gICAgICAg
ICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0gPSBzdGQ6Om1heChpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cy0+bWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM7Ci0gICAgfTsKLSAgICAvLyBGSVhNRSBDaGVjayBmb3IgYm94LXNpemluZzogYm9y
ZGVyLWJveDsKLSAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBjb25zdHJhaW5C
eU1pbk1heFdpZHRoKGxheW91dEJveCwgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KCkpOwotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVkTWFyZ2luQm9y
ZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gpKTsKLSAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25z
dHJhaW50czsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZmYzgwZTFmYmUyYzI5ZmZhNmI2
Nzk0MGI3NDgxMmMzMTNhYzhlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3Bw
CkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCisj
aW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5n
U3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91
dENoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAi
TGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgorI2luY2x1ZGUgIkxheW91dFJlcGxhY2Vk
Qm94LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK0Jsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5OjpCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0JiBibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQorICAgIDogRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5KGJsb2NrRm9ybWF0dGluZ0NvbnRleHQpCit7Cit9CisKK0NvbnRl
bnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd05vblJlcGxh
Y2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKQoreworICAgIEFTU0VS
VChsYXlvdXRCb3guaXNJbkZsb3coKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7Cisg
ICAgQVNTRVJUKGxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpKTsKKworICAgIGF1dG8gY29t
cHV0ZSA9IFsmXShjb25zdCBhdXRvJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIC0+IENvbnRl
bnRIZWlnaHRBbmRNYXJnaW4geworCisgICAgICAgIC8vIDEwLjYuMyBCbG9jay1sZXZlbCBub24t
cmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGNvbXB1dGVz
IHRvICd2aXNpYmxlJworICAgICAgICAvLworICAgICAgICAvLyBJZiAnbWFyZ2luLXRvcCcsIG9y
ICdtYXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCB0aGVpciB1c2VkIHZhbHVlIGlzIDAuCisgICAg
ICAgIC8vIElmICdoZWlnaHQnIGlzICdhdXRvJywgdGhlIGhlaWdodCBkZXBlbmRzIG9uIHdoZXRo
ZXIgdGhlIGVsZW1lbnQgaGFzIGFueSBibG9jay1sZXZlbCBjaGlsZHJlbiBhbmQgd2hldGhlciBp
dCBoYXMgcGFkZGluZyBvciBib3JkZXJzOgorICAgICAgICAvLyBUaGUgZWxlbWVudCdzIGhlaWdo
dCBpcyB0aGUgZGlzdGFuY2UgZnJvbSBpdHMgdG9wIGNvbnRlbnQgZWRnZSB0byB0aGUgZmlyc3Qg
YXBwbGljYWJsZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAvLyAxLiB0aGUgYm90dG9tIGVk
Z2Ugb2YgdGhlIGxhc3QgbGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNoZXMgYSBpbmxpbmUg
Zm9ybWF0dGluZyBjb250ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKKyAgICAgICAgLy8gMi4g
dGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxhcHNlZCkgbWFyZ2lu
IG9mIGl0cyBsYXN0IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJvdHRvbSBtYXJnaW4K
KyAgICAgICAgLy8gICAgZG9lcyBub3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRv
bSBtYXJnaW4KKyAgICAgICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRnZSBvZiB0aGUgbGFz
dCBpbi1mbG93IGNoaWxkIHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xsYXBzZSB3aXRoIHRo
ZSBlbGVtZW50J3MgYm90dG9tIG1hcmdpbgorICAgICAgICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UK
KyAgICAgICAgLy8gT25seSBjaGlsZHJlbiBpbiB0aGUgbm9ybWFsIGZsb3cgYXJlIHRha2VuIGlu
dG8gYWNjb3VudCAoaS5lLiwgZmxvYXRpbmcgYm94ZXMgYW5kIGFic29sdXRlbHkgcG9zaXRpb25l
ZCBib3hlcyBhcmUgaWdub3JlZCwKKyAgICAgICAgLy8gYW5kIHJlbGF0aXZlbHkgcG9zaXRpb25l
ZCBib3hlcyBhcmUgY29uc2lkZXJlZCB3aXRob3V0IHRoZWlyIG9mZnNldCkuIE5vdGUgdGhhdCB0
aGUgY2hpbGQgYm94IG1heSBiZSBhbiBhbm9ueW1vdXMgYmxvY2sgYm94LgorCisgICAgICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3gpOworICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7
CisgICAgICAgIGF1dG8gbm9uQ29sbGFwc2VkTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpO
b25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9y
KDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsgCisgICAgICAg
IGF1dG8gYm9yZGVyQW5kUGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94
R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgICAgIGF1dG8gaGVpZ2h0ID0g
b3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7CisKKyAgICAgICAg
aWYgKGhlaWdodCkKKyAgICAgICAgICAgIHJldHVybiB7ICpoZWlnaHQsIG5vbkNvbGxhcHNlZE1h
cmdpbiB9OworCisgICAgICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpIHx8ICFk
b3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkuaGFzSW5GbG93Q2hpbGQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB7IDAsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OworCisgICAgICAgIC8vIDEu
IHRoZSBib3R0b20gZWRnZSBvZiB0aGUgbGFzdCBsaW5lIGJveCwgaWYgdGhlIGJveCBlc3RhYmxp
c2hlcyBhIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgd2l0aCBvbmUgb3IgbW9yZSBsaW5lcwor
ICAgICAgICBhdXRvJiBsYXlvdXRDb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGxh
eW91dEJveCk7CisgICAgICAgIGlmIChsYXlvdXRDb250YWluZXIuZXN0YWJsaXNoZXNJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5n
U3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGxh
eW91dENvbnRhaW5lcik7CisgICAgICAgICAgICBhdXRvJiBsaW5lcyA9IGlubGluZUZvcm1hdHRp
bmdTdGF0ZS5saW5lcygpOworICAgICAgICAgICAgLy8gRXZlbiBlbXB0eSBjb250YWluZXJzIGdl
bmVyYXRlIG9uZSBsaW5lLiAKKyAgICAgICAgICAgIEFTU0VSVCghbGluZXMuaXNFbXB0eSgpKTsK
KyAgICAgICAgICAgIHJldHVybiB7IHRvTGF5b3V0VW5pdChsaW5lcy5sYXN0KCkubGluZUJveExv
Z2ljYWxSZWN0KCkuYm90dG9tKCkgKyBpbmxpbmVGb3JtYXR0aW5nU3RhdGUuY2xlYXJHYXBBZnRl
ckxhc3RMaW5lKCkpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07
CisgICAgICAgIH0KKworICAgICAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRv
bSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwg
aWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdpbi4uLgorICAgICAgICBhdXRvJiBsYXN0SW5GbG93
Q2hpbGQgPSAqbGF5b3V0Q29udGFpbmVyLmxhc3RJbkZsb3dDaGlsZCgpOworICAgICAgICBpZiAo
IWZvcm1hdHRpbmdDb250ZXh0KCkubWFyZ2luQ29sbGFwc2UoKS5tYXJnaW5BZnRlckNvbGxhcHNl
c1dpdGhQYXJlbnRNYXJnaW5BZnRlcihsYXN0SW5GbG93Q2hpbGQpKSB7CisgICAgICAgICAgICBh
dXRvJiBsYXN0SW5GbG93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5
Rm9yQm94KGxhc3RJbkZsb3dDaGlsZCk7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUVkZ2VPZkJv
dHRvbU1hcmdpbiA9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxhc3RJbkZsb3dCb3hHZW9t
ZXRyeSkuYm90dG9tKCkgKyBsYXN0SW5GbG93Qm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IGJvdHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiAtIGJvcmRlckFuZFBh
ZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OworICAgICAgICB9CisKKyAgICAgICAgLy8g
My4gdGhlIGJvdHRvbSBib3JkZXIgZWRnZSBvZiB0aGUgbGFzdCBpbi1mbG93IGNoaWxkIHdob3Nl
IHRvcCBtYXJnaW4gZG9lc24ndCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50J3MgYm90dG9tIG1h
cmdpbgorICAgICAgICBhdXRvKiBpbkZsb3dDaGlsZCA9ICZsYXN0SW5GbG93Q2hpbGQ7CisgICAg
ICAgIHdoaWxlIChpbkZsb3dDaGlsZCAmJiBmb3JtYXR0aW5nQ29udGV4dCgpLm1hcmdpbkNvbGxh
cHNlKCkubWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKCppbkZsb3dD
aGlsZCkpCisgICAgICAgICAgICBpbkZsb3dDaGlsZCA9IGluRmxvd0NoaWxkLT5wcmV2aW91c0lu
Rmxvd1NpYmxpbmcoKTsKKyAgICAgICAgaWYgKGluRmxvd0NoaWxkKSB7CisgICAgICAgICAgICBh
dXRvJiBpbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3goKmluRmxvd0NoaWxkKTsKKyAgICAgICAgICAgIHJldHVybiB7IEJveEdlb21ldHJ5Ojpib3Jk
ZXJCb3hUb3AoaW5GbG93Qm94R2VvbWV0cnkpICsgaW5GbG93Qm94R2VvbWV0cnkuYm9yZGVyQm94
KCkuaGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIHplcm8sIG90aGVyd2lzZQorICAgICAgICByZXR1
cm4geyAwLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKKyAgICB9OworCisgICAgLy8gMTAuNi43ICdB
dXRvJyBoZWlnaHRzIGZvciBibG9jay1sZXZlbCBmb3JtYXR0aW5nIGNvbnRleHQgYm94ZXMuCisg
ICAgYXV0byBpc0F1dG9IZWlnaHQgPSAhb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCAm
JiAhY29tcHV0ZWRIZWlnaHQobGF5b3V0Qm94KTsKKyAgICBpZiAoaXNBdXRvSGVpZ2h0ICYmIChs
YXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpICYmICFsYXlvdXRCb3guZXN0
YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGUoIE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyB7IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5n
Q29udGV4dFJvb3QoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKSB9KTsKKyAgICBy
ZXR1cm4gY29tcHV0ZShvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworfQorCitDb250ZW50V2lk
dGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkQ29u
dGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChs
YXlvdXRCb3guaXNJbkZsb3coKSk7CisKKyAgICBhdXRvIGNvbXB1dGUgPSBbJl0oKSB7CisKKyAg
ICAgICAgLy8gMTAuMy4zIEJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9y
bWFsIGZsb3cKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb25zdHJhaW50
cyBtdXN0IGhvbGQgYW1vbmcgdGhlIHVzZWQgdmFsdWVzIG9mIHRoZSBvdGhlciBwcm9wZXJ0aWVz
OgorICAgICAgICAvLyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRk
aW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lk
dGgnICsgJ21hcmdpbi1yaWdodCcgPSB3aWR0aCBvZiBjb250YWluaW5nIGJsb2NrCisgICAgICAg
IC8vCisgICAgICAgIC8vIDEuIElmICd3aWR0aCcgaXMgbm90ICdhdXRvJyBhbmQgJ2JvcmRlci1s
ZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyAr
ICdib3JkZXItcmlnaHQtd2lkdGgnIAorICAgICAgICAvLyAgICAocGx1cyBhbnkgb2YgJ21hcmdp
bi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyB0aGF0IGFyZSBub3QgJ2F1dG8nKSBpcyBsYXJnZXIg
dGhhbiB0aGUgd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2ssIHRoZW4KKyAgICAgICAgLy8g
ICAgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcg
YXJlLCBmb3IgdGhlIGZvbGxvd2luZyBydWxlcywgdHJlYXRlZCBhcyB6ZXJvLgorICAgICAgICAv
LworICAgICAgICAvLyAyLiBJZiBhbGwgb2YgdGhlIGFib3ZlIGhhdmUgYSBjb21wdXRlZCB2YWx1
ZSBvdGhlciB0aGFuICdhdXRvJywgdGhlIHZhbHVlcyBhcmUgc2FpZCB0byBiZSAib3Zlci1jb25z
dHJhaW5lZCIgYW5kIG9uZSBvZiB0aGUgdXNlZCB2YWx1ZXMgd2lsbAorICAgICAgICAvLyAgICBo
YXZlIHRvIGJlIGRpZmZlcmVudCBmcm9tIGl0cyBjb21wdXRlZCB2YWx1ZS4gSWYgdGhlICdkaXJl
Y3Rpb24nIHByb3BlcnR5IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGhhcyB0aGUgdmFsdWUgJ2x0
cicsIHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgLy8gICAgb2YgJ21hcmdpbi1yaWdodCcg
aXMgaWdub3JlZCBhbmQgdGhlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgc28gYXMgdG8gbWFrZSB0aGUg
ZXF1YWxpdHkgdHJ1ZS4gSWYgdGhlIHZhbHVlIG9mICdkaXJlY3Rpb24nIGlzICdydGwnLAorICAg
ICAgICAvLyAgICB0aGlzIGhhcHBlbnMgdG8gJ21hcmdpbi1sZWZ0JyBpbnN0ZWFkLgorICAgICAg
ICAvLworICAgICAgICAvLyAzLiBJZiB0aGVyZSBpcyBleGFjdGx5IG9uZSB2YWx1ZSBzcGVjaWZp
ZWQgYXMgJ2F1dG8nLCBpdHMgdXNlZCB2YWx1ZSBmb2xsb3dzIGZyb20gdGhlIGVxdWFsaXR5Lgor
ICAgICAgICAvLworICAgICAgICAvLyA0LiBJZiAnd2lkdGgnIGlzIHNldCB0byAnYXV0bycsIGFu
eSBvdGhlciAnYXV0bycgdmFsdWVzIGJlY29tZSAnMCcgYW5kICd3aWR0aCcgZm9sbG93cyBmcm9t
IHRoZSByZXN1bHRpbmcgZXF1YWxpdHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIDUuIElmIGJv
dGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgYXJlICdhdXRvJywgdGhlaXIgdXNl
ZCB2YWx1ZXMgYXJlIGVxdWFsLiBUaGlzIGhvcml6b250YWxseSBjZW50ZXJzIHRoZSBlbGVtZW50
IHdpdGggcmVzcGVjdCB0byB0aGUKKyAgICAgICAgLy8gICAgZWRnZXMgb2YgdGhlIGNvbnRhaW5p
bmcgYmxvY2suCisKKyAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250
YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
a1N0eWxlID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCk7CisgICAgICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3gpOworCisgICAgICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDogY29tcHV0ZWRXaWR0
aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICAgICAgYXV0byBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxh
eW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgVXNlZEhvcml6b250YWxN
YXJnaW4gdXNlZEhvcml6b250YWxNYXJnaW47CisgICAgICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJv
eEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKKyAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdl
b21ldHJ5LmJvcmRlclJpZ2h0KCk7CisgICAgICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9t
ZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisgICAgICAgIGF1dG8gcGFkZGluZ1JpZ2h0
ID0gYm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKworICAgICAgICAvLyAj
MQorICAgICAgICBpZiAod2lkdGgpIHsKKyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbFNwYWNl
Rm9yTWFyZ2luID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLnN0YXJ0LnZhbHVlT3IoMCkgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGgg
KyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5l
bmQudmFsdWVPcigwKSk7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2lu
IDwgMCkKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5lbmQudmFsdWVPcigwKSB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gIzIKKyAgICAgICAg
aWYgKHdpZHRoICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAmJiBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uZW5kKSB7CisgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrU3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CisgICAgICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OworICAg
ICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSAqY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRh
bE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6
b250YWxNYXJnaW4uZW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
ICMzCisgICAgICAgIGlmICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmIHdpZHRo
ICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKKyAgICAgICAgICAgIHVzZWRIb3Jp
em9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kOworICAgICAg
ICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAt
IChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9y
ZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICB9IGVsc2UgaWYg
KGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAmJiAhd2lkdGggJiYgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLmVuZCkgeworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4gPSB7
ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQsICpjb21wdXRlZEhvcml6b250YWxNYXJn
aW4uZW5kIH07CisgICAgICAgICAgICB3aWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAg
ICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAmJiB3aWR0aCAm
JiAhY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgeworICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OworICAg
ICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQg
KyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyAjNAorICAgICAgICBpZiAoIXdpZHRoKSB7CisgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCks
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OworICAgICAgICAgICAg
d2lkdGggPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0
ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICM1
CisgICAgICAgIGlmICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICYmICFjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uZW5kKSB7CisgICAgICAgICAgICBhdXRvIGhvcml6b250YWxTcGFj
ZUZvck1hcmdpbiA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKGJvcmRlckxlZnQgKyBwYWRkaW5n
TGVmdCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCk7CisgICAgICAgICAg
ICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2luIC8gMiwg
aG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2luIC8gMiB9OworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBzaG91bGRBcHBseUNlbnRlckFsaWduRm9yQmxvY2tDb250ZW50ID0gY29udGFpbmluZ0Jsb2Nr
U3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyICYmIChjb21w
dXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgfHwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCk7CisgICAgICAgIGlmIChzaG91bGRBcHBseUNlbnRlckFsaWduRm9yQmxvY2tDb250ZW50KSB7
CisgICAgICAgICAgICBhdXRvIGJvcmRlckJveFdpZHRoID0gKGJvcmRlckxlZnQgKyBwYWRkaW5n
TGVmdCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCk7CisgICAgICAgICAg
ICBhdXRvIG1hcmdpblN0YXJ0ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVl
T3IoMCk7CisgICAgICAgICAgICBhdXRvIG1hcmdpbkVuZCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQudmFsdWVPcigwKTsKKyAgICAgICAgICAgIGF1dG8gY2VudGVyZWRMb2dpY2FsTGVm
dEZvck1hcmdpbkJveCA9IHN0ZDo6bWF4KChjb250YWluaW5nQmxvY2tXaWR0aCAtIGJvcmRlckJv
eFdpZHRoIC0gbWFyZ2luU3RhcnQgLSBtYXJnaW5FbmQpIC8gMiwgMF9sdSk7CisgICAgICAgICAg
ICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNlbnRlcmVkTG9naWNhbExlZnRGb3JNYXJn
aW5Cb3ggKyBtYXJnaW5TdGFydDsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gYm9yZGVyQm94V2lkdGggLSBtYXJnaW5TdGFydCAr
IG1hcmdpbkVuZDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQod2lkdGgpOworCisgICAgICAg
IHJldHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsTWFy
Z2luIH07CisgICAgfTsKKworICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0gY29tcHV0
ZSgpOworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IG5vbi1yZXBsYWNlZCAtPiB3aWR0aCgiIDw8
IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCBj
b250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgY29udGVu
dFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwg
JmxheW91dEJveCA8PCAiKSIpOworICAgIHJldHVybiBjb250ZW50V2lkdGhBbmRNYXJnaW47Cit9
CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93
UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2Vk
Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywg
Y29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFs
dWVzKQoreworICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0luRmxvdygpKTsKKworICAgIC8vIDEw
LjMuNCBCbG9jay1sZXZlbCwgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cKKyAgICAv
LworICAgIC8vIDEuIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBm
b3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorICAgIC8vIDIuIFRoZW4gdGhlIHJ1bGVzIGZv
ciBub24tcmVwbGFjZWQgYmxvY2stbGV2ZWwgZWxlbWVudHMgYXJlIGFwcGxpZWQgdG8gZGV0ZXJt
aW5lIHRoZSBtYXJnaW5zLgorCisgICAgLy8gIzEKKyAgICBhdXRvIHVzZWRXaWR0aCA9IGlubGlu
ZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29u
c3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpLmNvbnRlbnRXaWR0aDsK
KyAgICAvLyAjMgorICAgIGF1dG8gbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbiA9IGluRmxvd05v
blJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29u
c3RyYWludHMsIE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzIHsgdXNlZFdpZHRoLCBvdmVycmlk
ZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4gfSk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9y
bWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGluZmxv
dyByZXBsYWNlZCAtPiB3aWR0aCgiIDw8IHVzZWRXaWR0aCAgPDwgInB4KSBtYXJnaW4oIiA8PCBu
b25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uc3RhcnQgPDwgInB4LCAiIDw8IG5v
blJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5lbmQgPDwgInB4KSAtPiBsYXlvdXRC
b3goIiA8PCAmcmVwbGFjZWRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4geyB1c2VkV2lkdGgsIG5v
blJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbiB9OworfQorCitMYXlvdXRVbml0IEJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRz
KSBjb25zdAoreworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0
bWwjYmxvY2stZm9ybWF0dGluZworICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0
LCBib3hlcyBhcmUgbGFpZCBvdXQgb25lIGFmdGVyIHRoZSBvdGhlciwgdmVydGljYWxseSwgYmVn
aW5uaW5nIGF0IHRoZSB0b3Agb2YgYSBjb250YWluaW5nIGJsb2NrLgorICAgIC8vIFRoZSB2ZXJ0
aWNhbCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzaWJsaW5nIGJveGVzIGlzIGRldGVybWluZWQgYnkg
dGhlICdtYXJnaW4nIHByb3BlcnRpZXMuCisgICAgLy8gVmVydGljYWwgbWFyZ2lucyBiZXR3ZWVu
IGFkamFjZW50IGJsb2NrLWxldmVsIGJveGVzIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0
IGNvbGxhcHNlLgorICAgIGlmIChhdXRvKiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBsYXlvdXRC
b3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkpIHsKKyAgICAgICAgYXV0byYgcHJldmlvdXNJbkZs
b3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKnByZXZp
b3VzSW5GbG93U2libGluZyk7CisgICAgICAgIHJldHVybiBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94
UmVjdChwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5KS5ib3R0b20oKSArIHByZXZpb3VzSW5GbG93
Qm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIHZlcnRpY2FsQ29u
c3RyYWludHMubG9naWNhbFRvcDsKK30KKworTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdHZW9t
ZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKK3sK
KyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZv
cm1hdHRpbmcKKyAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgZWFjaCBib3gn
cyBsZWZ0IG91dGVyIGVkZ2UgdG91Y2hlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBjb250YWluaW5n
IGJsb2NrIChmb3IgcmlnaHQtdG8tbGVmdCBmb3JtYXR0aW5nLCByaWdodCBlZGdlcyB0b3VjaCku
CisgICAgcmV0dXJuIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdCArIGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJnaW5TdGFydCgpOworfQor
CitQb2ludCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6c3RhdGljUG9zaXRpb24oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBj
b25zdAoreworICAgIHJldHVybiB7IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cyksIHN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94
LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKSB9OworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxD
b25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKKworICAg
IC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2Vk
IGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJworICAgIC8vIHJlcGxhY2Vk
IGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cwor
ICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQorICAgICAgICByZXR1cm4gaW5saW5l
UmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlv
dXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlblZlcnRpY2FsVmFs
dWVzKTsKKworICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29udGVudEhlaWdodEFuZE1hcmdp
bjsKKyAgICBpZiAobGF5b3V0Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkgJiYgIWxheW91dEJveC5p
c0RvY3VtZW50Qm94KCkpIHsKKyAgICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB0aGUgY2FzZSBm
b3IgdGhlIGRvY3VtZW50IGVsZW1lbnQuIExldCdzIGp1c3QgY29tcGxpY2F0ZWQtY2FzZSBpdCBm
b3Igbm93LgorICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFj
ZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIDEw
LjYuNiBDb21wbGljYXRlZCBjYXNlcworICAgICAgICAvLyBCbG9jay1sZXZlbCwgbm9uLXJlcGxh
Y2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93JyBkb2VzIG5vdCBjb21w
dXRlIHRvICd2aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cnIHByb3BlcnR5J3MgdmFs
dWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgorICAgICAgICBjb250ZW50
SGVpZ2h0QW5kTWFyZ2luID0gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKKyAgICB9CisKKyAgICBhdXRv
IHF1aXJrcyA9IGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCk7CisgICAgaWYgKCFxdWlya3Mu
bmVlZHNTdHJldGNoaW5nKGxheW91dEJveCkpCisgICAgICAgIHJldHVybiBjb250ZW50SGVpZ2h0
QW5kTWFyZ2luOworCisgICAgY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0ID0g
cXVpcmtzLnN0cmV0Y2hlZEluRmxvd0hlaWdodChsYXlvdXRCb3gsIGNvbnRlbnRIZWlnaHRBbmRN
YXJnaW4pOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBz
dHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gaW5mbG93IG5vbi1yZXBsYWNlZCAtPiBzdHJl
Y2hlZCB0byB2aWV3cG9ydCAtPiBoZWlnaHQoIiA8PCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNv
bnRlbnRIZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5v
bkNvbGxhcHNlZE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8IGNvbnRlbnRIZWlnaHRBbmRNYXJn
aW4ubm9uQ29sbGFwc2VkTWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJmxh
eW91dEJveCA8PCAiKSIpOworICAgIHJldHVybiBjb250ZW50SGVpZ2h0QW5kTWFyZ2luOworfQor
CitDb250ZW50V2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd0Nv
bnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQo
bGF5b3V0Qm94LmlzSW5GbG93KCkpOworCisgICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJv
eCgpKQorICAgICAgICByZXR1cm4gaW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJn
aW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzKTsKKyAgICByZXR1cm4gaW5GbG93UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
ZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywg
b3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworfQorCitDb250ZW50V2lkdGhBbmRNYXJnaW4g
QmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250
YWxDb25zdHJhaW50cywgT3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlV2lkdGhGbG9hdEF2
b2lkZXIpCit7CisgICAgYXV0byBjb21wdXRlID0gWyZdIChhdXRvIGNvbnN0cmFpbnRzRm9yV2lk
dGgsIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkgeworICAgICAgICBpZiAobGF5b3V0
Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmxvYXRpbmdD
b250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50c0ZvcldpZHRoLCB7IHVz
ZWRXaWR0aCwgeyB9IH0pOworCisgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3coKSkKKyAg
ICAgICAgICAgIHJldHVybiBpbkZsb3dDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBj
b25zdHJhaW50c0ZvcldpZHRoLCB7IHVzZWRXaWR0aCwgeyB9IH0pOworCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsg
fTsKKyAgICB9OworCisgICAgYXV0byBob3Jpem9udGFsQ29uc3RyYWludHNGb3JXaWR0aCA9IGhv
cml6b250YWxDb25zdHJhaW50czsKKyAgICBpZiAobGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbFdp
ZHRoKCkuaXNBdXRvKCkgJiYgYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpIHsKKyAgICAgICAg
Ly8gV2hpbGUgdGhlIG5vbi1hdXRvIHdpZHRoIHZhbHVlcyBzaG91bGQgYWxsIGJlIHJlc29sdmVk
IGFnYWluc3QgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyB3aWR0aCwgd2hlbgorICAgICAgICAvLyB0
aGUgd2lkdGggaXMgYXV0byB0aGUgYXZhaWxhYmxlIGhvcml6b250YWwgc3BhY2UgaXMgc2hydW5r
IGJ5IG5laWdoYm9yaW5nIGZsb2F0cy4KKyAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnRzRm9y
V2lkdGgubG9naWNhbFdpZHRoID0gKmF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyOworICAgIH0K
KyAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoaG9yaXpvbnRhbENvbnN0
cmFpbnRzRm9yV2lkdGgsIHsgfSk7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGhvcml6b250
YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisgICAgaWYgKGF1dG8gbWF4V2lkdGggPSBjb21w
dXRlZE1heFdpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpKSB7CisgICAgICAgIGF1dG8g
bWF4V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKGhvcml6b250YWxDb25zdHJhaW50cywgbWF4V2lk
dGgpOworICAgICAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+IG1h
eFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKKyAgICAgICAgICAgIGNvbnRlbnRXaWR0aEFu
ZE1hcmdpbiA9IG1heFdpZHRoQW5kTWFyZ2luOworICAgIH0KKworICAgIGF1dG8gbWluV2lkdGgg
PSBjb21wdXRlZE1pbldpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpLnZhbHVlT3IoMCk7
CisgICAgYXV0byBtaW5XaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCBtaW5XaWR0aCk7CisgICAgaWYgKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lk
dGggPCBtaW5XaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpCisgICAgICAgIGNvbnRlbnRXaWR0
aEFuZE1hcmdpbiA9IG1pbldpZHRoQW5kTWFyZ2luOworICAgIHJldHVybiBjb250ZW50V2lkdGhB
bmRNYXJnaW47Cit9CisKK0Zvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNv
bnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIGF1dG8gZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRk
aW5nID0gWyZdKGF1dG8mIGxheW91dEJveCkgeworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91
dEJveC5zdHlsZSgpOworICAgICAgICByZXR1cm4gZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5TdGFy
dCgpKS52YWx1ZU9yKDApCisgICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJM
ZWZ0V2lkdGgoKSB9CisgICAgICAgICAgICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQo
KSkudmFsdWVPcigwKQorICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdSaWdo
dCgpKS52YWx1ZU9yKDApCisgICAgICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJS
aWdodFdpZHRoKCkgfQorICAgICAgICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgp
KS52YWx1ZU9yKDApOworICAgIH07CisKKyAgICBhdXRvIGNvbXB1dGVkSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyA9IFsmXSgpIC0+IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIHsKKyAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBsYXlvdXRCb3guc3R5bGUo
KS5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgLy8gTWluaW11bS9tYXhpbXVtIHdpZHRoIGNhbid0
IGJlIGRlcGVuZGluZyBvbiB0aGUgY29udGFpbmluZyBibG9jaydzIHdpZHRoLgorICAgICAgICBh
dXRvIG5lZWRzUmVzb2x2ZWRDb250YWluaW5nQmxvY2tXaWR0aCA9IGxvZ2ljYWxXaWR0aC5pc0Nh
bGN1bGF0ZWQoKSB8fCBsb2dpY2FsV2lkdGguaXNQZXJjZW50KCkgfHwgbG9naWNhbFdpZHRoLmlz
UmVsYXRpdmUoKTsKKyAgICAgICAgaWYgKG5lZWRzUmVzb2x2ZWRDb250YWluaW5nQmxvY2tXaWR0
aCkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBm
aXhlZFZhbHVlKGxvZ2ljYWxXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4geyAqd2lkdGgsICp3
aWR0aCB9OworCisgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKSB7CisgICAg
ICAgICAgICBhdXRvJiByZXBsYWNlZEJveCA9IGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRC
b3gpOworICAgICAgICAgICAgaWYgKHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHJlcGxhY2VkV2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5z
aWNXaWR0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcGxhY2VkV2lkdGgsIHJlcGxh
Y2VkV2lkdGggfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93
bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgp
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBpZiAobGF5b3V0Qm94LmlzU2l6
ZUNvbnRhaW5tZW50Qm94KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBpbnRyaW5zaWMgc2l6ZXMg
b2YgdGhlIHNpemUgY29udGFpbm1lbnQgYm94IGFyZSBkZXRlcm1pbmVkIGFzIGlmIHRoZSBlbGVt
ZW50IGhhZCBubyBjb250ZW50LAorICAgICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSBzYW1lIGxv
Z2ljIGFzIHdoZW4gc2l6aW5nIGFzIGlmIGVtcHR5LgorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5n
Q29udGV4dCgpKSB7CisgICAgICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
PSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250YWlu
ZXJCb3g+KGxheW91dEJveCksIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMoKTsKKyAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNNaW5Db250ZW50
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5t
aW5pbXVtLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gfTsKKyAgICAgICAgICAg
IGlmIChsb2dpY2FsV2lkdGguaXNNYXhDb250ZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzLm1heGltdW0gfTsKKyAgICAgICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzID0gRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9Owor
ICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmZvcm1hdHRpbmdT
dGF0ZUZvckJveChsYXlvdXRCb3gpOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8Qm94Pihkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpKSB7CisgICAg
ICAgICAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgKGNoaWxkLmlzRmxv
YXRBdm9pZGVyKCkgJiYgIWNoaWxkLmhhc0Zsb2F0Q2xlYXIoKSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBhdXRvIGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyA9IGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNoaWxk
KTsKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOwor
CisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0gPSBzdGQ6Om1h
eChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGNoaWxkSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy0+bWluaW11bSk7CisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzLm1heGltdW0gPSBzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0s
IGNoaWxkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+bWF4aW11bSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CisgICAgfTsKKyAgICAvLyBG
SVhNRSBDaGVjayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBhdXRvIGludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGxheW91dEJveCwgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOworICAgIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMuZXhwYW5kKGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyhsYXlvdXRCb3gpKTsK
KyAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKK30KKworfQorfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43NDBhNjViMDk2YWRkZGFlODZhODg5MjA1MzM3NDJmZTA0MWE2OWY4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9C
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisj
aW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIExheW91dCB7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBh
bmQgc2l6aW5nIGZvciBib3hlcyBwYXJ0aWNpcGF0aW5nIGluIGEgYmxvY2sgZm9ybWF0dGluZyBj
b250ZXh0LgorY2xhc3MgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Jik7CisKKyAgICBDb250ZW50SGVpZ2h0QW5k
TWFyZ2luIGluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJik7Cisg
ICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcyYpOworCisgICAgUG9pbnQgc3RhdGljUG9zaXRpb24oY29uc3QgQm94Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYp
IGNvbnN0OworICAgIExheW91dFVuaXQgc3RhdGljVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gm
LCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzdGF0
aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJikgY29uc3Q7CisKKyAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYpOworCisgICAgQ29u
dGVudFdpZHRoQW5kTWFyZ2luIGNvbXB1dGVkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJv
eCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGF2
YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyKTsKKworcHJpdmF0ZToKKyAgICBDb250ZW50SGVpZ2h0
QW5kTWFyZ2luIGluRmxvd05vblJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMmKTsKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKyAgICBDb250ZW50V2lk
dGhBbmRNYXJnaW4gaW5GbG93UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVw
bGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcyYpOworCisgICAgY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYg
Zm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0
KCkpOyB9Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zv
cm1hdHRpbmdRdWlya3MuY3BwCmluZGV4IDJhYjM1MzI5ZTUwM2I2YTA4YjQ5MzdkM2FhZGM2M2Iz
NTc2NjRlN2YuLmUyZDMzMTMyNzM1YmY3OWQ1YTk1Y2RmYWViNDM4NWU1YWM2YzljMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVk
ZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCIKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgogI2luY2x1ZGUgIkxheW91dEJveEdlb21l
dHJ5LmgiCkBAIC05Nyw3ICs5OCw3IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nUXVpcmtz
OjpzdHJldGNoZWRJbkZsb3dIZWlnaHQoY29uc3QgQm94JiBsYXlvdXRCb3gsIENvCiAgICAgYm9k
eUJveENvbnRlbnRIZWlnaHQgLT0gZG9jdW1lbnRCb3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigp
ICsgZG9jdW1lbnRCb3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDApOwogICAg
IC8vIEhvd2V2ZXIgdGhlIG5vbi1pbi1mbG93IGRvY3VtZW50IGJveCdzIHZlcnRpY2FsIG1hcmdp
bnMgYXJlIGlnbm9yZWQuIFRoZXkgZG9uJ3QgYWZmZWN0IHRoZSBib2R5IGJveCdzIGNvbnRlbnQg
aGVpZ2h0LgogICAgIGlmIChkb2N1bWVudEJveC5pc0luRmxvdygpKSB7Ci0gICAgICAgIGF1dG8g
Z2VvbWV0cnkgPSB0aGlzLT5nZW9tZXRyeSgpOworICAgICAgICBhdXRvIGdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQuZ2VvbWV0cnkoKTsKICAgICAgICAgYXV0byBwcmVjb21wdXRlRG9jdW1l
bnRCb3hWZXJ0aWNhbE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oZG9j
dW1lbnRCb3gsIGdlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChpbml0aWFsQ29u
dGFpbmluZ0Jsb2NrLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpCb2R5U3RyZXRj
aGVzVG9WaWV3cG9ydFF1aXJrKS5ob3Jpem9udGFsKTsKICAgICAgICAgYm9keUJveENvbnRlbnRI
ZWlnaHQgLT0gcHJlY29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVl
T3IoMCkgKyBwcmVjb21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9y
KDApOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCmlu
ZGV4IDliZDUxN2Y5ODI0NGFlODJjYzU5MDA1NDhmZTZlNDc0MTJmZTg1MTQuLjE4OTU3ZTlkNjZl
YmQ4YWU1MDE3ZjIyNDM5OWIxNzg3NWQwYjE2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9j
a0Zvcm1hdHRpbmdRdWlya3MuaApAQCAtNDUsOCArNDUsNiBAQCBwdWJsaWM6CiAKIHByb3RlY3Rl
ZDoKICAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRp
bmdDb250ZXh0OjpRdWlya3M6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9Ci0gICAgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5KCk7IH0KLQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9QcmVjb21wdXRlZEJsb2Nr
TWFyZ2luQ29sbGFwc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9ibG9jay9QcmVjb21wdXRlZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCmluZGV4IDAyMDM0
YWMzNWQyMzFkOGJjZjAxNmQ2MmZiYzllZGExMzczODdkNDIuLmM1YjI5YjQyZGVjYzk3Y2VlMTlm
M2Y2ZjM2OTk5MjU2MWIzNTk3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxhcHNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL1By
ZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiQmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkuaCIKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkxheW91dEJveC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90
YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCAzNTlkYzNkZTNkZWE4
Yjk4MzlkZDhhOGYyZTI5NTBiZDZkNzY4NDdlLi41NTRjODkyMGViNGFkMjJlNDZhMmE0NWExNWI5
YTY4MjBlYTkxMDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNw
cApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCiAKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkJs
b2NrRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNp
bmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5jcHAKaW5kZXggNjVlZDRjNTlhNTg5MmUxNjYzNWM1ZTZkOGFlODMxMGE3NDc0YWNi
Yi4uZWYzY2EwZjJmM2E0MGEwMWMwM2JiMzc0M2Q1N2RmMzA2MDM2OWRiYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBw
ZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdy
YXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDIsOSArNDMsOSBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBUYWJsZVdyYXBw
ZXJRdWlya3M6Om92ZXJyaWRkZW5UYWJsZUhlaWdodChjb25zdCBDb250YWluZXJCbwogewogICAg
IGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKSB7CiAgICAgICAgIC8vIEluIHF1aXJr
cyBtb2RlIGFsd2F5cyB1c2UgdGhlIGNvbnRlbnQgaGVpZ2h0LiBOb3RlIHRoYXQgdGhlIHRhYmxl
cyB3aXRoIGNvbnRlbnQgdGFrZSBjb21wdXRlZCB2YWx1ZXMgaW50byBhY2NvdW50LgotICAgICAg
ICByZXR1cm4gZ2VvbWV0cnkoKS5jb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290
KHRhYmxlQm94KTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnko
KS5jb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KHRhYmxlQm94KTsKICAgICB9
Ci0gICAgcmV0dXJuIHRhYmxlQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpID8gZ2VvbWV0
cnkoKS5jb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KHRhYmxlQm94KSA6IE9w
dGlvbmFsPExheW91dFVuaXQ+IHsgfTsKKyAgICByZXR1cm4gdGFibGVCb3guaGFzSW5GbG93T3JG
bG9hdGluZ0NoaWxkKCkgPyBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5KCkuY29udGVudEhl
aWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCkgOiBPcHRpb25hbDxMYXlvdXRV
bml0PiB7IH07CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428743</attachid>
            <date>2021-05-15 14:55:15 -0700</date>
            <delta_ts>2021-05-15 15:30:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225756-20210515145514.patch</filename>
            <type>text/plain</type>
            <size>71458</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGUwMDRlMWQ5ZTZmODVk
NGE2ODEwMmI2NjE0YzRkMmVkOWI0ZDYzYi4uNjE0MzA3YTU1NTI3MjJhNTVhMGY0ZTJlMmU3ZTE5
NDU0MDU3ZmI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGJsb2NrIGZv
cm1hdHRpbmcgZ2VvbWV0cnkgdG8gaXRzIG93biBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nUXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nUXVpcmtzOjpzdHJldGNoZWRJbkZsb3dIZWlnaHQpOgorICAgICAgICAqIGxheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ1F1aXJrczo6Zm9ybWF0dGluZ0Nv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdR
dWlya3M6Omdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL1ByZWNvbXB1dGVkQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHA6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgICogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nUXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVy
UXVpcmtzOjpvdmVycmlkZGVuVGFibGVIZWlnaHQgY29uc3QpOgorCiAyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBNb3ZlIGJhc2UgZm9y
bWF0dGluZyBxdWlya3MgdG8gaXRzIG93biBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAxZmI1ZGZi
MDIzNzE2MmVjNjE0ZTMwYWEyMmFmZGFlZWFiOGU5Mjc0Li43ODI2N2I5OTMxNTQ3ODEzYThmMWNm
MTJkMWUxNDllZmMzNTk1OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTUxOSw3ICsxNTE5LDcgQEAg
bGF5b3V0L0xheW91dFN0YXRlLmNwcAogbGF5b3V0L0xheW91dFVuaXRzLmNwcAogbGF5b3V0L1Zl
cmlmaWNhdGlvbi5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKLWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9i
bG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3MDk3MzRhODAyNDhhY2E2
MTAxMWY5Nzk5MzZmNjNlMzNmNjczYmY0Li40NWIwNWUzZTMzM2I3OWNiZjRlNjVjZTA3YjRlYmRm
ODk5Yzg2YWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xMzMzLDYgKzEzMzMsNyBAQAogCQk0NkVGQUYxMjFFNUZCOUYxMDBF
N0YzNEIgLyogTG93UG93ZXJNb2RlTm90aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2RUZBRjEwMUU1RkI5RTEwMEU3RjM0QiAvKiBMb3dQb3dl
ck1vZGVOb3RpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQ2RjAyQTFBMjM3MzdGODMwMDEwNkE2NCAvKiBFdmVudExvb3AuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMEFCQ0ExMjM2NzlBQjMw
MEI0NTA4NSAvKiBFdmVudExvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk0NkZDQjYxODFBNzA4MjBFMDBDNUEyMUUgLyogRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDM3QjM3NTE1QzFBN0UxMDA2REM4OTggLyogRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDc4NjM1NjUy
NjUwN0EzODAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Nzg2MzU2NDI2NTA3QTM3MDBDNUUy
RTAgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0N0Y5NDdEQjI2NTAyRjJGMDA4Nzk2OEMgLyogQmxv
Y2tGb3JtYXR0aW5nUXVpcmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0N0Y5NDdEQTI2NTAyRjJGMDA4Nzk2OEMgLyogQmxvY2tGb3JtYXR0aW5nUXVp
cmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDkyOTFFNEIxMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDkyOTFFNEExMzQxNzJDODAw
RTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oICovOyB9OwogCQk0OTNFNUUwOTEyRDY0MjA1
MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTNFNUUwODEyRDY0MjA1MDAwMjAwODEgLyogUGxh
dGZvcm1DQUxheWVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTgzODYsNiArODM4Nyw3IEBACiAJCTQ2RUZBRjBGMUU1RkI5RTEwMEU3
RjM0QiAvKiBMb3dQb3dlck1vZGVOb3RpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMb3dQb3dlck1vZGVOb3RpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ2RUZBRjEwMUU1RkI5RTEwMEU3RjM0QiAvKiBMb3dQb3dlck1vZGVOb3Rp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb3dQb3dlck1vZGVOb3Rp
Zmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkY5MUJDOTFGQ0REMEZFMDAx
NTk5QzMgLyogSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXJOYXZpZ2F0b3JDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0Nzg2MzU2NDI2NTA3QTM3MDBDNUUyRTAgLyogQmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDdGOTQ3
REEyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDkyOTFFNEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVu
ZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVJlbmRl
cmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDkzRTVFMDgxMkQ2NDIw
NTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTk5NDQsNyArOTk0Niw3IEBACiAJCTZFRDhDMzc4MTgzQkZGOEMwMDlFNTNC
RCAvKiBCb3hTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb3hTaGFw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MDEwRjgwM0YzMDA1QTRB
MjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJH
TENvbnRleHRBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMDgz
MERGMjBCNDY5NTEwMDhBOTQ1QiAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYwODMwREYyMEI0Njk1MTAwOEE5NDVCIC8q
IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQjk4
QjMyM0YyNjhFQjAwRUVDMkYyIC8qIExheW91dElubGluZVRleHRCb3guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW5saW5lVGV4dEJveC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RjBCOThCNjIzRjI2OTA2MDBFRUMyRjIgLyogTGF5b3V0SW5saW5l
VGV4dEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJbmxpbmVUZXh0Qm94LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8q
IElubGluZUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODIzOSw3ICsxODI0MSw4IEBACiAJCQkJNkZENEZF
M0UyNDcwQjNBRDAwNzM3NENDIC8qIHRhYmxld3JhcHBlciAqLywKIAkJCQkxMTVDRkE2RDIwOEFG
QUI2MDAxRTY5OTEgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJMTE1Q0ZB
NkMyMDhBRkFCNjAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKLQkJCQk2
RjA4MzBERjIwQjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcCAqLywKKwkJCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnkuY3BwICovLAorCQkJCTQ3ODYzNTY0MjY1MDdBMzcwMEM1RTJFMCAvKiBCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeS5oICovLAogCQkJCTZGOEY0NjAzMjFCMDNCQzYwMDQxQUMzQSAvKiBC
bG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwICovLAogCQkJCTQ3Rjk0N0RBMjY1MDJGMkYwMDg3OTY4
QyAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLywKIAkJCQkxMTVDRkE3OTIwOEI4RDlEMDAx
RTY5OTEgLyogQmxvY2tGb3JtYXR0aW5nU3RhdGUuY3BwICovLApAQCAtMzE2ODIsNiArMzE2ODUs
NyBAQAogCQkJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2QzdGMTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iVVJM
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTVDRkE2RTIwOEFGQUI3MDAxRTY5OTEgLyogQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDc4NjM1NjUyNjUwN0EzODAw
QzVFMkUwIC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
N0Y5NDdEQjI2NTAyRjJGMDA4Nzk2OEMgLyogQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxMTVDRkE3QTIwOEI4RDlEMDAxRTY5OTEgLyogQmxvY2tGb3JtYXR0aW5n
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGNkRGMzZGMjY0NzIyRUEwMDkzRTgzNCAvKiBC
bG9ja01hcmdpbkNvbGxhcHNlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDVmZDg5OWRhODhlNmQ1ZGZhNGY4OTUx
Y2IyOGJiZGY1MGU1MWE2OTIuLjQ2MDAzNmE5NzQyZDQxMDgwM2RlY2Q5NTgwMTRiOGEzNjM1M2Ew
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CiAKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkJsb2Nr
Rm9ybWF0dGluZ1F1aXJrcy5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCiAj
aW5jbHVkZSAiQmxvY2tNYXJnaW5Db2xsYXBzZS5oIgpAQCAtNjAxLDYgKzYwMiwxMSBAQCB2b2lk
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJs
aW5nKGNvbnN0IEJveCYgbGF5bwogICAgIH0KIH0KIAorQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAoreworICAgIHJldHVybiBC
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgqdGhpcyk7Cit9CisKIEJsb2NrTWFyZ2luQ29sbGFwc2Ug
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bWFyZ2luQ29sbGFwc2UoKSBjb25zdAogewogICAgIHJl
dHVybiBCbG9ja01hcmdpbkNvbGxhcHNlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMmQ5MDQ4YzU4YWJjZjRiNDkyN2UwNmViMmE5MTAz
ZWU2NThkYTc1Ny4uNTQ0NDhlNzA2MWUwYzU5MjgyMTAxOTdhN2Q0YmJjMjBhNGVlZWNmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9C
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTM5LDYgKzM5
LDcgQEAgY2xhc3MgTGF5b3V0VW5pdDsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBCb3g7
CitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIEJsb2NrRm9ybWF0dGluZ1F1
aXJrczsKIGNsYXNzIEJsb2NrTWFyZ2luQ29sbGFwc2U7CiBjbGFzcyBGbG9hdGluZ0NvbnRleHQ7
CkBAIC01NSwzNCArNTYsMTAgQEAgcHVibGljOgogCiAgICAgY29uc3QgQmxvY2tGb3JtYXR0aW5n
U3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9y
bWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiAK
KyAgICBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0OwogICAgIEJsb2Nr
Rm9ybWF0dGluZ1F1aXJrcyBxdWlya3MoKSBjb25zdDsKICAgICBCbG9ja01hcmdpbkNvbGxhcHNl
IG1hcmdpbkNvbGxhcHNlKCkgY29uc3Q7CiAKLSAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMg
cG9zaXRpb25pbmcgYW5kIHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJsb2Nr
IGZvcm1hdHRpbmcgY29udGV4dC4KLSAgICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgR2VvbWV0cnkoY29u
c3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYpOwotCi0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRN
YXJnaW4gaW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKTsKLSAg
ICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd0NvbnRlbnRXaWR0aEFuZE1hcmdpbihj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcyYpOwotCi0gICAgICAgIFBvaW50IHN0YXRpY1Bvc2l0aW9uKGNvbnN0
IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3Ry
YWludHMmKSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9u
KGNvbnN0IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKSBjb25zdDsKLSAgICAgICAg
TGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYpOwotCi0gICAgICAg
IENvbnRlbnRXaWR0aEFuZE1hcmdpbiBjb21wdXRlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxMYXlvdXRVbml0
PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGluRmxvd05vblJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1h
cmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMmKTsKLSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGlu
Rmxvd05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7
Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0
aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgY29uc3Qg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVy
biBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9Ci0gICAgfTsKLSAgICBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIEdlb21ldHJ5KCp0
aGlzKTsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IENvbnN0cmFpbnRzUGFpciB7CiAgICAg
ICAgIENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCBmb3JtYXR0aW5nQ29udGV4dFJvb3Q7CkBA
IC0xMTgsMTEgKzk1LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IEJveCosIFByZWNv
bXB1dGVkTWFyZ2luQmVmb3JlPiBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlzdDsKIH07CiAK
LWlubGluZSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkoY29uc3Qg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKLSAgICA6IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQotewotfQot
CiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGExYTJiNDE2
YzY3ZGU1ZjI0NWQ1MmMxNWRiNjM0MzU4ZGNjYjViMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0MDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgi
Ci0jaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbmxpbmVGb3JtYXR0
aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgotI2luY2x1ZGUgIkxh
eW91dENoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgotI2luY2x1ZGUgIkxheW91dFJlcGxh
Y2VkQm94LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLUNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Omlu
Rmxvd05vblJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKQot
ewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFj
ZWRCb3goKSk7Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpKTsKLQot
ICAgIGF1dG8gY29tcHV0ZSA9IFsmXShjb25zdCBhdXRvJiBvdmVycmlkZGVuVmVydGljYWxWYWx1
ZXMpIC0+IENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gewotCi0gICAgICAgIC8vIDEwLjYuMyBCbG9j
ay1sZXZlbCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZs
b3cnIGNvbXB1dGVzIHRvICd2aXNpYmxlJwotICAgICAgICAvLwotICAgICAgICAvLyBJZiAnbWFy
Z2luLXRvcCcsIG9yICdtYXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCB0aGVpciB1c2VkIHZhbHVl
IGlzIDAuCi0gICAgICAgIC8vIElmICdoZWlnaHQnIGlzICdhdXRvJywgdGhlIGhlaWdodCBkZXBl
bmRzIG9uIHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIGFueSBibG9jay1sZXZlbCBjaGlsZHJlbiBh
bmQgd2hldGhlciBpdCBoYXMgcGFkZGluZyBvciBib3JkZXJzOgotICAgICAgICAvLyBUaGUgZWxl
bWVudCdzIGhlaWdodCBpcyB0aGUgZGlzdGFuY2UgZnJvbSBpdHMgdG9wIGNvbnRlbnQgZWRnZSB0
byB0aGUgZmlyc3QgYXBwbGljYWJsZSBvZiB0aGUgZm9sbG93aW5nOgotICAgICAgICAvLyAxLiB0
aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGxhc3QgbGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNo
ZXMgYSBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKLSAg
ICAgICAgLy8gMi4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxh
cHNlZCkgbWFyZ2luIG9mIGl0cyBsYXN0IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJv
dHRvbSBtYXJnaW4KLSAgICAgICAgLy8gICAgZG9lcyBub3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxl
bWVudCdzIGJvdHRvbSBtYXJnaW4KLSAgICAgICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRn
ZSBvZiB0aGUgbGFzdCBpbi1mbG93IGNoaWxkIHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xs
YXBzZSB3aXRoIHRoZSBlbGVtZW50J3MgYm90dG9tIG1hcmdpbgotICAgICAgICAvLyA0LiB6ZXJv
LCBvdGhlcndpc2UKLSAgICAgICAgLy8gT25seSBjaGlsZHJlbiBpbiB0aGUgbm9ybWFsIGZsb3cg
YXJlIHRha2VuIGludG8gYWNjb3VudCAoaS5lLiwgZmxvYXRpbmcgYm94ZXMgYW5kIGFic29sdXRl
bHkgcG9zaXRpb25lZCBib3hlcyBhcmUgaWdub3JlZCwKLSAgICAgICAgLy8gYW5kIHJlbGF0aXZl
bHkgcG9zaXRpb25lZCBib3hlcyBhcmUgY29uc2lkZXJlZCB3aXRob3V0IHRoZWlyIG9mZnNldCku
IE5vdGUgdGhhdCB0aGUgY2hpbGQgYm94IG1heSBiZSBhbiBhbm9ueW1vdXMgYmxvY2sgYm94Lgot
Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4g
PSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cyk7Ci0gICAgICAgIGF1dG8gbm9uQ29sbGFwc2VkTWFyZ2luID0gVXNlZFZlcnRp
Y2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkg
fTsgCi0gICAgICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LmJvcmRl
clRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgIGF1
dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7
Ci0KLSAgICAgICAgaWYgKGhlaWdodCkKLSAgICAgICAgICAgIHJldHVybiB7ICpoZWlnaHQsIG5v
bkNvbGxhcHNlZE1hcmdpbiB9OwotCi0gICAgICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlv
dXRCb3gpIHx8ICFkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkuaGFzSW5GbG93Q2hp
bGQoKSkKLSAgICAgICAgICAgIHJldHVybiB7IDAsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwotCi0g
ICAgICAgIC8vIDEuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgbGFzdCBsaW5lIGJveCwgaWYgdGhl
IGJveCBlc3RhYmxpc2hlcyBhIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgd2l0aCBvbmUgb3Ig
bW9yZSBsaW5lcwotICAgICAgICBhdXRvJiBsYXlvdXRDb250YWluZXIgPSBkb3duY2FzdDxDb250
YWluZXJCb3g+KGxheW91dEJveCk7Ci0gICAgICAgIGlmIChsYXlvdXRDb250YWluZXIuZXN0YWJs
aXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxp
bmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0
dGluZ1N0YXRlKGxheW91dENvbnRhaW5lcik7Ci0gICAgICAgICAgICBhdXRvJiBsaW5lcyA9IGlu
bGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lcygpOwotICAgICAgICAgICAgLy8gRXZlbiBlbXB0eSBj
b250YWluZXJzIGdlbmVyYXRlIG9uZSBsaW5lLiAKLSAgICAgICAgICAgIEFTU0VSVCghbGluZXMu
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHJldHVybiB7IHRvTGF5b3V0VW5pdChsaW5lcy5sYXN0
KCkubGluZUJveExvZ2ljYWxSZWN0KCkuYm90dG9tKCkgKyBpbmxpbmVGb3JtYXR0aW5nU3RhdGUu
Y2xlYXJHYXBBZnRlckxhc3RMaW5lKCkpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFw
c2VkTWFyZ2luIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ug
b2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4t
ZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdpbi4uLgotICAgICAgICBhdXRv
JiBsYXN0SW5GbG93Q2hpbGQgPSAqbGF5b3V0Q29udGFpbmVyLmxhc3RJbkZsb3dDaGlsZCgpOwot
ICAgICAgICBpZiAoIWZvcm1hdHRpbmdDb250ZXh0KCkubWFyZ2luQ29sbGFwc2UoKS5tYXJnaW5B
ZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihsYXN0SW5GbG93Q2hpbGQpKSB7Ci0g
ICAgICAgICAgICBhdXRvJiBsYXN0SW5GbG93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KGxhc3RJbkZsb3dDaGlsZCk7Ci0gICAgICAgICAgICBhdXRvIGJv
dHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiA9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxhc3RJ
bkZsb3dCb3hHZW9tZXRyeSkuYm90dG9tKCkgKyBsYXN0SW5GbG93Qm94R2VvbWV0cnkubWFyZ2lu
QWZ0ZXIoKTsKLSAgICAgICAgICAgIHJldHVybiB7IGJvdHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiAt
IGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRnZSBvZiB0aGUgbGFzdCBpbi1mbG93
IGNoaWxkIHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50
J3MgYm90dG9tIG1hcmdpbgotICAgICAgICBhdXRvKiBpbkZsb3dDaGlsZCA9ICZsYXN0SW5GbG93
Q2hpbGQ7Ci0gICAgICAgIHdoaWxlIChpbkZsb3dDaGlsZCAmJiBmb3JtYXR0aW5nQ29udGV4dCgp
Lm1hcmdpbkNvbGxhcHNlKCkubWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFm
dGVyKCppbkZsb3dDaGlsZCkpCi0gICAgICAgICAgICBpbkZsb3dDaGlsZCA9IGluRmxvd0NoaWxk
LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKLSAgICAgICAgaWYgKGluRmxvd0NoaWxkKSB7Ci0g
ICAgICAgICAgICBhdXRvJiBpbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3goKmluRmxvd0NoaWxkKTsKLSAgICAgICAgICAgIHJldHVybiB7IEJveEdl
b21ldHJ5Ojpib3JkZXJCb3hUb3AoaW5GbG93Qm94R2VvbWV0cnkpICsgaW5GbG93Qm94R2VvbWV0
cnkuYm9yZGVyQm94KCkuaGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBz
ZWRNYXJnaW4gfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIHplcm8sIG90aGVyd2lzZQot
ICAgICAgICByZXR1cm4geyAwLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKLSAgICB9OwotCi0gICAg
Ly8gMTAuNi43ICdBdXRvJyBoZWlnaHRzIGZvciBibG9jay1sZXZlbCBmb3JtYXR0aW5nIGNvbnRl
eHQgYm94ZXMuCi0gICAgYXV0byBpc0F1dG9IZWlnaHQgPSAhb3ZlcnJpZGRlblZlcnRpY2FsVmFs
dWVzLmhlaWdodCAmJiAhY29tcHV0ZWRIZWlnaHQobGF5b3V0Qm94KTsKLSAgICBpZiAoaXNBdXRv
SGVpZ2h0ICYmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpICYmICFs
YXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSkKLSAgICAgICAg
cmV0dXJuIGNvbXB1dGUoIE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyB7IGNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gp
KSB9KTsKLSAgICByZXR1cm4gY29tcHV0ZShvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotfQot
Ci1Db250ZW50V2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmluRmxvd05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywg
Y29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFs
dWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7Ci0KLSAgICBhdXRvIGNv
bXB1dGUgPSBbJl0oKSB7Ci0KLSAgICAgICAgLy8gMTAuMy4zIEJsb2NrLWxldmVsLCBub24tcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhl
IGZvbGxvd2luZyBjb25zdHJhaW50cyBtdXN0IGhvbGQgYW1vbmcgdGhlIHVzZWQgdmFsdWVzIG9m
IHRoZSBvdGhlciBwcm9wZXJ0aWVzOgotICAgICAgICAvLyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRl
ci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0
JyArICdib3JkZXItcmlnaHQtd2lkdGgnICsgJ21hcmdpbi1yaWdodCcgPSB3aWR0aCBvZiBjb250
YWluaW5nIGJsb2NrCi0gICAgICAgIC8vCi0gICAgICAgIC8vIDEuIElmICd3aWR0aCcgaXMgbm90
ICdhdXRvJyBhbmQgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQnICsgJ3dpZHRo
JyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgnIAotICAgICAgICAvLyAg
ICAocGx1cyBhbnkgb2YgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyB0aGF0IGFyZSBu
b3QgJ2F1dG8nKSBpcyBsYXJnZXIgdGhhbiB0aGUgd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgYmxv
Y2ssIHRoZW4KLSAgICAgICAgLy8gICAgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVm
dCcgb3IgJ21hcmdpbi1yaWdodCcgYXJlLCBmb3IgdGhlIGZvbGxvd2luZyBydWxlcywgdHJlYXRl
ZCBhcyB6ZXJvLgotICAgICAgICAvLwotICAgICAgICAvLyAyLiBJZiBhbGwgb2YgdGhlIGFib3Zl
IGhhdmUgYSBjb21wdXRlZCB2YWx1ZSBvdGhlciB0aGFuICdhdXRvJywgdGhlIHZhbHVlcyBhcmUg
c2FpZCB0byBiZSAib3Zlci1jb25zdHJhaW5lZCIgYW5kIG9uZSBvZiB0aGUgdXNlZCB2YWx1ZXMg
d2lsbAotICAgICAgICAvLyAgICBoYXZlIHRvIGJlIGRpZmZlcmVudCBmcm9tIGl0cyBjb21wdXRl
ZCB2YWx1ZS4gSWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBjb250YWluaW5nIGJs
b2NrIGhhcyB0aGUgdmFsdWUgJ2x0cicsIHRoZSBzcGVjaWZpZWQgdmFsdWUKLSAgICAgICAgLy8g
ICAgb2YgJ21hcmdpbi1yaWdodCcgaXMgaWdub3JlZCBhbmQgdGhlIHZhbHVlIGlzIGNhbGN1bGF0
ZWQgc28gYXMgdG8gbWFrZSB0aGUgZXF1YWxpdHkgdHJ1ZS4gSWYgdGhlIHZhbHVlIG9mICdkaXJl
Y3Rpb24nIGlzICdydGwnLAotICAgICAgICAvLyAgICB0aGlzIGhhcHBlbnMgdG8gJ21hcmdpbi1s
ZWZ0JyBpbnN0ZWFkLgotICAgICAgICAvLwotICAgICAgICAvLyAzLiBJZiB0aGVyZSBpcyBleGFj
dGx5IG9uZSB2YWx1ZSBzcGVjaWZpZWQgYXMgJ2F1dG8nLCBpdHMgdXNlZCB2YWx1ZSBmb2xsb3dz
IGZyb20gdGhlIGVxdWFsaXR5LgotICAgICAgICAvLwotICAgICAgICAvLyA0LiBJZiAnd2lkdGgn
IGlzIHNldCB0byAnYXV0bycsIGFueSBvdGhlciAnYXV0bycgdmFsdWVzIGJlY29tZSAnMCcgYW5k
ICd3aWR0aCcgZm9sbG93cyBmcm9tIHRoZSByZXN1bHRpbmcgZXF1YWxpdHkuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIDUuIElmIGJvdGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcg
YXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZXMgYXJlIGVxdWFsLiBUaGlzIGhvcml6b250YWxs
eSBjZW50ZXJzIHRoZSBlbGVtZW50IHdpdGggcmVzcGVjdCB0byB0aGUKLSAgICAgICAgLy8gICAg
ZWRnZXMgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0KLSAgICAgICAgYXV0byBjb250YWluaW5n
QmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0gICAgICAg
IGF1dG8mIGNvbnRhaW5pbmdCbG9ja1N0eWxlID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
LnN0eWxlKCk7Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotCi0gICAgICAgIGF1dG8gd2lkdGggPSBvdmVy
cmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
LndpZHRoIDogY29tcHV0ZWRXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsK
LSAgICAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAg
ICAgICAgVXNlZEhvcml6b250YWxNYXJnaW4gdXNlZEhvcml6b250YWxNYXJnaW47Ci0gICAgICAg
IGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKLSAgICAgICAgYXV0
byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCk7Ci0gICAgICAgIGF1dG8g
cGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAg
ICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVP
cigwKTsKLQotICAgICAgICAvLyAjMQotICAgICAgICBpZiAod2lkdGgpIHsKLSAgICAgICAgICAg
IGF1dG8gaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2luID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAo
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCkgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICBpZiAoaG9y
aXpvbnRhbFNwYWNlRm9yTWFyZ2luIDwgMCkKLSAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRh
bE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gIzIKLSAgICAgICAgaWYgKHdpZHRoICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAgICAgICAgICBp
ZiAoY29udGFpbmluZ0Jsb2NrU3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAg
ICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luLnN0YXJ0OwotICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsg
Ym9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVy
UmlnaHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5lbmQgPSAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKLSAgICAgICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRo
IC0gKGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJv
cmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vICMzCi0gICAgICAgIGlmICghY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLnN0YXJ0ICYmIHdpZHRoICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsK
LSAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uZW5kOwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtIChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgICsgKndpZHRo
ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQp
OwotICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAmJiAh
d2lkdGggJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewotICAgICAgICAgICAgdXNl
ZEhvcml6b250YWxNYXJnaW4gPSB7ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQsICpj
b21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kIH07Ci0gICAgICAgICAgICB3aWR0aCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVm
dCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5lbmQpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydCAmJiB3aWR0aCAmJiAhY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgewot
ICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luLnN0YXJ0OwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0g
Y29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAjNAotICAgICAgICBpZiAoIXdpZHRoKSB7Ci0g
ICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVP
cigwKSB9OwotICAgICAgICAgICAgd2lkdGggPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRp
bmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vICM1Ci0gICAgICAgIGlmICghY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLnN0YXJ0ICYmICFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAgICAgICAg
ICBhdXRvIGhvcml6b250YWxTcGFjZUZvck1hcmdpbiA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0g
KGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3Jk
ZXJSaWdodCk7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgaG9yaXpvbnRh
bFNwYWNlRm9yTWFyZ2luIC8gMiwgaG9yaXpvbnRhbFNwYWNlRm9yTWFyZ2luIC8gMiB9OwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBzaG91bGRBcHBseUNlbnRlckFsaWduRm9yQmxvY2tDb250
ZW50ID0gY29udGFpbmluZ0Jsb2NrU3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6
V2ViS2l0Q2VudGVyICYmIChjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgfHwgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0gICAgICAgIGlmIChzaG91bGRBcHBseUNlbnRlckFs
aWduRm9yQmxvY2tDb250ZW50KSB7Ci0gICAgICAgICAgICBhdXRvIGJvcmRlckJveFdpZHRoID0g
KGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3Jk
ZXJSaWdodCk7Ci0gICAgICAgICAgICBhdXRvIG1hcmdpblN0YXJ0ID0gY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICBhdXRvIG1hcmdpbkVuZCA9
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKTsKLSAgICAgICAgICAgIGF1
dG8gY2VudGVyZWRMb2dpY2FsTGVmdEZvck1hcmdpbkJveCA9IHN0ZDo6bWF4KChjb250YWluaW5n
QmxvY2tXaWR0aCAtIGJvcmRlckJveFdpZHRoIC0gbWFyZ2luU3RhcnQgLSBtYXJnaW5FbmQpIC8g
MiwgMF9sdSk7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNlbnRl
cmVkTG9naWNhbExlZnRGb3JNYXJnaW5Cb3ggKyBtYXJnaW5TdGFydDsKLSAgICAgICAgICAgIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gYm9yZGVyQm94
V2lkdGggLSBtYXJnaW5TdGFydCArIG1hcmdpbkVuZDsKLSAgICAgICAgfQotICAgICAgICBBU1NF
UlQod2lkdGgpOwotCi0gICAgICAgIHJldHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyAqd2lk
dGgsIHVzZWRIb3Jpem9udGFsTWFyZ2luIH07Ci0gICAgfTsKLQotICAgIGF1dG8gY29udGVudFdp
ZHRoQW5kTWFyZ2luID0gY29tcHV0ZSgpOwotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5n
Q29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gaW5mbG93IG5vbi1y
ZXBsYWNlZCAtPiB3aWR0aCgiIDw8IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgg
PDwgInB4KSBtYXJnaW4oIiA8PCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFy
dCA8PCAicHgsICIgPDwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIDw8ICJw
eCkgLT4gbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVybiBjb250
ZW50V2lkdGhBbmRNYXJnaW47Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJn
aW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChyZXBsYWNl
ZEJveC5pc0luRmxvdygpKTsKLQotICAgIC8vIDEwLjMuNCBCbG9jay1sZXZlbCwgcmVwbGFjZWQg
ZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cKLSAgICAvLwotICAgIC8vIDEuIFRoZSB1c2VkIHZhbHVl
IG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRz
LgotICAgIC8vIDIuIFRoZW4gdGhlIHJ1bGVzIGZvciBub24tcmVwbGFjZWQgYmxvY2stbGV2ZWwg
ZWxlbWVudHMgYXJlIGFwcGxpZWQgdG8gZGV0ZXJtaW5lIHRoZSBtYXJnaW5zLgotCi0gICAgLy8g
IzEKLSAgICBhdXRvIHVzZWRXaWR0aCA9IGlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFy
Z2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpLmNvbnRlbnRXaWR0aDsKLSAgICAvLyAjMgotICAgIGF1dG8gbm9uUmVw
bGFjZWRXaWR0aEFuZE1hcmdpbiA9IGluRmxvd05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFy
Z2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIE92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzIHsgdXNlZFdpZHRoLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4g
fSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVh
bSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGluZmxvdyByZXBsYWNlZCAtPiB3aWR0aCgiIDw8IHVz
ZWRXaWR0aCAgPDwgInB4KSBtYXJnaW4oIiA8PCBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luLnVz
ZWRNYXJnaW4uc3RhcnQgPDwgInB4LCAiIDw8IG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNl
ZE1hcmdpbi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwgIiki
KTsKLSAgICByZXR1cm4geyB1c2VkV2lkdGgsIG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNl
ZE1hcmdpbiB9OwotfQotCi1MYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjYmxvY2stZm9ybWF0dGlu
ZwotICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LCBib3hlcyBhcmUgbGFpZCBv
dXQgb25lIGFmdGVyIHRoZSBvdGhlciwgdmVydGljYWxseSwgYmVnaW5uaW5nIGF0IHRoZSB0b3Ag
b2YgYSBjb250YWluaW5nIGJsb2NrLgotICAgIC8vIFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSBiZXR3
ZWVuIHR3byBzaWJsaW5nIGJveGVzIGlzIGRldGVybWluZWQgYnkgdGhlICdtYXJnaW4nIHByb3Bl
cnRpZXMuCi0gICAgLy8gVmVydGljYWwgbWFyZ2lucyBiZXR3ZWVuIGFkamFjZW50IGJsb2NrLWxl
dmVsIGJveGVzIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGNvbGxhcHNlLgotICAgIGlm
IChhdXRvKiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dT
aWJsaW5nKCkpIHsKLSAgICAgICAgYXV0byYgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKnByZXZpb3VzSW5GbG93U2libGluZyk7
Ci0gICAgICAgIHJldHVybiBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChwcmV2aW91c0luRmxv
d0JveEdlb21ldHJ5KS5ib3R0b20oKSArIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkubWFyZ2lu
QWZ0ZXIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbFRv
cDsKLX0KLQotTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKLXsKLSAgICAvLyBo
dHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1hdHRpbmcK
LSAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgZWFjaCBib3gncyBsZWZ0IG91
dGVyIGVkZ2UgdG91Y2hlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIChm
b3IgcmlnaHQtdG8tbGVmdCBmb3JtYXR0aW5nLCByaWdodCBlZGdlcyB0b3VjaCkuCi0gICAgcmV0
dXJuIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdCArIGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJnaW5TdGFydCgpOwotfQotCi1Qb2ludCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljUG9zaXRpb24oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBj
b25zdAotewotICAgIHJldHVybiB7IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cyksIHN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94
LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKSB9OwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFyZ2luIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygp
KTsKLQotICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVs
IHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJwotICAgIC8v
IHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBl
bGVtZW50cwotICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1
cm4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2Vk
Qm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKTsKLQotICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29udGVudEhlaWdo
dEFuZE1hcmdpbjsKLSAgICBpZiAobGF5b3V0Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkgJiYgIWxh
eW91dEJveC5pc0RvY3VtZW50Qm94KCkpIHsKLSAgICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB0
aGUgY2FzZSBmb3IgdGhlIGRvY3VtZW50IGVsZW1lbnQuIExldCdzIGp1c3QgY29tcGxpY2F0ZWQt
Y2FzZSBpdCBmb3Igbm93LgotICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gaW5GbG93
Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIDEwLjYuNiBDb21wbGljYXRlZCBjYXNlcwotICAgICAgICAvLyBCbG9jay1sZXZlbCwg
bm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93JyBkb2Vz
IG5vdCBjb21wdXRlIHRvICd2aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cnIHByb3Bl
cnR5J3MgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgotICAgICAg
ICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKLSAgICB9Ci0K
LSAgICBhdXRvIHF1aXJrcyA9IGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCk7Ci0gICAgaWYg
KCFxdWlya3MubmVlZHNTdHJldGNoaW5nKGxheW91dEJveCkpCi0gICAgICAgIHJldHVybiBjb250
ZW50SGVpZ2h0QW5kTWFyZ2luOwotCi0gICAgY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50
SGVpZ2h0ID0gcXVpcmtzLnN0cmV0Y2hlZEluRmxvd0hlaWdodChsYXlvdXRCb3gsIGNvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4pOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0
TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gaW5mbG93IG5vbi1yZXBsYWNl
ZCAtPiBzdHJlY2hlZCB0byB2aWV3cG9ydCAtPiBoZWlnaHQoIiA8PCBjb250ZW50SGVpZ2h0QW5k
TWFyZ2luLmNvbnRlbnRIZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCBjb250ZW50SGVpZ2h0QW5k
TWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8IGNvbnRlbnRIZWln
aHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94
KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVybiBjb250ZW50SGVpZ2h0QW5kTWFy
Z2luOwotfQotCi1Db250ZW50V2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmluRmxvd0NvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cykKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwotCi0gICAgaWYgKCFsYXlv
dXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1cm4gaW5GbG93Tm9uUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKLSAgICByZXR1cm4gaW5GbG93UmVwbGFjZWRDb250
ZW50V2lkdGhBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6
b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotfQotCi1Db250
ZW50V2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1
dGVkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpCi17Ci0gICAgYXV0byBjb21wdXRlID0g
WyZdIChhdXRvIGNvbnN0cmFpbnRzRm9yV2lkdGgsIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRX
aWR0aCkgewotICAgICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmxvYXRpbmdDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94
LCBjb25zdHJhaW50c0ZvcldpZHRoLCB7IHVzZWRXaWR0aCwgeyB9IH0pOwotCi0gICAgICAgIGlm
IChsYXlvdXRCb3guaXNJbkZsb3coKSkKLSAgICAgICAgICAgIHJldHVybiBpbkZsb3dDb250ZW50
V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50c0ZvcldpZHRoLCB7IHVzZWRXaWR0
aCwgeyB9IH0pOwotCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgfTsKLSAgICB9OwotCi0gICAgYXV0byBob3Jpem9u
dGFsQ29uc3RyYWludHNGb3JXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50czsKLSAgICBpZiAo
bGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbFdpZHRoKCkuaXNBdXRvKCkgJiYgYXZhaWxhYmxlV2lk
dGhGbG9hdEF2b2lkZXIpIHsKLSAgICAgICAgLy8gV2hpbGUgdGhlIG5vbi1hdXRvIHdpZHRoIHZh
bHVlcyBzaG91bGQgYWxsIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIGNvbnRhaW5pbmcgYmxvY2sn
cyB3aWR0aCwgd2hlbgotICAgICAgICAvLyB0aGUgd2lkdGggaXMgYXV0byB0aGUgYXZhaWxhYmxl
IGhvcml6b250YWwgc3BhY2UgaXMgc2hydW5rIGJ5IG5laWdoYm9yaW5nIGZsb2F0cy4KLSAgICAg
ICAgaG9yaXpvbnRhbENvbnN0cmFpbnRzRm9yV2lkdGgubG9naWNhbFdpZHRoID0gKmF2YWlsYWJs
ZVdpZHRoRmxvYXRBdm9pZGVyOwotICAgIH0KLSAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdp
biA9IGNvbXB1dGUoaG9yaXpvbnRhbENvbnN0cmFpbnRzRm9yV2lkdGgsIHsgfSk7Ci0gICAgYXV0
byBhdmFpbGFibGVXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0g
ICAgaWYgKGF1dG8gbWF4V2lkdGggPSBjb21wdXRlZE1heFdpZHRoKGxheW91dEJveCwgYXZhaWxh
YmxlV2lkdGgpKSB7Ci0gICAgICAgIGF1dG8gbWF4V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKGhv
cml6b250YWxDb25zdHJhaW50cywgbWF4V2lkdGgpOwotICAgICAgICBpZiAoY29udGVudFdpZHRo
QW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+IG1heFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkK
LSAgICAgICAgICAgIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IG1heFdpZHRoQW5kTWFyZ2luOwot
ICAgIH0KLQotICAgIGF1dG8gbWluV2lkdGggPSBjb21wdXRlZE1pbldpZHRoKGxheW91dEJveCwg
YXZhaWxhYmxlV2lkdGgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBtaW5XaWR0aEFuZE1hcmdpbiA9
IGNvbXB1dGUoaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBtaW5XaWR0aCk7Ci0gICAgaWYgKGNvbnRl
bnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGggPCBtaW5XaWR0aEFuZE1hcmdpbi5jb250ZW50
V2lkdGgpCi0gICAgICAgIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IG1pbldpZHRoQW5kTWFyZ2lu
OwotICAgIHJldHVybiBjb250ZW50V2lkdGhBbmRNYXJnaW47Ci19Ci0KLUZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYgbGF5b3V0Qm94KQot
ewotICAgIGF1dG8gZml4ZWRNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nID0gWyZdKGF1dG8mIGxheW91
dEJveCkgewotICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAg
ICByZXR1cm4gZml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5TdGFydCgpKS52YWx1ZU9yKDApCi0gICAg
ICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSB9Ci0gICAgICAg
ICAgICArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQoKSkudmFsdWVPcigwKQotICAgICAg
ICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdSaWdodCgpKS52YWx1ZU9yKDApCi0gICAg
ICAgICAgICArIExheW91dFVuaXQgeyBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCkgfQotICAgICAg
ICAgICAgKyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgpKS52YWx1ZU9yKDApOwotICAgIH07
Ci0KLSAgICBhdXRvIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IFsmXSgpIC0+
IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgewotICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9
IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICAvLyBNaW5pbXVtL21h
eGltdW0gd2lkdGggY2FuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mg
d2lkdGguCi0gICAgICAgIGF1dG8gbmVlZHNSZXNvbHZlZENvbnRhaW5pbmdCbG9ja1dpZHRoID0g
bG9naWNhbFdpZHRoLmlzQ2FsY3VsYXRlZCgpIHx8IGxvZ2ljYWxXaWR0aC5pc1BlcmNlbnQoKSB8
fCBsb2dpY2FsV2lkdGguaXNSZWxhdGl2ZSgpOwotICAgICAgICBpZiAobmVlZHNSZXNvbHZlZENv
bnRhaW5pbmdCbG9ja1dpZHRoKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgICAgICBp
ZiAoYXV0byB3aWR0aCA9IGZpeGVkVmFsdWUobG9naWNhbFdpZHRoKSkKLSAgICAgICAgICAgIHJl
dHVybiB7ICp3aWR0aCwgKndpZHRoIH07Ci0KLSAgICAgICAgaWYgKGxheW91dEJveC5pc1JlcGxh
Y2VkQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHJlcGxhY2VkQm94ID0gZG93bmNhc3Q8UmVw
bGFjZWRCb3g+KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZWRCb3guaGFzSW50
cmluc2ljV2lkdGgoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVwbGFjZWRXaWR0aCA9IHJl
cGxhY2VkQm94LmludHJpbnNpY1dpZHRoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVw
bGFjZWRXaWR0aCwgcmVwbGFjZWRXaWR0aCB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXM8Q29udGFpbmVyQm94Pihs
YXlvdXRCb3gpIHx8ICFkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkuaGFzSW5GbG93
T3JGbG9hdGluZ0NoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIGlm
IChsYXlvdXRCb3guaXNTaXplQ29udGFpbm1lbnRCb3goKSkgewotICAgICAgICAgICAgLy8gVGhl
IGludHJpbnNpYyBzaXplcyBvZiB0aGUgc2l6ZSBjb250YWlubWVudCBib3ggYXJlIGRldGVybWlu
ZWQgYXMgaWYgdGhlIGVsZW1lbnQgaGFkIG5vIGNvbnRlbnQsCi0gICAgICAgICAgICAvLyBmb2xs
b3dpbmcgdGhlIHNhbWUgbG9naWMgYXMgd2hlbiBzaXppbmcgYXMgaWYgZW1wdHkuCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheW91dEJveC5lc3Rh
Ymxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGF1dG8gaW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSwgbGF5b3V0U3RhdGUoKSktPmNvbXB1
dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwotICAgICAgICAgICAgaWYgKGxvZ2ljYWxX
aWR0aC5pc01pbkNvbnRlbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyBpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11
bSB9OwotICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc01heENvbnRlbnQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4geyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSB9OwotICAgICAgICAgICAgcmV0dXJuIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgPSBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgfTsKLSAg
ICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5mb3JtYXR0aW5nU3Rh
dGVGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPEJveD4oZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKSkgewotICAgICAg
ICAgICAgaWYgKGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IChjaGlsZC5pc0Zsb2F0
QXZvaWRlcigpICYmICFjaGlsZC5oYXNGbG9hdENsZWFyKCkpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgYXV0byBjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
PSBmb3JtYXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjaGlsZCk7
Ci0gICAgICAgICAgICBBU1NFUlQoY2hpbGRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKLQot
ICAgICAgICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtID0gc3RkOjptYXgo
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCBjaGlsZEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMtPm1pbmltdW0pOwotICAgICAgICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50
cy5tYXhpbXVtID0gc3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBj
aGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMtPm1heGltdW0pOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOwotICAgIH07Ci0gICAgLy8gRklY
TUUgQ2hlY2sgZm9yIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgYXV0byBpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzID0gY29uc3RyYWluQnlNaW5NYXhXaWR0aChsYXlvdXRCb3gsIGNvbXB1
dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKLSAgICBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzLmV4cGFuZChmaXhlZE1hcmdpbkJvcmRlckFuZFBhZGRpbmcobGF5b3V0Qm94KSk7Ci0g
ICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci19Ci0KLX0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVmZmM4MGUxZmJlMmMyOWZmYTZiNjc5NDBiNzQ4MTJjMzEzYWM4ZTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
ICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94
R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
TGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2su
aCIKKyNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBMYXlvdXQgeworCitCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6QmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0
aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShibG9ja0Zvcm1h
dHRpbmdDb250ZXh0KQoreworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYgIWxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpOworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdmVyZmxv
d1Zpc2libGUoKSk7CisKKyAgICBhdXRvIGNvbXB1dGUgPSBbJl0oY29uc3QgYXV0byYgb3ZlcnJp
ZGRlblZlcnRpY2FsVmFsdWVzKSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsKKworICAgICAg
ICAvLyAxMC42LjMgQmxvY2stbGV2ZWwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBm
bG93IHdoZW4gJ292ZXJmbG93JyBjb21wdXRlcyB0byAndmlzaWJsZScKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gSWYgJ21hcmdpbi10b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywg
dGhlaXIgdXNlZCB2YWx1ZSBpcyAwLgorICAgICAgICAvLyBJZiAnaGVpZ2h0JyBpcyAnYXV0bycs
IHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBhbnkgYmxvY2st
bGV2ZWwgY2hpbGRyZW4gYW5kIHdoZXRoZXIgaXQgaGFzIHBhZGRpbmcgb3IgYm9yZGVyczoKKyAg
ICAgICAgLy8gVGhlIGVsZW1lbnQncyBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gaXRzIHRv
cCBjb250ZW50IGVkZ2UgdG8gdGhlIGZpcnN0IGFwcGxpY2FibGUgb2YgdGhlIGZvbGxvd2luZzoK
KyAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0
aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBv
ciBtb3JlIGxpbmVzCisgICAgICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9t
IChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBp
ZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2luCisgICAgICAgIC8vICAgIGRvZXMgbm90IGNvbGxh
cHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCisgICAgICAgIC8vIDMuIHRoZSBi
b3R0b20gYm9yZGVyIGVkZ2Ugb2YgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFy
Z2luIGRvZXNuJ3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KKyAg
ICAgICAgLy8gNC4gemVybywgb3RoZXJ3aXNlCisgICAgICAgIC8vIE9ubHkgY2hpbGRyZW4gaW4g
dGhlIG5vcm1hbCBmbG93IGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGkuZS4sIGZsb2F0aW5nIGJv
eGVzIGFuZCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGlnbm9yZWQsCisgICAgICAg
IC8vIGFuZCByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGNvbnNpZGVyZWQgd2l0aG91
dCB0aGVpciBvZmZzZXQpLiBOb3RlIHRoYXQgdGhlIGNoaWxkIGJveCBtYXkgYmUgYW4gYW5vbnlt
b3VzIGJsb2NrIGJveC4KKworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdD
b250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byBjb21wdXRl
ZFZlcnRpY2FsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZE1h
cmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5h
ZnRlci52YWx1ZU9yKDApIH07IAorICAgICAgICBhdXRvIGJvcmRlckFuZFBhZGRpbmdUb3AgPSBi
b3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9y
KDApOworICAgICAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWln
aHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhl
aWdodChsYXlvdXRCb3gpOworCisgICAgICAgIGlmIChoZWlnaHQpCisgICAgICAgICAgICByZXR1
cm4geyAqaGVpZ2h0LCBub25Db2xsYXBzZWRNYXJnaW4gfTsKKworICAgICAgICBpZiAoIWlzPENv
bnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRC
b3gpLmhhc0luRmxvd0NoaWxkKCkpCisgICAgICAgICAgICByZXR1cm4geyAwLCBub25Db2xsYXBz
ZWRNYXJnaW4gfTsKKworICAgICAgICAvLyAxLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGxhc3Qg
bGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNoZXMgYSBpbmxpbmUgZm9ybWF0dGluZyBjb250
ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKKyAgICAgICAgYXV0byYgbGF5b3V0Q29udGFpbmVy
ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOworICAgICAgICBpZiAobGF5b3V0
Q29udGFpbmVyLmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgeworICAgICAg
ICAgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShsYXlvdXRDb250YWluZXIpOworICAgICAgICAgICAg
YXV0byYgbGluZXMgPSBpbmxpbmVGb3JtYXR0aW5nU3RhdGUubGluZXMoKTsKKyAgICAgICAgICAg
IC8vIEV2ZW4gZW1wdHkgY29udGFpbmVycyBnZW5lcmF0ZSBvbmUgbGluZS4gCisgICAgICAgICAg
ICBBU1NFUlQoIWxpbmVzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4geyB0b0xheW91
dFVuaXQobGluZXMubGFzdCgpLmxpbmVCb3hMb2dpY2FsUmVjdCgpLmJvdHRvbSgpICsgaW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmNsZWFyR2FwQWZ0ZXJMYXN0TGluZSgpKSAtIGJvcmRlckFuZFBhZGRp
bmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMi4g
dGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxhcHNlZCkgbWFyZ2lu
IG9mIGl0cyBsYXN0IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJvdHRvbSBtYXJnaW4u
Li4KKyAgICAgICAgYXV0byYgbGFzdEluRmxvd0NoaWxkID0gKmxheW91dENvbnRhaW5lci5sYXN0
SW5GbG93Q2hpbGQoKTsKKyAgICAgICAgaWYgKCFmb3JtYXR0aW5nQ29udGV4dCgpLm1hcmdpbkNv
bGxhcHNlKCkubWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIobGFzdElu
Rmxvd0NoaWxkKSkgeworICAgICAgICAgICAgYXV0byYgbGFzdEluRmxvd0JveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXN0SW5GbG93Q2hpbGQpOworICAg
ICAgICAgICAgYXV0byBib3R0b21FZGdlT2ZCb3R0b21NYXJnaW4gPSBCb3hHZW9tZXRyeTo6Ym9y
ZGVyQm94UmVjdChsYXN0SW5GbG93Qm94R2VvbWV0cnkpLmJvdHRvbSgpICsgbGFzdEluRmxvd0Jv
eEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCk7CisgICAgICAgICAgICByZXR1cm4geyBib3R0b21FZGdl
T2ZCb3R0b21NYXJnaW4gLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xsYXBzZWRNYXJnaW4g
fTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIHRoZSBib3R0b20gYm9yZGVyIGVkZ2Ugb2Yg
dGhlIGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFyZ2luIGRvZXNuJ3QgY29sbGFwc2Ug
d2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KKyAgICAgICAgYXV0byogaW5GbG93Q2hp
bGQgPSAmbGFzdEluRmxvd0NoaWxkOworICAgICAgICB3aGlsZSAoaW5GbG93Q2hpbGQgJiYgZm9y
bWF0dGluZ0NvbnRleHQoKS5tYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhQYXJlbnRNYXJnaW5BZnRlcigqaW5GbG93Q2hpbGQpKQorICAgICAgICAgICAgaW5GbG93Q2hp
bGQgPSBpbkZsb3dDaGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CisgICAgICAgIGlmIChp
bkZsb3dDaGlsZCkgeworICAgICAgICAgICAgYXV0byYgaW5GbG93Qm94R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCppbkZsb3dDaGlsZCk7CisgICAgICAgICAg
ICByZXR1cm4geyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94VG9wKGluRmxvd0JveEdlb21ldHJ5KSAr
IGluRmxvd0JveEdlb21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGlu
Z1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiB6
ZXJvLCBvdGhlcndpc2UKKyAgICAgICAgcmV0dXJuIHsgMCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07
CisgICAgfTsKKworICAgIC8vIDEwLjYuNyAnQXV0bycgaGVpZ2h0cyBmb3IgYmxvY2stbGV2ZWwg
Zm9ybWF0dGluZyBjb250ZXh0IGJveGVzLgorICAgIGF1dG8gaXNBdXRvSGVpZ2h0ID0gIW92ZXJy
aWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgJiYgIWNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7
CisgICAgaWYgKGlzQXV0b0hlaWdodCAmJiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQoKSkpCisgICAgICAgIHJldHVybiBjb21wdXRlKCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMg
eyBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGRvd25jYXN0PENvbnRhaW5l
ckJveD4obGF5b3V0Qm94KSkgfSk7CisgICAgcmV0dXJuIGNvbXB1dGUob3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzKTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gm
IGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3Ry
YWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOworCisgICAg
YXV0byBjb21wdXRlID0gWyZdKCkgeworCisgICAgICAgIC8vIDEwLjMuMyBCbG9jay1sZXZlbCwg
bm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93CisgICAgICAgIC8vCisgICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgY29uc3RyYWludHMgbXVzdCBob2xkIGFtb25nIHRoZSB1c2VkIHZh
bHVlcyBvZiB0aGUgb3RoZXIgcHJvcGVydGllczoKKyAgICAgICAgLy8gJ21hcmdpbi1sZWZ0JyAr
ICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcgKyAncGFkZGlu
Zy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQnID0gd2lkdGgg
b2YgY29udGFpbmluZyBibG9jaworICAgICAgICAvLworICAgICAgICAvLyAxLiBJZiAnd2lkdGgn
IGlzIG5vdCAnYXV0bycgYW5kICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyAr
ICd3aWR0aCcgKyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyAKKyAgICAg
ICAgLy8gICAgKHBsdXMgYW55IG9mICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgdGhh
dCBhcmUgbm90ICdhdXRvJykgaXMgbGFyZ2VyIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBjb250YWlu
aW5nIGJsb2NrLCB0aGVuCisgICAgICAgIC8vICAgIGFueSAnYXV0bycgdmFsdWVzIGZvciAnbWFy
Z2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGFyZSwgZm9yIHRoZSBmb2xsb3dpbmcgcnVsZXMs
IHRyZWF0ZWQgYXMgemVyby4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMi4gSWYgYWxsIG9mIHRo
ZSBhYm92ZSBoYXZlIGEgY29tcHV0ZWQgdmFsdWUgb3RoZXIgdGhhbiAnYXV0bycsIHRoZSB2YWx1
ZXMgYXJlIHNhaWQgdG8gYmUgIm92ZXItY29uc3RyYWluZWQiIGFuZCBvbmUgb2YgdGhlIHVzZWQg
dmFsdWVzIHdpbGwKKyAgICAgICAgLy8gICAgaGF2ZSB0byBiZSBkaWZmZXJlbnQgZnJvbSBpdHMg
Y29tcHV0ZWQgdmFsdWUuIElmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29udGFp
bmluZyBibG9jayBoYXMgdGhlIHZhbHVlICdsdHInLCB0aGUgc3BlY2lmaWVkIHZhbHVlCisgICAg
ICAgIC8vICAgIG9mICdtYXJnaW4tcmlnaHQnIGlzIGlnbm9yZWQgYW5kIHRoZSB2YWx1ZSBpcyBj
YWxjdWxhdGVkIHNvIGFzIHRvIG1ha2UgdGhlIGVxdWFsaXR5IHRydWUuIElmIHRoZSB2YWx1ZSBv
ZiAnZGlyZWN0aW9uJyBpcyAncnRsJywKKyAgICAgICAgLy8gICAgdGhpcyBoYXBwZW5zIHRvICdt
YXJnaW4tbGVmdCcgaW5zdGVhZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gMy4gSWYgdGhlcmUg
aXMgZXhhY3RseSBvbmUgdmFsdWUgc3BlY2lmaWVkIGFzICdhdXRvJywgaXRzIHVzZWQgdmFsdWUg
Zm9sbG93cyBmcm9tIHRoZSBlcXVhbGl0eS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gNC4gSWYg
J3dpZHRoJyBpcyBzZXQgdG8gJ2F1dG8nLCBhbnkgb3RoZXIgJ2F1dG8nIHZhbHVlcyBiZWNvbWUg
JzAnIGFuZCAnd2lkdGgnIGZvbGxvd3MgZnJvbSB0aGUgcmVzdWx0aW5nIGVxdWFsaXR5LgorICAg
ICAgICAvLworICAgICAgICAvLyA1LiBJZiBib3RoICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4t
cmlnaHQnIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWVzIGFyZSBlcXVhbC4gVGhpcyBob3Jp
em9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgICAg
IC8vICAgIGVkZ2VzIG9mIHRoZSBjb250YWluaW5nIGJsb2NrLgorCisgICAgICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwor
ICAgICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tTdHlsZSA9IGxheW91dEJveC5jb250YWluaW5n
QmxvY2soKS5zdHlsZSgpOworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdD
b250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKworICAgICAgICBhdXRvIHdpZHRo
ID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tX
aWR0aCk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6
OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cyk7CisgICAgICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwor
ICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCk7CisgICAg
ICAgIGF1dG8gYm9yZGVyUmlnaHQgPSBib3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpOworICAgICAg
ICBhdXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDAp
OworICAgICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgp
LnZhbHVlT3IoMCk7CisKKyAgICAgICAgLy8gIzEKKyAgICAgICAgaWYgKHdpZHRoKSB7CisgICAg
ICAgICAgICBhdXRvIGhvcml6b250YWxTcGFjZUZvck1hcmdpbiA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQg
KyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkpOworICAgICAgICAgICAg
aWYgKGhvcml6b250YWxTcGFjZUZvck1hcmdpbiA8IDApCisgICAgICAgICAgICAgICAgdXNlZEhv
cml6b250YWxNYXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9y
KDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vICMyCisgICAgICAgIGlmICh3aWR0aCAmJiBjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uc3RhcnQgJiYgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgeworICAgICAg
ICAgICAgaWYgKGNvbnRhaW5pbmdCbG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkg
eworICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gKmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydDsKKyAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1h
cmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCAr
IGJvcmRlclJpZ2h0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXNl
ZEhvcml6b250YWxNYXJnaW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7Cisg
ICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5nQmxv
Y2tXaWR0aCAtIChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmln
aHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAjMworICAgICAgICBpZiAoIWNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbi5zdGFydCAmJiB3aWR0aCAmJiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
ZW5kKSB7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSAqY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZDsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICAr
ICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJn
aW4uZW5kKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3Rh
cnQgJiYgIXdpZHRoICYmIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKKyAgICAgICAg
ICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCB9OworICAgICAgICAgICAgd2lkdGgg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNl
ZEhvcml6b250YWxNYXJnaW4uZW5kKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wdXRlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgJiYgd2lkdGggJiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5l
bmQpIHsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gKmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydDsKKyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9y
ZGVyUmlnaHQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gIzQKKyAgICAgICAgaWYgKCF3aWR0
aCkgeworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4gPSB7IGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5k
LnZhbHVlT3IoMCkgfTsKKyAgICAgICAgICAgIHdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQg
KyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyAjNQorICAgICAgICBpZiAoIWNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCAmJiAhY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgeworICAg
ICAgICAgICAgYXV0byBob3Jpem9udGFsU3BhY2VGb3JNYXJnaW4gPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtIChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0
ICsgYm9yZGVyUmlnaHQpOworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4gPSB7IGhv
cml6b250YWxTcGFjZUZvck1hcmdpbiAvIDIsIGhvcml6b250YWxTcGFjZUZvck1hcmdpbiAvIDIg
fTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2hvdWxkQXBwbHlDZW50ZXJBbGlnbkZvckJs
b2NrQ29udGVudCA9IGNvbnRhaW5pbmdCbG9ja1N0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGln
bk1vZGU6OldlYktpdENlbnRlciAmJiAoY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0IHx8
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICBpZiAoc2hvdWxkQXBwbHlD
ZW50ZXJBbGlnbkZvckJsb2NrQ29udGVudCkgeworICAgICAgICAgICAgYXV0byBib3JkZXJCb3hX
aWR0aCA9IChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0
ICsgYm9yZGVyUmlnaHQpOworICAgICAgICAgICAgYXV0byBtYXJnaW5TdGFydCA9IGNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApOworICAgICAgICAgICAgYXV0byBtYXJn
aW5FbmQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCk7CisgICAgICAg
ICAgICBhdXRvIGNlbnRlcmVkTG9naWNhbExlZnRGb3JNYXJnaW5Cb3ggPSBzdGQ6Om1heCgoY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSBib3JkZXJCb3hXaWR0aCAtIG1hcmdpblN0YXJ0IC0gbWFyZ2lu
RW5kKSAvIDIsIDBfbHUpOworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
PSBjZW50ZXJlZExvZ2ljYWxMZWZ0Rm9yTWFyZ2luQm94ICsgbWFyZ2luU3RhcnQ7CisgICAgICAg
ICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIGJv
cmRlckJveFdpZHRoIC0gbWFyZ2luU3RhcnQgKyBtYXJnaW5FbmQ7CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKHdpZHRoKTsKKworICAgICAgICByZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2lu
IHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbE1hcmdpbiB9OworICAgIH07CisKKyAgICBhdXRvIGNv
bnRlbnRXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9y
bWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGluZmxv
dyBub24tcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCBjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVu
dFdpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJn
aW4uc3RhcnQgPDwgInB4LCAiIDw8IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVu
ZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKKyAgICByZXR1
cm4gY29udGVudFdpZHRoQW5kTWFyZ2luOworfQorCitDb250ZW50V2lkdGhBbmRNYXJnaW4gQmxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd1JlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFs
dWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQocmVwbGFjZWRC
b3guaXNJbkZsb3coKSk7CisKKyAgICAvLyAxMC4zLjQgQmxvY2stbGV2ZWwsIHJlcGxhY2VkIGVs
ZW1lbnRzIGluIG5vcm1hbCBmbG93CisgICAgLy8KKyAgICAvLyAxLiBUaGUgdXNlZCB2YWx1ZSBv
ZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4K
KyAgICAvLyAyLiBUaGVuIHRoZSBydWxlcyBmb3Igbm9uLXJlcGxhY2VkIGJsb2NrLWxldmVsIGVs
ZW1lbnRzIGFyZSBhcHBsaWVkIHRvIGRldGVybWluZSB0aGUgbWFyZ2lucy4KKworICAgIC8vICMx
CisgICAgYXV0byB1c2VkV2lkdGggPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdp
bihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzKS5jb250ZW50V2lkdGg7CisgICAgLy8gIzIKKyAgICBhdXRvIG5vblJlcGxh
Y2VkV2lkdGhBbmRNYXJnaW4gPSBpbkZsb3dOb25SZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdp
bihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyB7IHVzZWRXaWR0aCwgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luIH0p
OworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0g
PDwgIltXaWR0aF1bTWFyZ2luXSAtPiBpbmZsb3cgcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCB1c2Vk
V2lkdGggIDw8ICJweCkgbWFyZ2luKCIgPDwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2Vk
TWFyZ2luLnN0YXJ0IDw8ICJweCwgIiA8PCBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luLnVzZWRN
YXJnaW4uZW5kIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7
CisgICAgcmV0dXJuIHsgdXNlZFdpZHRoLCBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luLnVzZWRN
YXJnaW4gfTsKK30KKworTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6c3RhdGlj
VmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVmVydGljYWxDb25z
dHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1hdHRpbmcKKyAgICAvLyBJ
biBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgYm94ZXMgYXJlIGxhaWQgb3V0IG9uZSBhZnRl
ciB0aGUgb3RoZXIsIHZlcnRpY2FsbHksIGJlZ2lubmluZyBhdCB0aGUgdG9wIG9mIGEgY29udGFp
bmluZyBibG9jay4KKyAgICAvLyBUaGUgdmVydGljYWwgZGlzdGFuY2UgYmV0d2VlbiB0d28gc2li
bGluZyBib3hlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSAnbWFyZ2luJyBwcm9wZXJ0aWVzLgorICAg
IC8vIFZlcnRpY2FsIG1hcmdpbnMgYmV0d2VlbiBhZGphY2VudCBibG9jay1sZXZlbCBib3hlcyBp
biBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBjb2xsYXBzZS4KKyAgICBpZiAoYXV0byogcHJl
dmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpKSB7
CisgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgICAgICBy
ZXR1cm4gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QocHJldmlvdXNJbkZsb3dCb3hHZW9tZXRy
eSkuYm90dG9tKCkgKyBwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCk7Cisg
ICAgfQorICAgIHJldHVybiB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7Cit9CisKK0xh
eW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlv
bihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jp
em9udGFsQ29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RS
L0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCisgICAgLy8gSW4gYSBibG9jayBm
b3JtYXR0aW5nIGNvbnRleHQsIGVhY2ggYm94J3MgbGVmdCBvdXRlciBlZGdlIHRvdWNoZXMgdGhl
IGxlZnQgZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9jayAoZm9yIHJpZ2h0LXRvLWxlZnQgZm9y
bWF0dGluZywgcmlnaHQgZWRnZXMgdG91Y2gpLgorICAgIHJldHVybiBob3Jpem9udGFsQ29uc3Ry
YWludHMubG9naWNhbExlZnQgKyBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCkubWFyZ2luU3RhcnQoKTsKK30KKworUG9pbnQgQmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnk6OnN0YXRpY1Bvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFs
Q29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJh
aW50cyYgdmVydGljYWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICByZXR1cm4geyBzdGF0aWNI
b3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpLCBzdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cykgfTsKK30K
KworQ29udGVudEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93
Q29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKQoreworICAgIEFTU0VSVChs
YXlvdXRCb3guaXNJbkZsb3coKSk7CisKKyAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVs
ZW1lbnRzLCBibG9jay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lu
bGluZS1ibG9jaycKKyAgICAvLyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQg
ZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSkKKyAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdp
bihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCB7IH0sIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7CisKKyAgICBDb250ZW50SGVpZ2h0QW5k
TWFyZ2luIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW47CisgICAgaWYgKGxheW91dEJveC5pc092ZXJm
bG93VmlzaWJsZSgpICYmICFsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSB7CisgICAgICAgIC8v
IFRPRE86IEZpZ3VyZSBvdXQgdGhlIGNhc2UgZm9yIHRoZSBkb2N1bWVudCBlbGVtZW50LiBMZXQn
cyBqdXN0IGNvbXBsaWNhdGVkLWNhc2UgaXQgZm9yIG5vdy4KKyAgICAgICAgY29udGVudEhlaWdo
dEFuZE1hcmdpbiA9IGluRmxvd05vblJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlv
dXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKKyAgICAg
ICAgLy8gQmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyB3
aGVuICdvdmVyZmxvdycgZG9lcyBub3QgY29tcHV0ZSB0byAndmlzaWJsZScgKGV4Y2VwdCBpZiB0
aGUgJ292ZXJmbG93JyBwcm9wZXJ0eSdzIHZhbHVlIGhhcyBiZWVuIHByb3BhZ2F0ZWQgdG8gdGhl
IHZpZXdwb3J0KS4KKyAgICAgICAgY29udGVudEhlaWdodEFuZE1hcmdpbiA9IGNvbXBsaWNhdGVk
Q2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcyk7CisgICAgfQorCisgICAgYXV0byBxdWlya3MgPSBmb3JtYXR0aW5nQ29udGV4dCgp
LnF1aXJrcygpOworICAgIGlmICghcXVpcmtzLm5lZWRzU3RyZXRjaGluZyhsYXlvdXRCb3gpKQor
ICAgICAgICByZXR1cm4gY29udGVudEhlaWdodEFuZE1hcmdpbjsKKworICAgIGNvbnRlbnRIZWln
aHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA9IHF1aXJrcy5zdHJldGNoZWRJbkZsb3dIZWlnaHQo
bGF5b3V0Qm94LCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luKTsKKworICAgIExPR19XSVRIX1NUUkVB
TShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+
IGluZmxvdyBub24tcmVwbGFjZWQgLT4gc3RyZWNoZWQgdG8gdmlld3BvcnQgLT4gaGVpZ2h0KCIg
PDwgY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIg
PDwgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYmVmb3JlIDw8ICJw
eCwgIiA8PCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5hZnRlciA8
PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4g
Y29udGVudEhlaWdodEFuZE1hcmdpbjsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKKworICAg
IGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIGluRmxvd05v
blJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgcmV0dXJuIGluRmxvd1Jl
cGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRC
b3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsK
K30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21w
dXRlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPExheW91
dFVuaXQ+IGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyKQoreworICAgIGF1dG8gY29tcHV0ZSA9
IFsmXSAoYXV0byBjb25zdHJhaW50c0ZvcldpZHRoLCBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2Vk
V2lkdGgpIHsKKyAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJv
eCwgY29uc3RyYWludHNGb3JXaWR0aCwgeyB1c2VkV2lkdGgsIHsgfSB9KTsKKworICAgICAgICBp
ZiAobGF5b3V0Qm94LmlzSW5GbG93KCkpCisgICAgICAgICAgICByZXR1cm4gaW5GbG93Q29udGVu
dFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgY29uc3RyYWludHNGb3JXaWR0aCwgeyB1c2VkV2lk
dGgsIHsgfSB9KTsKKworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7IH07CisgICAgfTsKKworICAgIGF1dG8gaG9yaXpv
bnRhbENvbnN0cmFpbnRzRm9yV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHM7CisgICAgaWYg
KGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLmlzQXV0bygpICYmIGF2YWlsYWJsZVdp
ZHRoRmxvYXRBdm9pZGVyKSB7CisgICAgICAgIC8vIFdoaWxlIHRoZSBub24tYXV0byB3aWR0aCB2
YWx1ZXMgc2hvdWxkIGFsbCBiZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSBjb250YWluaW5nIGJsb2Nr
J3Mgd2lkdGgsIHdoZW4KKyAgICAgICAgLy8gdGhlIHdpZHRoIGlzIGF1dG8gdGhlIGF2YWlsYWJs
ZSBob3Jpem9udGFsIHNwYWNlIGlzIHNocnVuayBieSBuZWlnaGJvcmluZyBmbG9hdHMuCisgICAg
ICAgIGhvcml6b250YWxDb25zdHJhaW50c0ZvcldpZHRoLmxvZ2ljYWxXaWR0aCA9ICphdmFpbGFi
bGVXaWR0aEZsb2F0QXZvaWRlcjsKKyAgICB9CisgICAgYXV0byBjb250ZW50V2lkdGhBbmRNYXJn
aW4gPSBjb21wdXRlKGhvcml6b250YWxDb25zdHJhaW50c0ZvcldpZHRoLCB7IH0pOworICAgIGF1
dG8gYXZhaWxhYmxlV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwor
ICAgIGlmIChhdXRvIG1heFdpZHRoID0gY29tcHV0ZWRNYXhXaWR0aChsYXlvdXRCb3gsIGF2YWls
YWJsZVdpZHRoKSkgeworICAgICAgICBhdXRvIG1heFdpZHRoQW5kTWFyZ2luID0gY29tcHV0ZSho
b3Jpem9udGFsQ29uc3RyYWludHMsIG1heFdpZHRoKTsKKyAgICAgICAgaWYgKGNvbnRlbnRXaWR0
aEFuZE1hcmdpbi5jb250ZW50V2lkdGggPiBtYXhXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgp
CisgICAgICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBtYXhXaWR0aEFuZE1hcmdpbjsK
KyAgICB9CisKKyAgICBhdXRvIG1pbldpZHRoID0gY29tcHV0ZWRNaW5XaWR0aChsYXlvdXRCb3gs
IGF2YWlsYWJsZVdpZHRoKS52YWx1ZU9yKDApOworICAgIGF1dG8gbWluV2lkdGhBbmRNYXJnaW4g
PSBjb21wdXRlKGhvcml6b250YWxDb25zdHJhaW50cywgbWluV2lkdGgpOworICAgIGlmIChjb250
ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoIDwgbWluV2lkdGhBbmRNYXJnaW4uY29udGVu
dFdpZHRoKQorICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBtaW5XaWR0aEFuZE1hcmdp
bjsKKyAgICByZXR1cm4gY29udGVudFdpZHRoQW5kTWFyZ2luOworfQorCitGb3JtYXR0aW5nQ29u
dGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBh
dXRvIGZpeGVkTWFyZ2luQm9yZGVyQW5kUGFkZGluZyA9IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsK
KyAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICAgICAgcmV0dXJu
IGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAg
KyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkgfQorICAgICAgICAgICAgKyBm
aXhlZFZhbHVlKHN0eWxlLnBhZGRpbmdMZWZ0KCkpLnZhbHVlT3IoMCkKKyAgICAgICAgICAgICsg
Zml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKQorICAgICAgICAgICAg
KyBMYXlvdXRVbml0IHsgc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpIH0KKyAgICAgICAgICAgICsg
Zml4ZWRWYWx1ZShzdHlsZS5tYXJnaW5FbmQoKSkudmFsdWVPcigwKTsKKyAgICB9OworCisgICAg
YXV0byBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBGb3JtYXR0
aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7CisgICAgICAgIGF1dG8gbG9n
aWNhbFdpZHRoID0gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbFdpZHRoKCk7CisgICAgICAgIC8v
IE1pbmltdW0vbWF4aW11bSB3aWR0aCBjYW4ndCBiZSBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5p
bmcgYmxvY2sncyB3aWR0aC4KKyAgICAgICAgYXV0byBuZWVkc1Jlc29sdmVkQ29udGFpbmluZ0Js
b2NrV2lkdGggPSBsb2dpY2FsV2lkdGguaXNDYWxjdWxhdGVkKCkgfHwgbG9naWNhbFdpZHRoLmlz
UGVyY2VudCgpIHx8IGxvZ2ljYWxXaWR0aC5pc1JlbGF0aXZlKCk7CisgICAgICAgIGlmIChuZWVk
c1Jlc29sdmVkQ29udGFpbmluZ0Jsb2NrV2lkdGgpCisgICAgICAgICAgICByZXR1cm4geyB9Owor
CisgICAgICAgIGlmIChhdXRvIHdpZHRoID0gZml4ZWRWYWx1ZShsb2dpY2FsV2lkdGgpKQorICAg
ICAgICAgICAgcmV0dXJuIHsgKndpZHRoLCAqd2lkdGggfTsKKworICAgICAgICBpZiAobGF5b3V0
Qm94LmlzUmVwbGFjZWRCb3goKSkgeworICAgICAgICAgICAgYXV0byYgcmVwbGFjZWRCb3ggPSBk
b3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNl
ZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXBsYWNl
ZFdpZHRoID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geyByZXBsYWNlZFdpZHRoLCByZXBsYWNlZFdpZHRoIH07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpczxDb250
YWluZXJCb3g+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94
KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAgICAgaWYgKGxheW91dEJveC5pc1NpemVDb250YWlubWVudEJveCgpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgaW50cmluc2ljIHNpemVzIG9mIHRoZSBzaXplIGNvbnRhaW5tZW50IGJveCBh
cmUgZGV0ZXJtaW5lZCBhcyBpZiB0aGUgZWxlbWVudCBoYWQgbm8gY29udGVudCwKKyAgICAgICAg
ICAgIC8vIGZvbGxvd2luZyB0aGUgc2FtZSBsb2dpYyBhcyB3aGVuIHNpemluZyBhcyBpZiBlbXB0
eS4KKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKworICAgICAgICBpZiAobGF5
b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgYXV0
byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0
dGluZ0NvbnRleHQoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBsYXlvdXRTdGF0
ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgICAgICBp
ZiAobG9naWNhbFdpZHRoLmlzTWluQ29udGVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7
IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgaW50cmluc2ljV2lkdGhDb25zdHJh
aW50cy5taW5pbXVtIH07CisgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzTWF4Q29udGVu
dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMu
bWF4aW11bSwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtIH07CisgICAgICAgICAg
ICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgfTsKKyAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gbGF5b3V0U3RhdGUoKS5mb3JtYXR0aW5nU3RhdGVGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEJveD4oZG93bmNhc3Q8Q29udGFp
bmVyQm94PihsYXlvdXRCb3gpKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpIHx8IChjaGlsZC5pc0Zsb2F0QXZvaWRlcigpICYmICFjaGlsZC5oYXNGbG9h
dENsZWFyKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byBj
aGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3JtYXR0aW5nU3RhdGUuaW50cmluc2lj
V2lkdGhDb25zdHJhaW50c0ZvckJveChjaGlsZCk7CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKKworICAgICAgICAgICAgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy5taW5pbXVtID0gc3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5t
aW5pbXVtLCBjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMtPm1pbmltdW0pOworICAgICAg
ICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtID0gc3RkOjptYXgoaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBjaGlsZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMtPm1heGltdW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzOworICAgIH07CisgICAgLy8gRklYTUUgQ2hlY2sgZm9yIGJveC1zaXppbmc6IGJv
cmRlci1ib3g7CisgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gY29uc3RyYWlu
QnlNaW5NYXhXaWR0aChsYXlvdXRCb3gsIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cygpKTsKKyAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4cGFuZChmaXhlZE1hcmdpbkJv
cmRlckFuZFBhZGRpbmcobGF5b3V0Qm94KSk7CisgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHM7Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQwYTY1YjA5NmFkZGRhZTg2YTg4OTIw
NTMzNzQyZmUwNDFhNjlmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCisvLyBUaGlzIGNs
YXNzIGltcGxlbWVudHMgcG9zaXRpb25pbmcgYW5kIHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBh
dGluZyBpbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4KK2NsYXNzIEJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSB7CitwdWJsaWM6
CisgICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dCYpOworCisgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbkZsb3dDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpOworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZs
b3dDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIFBvaW50
IHN0YXRpY1Bvc2l0aW9uKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYs
IGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHN0YXRp
Y1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYp
IGNvbnN0OworICAgIExheW91dFVuaXQgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJv
eCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0OworCisgICAgRm9ybWF0dGlu
Z0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyhjb25zdCBCb3gmKTsKKworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBjb21wdXRlZENv
bnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcik7CisK
K3ByaXZhdGU6CisgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJik7CisgICAgQ29udGVudFdpZHRo
QW5kTWFyZ2luIGluRmxvd05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJv
eCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzJik7CisgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd1JlcGxhY2VkQ29u
dGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIGNv
bnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgpKTsgfQorfTsKKworfQorfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCBiOTA5
NjljZWIyNjA5ODI5NGY3MGEwZjIwYTlkM2RiYzFhZTcwNjgxLi42MDg4ZGJlZGVjMThhZWNmY2Ex
NGMzZDk5ZTY0OTI3NzRjZjhmNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1h
dHRpbmdRdWlya3MuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3gu
aCIKICNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgpAQCAtOTcsNyArOTgsNyBAQCBMYXlv
dXRVbml0IEJsb2NrRm9ybWF0dGluZ1F1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBDbwogICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IGRvY3VtZW50
Qm94R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGlj
YWxQYWRkaW5nKCkudmFsdWVPcigwKTsKICAgICAvLyBIb3dldmVyIHRoZSBub24taW4tZmxvdyBk
b2N1bWVudCBib3gncyB2ZXJ0aWNhbCBtYXJnaW5zIGFyZSBpZ25vcmVkLiBUaGV5IGRvbid0IGFm
ZmVjdCB0aGUgYm9keSBib3gncyBjb250ZW50IGhlaWdodC4KICAgICBpZiAoZG9jdW1lbnRCb3gu
aXNJbkZsb3coKSkgewotICAgICAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2VvbWV0cnkoKTsK
KyAgICAgICAgYXV0byBnZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5KCk7CiAg
ICAgICAgIGF1dG8gcHJlY29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBnZW9tZXRy
eS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGRvY3VtZW50Qm94LCBnZW9tZXRyeS5jb25zdHJhaW50
c0ZvckluRmxvd0NvbnRlbnQoaW5pdGlhbENvbnRhaW5pbmdCbG9jaywgRm9ybWF0dGluZ0NvbnRl
eHQ6OkVzY2FwZVJlYXNvbjo6Qm9keVN0cmV0Y2hlc1RvVmlld3BvcnRRdWlyaykuaG9yaXpvbnRh
bCk7CiAgICAgICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IHByZWNvbXB1dGVEb2N1bWVudEJv
eFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApICsgcHJlY29tcHV0ZURvY3VtZW50Qm94
VmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9j
ay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaAppbmRleCA4MDdkZjMzMjI4MWJiNzU4OTYxNWNjNWFj
MjAxOGE1NjcxZmQ1NGM4Li44MDIxYzE0NDIxMjhhZGNmZmI5ZGQ5NTNkMDU2ZTVhNjAzNWY1MDdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTQ1LDgg
KzQ1LDYgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nUXVpcmtzOjpmb3JtYXR0aW5nQ29udGV4dCgp
KTsgfQotICAgIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5KCkgY29u
c3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpOyB9Ci0KIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxhcHNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svUHJlY29tcHV0ZWRCbG9ja01hcmdpbkNvbGxh
cHNlLmNwcAppbmRleCAwMjAzNGFjMzVkMjMxZDhiY2YwMTZkNjJmYmM5ZWRhMTM3Mzg3ZDQyLi5j
NWIyOWI0MmRlY2M5N2NlZTE5ZjNmNmYzNjk5OTI1NjFiMzU5NzI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL1ByZWNvbXB1dGVkQmxv
Y2tNYXJnaW5Db2xsYXBzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9QcmVjb21wdXRlZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAor
I2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiQmxvY2tGb3Jt
YXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRD
b250YWluZXJCb3guaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9i
bG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAK
aW5kZXggMzU5ZGMzZGUzZGVhOGI5ODM5ZGQ4YThmMmUyOTUwYmQ2ZDc2ODQ3ZS4uNTU0Yzg5MjBl
YjRhZDIyZTQ2YTJhNDVhMTViOWE2ODIwZWE5MTAyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFw
cGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnkuaCIKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkludmFs
aWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3
cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdy
YXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCmluZGV4IDY1ZWQ0YzU5YTU4OTJlMTY2MzVj
NWU2ZDhhZTgzMTBhNzQ3NGFjYmIuLmVmM2NhMGYyZjNhNDBhMDFjMDNiYjM3NDNkNTdkZjMwNjAz
NjlkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90
YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNp
bmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dFN0YXRl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDkgKzQzLDkgQEAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gVGFibGVXcmFwcGVyUXVpcmtzOjpvdmVycmlkZGVuVGFibGVIZWlnaHQoY29uc3Qg
Q29udGFpbmVyQm8KIHsKICAgICBpZiAobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSkgewog
ICAgICAgICAvLyBJbiBxdWlya3MgbW9kZSBhbHdheXMgdXNlIHRoZSBjb250ZW50IGhlaWdodC4g
Tm90ZSB0aGF0IHRoZSB0YWJsZXMgd2l0aCBjb250ZW50IHRha2UgY29tcHV0ZWQgdmFsdWVzIGlu
dG8gYWNjb3VudC4KLSAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuY29udGVudEhlaWdodEZvckZv
cm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7CisgICAgICAgIHJldHVybiBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9v
dCh0YWJsZUJveCk7CiAgICAgfQotICAgIHJldHVybiB0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0
aW5nQ2hpbGQoKSA/IGdlb21ldHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0
Um9vdCh0YWJsZUJveCkgOiBPcHRpb25hbDxMYXlvdXRVbml0PiB7IH07CisgICAgcmV0dXJuIHRh
YmxlQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpID8gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFibGVCb3gp
IDogT3B0aW9uYWw8TGF5b3V0VW5pdD4geyB9OwogfQogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>