<?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>295663</bug_id>
          
          <creation_ts>2025-07-09 15:27:11 -0700</creation_ts>
          <short_desc>[Cleanup] Let&apos;s call baselinePosition only on in-flow inline level boxes</short_desc>
          <delta_ts>2025-07-18 05:12:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <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>2128831</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2025-07-09 15:27:11 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2128834</commentid>
    <comment_count>1</comment_count>
      <attachid>475832</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-07-09 15:28:24 -0700</bug_when>
    <thetext>Created attachment 475832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2128835</commentid>
    <comment_count>2</comment_count>
      <attachid>475833</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-07-09 15:33:16 -0700</bug_when>
    <thetext>Created attachment 475833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2130672</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2025-07-16 15:28:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/156005469&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2131023</commentid>
    <comment_count>4</comment_count>
      <attachid>476087</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-07-17 19:45:35 -0700</bug_when>
    <thetext>Created attachment 476087
[fast-cq]Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2131100</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-07-18 05:12:45 -0700</bug_when>
    <thetext>Committed 297584@main (74b504696126): &lt;https://commits.webkit.org/297584@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 476087.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>475832</attachid>
            <date>2025-07-09 15:28:24 -0700</date>
            <delta_ts>2025-07-17 19:45:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-295663-20250709152823.patch</filename>
            <type>text/plain</type>
            <size>1861</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSBmZjEyMTg0YzIzZWZhZDBkODAzNzAyYTBkZTA1YWMxYzBmZGQyMzA5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFdlZCwgOSBKdWwgMjAyNSAxNToyNzoxOSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFtDbGVhbnVw
XSBMZXQncyBjYWxsIGJhc2VsaW5lUG9zaXRpb24gb25seSBvbiBpbi1mbG93IGlubGluZQogbGV2
ZWwgYm94ZXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5NTY2MwoK
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpGbG9hdHMgYW5kIG91dC1vZi1mbG93IGJveGVz
IGRvIG5vdCBwYXJ0aWNpcGF0ZSBpbiBiYXNlbGluZSBhbGlnbm1lbnQgKG9yIGFueSBhbGlnbm1l
bnQgZm9yIHRoYXQgbWF0dGVyKS4KCiogU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcDoKKFdlYkNvcmU6OkxheW91
dEludGVncmF0aW9uOjpiYXNlbGluZVBvc2l0aW9uKToKKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpzZXRJbnRlZ3JhdGlvbkJhc2VsaW5lKToKLS0tCiAuLi4vaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwICAgICAgfCA1ICsrKysrCiAxIGZpbGUg
Y2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJveEdl
b21ldHJ5VXBkYXRlci5jcHAKaW5kZXggN2U4OThiZDBlMTRjLi4zNTc3MTdhMTEwZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkJveEdlb21ldHJ5VXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcApAQCAtMzk2LDYg
KzM5Niw4IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlubGluZUJsb2NrQmFz
ZWxpbmUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCiAKIExheW91dFVuaXQgc3RhdGljIGJh
c2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCiB7CisgICAgQVNTRVJU
KHJlbmRlckJveC5pc0luRmxvdygpKTsKKwogICAgIGF1dG8gd3JpdGluZ01vZGUgPSByZW5kZXJC
b3guY29udGFpbmluZ0Jsb2NrKCktPndyaXRpbmdNb2RlKCk7CiAgICAgYXV0byBtYXJnaW5CZWZv
cmUgPSB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IHJlbmRlckJveC5tYXJnaW5Ub3AoKSA6
IHJlbmRlckJveC5tYXJnaW5SaWdodCgpOwogCkBAIC01MzQsNiArNTM2LDkgQEAgTGF5b3V0VW5p
dCBzdGF0aWMgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIHJlbmRlckJveCkKIAog
c3RhdGljIGlubGluZSB2b2lkIHNldEludGVncmF0aW9uQmFzZWxpbmUoY29uc3QgUmVuZGVyQm94
JiByZW5kZXJCb3gpCiB7CisgICAgaWYgKHJlbmRlckJveC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gaGFzTm9uU3ludGhldGlj
QmFzZWxpbmUgPSBbJl0gewogICAgICAgICBpZiAoYXV0byogcmVuZGVyTGlzdE1hcmtlciA9IGR5
bmFtaWNEb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPihyZW5kZXJCb3gpKQogICAgICAgICAgICAg
cmV0dXJuICFyZW5kZXJMaXN0TWFya2VyLT5pc0ltYWdlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>475833</attachid>
            <date>2025-07-09 15:33:16 -0700</date>
            <delta_ts>2025-07-14 16:12:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-295663-20250709153315.patch</filename>
            <type>text/plain</type>
            <size>79889</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSA3YzRkYTdhZjViYjY5MTgyOGRiYWU3OGVkYWM5N2Y1MTcwYTRmOTc2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFNhdCwgNSBKdWwgMjAyNSAwODowNTowNSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFtDbGVhbnVw
XSBMZXQncyBjYWxsIGJhc2VsaW5lUG9zaXRpb24gb25seSBvbiBpbi1mbG93IGlubGluZQogbGV2
ZWwgYm94ZXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5NTY2MwoK
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpGbG9hdHMgYW5kIG91dC1vZi1mbG93IGJveGVz
IGRvIG5vdCBwYXJ0aWNpcGF0ZSBpbiBiYXNlbGluZSBhbGlnbm1lbnQgKG9yIGFueSBhbGlnbm1l
bnQgZm9yIHRoYXQgbWF0dGVyKS4KCiogU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcDoKKFdlYkNvcmU6OkxheW91
dEludGVncmF0aW9uOjpsYXN0SW5mbG93Qm94QmFzZWxpbmUpOgooV2ViQ29yZTo6TGF5b3V0SW50
ZWdyYXRpb246OmlubGluZUJsb2NrQmFzZWxpbmUpOgooV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OmJhc2VsaW5lUG9zaXRpb24pOgooV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OnNldElu
dGVncmF0aW9uQmFzZWxpbmUpOgooV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkJveEdlb21l
dHJ5VXBkYXRlcjo6dXBkYXRlQm94R2VvbWV0cnlBZnRlckludGVncmF0aW9uTGF5b3V0KToKKiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwOgooV2ViQ29y
ZTo6Y29tcHV0ZUNhcmV0UmVjdEZvckVtcHR5RWxlbWVudCk6CiogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwOgooV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6
bGF5b3V0TGluZUJveGVzKToKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXR0YWNo
bWVudC5jcHA6CihXZWJDb3JlOjpSZW5kZXJBdHRhY2htZW50OjpiYXNlbGluZVBvc2l0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXR0YWNobWVu
dC5oOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CihXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGluZUhlaWdodCBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6aW5saW5lQmxvY2tCYXNlbGluZSBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmg6CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHA6CihXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrV2l0aE5v
Q2hpbGRyZW4pOgooV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRJbkZsb3dDaGlsZHJl
bik6CihXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEluaXRpYWxMZXR0ZXJQb3NpdGlv
bik6CihXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNvbnRlbnQpOgooV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjppbmxpbmVCbG9ja0Jhc2VsaW5lIGNvbnN0KToKKiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CiogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CihXZWJDb3JlOjpSZW5kZXJCb3g6OmxpbmVIZWlnaHQg
Y29uc3QpOgooV2ViQ29yZTo6UmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94Lmg6CihXZWJDb3JlOjpS
ZW5kZXJCb3g6OmlubGluZUJsb2NrQmFzZWxpbmUgY29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hJbmxpbmVzLmg6CihXZWJDb3JlOjpSZW5kZXJCb3g6Om1hcmdpbkJv
eExvZ2ljYWxIZWlnaHQgY29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24u
Y3BwOgooV2ViQ29yZTo6c3ludGhlc2l6ZWRCYXNlbGluZUZyb21Db250ZW50Qm94KTogRGVsZXRl
ZC4KKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6IERlbGV0
ZWQuCiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5oOgoqIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgooV2ViQ29y
ZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsQm94KToKKFdl
YkNvcmU6OlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCb3gpOgoq
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CihX
ZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRDb250cm9sKToKKiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgooV2ViQ29yZTo6UmVuZGVy
RmxleGlibGVCb3g6OnBlcmZvcm1GbGV4TGF5b3V0KToKKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxl
Qm94OjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKFdlYkNvcmU6OlJlbmRlckZs
ZXhpYmxlQm94OjppbmxpbmVCbG9ja0Jhc2VsaW5lIGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaDoKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyR3JpZC5jcHA6CihXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlvdXRHcmlkKToKKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OmxheW91dE1hc29ucnkpOgooV2ViQ29yZTo6UmVuZGVyR3JpZDo6YmFz
ZWxpbmVQb3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpSZW5kZXJHcmlkOjppbmxp
bmVCbG9ja0Jhc2VsaW5lIGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5oOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CihXZWJD
b3JlOjpSZW5kZXJJbWFnZTo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCiogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmg6CiogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CihXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxpbmVIZWln
aHQgY29uc3QpOiBEZWxldGVkLgooV2ViQ29yZTo6UmVuZGVySW5saW5lOjpiYXNlbGluZVBvc2l0
aW9uIGNvbnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmg6CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHA6CihX
ZWJDb3JlOjpSZW5kZXJMaW5lQnJlYWs6OnVwZGF0ZUZyb21TdHlsZSk6CihXZWJDb3JlOjpSZW5k
ZXJMaW5lQnJlYWs6OmxpbmVIZWlnaHQgY29uc3QpOiBEZWxldGVkLgooV2ViQ29yZTo6UmVuZGVy
TGluZUJyZWFrOjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmg6CiogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwOgooV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6YmFzZWxpbmVQ
b3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaDoKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHA6CihXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpsaW5lSGVpZ2h0IGNvbnN0KTogRGVsZXRl
ZC4KKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOiBE
ZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmg6Ciog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CiogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6CihXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmJh
c2VsaW5lUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuaDoKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwOgooV2ViQ29yZTo6UmVuZGVyVGFibGU6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOiBEZWxl
dGVkLgooV2ViQ29yZTo6UmVuZGVyVGFibGU6OmlubGluZUJsb2NrQmFzZWxpbmUgY29uc3QpOgoq
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgoqIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CihXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQgY29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5oOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CihXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZTo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmg6CiogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmNwcDoKKFdlYkNvcmU6OkxpbmVXaWR0aDo6dXBk
YXRlQXZhaWxhYmxlV2lkdGgpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MQmxvY2suY3BwOgooV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmJhc2VsaW5l
UG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MQmxvY2suaDoKLS0tCiAuLi4vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9t
ZXRyeVVwZGF0ZXIuY3BwICAgfCAyNjQgKysrKysrKysrKysrKysrKystCiAuLi4vcmVuZGVyaW5n
L0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcCAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcCB8ICAgMiArLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuY3BwIHwgIDE0IC0KIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJBdHRhY2htZW50LmggICB8ICAgMiAtCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwICAgICAgfCAxMDEgLS0tLS0tLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmggICAgICAgIHwgICA1IC0KIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwICB8ICA3MSArLS0tLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oICAgIHwgICAxIC0KIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwICAgICAgICB8ICAxNiArLQogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oICAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94SW5saW5lcy5oICAgfCAgIDEgKwogLi4uL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmggIHwgICA1IC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCdXR0b24uY3BwICAgICB8ICAxNiAtLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJ1dHRvbi5oICAgICAgIHwgICAyIC0KIC4uLi9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcCB8ICAgNCArLQogLi4uL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAgICAgIHwgICA0ICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guY3BwICAgfCAgMTggKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5oICB8ICAgMiAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5jcHAgICAgICAgfCAgMjAgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmggICAgICAgICB8ICAgMiAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwICAgICAgfCAgMTIgLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmggICAgICAgIHwgICAyIC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwICAgICB8ICAxMyAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgg
ICAgICAgfCAgIDMgLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5j
cHAgIHwgIDIxIC0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgg
ICAgfCAgIDUgLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwICAg
IHwgIDEyIC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmggICAgICB8
ICAgMSAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAgfCAg
MTQgLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaCAgIHwgICAy
IC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oICAgICB8ICAgNyAt
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCAgICAgfCAgIDYgLQog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oICAgICAgIHwgICAxIC0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgICAgICB8ICAxMyAtCiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCAgICAgICAgfCAgIDIgLQogLi4uL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCAgIHwgICAyICstCiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaCAgfCAgIDUgLQogLi4uL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAgIHwgICA1IC0KIC4uLi9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAgICB8ICAgMSAtCiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguY3BwICAgfCAgIDIgKy0KIC4uLi9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcCAgICB8ICAgOCAtCiAuLi4vcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oICAgICAgfCAgIDIgLQogNDMgZmlsZXMgY2hhbmdlZCwg
Mjg1IGluc2VydGlvbnMoKyksIDQxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVw
ZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcAppbmRleCBjNWExNWQwN2MzODUuLjM1NzcxN2Ex
MTBkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3Bw
CkBAIC0yOCwzMCArMjgsNDIgQEAKIAogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb25zdHJhaW50cy5o
IgogI2luY2x1ZGUgIklubGluZVdhbGtlci5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9u
TGluZUxheW91dC5oIgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKKyNpZiBFTkFC
TEUoTVVMVElfUkVQUkVTRU5UQVRJT05fSEVJQykKKyNpbmNsdWRlICJNdWx0aVJlcHJlc2VudGF0
aW9uSEVJQ01ldHJpY3MuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJCb3hJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudElubGluZXMuaCIKKyNpbmNs
dWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgi
CisjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgorI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5o
IgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
aW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTWF0aE1MQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUg
IlJlbmRlclNsaWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJl
bmRlclZpZXdUcmFuc2l0aW9uQ2FwdHVyZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1l
c3BhY2UgTGF5b3V0SW50ZWdyYXRpb24gewpAQCAtMjg0LDggKzI5NiwyNDkgQEAgc3RhdGljIGlu
bGluZSBMYXlvdXRTaXplIHNjcm9sbGJhckxvZ2ljYWxTaXplKGNvbnN0IFJlbmRlckJveCYgcmVu
ZGVyZXIpCiAgICAgcmV0dXJuIHsgaG9yaXpvbnRhbFNwYWNlUmVzZXJ2ZWRGb3JTY3JvbGxiYXIs
IHZlcnRpY2FsU3BhY2VSZXNlcnZlZEZvclNjcm9sbGJhciB9OwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgc2V0SW50ZWdyYXRpb25CYXNlbGluZShjb25zdCBSZW5kZXJCb3gmIHJlbmRlckJveCwg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGNvbnN0IFJlbmRlckJveCYpOworCitzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IGxhc3RJbmZsb3dCb3hCYXNlbGluZShhdXRvJiBibG9ja0NvbnRhaW5lcikK
K3sKKyAgICBhdXRvIHdyaXRpbmdNb2RlID0gYmxvY2tDb250YWluZXIuY29udGFpbmluZ0Jsb2Nr
KCktPndyaXRpbmdNb2RlKCk7CisgICAgYXV0byBoYXZlSW5GbG93Q2hpbGQgPSBmYWxzZTsKKyAg
ICBmb3IgKGF1dG8qIGJveCA9IGJsb2NrQ29udGFpbmVyLmxhc3RDaGlsZEJveCgpOyBib3g7IGJv
eCA9IGJveC0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKGJveC0+aXNGbG9h
dGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGhhdmVJbkZsb3dDaGlsZCA9IHRydWU7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGlu
bGluZUJsb2NrQmFzZWxpbmUoKmJveCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7
IChib3gtPmxvZ2ljYWxUb3AoKSArIHJlc3VsdC52YWx1ZSgpKS50b0ludCgpIH07IC8vIFRyYW5z
bGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICB9CisKKyAgICBpZiAoIWhhdmVJbkZs
b3dDaGlsZCAmJiBibG9ja0NvbnRhaW5lci5oYXNMaW5lSWZFbXB0eSgpKSB7CisgICAgICAgIGF1
dG8mIGZvbnRNZXRyaWNzID0gYmxvY2tDb250YWluZXIuZmlyc3RMaW5lU3R5bGUoKS5tZXRyaWNz
T2ZQcmltYXJ5Rm9udCgpOworICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IExheW91dFVuaXQo
Zm9udE1ldHJpY3MuaW50QXNjZW50KCkKKyAgICAgICAgICAgICsgKGJsb2NrQ29udGFpbmVyLmxp
bmVIZWlnaHQoKSAtIGZvbnRNZXRyaWNzLmludEhlaWdodCgpKSAvIDIKKyAgICAgICAgICAgICsg
KHdyaXRpbmdNb2RlLmlzSG9yaXpvbnRhbCgpID8gYmxvY2tDb250YWluZXIuYm9yZGVyVG9wKCkg
KyBibG9ja0NvbnRhaW5lci5wYWRkaW5nVG9wKCkgOiBibG9ja0NvbnRhaW5lci5ib3JkZXJSaWdo
dCgpICsgYmxvY2tDb250YWluZXIucGFkZGluZ1JpZ2h0KCkpKS50b0ludCgpIH07CisgICAgfQor
ICAgIHJldHVybiB7IH07Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlu
bGluZUJsb2NrQmFzZWxpbmUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCit7CisgICAgYXV0
byB3cml0aW5nTW9kZSA9IHJlbmRlckJveC5jb250YWluaW5nQmxvY2soKS0+d3JpdGluZ01vZGUo
KTsKKyAgICBhdXRvIGxpbmVEaXJlY3Rpb24gPSB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/
IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lOworCisgICAgaWYgKGlzPFJlbmRlclRhYmxl
PihyZW5kZXJCb3gpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKChpczxSZW5kZXJG
bGV4aWJsZUJveD4ocmVuZGVyQm94KSB8fCBpczxSZW5kZXJHcmlkPihyZW5kZXJCb3gpKSAmJiAh
aXM8UmVuZGVyTWVudUxpc3Q+KHJlbmRlckJveCkgJiYgIWlzPFJlbmRlclRleHRDb250cm9sSW5u
ZXJDb250YWluZXI+KHJlbmRlckJveCkpCisgICAgICAgIHJldHVybiByZW5kZXJCb3guZmlyc3RM
aW5lQmFzZWxpbmUoKTsKKworICAgIGlmIChyZW5kZXJCb3guaXNXcml0aW5nTW9kZVJvb3QoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChyZW5kZXJCb3guc2hvdWxkQXBwbHlMYXlv
dXRDb250YWlubWVudCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJCb3guaXNJbmxpbmUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBzeW50aGVzaXplZEJhc2VsaW5lKHJlbmRlckJveCwgKnJlbmRlckJv
eC5wYXJlbnRTdHlsZSgpLCBsaW5lRGlyZWN0aW9uLCBCb3JkZXJCb3gpICsgKHdyaXRpbmdNb2Rl
LmlzSG9yaXpvbnRhbCgpID8gcmVuZGVyQm94Lm1hcmdpbkJvdHRvbSgpIDogcmVuZGVyQm94Lm1h
cmdpbkxlZnQoKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKENoZWNr
ZWRQdHIgaW5uZXJDb250YWluZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xJ
bm5lckNvbnRhaW5lcj4ocmVuZGVyQm94KSkKKyAgICAgICAgcmV0dXJuIGxhc3RJbmZsb3dCb3hC
YXNlbGluZSgqaW5uZXJDb250YWluZXIpOworCisgICAgaWYgKENoZWNrZWRQdHIgYmxvY2tGbG93
ID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyQm94KSkgeworICAgICAg
ICBSZWZQdHIgZWxlbWVudCA9IGJsb2NrRmxvdy0+ZWxlbWVudCgpOworICAgICAgICBhdXRvIGlz
Rm9ybUNvbnRyb2xFbGVtZW50ID0gZWxlbWVudCAmJiBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpOworICAgICAgICBpZiAoYmxvY2tGbG93LT5zdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNw
bGF5VHlwZTo6SW5saW5lQmxvY2spIHsKKyAgICAgICAgICAgIC8vIFRoZSBiYXNlbGluZSBvZiBh
biAnaW5saW5lLWJsb2NrJyBpcyB0aGUgYmFzZWxpbmUgb2YgaXRzIGxhc3QgbGluZSBib3ggaW4g
dGhlIG5vcm1hbCBmbG93LCB1bmxlc3MgaXQgaGFzIGVpdGhlciBubyBpbi1mbG93IGxpbmUgYm94
ZXMgb3IgaWYgaXRzICdvdmVyZmxvdycKKyAgICAgICAgICAgIC8vIHByb3BlcnR5IGhhcyBhIGNv
bXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ3Zpc2libGUnLiBzZWUgaHR0cHM6Ly93d3cudzMub3Jn
L1RSL0NTUzIyL3Zpc3VkZXQuaHRtbAorICAgICAgICAgICAgYXV0byBzaG91bGRTeW50aGVzaXpl
QmFzZWxpbmUgPSAhYmxvY2tGbG93LT5zdHlsZSgpLmlzT3ZlcmZsb3dWaXNpYmxlKCkgJiYgIWlz
Rm9ybUNvbnRyb2xFbGVtZW50ICYmICFpczxSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s+KCpi
bG9ja0Zsb3cpOworICAgICAgICAgICAgaWYgKHNob3VsZFN5bnRoZXNpemVCYXNlbGluZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gTm90ZSB0
aGF0IGhlcmUgd2Ugb25seSB0YWtlIHRoZSBsZWZ0IGFuZCBib3R0b20gaW50byBjb25zaWRlcmF0
aW9uLiBPdXIgY2FsbGVyIHRha2VzIHRoZSByaWdodCBhbmQgdG9wIGludG8gY29uc2lkZXJhdGlv
bi4KKyAgICAgICAgTGF5b3V0VW5pdCBsYXN0QmFzZWxpbmU7CisgICAgICAgIGlmICghYmxvY2tG
bG93LT5jaGlsZHJlbklubGluZSgpKSB7CisgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFz
ZWxpbmUgPSBsYXN0SW5mbG93Qm94QmFzZWxpbmUoKmJsb2NrRmxvdyk7CisgICAgICAgICAgICBp
ZiAoIWlubGluZUJsb2NrQmFzZWxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgICAgIGxhc3RCYXNlbGluZSA9ICppbmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAgICB9
IGVsc2UgaWYgKCFibG9ja0Zsb3ctPmhhc0xpbmVzKCkpIHsKKyAgICAgICAgICAgIGlmICghYmxv
Y2tGbG93LT5oYXNMaW5lSWZFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IGJsb2NrRmxvdy0+Zmlyc3RMaW5lU3R5bGUo
KS5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpOworICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQg
eyBMYXlvdXRVbml0KGZvbnRNZXRyaWNzLmludEFzY2VudCgpCisgICAgICAgICAgICAgICAgKyAo
YmxvY2tGbG93LT5saW5lSGVpZ2h0KCkgLSBmb250TWV0cmljcy5pbnRIZWlnaHQoKSkgLyAyCisg
ICAgICAgICAgICAgICAgKyAobGluZURpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGJsb2Nr
Rmxvdy0+Ym9yZGVyVG9wKCkgKyBibG9ja0Zsb3ctPnBhZGRpbmdUb3AoKSA6IGJsb2NrRmxvdy0+
Ym9yZGVyUmlnaHQoKSArIGJsb2NrRmxvdy0+cGFkZGluZ1JpZ2h0KCkpKS50b0ludCgpIH07Cisg
ICAgICAgIH0gZWxzZSBpZiAoYmxvY2tGbG93LT5zdmdUZXh0TGF5b3V0KCkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHN0eWxlID0gYmxvY2tGbG93LT5maXJzdExpbmVTdHlsZSgpOworICAgICAgICAg
ICAgLy8gTGVnYWN5SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24gd2ls
bCBmbGlwIGxpbmVzIGluIGNhc2Ugb2YgdmVydGljYWxMUiBtb2RlLCBzbyB3ZSBjYW4gYXNzdW1l
IHZlcnRpY2FsUkwgZm9yIG5vdy4KKyAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IHN0eWxlLm1l
dHJpY3NPZlByaW1hcnlGb250KCkuaW50QXNjZW50KGJsb2NrRmxvdy0+bGVnYWN5Um9vdEJveCgp
LT5iYXNlbGluZVR5cGUoKSkgKyAoc3R5bGUud3JpdGluZ01vZGUoKS5pc0xpbmVJbnZlcnRlZCgp
ID8gYmxvY2tGbG93LT5sb2dpY2FsSGVpZ2h0KCkgLSBibG9ja0Zsb3ctPmxlZ2FjeVJvb3RCb3go
KS0+bG9naWNhbEJvdHRvbSgpIDogYmxvY2tGbG93LT5sZWdhY3lSb290Qm94KCktPmxvZ2ljYWxU
b3AoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYXV0byogaW5saW5lTGF5b3V0ID0gYmxvY2tGbG93
LT5pbmxpbmVMYXlvdXQoKSkKKyAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IGZsb29yVG9JbnQo
aW5saW5lTGF5b3V0LT5sYXN0TGluZUxvZ2ljYWxCYXNlbGluZSgpKTsKKworICAgICAgICBpZiAo
YmxvY2tGbG93LT5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpWaXNpYmxlKQorICAg
ICAgICAgICAgcmV0dXJuIGxhc3RCYXNlbGluZTsKKworICAgICAgICBhdXRvIGJveEhlaWdodCA9
IHN5bnRoZXNpemVkQmFzZWxpbmUocmVuZGVyQm94LCAqYmxvY2tGbG93LT5wYXJlbnRTdHlsZSgp
LCBsaW5lRGlyZWN0aW9uLCBCb3JkZXJCb3gpICsgKHdyaXRpbmdNb2RlLmlzSG9yaXpvbnRhbCgp
ID8gYmxvY2tGbG93LT5tYXJnaW5Cb3R0b20oKSA6IGJsb2NrRmxvdy0+bWFyZ2luTGVmdCgpKTsK
KyAgICAgICAgLy8gV2hpbGUgY3NzLWFsaWduLTMgZGVmaW5lcyB0aGUgbGFzdCBiYXNlbGluZSBm
b3JtIGJsb2NrIGNvbnRhaW5lcnMgd2hpY2ggYXJlCisgICAgICAgIC8vIHNjcm9sbCBjb250YWlu
ZXJzICh3aXRoIGFuIGluaXRpYWwgYmFzZWxpbmUtc291cmNlIHZhbHVlKSBhcyB0aGUgYmxvY2st
ZW5kIG1hcmdpbgorICAgICAgICAvLyBlZGdlLCB3ZSBpbnN0ZWFkIG1haW50YWluIG91ciBsZWdh
Y3kgYmVoYXZpb3IgZm9yIGZvcm0gY29udHJvbHMgYW5kIGNvbnRlbnQKKyAgICAgICAgLy8gaW5z
aWRlIGZvcm0gY29udHJvbHMgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eS4KKyAgICAgICAgYXV0
byBpc0luRm9ybUNvbnRyb2wgPSBlbGVtZW50ICYmIGVsZW1lbnQtPnNoYWRvd0hvc3QoKSAmJiBl
bGVtZW50LT5zaGFkb3dIb3N0KCktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgIGlm
IChpc0Zvcm1Db250cm9sRWxlbWVudCB8fCBpc0luRm9ybUNvbnRyb2wpCisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptaW4oYm94SGVpZ2h0LCBsYXN0QmFzZWxpbmUpOworICAgICAgICByZXR1cm4g
Ym94SGVpZ2h0OworICAgIH0KKworICAgIGlmIChDaGVja2VkUHRyIGJsb2NrUmVuZGVyZXIgPSBk
eW5hbWljRG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlckJveCkpCisgICAgICAgIHJldHVybiBs
YXN0SW5mbG93Qm94QmFzZWxpbmUoKmJsb2NrUmVuZGVyZXIpOworCisgICAgcmV0dXJuIHsgfTsK
K30KKworTGF5b3V0VW5pdCBzdGF0aWMgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gm
IHJlbmRlckJveCkKK3sKKyAgICBBU1NFUlQocmVuZGVyQm94LmlzSW5GbG93KCkpOworCisgICAg
YXV0byB3cml0aW5nTW9kZSA9IHJlbmRlckJveC5jb250YWluaW5nQmxvY2soKS0+d3JpdGluZ01v
ZGUoKTsKKyAgICBhdXRvIG1hcmdpbkJlZm9yZSA9IHdyaXRpbmdNb2RlLmlzSG9yaXpvbnRhbCgp
ID8gcmVuZGVyQm94Lm1hcmdpblRvcCgpIDogcmVuZGVyQm94Lm1hcmdpblJpZ2h0KCk7CisKKyAg
ICBpZiAoaXM8UmVuZGVySUZyYW1lPihyZW5kZXJCb3gpCisgICAgICAgIHx8IGlzPFJlbmRlckVt
YmVkZGVkT2JqZWN0PihyZW5kZXJCb3gpCisgICAgICAgIHx8IGlzPExlZ2FjeVJlbmRlclNWR1Jv
b3Q+KHJlbmRlckJveCkKKyAgICAgICAgfHwgaXM8UmVuZGVySFRNTENhbnZhcz4ocmVuZGVyQm94
KQorICAgICAgICB8fCBpczxSZW5kZXJWaWV3VHJhbnNpdGlvbkNhcHR1cmU+KHJlbmRlckJveCkp
CisgICAgICAgIHJldHVybiByb3VuZFRvSW50KHJlbmRlckJveC5tYXJnaW5Cb3hMb2dpY2FsSGVp
Z2h0KHdyaXRpbmdNb2RlKSk7CisKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAg
IGlmIChDaGVja2VkUHRyIHJlbmRlcmVyID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckF0dGFjaG1l
bnQ+KHJlbmRlckJveCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhc2VsaW5lRWxlbWVudCA9IHJl
bmRlcmVyLT5hdHRhY2htZW50RWxlbWVudCgpLndpZGVMYXlvdXRJbWFnZUVsZW1lbnQoKSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8qIGJhc2VsaW5lRWxlbWVudFJlbmRlckJveCA9IGJhc2VsaW5l
RWxlbWVudC0+cmVuZGVyQm94KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBi
b3R0b20gb2YgdGhlIGltYWdlIGFzc3VtaW5nIGl0IGlzIHZlcnRpY2FsbHkgY2VudGVyZWQuCisg
ICAgICAgICAgICAgICAgcmV0dXJuIChyZW5kZXJlci0+aGVpZ2h0KCkgKyBiYXNlbGluZUVsZW1l
bnRSZW5kZXJCb3gtPmhlaWdodCgpKSAvIDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBGYWxsYmFjayB0byB0aGUgYm90dG9tIG9mIHRoZSBhdHRhY2htZW50IGlmIHRoZXJlIGlzIG5v
IGltYWdlLgorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5oZWlnaHQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPnRoZW1lKCkuYXR0YWNobWVudEJhc2VsaW5lKCpy
ZW5kZXJlcik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoQ2hlY2tlZFB0ciByZW5kZXJlciA9
IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCdXR0b24+KHJlbmRlckJveCkpIHsKKyAgICAgICAgLy8g
V2UgY2Fubm90IHJlbHkgb24gUmVuZGVyRmxleGlibGVCb3g6OmJhc2VsaW5lUG9zaXRpb24oKSBi
ZWNhdXNlIG9mIGZsZXhib3hlcyBoYXZlIHNvbWUgc3BlY2lhbCBiZWhhdmlvcgorICAgICAgICAv
LyByZWdhcmRpbmcgYmFzZWxpbmVzIHRoYXQgc2hvdWxkbid0IGFwcGx5IHRvIGJ1dHRvbnMuCisg
ICAgICAgIGlmIChhdXRvIGJhc2VsaW5lID0gcmVuZGVyQm94LmZpcnN0TGluZUJhc2VsaW5lKCkp
CisgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3JlICsgKmJhc2VsaW5lOworICAgICAgICBh
dXRvIGNvbnRlbnRCb3hCb3R0b20gPSB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IHJlbmRl
cmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyByZW5kZXJlci0+Y29u
dGVudEJveEhlaWdodCgpIDogcmVuZGVyZXItPmJvcmRlclJpZ2h0KCkgKyByZW5kZXJlci0+cGFk
ZGluZ1JpZ2h0KCkgKyByZW5kZXJlci0+Y29udGVudEJveFdpZHRoKCk7CisgICAgICAgIHJldHVy
biBtYXJnaW5CZWZvcmUgKyBjb250ZW50Qm94Qm90dG9tOworICAgIH0KKworICAgIGlmIChDaGVj
a2VkUHRyIHJlbmRlcmVyID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckltYWdlPihyZW5kZXJCb3gp
KSB7CisgICAgICAgIGF1dG8gb2Zmc2V0ID0gTGF5b3V0VW5pdCB7IH07CisjaWYgRU5BQkxFKE1V
TFRJX1JFUFJFU0VOVEFUSU9OX0hFSUMpCisgICAgICAgIGlmIChyZW5kZXJlci0+aXNNdWx0aVJl
cHJlc2VudGF0aW9uSEVJQygpKSB7CisgICAgICAgICAgICBhdXRvIG1ldHJpY3MgPSByZW5kZXJl
ci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCktPm1ldHJpY3NGb3JNdWx0aVJl
cHJlc2VudGF0aW9uSEVJQygpOworICAgICAgICAgICAgb2Zmc2V0ID0gTGF5b3V0VW5pdDo6ZnJv
bUZsb2F0Um91bmQobWV0cmljcy5kZXNjZW50KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAg
IHJldHVybiByb3VuZFRvSW50KHJlbmRlcmVyLT5tYXJnaW5Cb3hMb2dpY2FsSGVpZ2h0KHdyaXRp
bmdNb2RlKSkgLSBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKENoZWNrZWRQdHIgcmVuZGVyZXIg
PSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkgeworICAgICAgICAv
LyBGSVhNRTogVGhpcyBoYXJkY29kZWQgYmFzZWxpbmVBZGp1c3RtZW50IGlzIHdoYXQgd2UgdXNl
ZCB0byBkbyBmb3IgdGhlIG9sZAorICAgICAgICAvLyB3aWRnZXQsIGJ1dCBJJ20gbm90IHN1cmUg
dGhpcyBpcyByaWdodCBmb3IgdGhlIG5ldyBjb250cm9sLgorICAgICAgICBjb25zdCBpbnQgYmFz
ZWxpbmVBZGp1c3RtZW50ID0gNzsKKyAgICAgICAgYXV0byBiYXNlbGluZSA9IHJvdW5kVG9JbnQo
cmVuZGVyZXItPm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKKyAgICAgICAg
aWYgKHJlbmRlcmVyLT5zaG91bGRBcHBseUxheW91dENvbnRhaW5tZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gYmFzZWxpbmU7CisgICAgICAgIHJldHVybiBiYXNlbGluZSAtIGJhc2VsaW5lQWRq
dXN0bWVudDsKKyAgICB9CisKKyAgICBpZiAoQ2hlY2tlZFB0ciByZW5kZXJlciA9IGR5bmFtaWNE
b3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZT4ocmVuZGVyQm94KSkKKyAgICAgICAg
cmV0dXJuIHJvdW5kVG9JbnQocmVuZGVyZXItPm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGlu
Z01vZGUpKTsKKworICAgIGlmIChDaGVja2VkUHRyIHJlbmRlcmVyID0gZHluYW1pY0Rvd25jYXN0
PFJlbmRlclNsaWRlcj4ocmVuZGVyQm94KSkgeworICAgICAgICAvLyBGSVhNRTogUGF0Y2ggdGhp
cyBmdW5jdGlvbiBmb3Igd3JpdGluZy1tb2RlLgorICAgICAgICByZXR1cm4gcmVuZGVyZXItPmhl
aWdodCgpICsgcmVuZGVyZXItPm1hcmdpblRvcCgpOworICAgIH0KKworICAgIGlmIChDaGVja2Vk
UHRyIHJlbmRlcmVyID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlclRhYmxlPihyZW5kZXJCb3gpKSB7
CisgICAgICAgIGlmIChhdXRvIGJhc2VsaW5lUG9zID0gcmVuZGVyQm94LmZpcnN0TGluZUJhc2Vs
aW5lKCkpCisgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3JlICsgKmJhc2VsaW5lUG9zOwor
ICAgICAgICByZXR1cm4gcm91bmRUb0ludChyZW5kZXJlci0+bWFyZ2luQm94TG9naWNhbEhlaWdo
dCh3cml0aW5nTW9kZSkpOworICAgIH0KKworICAgIGlmICgoaXM8UmVuZGVyRmxleGlibGVCb3g+
KHJlbmRlckJveCkgfHwgaXM8UmVuZGVyR3JpZD4ocmVuZGVyQm94KSkgJiYgIWlzPFJlbmRlck1l
bnVMaXN0PihyZW5kZXJCb3gpKSB7CisgICAgICAgIGlmIChhdXRvIGJhc2VsaW5lID0gcmVuZGVy
Qm94LmZpcnN0TGluZUJhc2VsaW5lKCkpCisgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3Jl
LnRvSW50KCkgKyAqYmFzZWxpbmU7CisgICAgICAgIHJldHVybiBzeW50aGVzaXplZEJhc2VsaW5l
KHJlbmRlckJveCwgKnJlbmRlckJveC5wYXJlbnRTdHlsZSgpLCB3cml0aW5nTW9kZS5pc0hvcml6
b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBCb3JkZXJCb3gpICsgcmVu
ZGVyQm94Lm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsKKyAgICB9CisKKyAgICBpZiAocmVuZGVyQm94
LnN0eWxlKCkuaGFzVXNlZEFwcGVhcmFuY2UoKSAmJiAhcmVuZGVyQm94LnRoZW1lKCkuaXNDb250
cm9sQ29udGFpbmVyKHJlbmRlckJveC5zdHlsZSgpLnVzZWRBcHBlYXJhbmNlKCkpKSB7CisgICAg
ICAgIC8vIEZvciAibGVhZiIgdGhlbWUgb2JqZWN0cywgbGV0IHRoZSB0aGVtZSBkZWNpZGUgd2hh
dCB0aGUgYmFzZWxpbmUgcG9zaXRpb24gaXMuCisgICAgICAgIHJldHVybiByZW5kZXJCb3gudGhl
bWUoKS5iYXNlbGluZVBvc2l0aW9uKHJlbmRlckJveCk7CisgICAgfQorCisgICAgaWYgKENoZWNr
ZWRQdHIgcmVuZGVyZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyTGlzdE1hcmtlcj4ocmVuZGVy
Qm94KSkgeworICAgICAgICBpZiAoQ2hlY2tlZFB0ciBsaXN0SXRlbSA9IHJlbmRlcmVyLT5saXN0
SXRlbSgpOyBsaXN0SXRlbSAmJiAhcmVuZGVyZXItPmlzSW1hZ2UoKSkgeworICAgICAgICAgICAg
YXV0byYgZm9udE1ldHJpY3MgPSByZW5kZXJlci0+c3R5bGUoKS5tZXRyaWNzT2ZQcmltYXJ5Rm9u
dCgpOworICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBmb250TWV0cmljcy5pbnRBc2Nl
bnQoKSArIChyZW5kZXJlci0+bGluZUhlaWdodCgpIC0gZm9udE1ldHJpY3MuaW50SGVpZ2h0KCkp
IC8gMiB9LnRvSW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJvdW5kVG9JbnQocmVu
ZGVyQm94Lm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoTUFUSE1MKQorICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4ocmVuZGVyQm94
KSkgeworICAgICAgICBpZiAoYXV0byBiYXNlbGluZSA9IHJlbmRlckJveC5maXJzdExpbmVCYXNl
bGluZSgpKQorICAgICAgICAgICAgcmV0dXJuICpiYXNlbGluZTsKKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gcmVndWxhciBibG9jayBsZXZlbCBiYXNlbGluZS4KKyAgICB9CisjZW5kaWYKKworICAg
IGlmIChDaGVja2VkUHRyIHJlbmRlcmVyID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJsb2NrPihy
ZW5kZXJCb3gpKSB7CisgICAgICAgIC8vIENTUzIuMSBzdGF0ZXMgdGhhdCB0aGUgYmFzZWxpbmUg
b2YgYW4gaW5saW5lIGJsb2NrIGlzIHRoZSBiYXNlbGluZSBvZiB0aGUgbGFzdCBsaW5lIGJveCBp
bgorICAgICAgICAvLyB0aGUgbm9ybWFsIGZsb3cuIFdlIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBt
YXJxdWVlcywgc2luY2UgdGhlaXIgYmFzZWxpbmVzIGFyZSBtZWFuaW5nbGVzcworICAgICAgICAv
LyAodGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiBUaGlzIG1hdGNoZXMgV2luSUUgYXMg
d2VsbCwgd2hpY2gganVzdCBib3R0b20tYWxpZ25zIHRoZW0uCisgICAgICAgIC8vIFdlIGFsc28g
Z2l2ZSB1cCBvbiBmaW5kaW5nIGEgYmFzZWxpbmUgaWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9s
bGJhciwgb3IgaWYgd2UgYXJlIHNjcm9sbGVkCisgICAgICAgIC8vIHZlcnRpY2FsbHkgKGUuZy4s
IGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayB0aGF0IGhhcyBoYWQgc2Nyb2xsVG9wIG1vdmVkKS4K
KyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFsmXSB7CisgICAgICAgICAgICBpZiAocmVu
ZGVyZXItPmlzV3JpdGluZ01vZGVSb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgICAgIENoZWNrZWRQdHIgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5
ZXIoKSA/IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAg
ICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEtPm1hcnF1ZWUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKHdyaXRpbmdNb2RlLmlz
SG9yaXpvbnRhbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYS0+dmVy
dGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT2Zmc2V0KCkueSgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkg
fHwgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAoIWlnbm9yZUJhc2VsaW5lKCkpIHsKKyAgICAgICAgICAgIGF1dG8gaW5saW5lQmxv
Y2tCYXNlbGluZVBvc2l0aW9uID0gaW5saW5lQmxvY2tCYXNlbGluZShyZW5kZXJCb3gpOworICAg
ICAgICAgICAgaWYgKGlzPFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveD4ocmVuZGVyQm94KSAm
JiBpbmxpbmVCbG9ja0Jhc2VsaW5lUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAvLyBIaXN0
b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFzZWxpbmVzLiBCdXQgd2UgY2Fu
J3QKKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhpcyBjb2RlIGZyb20gZGVwcmVjYXRlZCBm
bGV4Ym94LCBiZWNhdXNlIGl0IGVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAgLy8gYnJlYWtz
IC13ZWJraXQtbGluZS1jbGFtcCwgd2hpY2ggaXMgdXNlZCBpbiB0aGUgd2lsZCAtLSB3ZSB3b3Vs
ZAorICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgYmFzZWxpbmUgYXMgaWYgLXdlYmtp
dC1saW5lLWNsYW1wIHdhc24ndCB1c2VkLgorICAgICAgICAgICAgICAgIC8vIEZvciBzaW1wbGlj
aXR5LCB3ZSB1c2UgdGhpcyBmb3IgYWxsIHVzZXMgb2YgZGVwcmVjYXRlZCBmbGV4Ym94LgorICAg
ICAgICAgICAgICAgIGF1dG8gYm90dG9tT2ZDb250ZW50ID0gcmVuZGVyQm94LmJvcmRlckJlZm9y
ZSgpICsgcmVuZGVyQm94LnBhZGRpbmdCZWZvcmUoKSArIHJlbmRlckJveC5jb250ZW50Qm94TG9n
aWNhbEhlaWdodCgpOworICAgICAgICAgICAgICAgIGlmICgqaW5saW5lQmxvY2tCYXNlbGluZVBv
c2l0aW9uID4gYm90dG9tT2ZDb250ZW50KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm91
bmRUb0ludChyZW5kZXJCb3gubWFyZ2luQm94TG9naWNhbEhlaWdodCh3cml0aW5nTW9kZSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlubGluZUJsb2NrQmFzZWxpbmVQb3NpdGlv
bikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3JlICsgKmlubGluZUJsb2NrQmFz
ZWxpbmVQb3NpdGlvbjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcm91bmRUb0ludChy
ZW5kZXJCb3gubWFyZ2luQm94TG9naWNhbEhlaWdodCh3cml0aW5nTW9kZSkpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgc2V0SW50ZWdyYXRpb25CYXNlbGluZShjb25zdCBSZW5kZXJCb3gmIHJl
bmRlckJveCkKIHsKKyAgICBpZiAocmVuZGVyQm94LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0
aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBoYXNOb25TeW50aGV0aWNCYXNl
bGluZSA9IFsmXSB7CiAgICAgICAgIGlmIChhdXRvKiByZW5kZXJMaXN0TWFya2VyID0gZHluYW1p
Y0Rvd25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KHJlbmRlckJveCkpCiAgICAgICAgICAgICByZXR1
cm4gIXJlbmRlckxpc3RNYXJrZXItPmlzSW1hZ2UoKTsKQEAgLTMxNSwxMSArNTY4LDggQEAgc3Rh
dGljIGlubGluZSB2b2lkIHNldEludGVncmF0aW9uQmFzZWxpbmUoY29uc3QgUmVuZGVyQm94JiBy
ZW5kZXJCb3gsIFdyaXRpbmdNb2QKICAgICAgICAgcmV0dXJuIGhhc0FwcGFyZWFuY2UgfHwgIWJs
b2NrRmxvdy0+Y2hpbGRyZW5JbmxpbmUoKSB8fCBibG9ja0Zsb3ctPmhhc0xpbmVzKCkgfHwgYmxv
Y2tGbG93LT5oYXNMaW5lSWZFbXB0eSgpOwogICAgIH07CiAKLSAgICBpZiAoIWhhc05vblN5bnRo
ZXRpY0Jhc2VsaW5lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYmFzZWxpbmUgPSBy
ZW5kZXJCb3guYmFzZWxpbmVQb3NpdGlvbihmYWxzZSAvKiBmaXJzdExpbmUgKi8sIHdyaXRpbmdN
b2RlLmlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0
aW9uT25Db250YWluaW5nTGluZSk7Ci0gICAgY29uc3RfY2FzdDxMYXlvdXQ6OkVsZW1lbnRCb3gm
PigqcmVuZGVyQm94LmxheW91dEJveCgpKS5zZXRCYXNlbGluZUZvckludGVncmF0aW9uKGJhc2Vs
aW5lKTsKKyAgICBpZiAoaGFzTm9uU3ludGhldGljQmFzZWxpbmUoKSkKKyAgICAgICAgY29uc3Rf
Y2FzdDxMYXlvdXQ6OkVsZW1lbnRCb3gmPigqcmVuZGVyQm94LmxheW91dEJveCgpKS5zZXRCYXNl
bGluZUZvckludGVncmF0aW9uKGJhc2VsaW5lUG9zaXRpb24ocmVuZGVyQm94KSk7CiB9CiAKIHZv
aWQgQm94R2VvbWV0cnlVcGRhdGVyOjp1cGRhdGVMYXlvdXRCb3hEaW1lbnNpb25zKGNvbnN0IFJl
bmRlckJveCYgcmVuZGVyQm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVdp
ZHRoLCBzdGQ6Om9wdGlvbmFsPExheW91dDo6SW50cmluc2ljV2lkdGhNb2RlPiBpbnRyaW5zaWNX
aWR0aE1vZGUpCkBAIC00ODcsNyArNzM3LDcgQEAgdm9pZCBCb3hHZW9tZXRyeVVwZGF0ZXI6OnVw
ZGF0ZUJveEdlb21ldHJ5QWZ0ZXJJbnRlZ3JhdGlvbkxheW91dChjb25zdCBMYXlvdXQ6OkUKIAog
ICAgIGF1dG8gaW50ZWdyYXRpb25BZGp1c3RtZW50cyA9IFsmXSB7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGVzZSBzaG91bGQgZXZlbnR1YWxseSBiZSBhbGwgYWJzb3JiZWQgYnkgTEZDIGxheW91dC4K
LSAgICAgICAgc2V0SW50ZWdyYXRpb25CYXNlbGluZSgqcmVuZGVyQm94LCB3cml0aW5nTW9kZSgp
KTsKKyAgICAgICAgc2V0SW50ZWdyYXRpb25CYXNlbGluZSgqcmVuZGVyQm94KTsKIAogICAgICAg
ICBpZiAoYXV0byogcmVuZGVyTGlzdE1hcmtlciA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJMaXN0
TWFya2VyPigqcmVuZGVyQm94KSkgewogICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRC
b3gucGFyZW50KCkuc3R5bGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2Fy
ZXRSZWN0Q29tcHV0YXRpb24uY3BwCmluZGV4IDEyYjg1NmVjZWIxNy4uYjY5MTc5NmRjZWUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5j
cHAKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0
Rm9yRW1wdHlFbGVtZW50KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiByZQogICAgIH0KICAg
ICB4ID0gc3RkOjptaW4oeCwgc3RkOjptYXg8TGF5b3V0VW5pdD4obWF4WCAtIGNhcmV0V2lkdGgo
KSwgMCkpOwogCi0gICAgYXV0byBsaW5lSGVpZ2h0ID0gcmVuZGVyZXIubGluZUhlaWdodCh0cnVl
LCB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxM
aW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOworICAgIGF1dG8gbGluZUhlaWdodCA9
IExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoY3VycmVudFN0eWxlLmNvbXB1dGVkTGluZUhlaWdo
dCgpKTsKICAgICBhdXRvIGhlaWdodCA9IHN0ZDo6bWluKGxpbmVIZWlnaHQsIExheW91dFVuaXQg
eyBjdXJyZW50U3R5bGUubWV0cmljc09mUHJpbWFyeUZvbnQoKS5oZWlnaHQoKSB9KTsKICAgICBh
dXRvIHkgPSByZW5kZXJlci5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgKyAobGluZUhlaWdodCA+
IGhlaWdodCA/IChsaW5lSGVpZ2h0IC0gaGVpZ2h0KSAvIDIgOiBMYXlvdXRVbml0IHsgfSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAppbmRleCAy
YjdhNDE2ZDgzNmUuLjQ5ZWEwMzNmMDUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MZWdhY3lMaW5lTGF5b3V0LmNwcApAQCAtNTc2LDcgKzU3Niw3IEBAIHZvaWQgTGVnYWN5TGlu
ZUxheW91dDo6bGF5b3V0TGluZUJveGVzKCkKICAgICB9CiAKICAgICBpZiAoIWxlZ2FjeVJvb3RC
b3goKSAmJiBtX2Zsb3cuaGFzTGluZUlmRW1wdHkoKSkKLSAgICAgICAgbV9mbG93LnNldExvZ2lj
YWxIZWlnaHQobV9mbG93LmxvZ2ljYWxIZWlnaHQoKSArIG1fZmxvdy5saW5lSGVpZ2h0KHRydWUs
IG1fZmxvdy5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0
aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykpOworICAgICAgICBtX2Zsb3cu
c2V0TG9naWNhbEhlaWdodChtX2Zsb3cubG9naWNhbEhlaWdodCgpICsgbV9mbG93LmxpbmVIZWln
aHQoKSk7CiB9CiAKIHZvaWQgTGVnYWN5TGluZUxheW91dDo6YWRkT3ZlcmZsb3dGcm9tSW5saW5l
Q2hpbGRyZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckF0
dGFjaG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQu
Y3BwCmluZGV4IDdjMDAwMWQ1YmZiZC4uNzNkZmE3MzRjNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXR0YWNobWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuY3BwCkBAIC0xMDMsMjAgKzEwMyw2IEBAIHZv
aWQgUmVuZGVyQXR0YWNobWVudDo6bGF5b3V0KCkKICAgICAgICAgbGF5b3V0U2hhZG93Q29udGVu
dChuZXdJbnRyaW5zaWNTaXplKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJBdHRhY2htZW50Ojpi
YXNlbGluZVBvc2l0aW9uKGJvb2wsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
KSBjb25zdAotewotICAgIGlmIChhdXRvKiBiYXNlbGluZUVsZW1lbnQgPSBhdHRhY2htZW50RWxl
bWVudCgpLndpZGVMYXlvdXRJbWFnZUVsZW1lbnQoKSkgewotICAgICAgICBpZiAoYXV0byogYmFz
ZWxpbmVFbGVtZW50UmVuZGVyQm94ID0gYmFzZWxpbmVFbGVtZW50LT5yZW5kZXJCb3goKSkgewot
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZSBhc3N1bWluZyBp
dCBpcyB2ZXJ0aWNhbGx5IGNlbnRlcmVkLgotICAgICAgICAgICAgcmV0dXJuIChoZWlnaHQoKSAr
IGJhc2VsaW5lRWxlbWVudFJlbmRlckJveC0+aGVpZ2h0KCkpIC8gMjsKLSAgICAgICAgfQotICAg
ICAgICAvLyBGYWxsYmFjayB0byB0aGUgYm90dG9tIG9mIHRoZSBhdHRhY2htZW50IGlmIHRoZXJl
IGlzIG5vIGltYWdlLgotICAgICAgICByZXR1cm4gaGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRoZW1lKCkuYXR0YWNobWVudEJhc2VsaW5lKCp0aGlzKTsKLX0KLQogYm9vbCBSZW5kZXJB
dHRhY2htZW50OjpzaG91bGREcmF3Qm9yZGVyKCkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUoKS51
c2VkQXBwZWFyYW5jZSgpID09IFN0eWxlQXBwZWFyYW5jZTo6Qm9yZGVybGVzc0F0dGFjaG1lbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXR0YWNobWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuaAppbmRleCBlNGM1
MmU3YjlhNjguLjA1ZWRhNzA5ZDQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckF0dGFjaG1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQXR0YWNobWVudC5oCkBAIC02NCw4ICs2NCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGxh
eW91dCgpIG92ZXJyaWRlOwogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2ws
IExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKLQog
ICAgIExheW91dFVuaXQgbV9taW5pbXVtSW50cmluc2ljV2lkdGg7CiAgICAgYm9vbCBtX3Nob3Vs
ZERyYXdCb3JkZXIgeyB0cnVlIH07CiAgICAgYm9vbCBtX2hhc1NoYWRvd0NvbnRyb2xzIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDkyMWIx
NDU0NDM3MC4uY2RiOWI1MWE2MTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKQEAgLTI0NzMsNzcgKzI0NzMsNiBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNMaW5l
SWZFbXB0eSgpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC0+aXNSb290RWRp
dGFibGVFbGVtZW50KCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQo
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9u
TW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIC8vIElubGluZSBibG9ja3MgYXJl
IHJlcGxhY2VkIGVsZW1lbnRzLiBPdGhlcndpc2UsIGp1c3QgcGFzcyBvZmYgdG8KLSAgICAvLyB0
aGUgYmFzZSBjbGFzcy4gIElmIHdlJ3JlIGJlaW5nIHF1ZXJpZWQgYXMgdGhvdWdoIHdlJ3JlIHRo
ZSByb290IGxpbmUKLSAgICAvLyBib3gsIHRoZW4gdGhlIGZhY3QgdGhhdCB3ZSdyZSBhbiBpbmxp
bmUtYmxvY2sgaXMgaXJyZWxldmFudCwgYW5kIHdlIGJlaGF2ZQotICAgIC8vIGp1c3QgbGlrZSBh
IGJsb2NrLgotICAgIGlmIChpc0Jsb2NrTGV2ZWxSZXBsYWNlZE9yQXRvbWljSW5saW5lKCkgJiYg
bGluZVBvc2l0aW9uTW9kZSA9PSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpCi0gICAgICAgIHJl
dHVybiBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3Np
dGlvbk1vZGUpOwotCi0gICAgYXV0byYgbGluZVN0eWxlID0gZmlyc3RMaW5lID8gZmlyc3RMaW5l
U3R5bGUoKSA6IHN0eWxlKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwo
bGluZVN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUg
ZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0g
ICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgcmVwbGFjZWQgZWxlbWVudHMuIE90aGVyd2lzZSwganVz
dCBwYXNzIG9mZiB0bwotICAgIC8vIHRoZSBiYXNlIGNsYXNzLiAgSWYgd2UncmUgYmVpbmcgcXVl
cmllZCBhcyB0aG91Z2ggd2UncmUgdGhlIHJvb3QgbGluZQotICAgIC8vIGJveCwgdGhlbiB0aGUg
ZmFjdCB0aGF0IHdlJ3JlIGFuIGlubGluZS1ibG9jayBpcyBpcnJlbGV2YW50LCBhbmQgd2UgYmVo
YXZlCi0gICAgLy8ganVzdCBsaWtlIGEgYmxvY2suCi0gICAgaWYgKGlzQmxvY2tMZXZlbFJlcGxh
Y2VkT3JBdG9taWNJbmxpbmUoKSAmJiBsaW5lUG9zaXRpb25Nb2RlID09IFBvc2l0aW9uT25Db250
YWluaW5nTGluZSkgewotICAgICAgICAvLyBGb3IgImxlYWYiIHRoZW1lIG9iamVjdHMsIGxldCB0
aGUgdGhlbWUgZGVjaWRlIHdoYXQgdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGlzLgotICAgICAgICAv
LyBGSVhNRTogTWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgYSBjdXN0b20gQ1NTIHByb3BlcnR5IGlu
c3RlYWQsIHNvIHRoYXQgaWYgdGhlIHRoZW1lCi0gICAgICAgIC8vIGlzIHR1cm5lZCBvZmYsIGNo
ZWNrYm94ZXMvcmFkaW9zIHdpbGwgc3RpbGwgaGF2ZSBkZWNlbnQgYmFzZWxpbmVzLgotICAgICAg
ICAvLyBGSVhNRTogTmVlZCB0byBwYXRjaCBmb3JtIGNvbnRyb2xzIHRvIGRlYWwgd2l0aCB2ZXJ0
aWNhbCBsaW5lcy4KLSAgICAgICAgaWYgKHN0eWxlKCkuaGFzVXNlZEFwcGVhcmFuY2UoKSAmJiAh
dGhlbWUoKS5pc0NvbnRyb2xDb250YWluZXIoc3R5bGUoKS51c2VkQXBwZWFyYW5jZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiB0aGVtZSgpLmJhc2VsaW5lUG9zaXRpb24oKnRoaXMpOwotICAgICAg
ICAgICAgCi0gICAgICAgIC8vIENTUzIuMSBzdGF0ZXMgdGhhdCB0aGUgYmFzZWxpbmUgb2YgYW4g
aW5saW5lIGJsb2NrIGlzIHRoZSBiYXNlbGluZSBvZiB0aGUgbGFzdCBsaW5lIGJveCBpbgotICAg
ICAgICAvLyB0aGUgbm9ybWFsIGZsb3cuICBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3IgbWFycXVl
ZXMsIHNpbmNlIHRoZWlyIGJhc2VsaW5lcyBhcmUgbWVhbmluZ2xlc3MKLSAgICAgICAgLy8gKHRo
ZSBjb250ZW50IGluc2lkZSB0aGVtIG1vdmVzKS4gIFRoaXMgbWF0Y2hlcyBXaW5JRSBhcyB3ZWxs
LCB3aGljaCBqdXN0IGJvdHRvbS1hbGlnbnMgdGhlbS4KLSAgICAgICAgLy8gV2UgYWxzbyBnaXZl
IHVwIG9uIGZpbmRpbmcgYSBiYXNlbGluZSBpZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFy
LCBvciBpZiB3ZSBhcmUgc2Nyb2xsZWQKLSAgICAgICAgLy8gdmVydGljYWxseSAoZS5nLiwgYW4g
b3ZlcmZsb3c6aGlkZGVuIGJsb2NrIHRoYXQgaGFzIGhhZCBzY3JvbGxUb3AgbW92ZWQpLgotICAg
ICAgICBhdXRvIGlnbm9yZUJhc2VsaW5lID0gW3RoaXMsIGRpcmVjdGlvbl0oKSAtPiBib29sIHsK
LSAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgICAgICBDaGVja2VkUHRyIHNjcm9sbGFibGVBcmVhID0gbGF5
ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwotICAgICAgICAgICAg
aWYgKCFzY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+bWFycXVlZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IEhvcml6b250YWxM
aW5lKQotICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3Jv
bGxiYXIoKSB8fCBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT2Zmc2V0KCkueSgpOwotICAgICAgICAg
ICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbE9mZnNldCgpLngoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRv
IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUoKSA/IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChpc1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKSB7Ci0gICAgICAgICAgICAvLyBI
aXN0b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFzZWxpbmVzLiBCdXQgd2Ug
Y2FuJ3QKLSAgICAgICAgICAgIC8vIHJlbW92ZSB0aGlzIGNvZGUgZnJvbSBkZXByZWNhdGVkIGZs
ZXhib3gsIGJlY2F1c2UgaXQgZWZmZWN0aXZlbHkKLSAgICAgICAgICAgIC8vIGJyZWFrcyAtd2Vi
a2l0LWxpbmUtY2xhbXAsIHdoaWNoIGlzIHVzZWQgaW4gdGhlIHdpbGQgLS0gd2Ugd291bGQKLSAg
ICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgYmFzZWxpbmUgYXMgaWYgLXdlYmtpdC1saW5lLWNs
YW1wIHdhc24ndCB1c2VkLgotICAgICAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIHVzZSB0
aGlzIGZvciBhbGwgdXNlcyBvZiBkZXByZWNhdGVkIGZsZXhib3guCi0gICAgICAgICAgICBMYXlv
dXRVbml0IGJvdHRvbU9mQ29udGVudCA9IGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGJv
cmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29udGVudEJveEhlaWdodCgpIDogYm9yZGVyUmln
aHQoKSArIHBhZGRpbmdSaWdodCgpICsgY29udGVudEJveFdpZHRoKCk7Ci0gICAgICAgICAgICBp
ZiAoYmFzZWxpbmVQb3MgJiYgYmFzZWxpbmVQb3MudmFsdWUoKSA+IGJvdHRvbU9mQ29udGVudCkK
LSAgICAgICAgICAgICAgICBiYXNlbGluZVBvcyA9IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4o
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmFzZWxpbmVQb3MpCi0gICAgICAgICAgICByZXR1
cm4gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gbWFyZ2luVG9wKCkgKyBiYXNlbGluZVBv
cy52YWx1ZSgpIDogbWFyZ2luUmlnaHQoKSArIGJhc2VsaW5lUG9zLnZhbHVlKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGRpcmVjdGlv
biwgbGluZVBvc2l0aW9uTW9kZSk7Ci0gICAgfQotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlID0gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHRoaXMtPnN0eWxlKCk7Ci0gICAg
Y29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gc3R5bGUubWV0cmljc09mUHJpbWFyeUZv
bnQoKTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGZvbnRNZXRyaWNzLmludEFzY2VudCgpICsg
KGxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUpIC0gZm9u
dE1ldHJpY3MuaW50SGVpZ2h0KCkpIC8gMiB9LnRvSW50KCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKIHsKICAg
ICBpZiAoc2hvdWxkQXBwbHlMYXlvdXRDb250YWlubWVudCgpKQpAQCAtMjU3OCwzNiArMjUwNyw2
IEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQmxvY2s6Omxhc3RMaW5lQmFzZWxp
bmUoKSBjb25zdAogICAgIHJldHVybiB7IH07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gUmVuZGVyQmxvY2s6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgbGlu
ZURpcmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoc2hvdWxkQXBwbHlMYXlvdXRDb250YWlubWVu
dCgpKSB7Ci0gICAgICAgIGlmIChpc0lubGluZSgpKQotICAgICAgICAgICAgcmV0dXJuIHN5bnRo
ZXNpemVkQmFzZWxpbmUoKnRoaXMsICpwYXJlbnRTdHlsZSgpLCBsaW5lRGlyZWN0aW9uLCBCb3Jk
ZXJCb3gpICsgKGxpbmVEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5Cb3R0b20o
KSA6IG1hcmdpbkxlZnQoKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYg
KGlzV3JpdGluZ01vZGVSb290KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGhh
dmVOb3JtYWxGbG93Q2hpbGQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8qIGJveCA9IGxhc3RDaGls
ZEJveCgpOyBib3g7IGJveCA9IGJveC0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKLSAgICAgICAg
aWYgKGJveC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGhhdmVOb3JtYWxGbG93Q2hpbGQgPSB0cnVlOwotICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBib3gtPmlubGluZUJsb2NrQmFzZWxpbmUobGluZURpcmVjdGlvbikp
Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IChib3gtPmxvZ2ljYWxUb3AoKSArIHJl
c3VsdC52YWx1ZSgpKS50b0ludCgpIH07IC8vIFRyYW5zbGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICB9Ci0KLSAgICBpZiAoIWhhdmVOb3JtYWxGbG93Q2hpbGQgJiYgaGFzTGluZUlm
RW1wdHkoKSkgewotICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IGZpcnN0TGluZVN0eWxlKCku
bWV0cmljc09mUHJpbWFyeUZvbnQoKTsKLSAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBMYXlv
dXRVbml0KGZvbnRNZXRyaWNzLmludEFzY2VudCgpCi0gICAgICAgICAgICArIChsaW5lSGVpZ2h0
KHRydWUsIGxpbmVEaXJlY3Rpb24sIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykgLSBmb250
TWV0cmljcy5pbnRIZWlnaHQoKSkgLyAyCi0gICAgICAgICAgICArIChsaW5lRGlyZWN0aW9uID09
IEhvcml6b250YWxMaW5lID8gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgOiBib3JkZXJSaWdo
dCgpICsgcGFkZGluZ1JpZ2h0KCkpKS50b0ludCgpIH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGlzUmVuZGVyQmxvY2tGbG93T3JSZW5kZXJCdXR0
b24oUmVuZGVyRWxlbWVudCYgcmVuZGVyRWxlbWVudCkKIHsKICAgICAvLyBXZSBpbmNsdWRlIGlz
UmVuZGVyQnV0dG9uIGluIHRoaXMgY2hlY2sgYmVjYXVzZSBidXR0b25zIGFyZSBpbXBsZW1lbnRl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCAyMWQzZjc2ZjRjMDcu
LjQ0MDA1ZjFkMzkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAg
LTY1LDEwICs2NSw2IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJCbG9jayhUeXBlLCBEb2N1bWVu
dCYsIFJlbmRlclN0eWxlJiYsIE9wdGlvblNldDxUeXBlRmxhZz4sIFR5cGVTcGVjaWZpY0ZsYWdz
ID0geyB9KTsKIAogcHVibGljOgotICAgIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG92ZXJy
aWRkZW4gZm9yIGlubGluZS1ibG9jay4KLSAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBm
aXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25P
bkNvbnRhaW5pbmdMaW5lKSBjb25zdCBmaW5hbDsKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lUG9z
aXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
ID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKLQogICAgIC8vIEZJ
WE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZl
IG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVMaW5lcygp
OwogCkBAIC0yODksNyArMjg1LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKICAgICBz
dGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGxhc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlubGluZUJsb2NrQmFzZWxpbmUoTGlu
ZURpcmVjdGlvbk1vZGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gRGVsYXkgdXBkYXRpbmcg
c2Nyb2xsYmFycyB1bnRpbCBlbmRBbmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRU
cmFuc2FjdGlvbigpIGlzIGNhbGxlZC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkCiAgICAgLy8g
d2hlbiBhIGZsZXhib3ggaXMgbGF5aW5nIG91dCBpdHMgZGVzY2VuZGFudHMuIElmIG11bHRpcGxl
IGNhbGxzIGFyZSBtYWRlIHRvIGJlZ2luVXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNh
Y3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApp
bmRleCA2MmI4ODY2YTkzOGQuLjNmYWYwZjQzZTJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tXaXRoTm9DaGlsZHJlbigpCiAgICAgICAgICAgICBzZXRI
YXNNYXJnaW5CZWZvcmVRdWlyayhzdHlsZS5tYXJnaW5CZWZvcmUoKS5oYXNRdWlyaygpKTsKICAg
ICAgICAgICAgIHNldEhhc01hcmdpbkFmdGVyUXVpcmsoc3R5bGUubWFyZ2luQWZ0ZXIoKS5oYXNR
dWlyaygpKTsKICAgICAgICAgfQotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkgKyAoaGFzTGlu
ZUlmRW1wdHkoKSA/IGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94
ZXMpIDogMF9sdSkpOworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkgKyAoaGFzTGluZUlmRW1w
dHkoKSA/IGxpbmVIZWlnaHQoKSA6IDBfbHUpKTsKICAgICAgICAgdXBkYXRlTG9naWNhbEhlaWdo
dCgpOwogICAgIH07CiAgICAgY29tcHV0ZUJsb2NrQXhpc1NpemUoKTsKQEAgLTc4MCw3ICs3ODAs
NyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5GbG93Q2hpbGRyZW4oUmVsYXlvdXRD
aGlsZHJlbiByZWxheW91dENoaWxkcmVuLCBMYQogCiAgICAgICAgIGF1dG8gbG9naWNhbEhlaWdo
dCA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVp
Z2h0KCk7CiAgICAgICAgIGlmIChoYXNMaW5lSWZFbXB0eSgpKQotICAgICAgICAgICAgbG9naWNh
bEhlaWdodCArPSBsaW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBI
b3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVz
KTsKKyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgKz0gbGluZUhlaWdodCgpOwogICAgICAgICBz
ZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwogCiAgICAgICAgIHJlcGFpbnRMb2dpY2Fs
VG9wID0geyB9OwpAQCAtMjc0OSw3ICsyNzQ5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFk
anVzdEluaXRpYWxMZXR0ZXJQb3NpdGlvbihSZW5kZXJCb3gmIGNoaWxkQm94LCBMYXlvdXRVbmkK
ICAgICBpZiAoIWZvbnRNZXRyaWNzLmNhcEhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBMYXlvdXRVbml0IGhlaWdodE9mTGluZSA9IGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9m
SW50ZXJpb3JMaW5lQm94ZXMpOworICAgIExheW91dFVuaXQgaGVpZ2h0T2ZMaW5lID0gbGluZUhl
aWdodCgpOwogICAgIExheW91dFVuaXQgYmVmb3JlTWFyZ2luQm9yZGVyUGFkZGluZyA9IGNoaWxk
Qm94LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGNoaWxkQm94Lm1hcmdpbkJlZm9yZSgpOwog
ICAgIAogICAgIC8vIE1ha2UgYW4gYWRqdXN0bWVudCB0byBhbGlnbiB3aXRoIHRoZSBjYXAgaGVp
Z2h0IG9mIGEgdGhlb3JldGljYWwgYmxvY2sgbGluZS4KQEAgLTMyOTUsNjkgKzMyOTUsNiBAQCBz
dGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckJsb2NrRmxvdzo6bGFzdExpbmVCYXNlbGlu
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUg
bGluZURpcmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChzaG91bGRBcHBseUxheW91dENvbnRhaW5tZW50
KCkpCi0gICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6aW5saW5lQmxvY2tCYXNlbGluZShsaW5l
RGlyZWN0aW9uKTsKLQotICAgIFJlZlB0ciBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOwotICAg
IGJvb2wgaXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50ID0gZWxlbWVudCAmJiBlbGVtZW50LT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpOwotICAgIGlmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5
VHlwZTo6SW5saW5lQmxvY2spIHsKLSAgICAgICAgLy8gVGhlIGJhc2VsaW5lIG9mIGFuICdpbmxp
bmUtYmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBpdHMgbGFzdCBsaW5lIGJveCBpbiB0aGUgbm9y
bWFsIGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVyIG5vIGluLWZsb3cgbGluZSBib3hlcyBvciBp
ZiBpdHMgJ292ZXJmbG93JwotICAgICAgICAvLyBwcm9wZXJ0eSBoYXMgYSBjb21wdXRlZCB2YWx1
ZSBvdGhlciB0aGFuICd2aXNpYmxlJy4gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92
aXN1ZGV0Lmh0bWwKLSAgICAgICAgYXV0byBzaG91bGRTeW50aGVzaXplQmFzZWxpbmUgPSAhc3R5
bGUoKS5pc092ZXJmbG93VmlzaWJsZSgpICYmICFpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQgJiYg
IWlzUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKCk7Ci0gICAgICAgIGlmIChzaG91bGRTeW50
aGVzaXplQmFzZWxpbmUpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICAvLyBO
b3RlIHRoYXQgaGVyZSB3ZSBvbmx5IHRha2UgdGhlIGxlZnQgYW5kIGJvdHRvbSBpbnRvIGNvbnNp
ZGVyYXRpb24uIE91ciBjYWxsZXIgdGFrZXMgdGhlIHJpZ2h0IGFuZCB0b3AgaW50byBjb25zaWRl
cmF0aW9uLgotICAgIGF1dG8gYm94SGVpZ2h0ID0gc3ludGhlc2l6ZWRCYXNlbGluZSgqdGhpcywg
KnBhcmVudFN0eWxlKCksIGxpbmVEaXJlY3Rpb24sIEJvcmRlckJveCkgKyAobGluZURpcmVjdGlv
biA9PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2luQm94LmJvdHRvbSgpIDogbV9tYXJnaW5Cb3gu
bGVmdCgpKTsKLSAgICBMYXlvdXRVbml0IGxhc3RCYXNlbGluZTsKLSAgICBpZiAoIWNoaWxkcmVu
SW5saW5lKCkpIHsKLSAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lID0gUmVuZGVyQmxv
Y2s6OmlubGluZUJsb2NrQmFzZWxpbmUobGluZURpcmVjdGlvbik7Ci0gICAgICAgIGlmICghaW5s
aW5lQmxvY2tCYXNlbGluZSkKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVCbG9ja0Jhc2VsaW5l
OwotICAgICAgICBsYXN0QmFzZWxpbmUgPSBpbmxpbmVCbG9ja0Jhc2VsaW5lLnZhbHVlKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFoYXNMaW5lcygpKSB7Ci0gICAgICAgICAgICBpZiAo
IWhhc0xpbmVJZkVtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGZvbnRNZXRyaWNzID0gZmlyc3RMaW5lU3R5bGUoKS5t
ZXRyaWNzT2ZQcmltYXJ5Rm9udCgpOwotICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBM
YXlvdXRVbml0KGZvbnRNZXRyaWNzLmludEFzY2VudCgpCi0gICAgICAgICAgICAgICAgKyAobGlu
ZUhlaWdodCh0cnVlLCBsaW5lRGlyZWN0aW9uLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMp
IC0gZm9udE1ldHJpY3MuaW50SGVpZ2h0KCkpIC8gMgotICAgICAgICAgICAgICAgICsgKGxpbmVE
aXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSA6
IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSkpLnRvSW50KCkgfTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChzdmdUZXh0TGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHN0eWxl
ID0gZmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAgICAgIC8vIExlZ2FjeUlubGluZUZsb3dCb3g6
OnBsYWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uIHdpbGwgZmxpcCBsaW5lcyBpbiBjYXNlIG9mIHZl
cnRpY2FsTFIgbW9kZSwgc28gd2UgY2FuIGFzc3VtZSB2ZXJ0aWNhbFJMIGZvciBub3cuCi0gICAg
ICAgICAgICBsYXN0QmFzZWxpbmUgPSBzdHlsZS5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmludEFz
Y2VudChsZWdhY3lSb290Qm94KCktPmJhc2VsaW5lVHlwZSgpKQotICAgICAgICAgICAgICAgICsg
KHN0eWxlLndyaXRpbmdNb2RlKCkuaXNMaW5lSW52ZXJ0ZWQoKSA/IGxvZ2ljYWxIZWlnaHQoKSAt
IGxlZ2FjeVJvb3RCb3goKS0+bG9naWNhbEJvdHRvbSgpIDogbGVnYWN5Um9vdEJveCgpLT5sb2dp
Y2FsVG9wKCkpOwotICAgICAgICB9IGVsc2UgaWYgKGlubGluZUxheW91dCgpKQotICAgICAgICAg
ICAgbGFzdEJhc2VsaW5lID0gZmxvb3JUb0ludChpbmxpbmVMYXlvdXQoKS0+bGFzdExpbmVMb2dp
Y2FsQmFzZWxpbmUoKSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0g
T3ZlcmZsb3c6OlZpc2libGUpCi0gICAgICAgIHJldHVybiBsYXN0QmFzZWxpbmU7Ci0KLSAgICAv
LyBXaGlsZSBjc3MtYWxpZ24tMyBkZWZpbmVzIHRoZSBsYXN0IGJhc2VsaW5lIGZvcm0gYmxvY2sg
Y29udGFpbmVycyB3aGljaCBhcmUKLSAgICAvLyBzY3JvbGwgY29udGFpbmVycyAod2l0aCBhbiBp
bml0aWFsIGJhc2VsaW5lLXNvdXJjZSB2YWx1ZSkgYXMgdGhlIGJsb2NrLWVuZCBtYXJnaW4KLSAg
ICAvLyBlZGdlLCB3ZSBpbnN0ZWFkIG1haW50YWluIG91ciBsZWdhY3kgYmVoYXZpb3IgZm9yIGZv
cm0gY29udHJvbHMgYW5kIGNvbnRlbnQKLSAgICAvLyBpbnNpZGUgZm9ybSBjb250cm9scyB0byBt
YWludGFpbiBjb21wYXRpYmlsaXR5LgotICAgIGF1dG8gaXNJbkZvcm1Db250cm9sID0gWyZdIHsK
LSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoUmVmUHRyIHNoYWRvd0hvc3QgPSBlbGVtZW50LT5zaGFkb3dIb3N0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gc2hhZG93SG9zdC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH07Ci0gICAgaWYgKGlzSFRNTEZvcm1Db250cm9sRWxlbWVudCB8
fCBpc0luRm9ybUNvbnRyb2woKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGJveEhlaWdodCwg
bGFzdEJhc2VsaW5lKTsKLSAgICByZXR1cm4gYm94SGVpZ2h0OwotfQotCiBMYXlvdXRVbml0IFJl
bmRlckJsb2NrRmxvdzo6YWRqdXN0RW5jbG9zaW5nVG9wRm9yUHJlY2VkaW5nQmxvY2soTGF5b3V0
VW5pdCB0b3ApIGNvbnN0CiB7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQpAQCAtNDA0NSw3ICszOTgyLDcgQEAgdm9pZCBS
ZW5kZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNvbnRlbnQoUmVsYXlvdXRDaGlsZHJlbiByZWxh
eW91dENoaWxkcmVuLCBMYXkKICAgICBhdXRvIHBhcnRpYWxSZXBhaW50UmVjdCA9IGxheW91dEZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5sYXlvdXQocmVsYXlvdXRDaGlsZHJlbiA9PSBSZWxh
eW91dENoaWxkcmVuOjpZZXMgPyBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Rm9yY2VG
dWxsTGF5b3V0OjpZZXMgOiBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Rm9yY2VGdWxs
TGF5b3V0OjpObyk7CiAKICAgICBhdXRvIGJvcmRlckJveEJvdHRvbSA9IFsmXSB7Ci0gICAgICAg
IGF1dG8gY29udGVudEhlaWdodCA9ICFoYXNMaW5lcygpICYmIGhhc0xpbmVJZkVtcHR5KCkgPyBs
aW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGlu
ZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSA6IGxheW91dEZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jb250ZW50TG9naWNhbEhlaWdodCgpOworICAgICAg
ICBhdXRvIGNvbnRlbnRIZWlnaHQgPSAhaGFzTGluZXMoKSAmJiBoYXNMaW5lSWZFbXB0eSgpID8g
bGluZUhlaWdodCgpIDogbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNvbnRlbnRM
b2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIHJldHVybiBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkg
KyBjb250ZW50SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgfTsKICAgICBhdXRvIG5ld0JvcmRlckJveEJvdHRvbSA9IGJvcmRl
ckJveEJvdHRvbSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5o
CmluZGV4IDRjNzM5MTIxMWJhNS4uOGU0MGExNDZhMDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC00NDksNyArNDQ5LDYgQEAgcHJvdGVjdGVkOgog
CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gbGFzdExpbmVCYXNlbGlu
ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gaW5saW5l
QmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIHNldENvbXB1dGVkQ29sdW1uQ291bnRBbmRXaWR0aChpbnQsIExheW91dFVuaXQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDhlM2Q4NWJiOGVlOC4uZjE3
YzAyMDE0NmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNzks
NiArNzksNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVySW5saW5lcy5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgorI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxC
bG9jay5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdElubGluZXMuaCIKQEAgLTQ5NDQsMTggKzQ5NDUsMTUgQEAgYm9vbCBSZW5kZXJC
b3g6OmlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbigpIGNvbnN0CiAgICAgICAgIHx8IHNob3Vs
ZEFwcGx5U2l6ZUNvbnRhaW5tZW50KCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94OjpsaW5l
SGVpZ2h0KGJvb2wgLypmaXJzdExpbmUqLywgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBM
aW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAorTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmxpbmVIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChpc0Jsb2NrTGV2ZWxSZXBs
YWNlZE9yQXRvbWljSW5saW5lKCkpCi0gICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gSG9yaXpv
bnRhbExpbmUgPyBtX21hcmdpbkJveC50b3AoKSArIGhlaWdodCgpICsgbV9tYXJnaW5Cb3guYm90
dG9tKCkgOiBtX21hcmdpbkJveC5yaWdodCgpICsgd2lkdGgoKSArIG1fbWFyZ2luQm94LmxlZnQo
KTsKLSAgICByZXR1cm4gMDsKLX0KKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCp0aGlzKSB8fCAo
aXM8UmVuZGVyTGlzdE1hcmtlcj4oKnRoaXMpICYmICFkb3duY2FzdDxSZW5kZXJMaXN0TWFya2Vy
PigqdGhpcykuaXNJbWFnZSgpKSkKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9h
dENlaWwoZmlyc3RMaW5lU3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKSk7CiAKLUxheW91dFVu
aXQgUmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgLypmaXJzdExpbmUqLywgTGluZURp
cmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9k
ZSovKSBjb25zdAotewogICAgIGlmIChpc0Jsb2NrTGV2ZWxSZXBsYWNlZE9yQXRvbWljSW5saW5l
KCkpCi0gICAgICAgIHJldHVybiByb3VuZFRvSW50KGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGlu
ZSA/IG1fbWFyZ2luQm94LnRvcCgpICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJveC5ib3R0b20oKSA6
IG1fbWFyZ2luQm94LnJpZ2h0KCkgKyB3aWR0aCgpICsgbV9tYXJnaW5Cb3gubGVmdCgpKTsKLSAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgbG9naWNhbEhlaWdo
dCgpICsgbWFyZ2luQWZ0ZXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIFJlbmRlckxheWVy
KiBSZW5kZXJCb3g6OmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggMTllMjI2ZTVjZjM1Li5mZjk1ZDk0NTM1ZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTI0Miw2ICsyNDIsOCBAQCBw
dWJsaWM6CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdp
blN0YXJ0KHdyaXRpbmdNb2RlKCkpOyB9CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQoKSBjb25z
dCB7IHJldHVybiBtYXJnaW5FbmQod3JpdGluZ01vZGUoKSk7IH0KIAorICAgIGlubGluZSBMYXlv
dXRVbml0IG1hcmdpbkJveExvZ2ljYWxIZWlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OworCiAgICAg
dm9pZCBzZXRNYXJnaW5CZWZvcmUoTGF5b3V0VW5pdCB2YWx1ZSwgY29uc3QgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpIHsgbV9tYXJnaW5Cb3guc2V0QmVmb3JlKHZhbHVlLCB3cml0aW5nTW9kZSk7
IH0KICAgICB2b2lkIHNldE1hcmdpbkFmdGVyKExheW91dFVuaXQgdmFsdWUsIGNvbnN0IFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fbWFyZ2luQm94LnNldEFmdGVyKHZhbHVlLCB3cml0aW5n
TW9kZSk7IH0KICAgICB2b2lkIHNldE1hcmdpblN0YXJ0KExheW91dFVuaXQgdmFsdWUsIGNvbnN0
IFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fbWFyZ2luQm94LnNldFN0YXJ0KHZhbHVlLCB3
cml0aW5nTW9kZSk7IH0KQEAgLTUxOCw3ICs1MjAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmly
dHVhbCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Qg
eyByZXR1cm4geyB9OyB9CiAgICAgdmlydHVhbCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGxh
c3RMaW5lQmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiB7IH07IH0KLSAgICB2aXJ0dWFsIHN0ZDo6
b3B0aW9uYWw8TGF5b3V0VW5pdD4gaW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9k
ZSkgY29uc3QgeyByZXR1cm4geyB9OyB9IC8vIFJldHVybnMgZW1wdHkgaWYgd2Ugc2hvdWxkIHNr
aXAgdGhpcyBib3ggd2hlbiBjb21wdXRpbmcgdGhlIGJhc2VsaW5lIG9mIGFuIGlubGluZS1ibG9j
ay4KKyAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gaW5saW5lQmxvY2tCYXNl
bGluZSgpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfSAvLyBSZXR1cm5zIGVtcHR5IGlmIHdlIHNob3Vs
ZCBza2lwIHRoaXMgYm94IHdoZW4gY29tcHV0aW5nIHRoZSBiYXNlbGluZSBvZiBhbiBpbmxpbmUt
YmxvY2suCiAgICAgTGF5b3V0VW5pdCBzeW50aGVzaXplQmFzZWxpbmUoRm9udEJhc2VsaW5lIGJh
c2VsaW5lVHlwZSwgQmFzZWxpbmVTeW50aGVzaXNFZGdlKSBjb25zdDsKIAogICAgIGJvb2wgc2hy
aW5rVG9Bdm9pZEZsb2F0cygpIGNvbnN0OwpAQCAtNTI2LDggKzUyOCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBtYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0SWZOZWVkZWQoKSB7IH0K
ICAgICAKLSAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJl
Y3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBj
b25zdCBvdmVycmlkZTsKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJz
dExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNv
bnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKKyAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQo
KSBjb25zdDsKIAogICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdCgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIExheW91dFVuaXQgb2Zmc2V0VG9wKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94SW5saW5lcy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveElubGluZXMuaAppbmRleCBiNjY1NjkzM2RjMjEuLjJiY2Nj
MmI1MWQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveElu
bGluZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94SW5saW5lcy5o
CkBAIC0yNiw2ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAoraW5saW5lIExheW91
dFVuaXQgUmVuZGVyQm94OjptYXJnaW5Cb3hMb2dpY2FsSGVpZ2h0KFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKSBjb25zdCB7IHJldHVybiB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IG1fbWFy
Z2luQm94LnRvcCgpICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJveC5ib3R0b20oKSA6IG1fbWFyZ2lu
Qm94LnJpZ2h0KCkgKyB3aWR0aCgpICsgbV9tYXJnaW5Cb3gubGVmdCgpOyB9CiBpbmxpbmUgTGF5
b3V0U2l6ZSBSZW5kZXJCb3g6OmJvcmRlckJveExvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4g
bG9naWNhbFNpemUoKTsgfQogaW5saW5lIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGllbnRCb3hS
ZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChjbGllbnRMZWZ0KCksIGNsaWVudFRvcCgp
LCBjbGllbnRXaWR0aCgpLCBjbGllbnRIZWlnaHQoKSk7IH0KIGlubGluZSBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y2xpZW50TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCAz
ZjIzMDM3YTYyNDIuLmQ3MWIzNGZlMzA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKQEAgLTMxLDcgKzMxLDYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gTW9kZXMgZm9yIHNvbWUgb2YgdGhlIGxpbmUtcmVsYXRlZCBmdW5jdGlv
bnMuCi1lbnVtIExpbmVQb3NpdGlvbk1vZGUgeyBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUsIFBv
c2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyB9OwogZW51bSBMaW5lRGlyZWN0aW9uTW9kZSB7IEhv
cml6b250YWxMaW5lLCBWZXJ0aWNhbExpbmUgfTsKIAogZW51bSBjbGFzcyBCbGVlZEF2b2lkYW5j
ZSA6IHVpbnQ4X3QgewpAQCAtMTk0LDEwICsxOTMsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0
OwogCi0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIGRldGVybWluZSBsaW5lIGhl
aWdodCBhbmQgYmFzZWxpbmUgcG9zaXRpb24uCi0gICAgdmlydHVhbCBMYXlvdXRVbml0IGxpbmVI
ZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
ID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlv
dXRVbml0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
LCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCA9IDA7
Ci0KICAgICB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGlu
YXRlc01vZGU+LCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBz
ZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCmluZGV4IDAwNjgzYzU5YjM2Ni4uMjcxYjUzNjkw
OTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMTYx
LDIyICsxNjEsNiBAQCBMYXlvdXRSZWN0IFJlbmRlckJ1dHRvbjo6Y29udHJvbENsaXBSZWN0KGNv
bnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KSBjbwogICAgIHJldHVybiBMYXlvdXRS
ZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpLCBhZGRpdGlvbmFsT2Zmc2V0
LnkoKSArIGJvcmRlclRvcCgpLCB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQo
KSwgaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKIH0KIAotc3RhdGlj
IExheW91dFVuaXQgc3ludGhlc2l6ZWRCYXNlbGluZUZyb21Db250ZW50Qm94KGNvbnN0IFJlbmRl
ckJveCYgYm94LCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIGRp
cmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGJveC5ib3JkZXJUb3AoKSArIGJveC5wYWRkaW5n
VG9wKCkgKyBib3guY29udGVudEJveEhlaWdodCgpIDogYm94LmJvcmRlclJpZ2h0KCkgKyBib3gu
cGFkZGluZ1JpZ2h0KCkgKyBib3guY29udGVudEJveFdpZHRoKCk7Ci19Ci0KLUxheW91dFVuaXQg
UmVuZGVyQnV0dG9uOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0
aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbW9kZSkgY29uc3QKLXsKLSAgICBp
ZiAoc2hvdWxkQXBwbHlMYXlvdXRDb250YWlubWVudCgpKQotICAgICAgICByZXR1cm4gUmVuZGVy
RmxleGlibGVCb3g6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIG1vZGUp
OwotICAgIC8vIFdlIGNhbm5vdCByZWx5IG9uIFJlbmRlckZsZXhpYmxlQm94OjpiYXNlbGluZVBv
c2l0aW9uKCkgYmVjYXVzZSBvZiBmbGV4Ym94ZXMgaGF2ZSBzb21lIHNwZWNpYWwgYmVoYXZpb3IK
LSAgICAvLyByZWdhcmRpbmcgYmFzZWxpbmVzIHRoYXQgc2hvdWxkbid0IGFwcGx5IHRvIGJ1dHRv
bnMuCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZSA9IGZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVf
b3Ioc3ludGhlc2l6ZWRCYXNlbGluZUZyb21Db250ZW50Qm94KCp0aGlzLCBkaXJlY3Rpb24pKTsK
LSAgICBMYXlvdXRVbml0IG1hcmdpbkFzY2VudCA9IGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGlu
ZSA/IG1hcmdpblRvcCgpIDogbWFyZ2luUmlnaHQoKTsKLSAgICByZXR1cm4gYmFzZWxpbmUgKyBt
YXJnaW5Bc2NlbnQ7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBSZW5kZXJC
dXR0b246OmxheW91dCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgK
aW5kZXggODdjZjNhZWY0ZDAzLi5mNjhiNmY0ZGYxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQnV0dG9uLmgKQEAgLTY2LDggKzY2LDYgQEAgcHVibGljOgogICAgIFJlbmRlckJs
b2NrKiBpbm5lclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lci5nZXQoKTsgfQogICAg
IHZvaWQgc2V0SW5uZXJSZW5kZXJlcihSZW5kZXJCbG9jayYpOwogCi0gICAgTGF5b3V0VW5pdCBi
YXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBv
c2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Qgb3ZlcnJpZGU7Ci0K
IHByaXZhdGU6CiAgICAgdm9pZCBlbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHAKaW5kZXggYWY4ODZmNWUyZWI1Li4zMTk4ZDllOTRiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6Omxh
eW91dEhvcml6b250YWxCb3goUmVsYXlvdXRDaGlsZHJlbiByZWxheW91dEMKICAgICAgICAgQVNT
RVJUKGNoaWxkSW5kZXggPT0gY2hpbGRMYXlvdXREZWx0YXMuc2l6ZSgpKTsKIAogICAgICAgICBp
ZiAoIWl0ZXJhdG9yLmZpcnN0KCkgJiYgaGFzTGluZUlmRW1wdHkoKSkKLSAgICAgICAgICAgIHNl
dEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgd3JpdGluZ01vZGUoKS5pc0hvcml6
b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJp
b3JMaW5lQm94ZXMpKTsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWln
aHQoKSk7CiAKICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgdG9BZGQpOwogCkBAIC04NDgs
NyArODQ4LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dFZlcnRp
Y2FsQm94KFJlbGF5b3V0Q2hpbGRyZW4gcmVsYXlvdXRDaGkKICAgICAgICAgeVBvcyA9IGhlaWdo
dCgpOwogCiAgICAgICAgIGlmICghaXRlcmF0b3IuZmlyc3QoKSAmJiBoYXNMaW5lSWZFbXB0eSgp
KQotICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCh0cnVlLCB3cml0
aW5nTW9kZSgpLmlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUs
IFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykpOworICAgICAgICAgICAgc2V0SGVpZ2h0KGhl
aWdodCgpICsgbGluZUhlaWdodCgpKTsKIAogICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0
b0FkZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwCmluZGV4IGYwMDg5NWM0YjdmNC4uZjVkNDNmNGQzYWVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAKQEAgLTIwNyw4ICsyMDcsOCBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWlu
dENvbnRyb2woUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gcm91bmRUb0ludChiYXNlbGluZVBvc2l0aW9uKHRydWUsIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25D
b250YWluaW5nTGluZSkpOworICAgICAgICAgICAgLy8gRmlsZSB1cGxvYWQgYnV0dG9uIGlzIGRp
c3BsYXk6IG5vbmUgKHNlZSA6OmZpbGUtc2VsZWN0b3ItYnV0dG9uKS4KKyAgICAgICAgICAgIHJl
dHVybiByb3VuZFRvSW50KG1hcmdpbkJveExvZ2ljYWxIZWlnaHQoY29udGFpbmluZ0Jsb2NrKCkt
PndyaXRpbmdNb2RlKCkpKTsKICAgICAgICAgfSgpOwogCiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuc2V0RmlsbENvbG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9y
RmlsdGVyKENTU1Byb3BlcnR5Q29sb3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwCmluZGV4IDhhNmFlNTNiYzM2OC4uMjhhMzhlZDkzMGMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAg
LTI2NCwxNSArMjY0LDYgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZUNoaWxkSW50
cmluc2ljTG9naWNhbFdpZHRocyhSZW5kZXJCb3gmIGZsZXhCb3hDaGkKICAgICBSZW5kZXJCbG9j
azo6Y29tcHV0ZUNoaWxkSW50cmluc2ljTG9naWNhbFdpZHRocyhmbGV4Qm94Q2hpbGQsIG1pblBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCwgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIH0KIAotTGF5
b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBMaW5lRGly
ZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgYXV0
byBiYXNlbGluZSA9IGZpcnN0TGluZUJhc2VsaW5lKCk7Ci0gICAgaWYgKCFiYXNlbGluZSkKLSAg
ICAgICAgcmV0dXJuIHN5bnRoZXNpemVkQmFzZWxpbmUoKnRoaXMsICpwYXJlbnRTdHlsZSgpLCBk
aXJlY3Rpb24sIEJvcmRlckJveCkgKyBtYXJnaW5Mb2dpY2FsSGVpZ2h0KCk7Ci0KLSAgICByZXR1
cm4gYmFzZWxpbmUudmFsdWUoKSArIChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJn
aW5Ub3AoKSA6IG1hcmdpblJpZ2h0KCkpLnRvSW50KCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0VW5pdD4gUmVuZGVyRmxleGlibGVCb3g6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKIHsK
ICAgICBpZiAoKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzRmxleEl0ZW0oKSkgfHwgIW1fbnVt
YmVyT2ZGbGV4SXRlbXNPbkZpcnN0TGluZSB8fCBzaG91bGRBcHBseUxheW91dENvbnRhaW5tZW50
KCkpCkBAIC0zMjMsMTEgKzMxNCw2IEBAIHN0ZDo6b3B0aW9uYWwgPExheW91dFVuaXQ+IFJlbmRl
ckZsZXhpYmxlQm94OjpsYXN0TGluZUJhc2VsaW5lKCkgY29uc3QKICAgICByZXR1cm4gTGF5b3V0
VW5pdCB7IChiYXNlbGluZS52YWx1ZSgpICsgYmFzZWxpbmVGbGV4SXRlbS0+bG9naWNhbFRvcCgp
KS50b0ludCgpIH07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyRmxleGli
bGVCb3g6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZpcnN0TGluZUJhc2VsaW5lKCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBTdHlsZUNv
bnRlbnRBbGlnbm1lbnREYXRhJiBjb250ZW50QWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IoKQogewog
ICAgIC8vIFRoZSBqdXN0aWZ5LWNvbnRlbnQgcHJvcGVydHkgYXBwbGllcyBhbG9uZyB0aGUgbWFp
biBheGlzLCBidXQgc2luY2UKQEAgLTEzNDYsNyArMTMzMiw3IEBAIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OnBlcmZvcm1GbGV4TGF5b3V0KFJlbGF5b3V0Q2hpbGRyZW4gcmVsYXlvdXRDaGlsZHJl
bikKIAogICAgIGlmIChhbGxJdGVtcy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGhhc0xpbmVJ
ZkVtcHR5KCkpIHsKLSAgICAgICAgICAgIGF1dG8gbWluSGVpZ2h0ID0gYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxIZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JM
aW5lQm94ZXMpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgYXV0byBt
aW5IZWlnaHQgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpICsgbGluZUhlaWdodCgp
ICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgaWYgKGhlaWdodCgpIDwg
bWluSGVpZ2h0KQogICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobWluSGVpZ2h0KTsK
ICAgICAgICAgfQpAQCAtMTQyMyw3ICsxNDA5LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6
cGVyZm9ybUZsZXhMYXlvdXQoUmVsYXlvdXRDaGlsZHJlbiByZWxheW91dENoaWxkcmVuKQogICAg
ICAgICAvLyBhIGxpbmUgYmVjYXVzZSBhbGwgb3VyIGNoaWxkcmVuIG1pZ2h0IGJlIG91dCBvZiBm
bG93IHBvc2l0aW9uZWQuCiAgICAgICAgIC8vIEluc3RlYWQgb2YganVzdCBjaGVja2luZyBpZiB3
ZSBoYXZlIGEgbGluZSwgbWFrZSBzdXJlIHRoZSBmbGV4Ym94CiAgICAgICAgIC8vIGhhcyBhdCBs
ZWFzdCBhIGxpbmUncyB3b3J0aCBvZiBoZWlnaHQgdG8gY292ZXIgdGhpcyBjYXNlLgotICAgICAg
ICBMYXlvdXRVbml0IG1pbkhlaWdodCA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkg
KyBsaW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFs
TGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSArIHNjcm9s
bGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5IZWlnaHQgPSBib3Jk
ZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpICsgbGluZUhlaWdodCgpICsgc2Nyb2xsYmFyTG9n
aWNhbEhlaWdodCgpOwogICAgICAgICBpZiAoc2l6ZSgpLmhlaWdodCgpIDwgbWluSGVpZ2h0KQog
ICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChtaW5IZWlnaHQpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKaW5kZXggZTY4Y2FkMjA3NmUz
Li45MmM1MmZlNjgzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5oCkBAIC01NiwxMCArNTYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Ecm9wQW5v
bnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9p
ZCBsYXlvdXRCbG9jayhSZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVp
Z2h0ID0gMF9sdSkgZmluYWw7CiAKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oYm9v
bCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRp
b25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPExh
eW91dFVuaXQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiBsYXN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbmxpbmVCbG9ja0Jhc2VsaW5lKExpbmVEaXJl
Y3Rpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAgIGJvb2wgaGl0
VGVzdENoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZExvY2F0aW9uLCBI
aXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcAppbmRleCA0MmVlMjI4OWE1OGIuLjE3YmVkYWE1OWU4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtNDg5LDcgKzQ4OSw3IEBAIHZvaWQgUmVuZGVyR3Jp
ZDo6bGF5b3V0R3JpZChSZWxheW91dENoaWxkcmVuIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAg
IC8vIEdyaWQgY29udGFpbmVyIHNob3VsZCBoYXZlIHRoZSBtaW5pbXVtIGhlaWdodCBvZiBhIGxp
bmUgaWYgaXQncyBlZGl0YWJsZS4gVGhhdCBkb2VzIG5vdCBhZmZlY3QgdHJhY2sgc2l6aW5nIHRo
b3VnaC4KICAgICAgICAgaWYgKGhhc0xpbmVJZkVtcHR5KCkpIHsKICAgICAgICAgICAgIExheW91
dFVuaXQgbWluSGVpZ2h0Rm9yRW1wdHlMaW5lID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWln
aHQoKQotICAgICAgICAgICAgICAgICsgbGluZUhlaWdodCh0cnVlLCBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRl
cmlvckxpbmVCb3hlcykKKyAgICAgICAgICAgICAgICArIGxpbmVIZWlnaHQoKQogICAgICAgICAg
ICAgICAgICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgc2V0TG9naWNh
bEhlaWdodChzdGQ6Om1heChsb2dpY2FsSGVpZ2h0KCksIG1pbkhlaWdodEZvckVtcHR5TGluZSkp
OwogICAgICAgICB9CkBAIC02MjYsNyArNjI2LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRN
YXNvbnJ5KFJlbGF5b3V0Q2hpbGRyZW4gcmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgLy8gR3Jp
ZCBjb250YWluZXIgc2hvdWxkIGhhdmUgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIGEgbGluZSBpZiBp
dCdzIGVkaXRhYmxlLiBUaGF0IGRvZXMgbm90IGFmZmVjdCB0cmFjayBzaXppbmcgdGhvdWdoLgog
ICAgICAgICBpZiAoaGFzTGluZUlmRW1wdHkoKSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBt
aW5IZWlnaHRGb3JFbXB0eUxpbmUgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpCi0g
ICAgICAgICAgICAgICAgKyBsaW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKQorICAgICAgICAgICAgICAgICsgbGluZUhlaWdodCgpCiAgICAgICAgICAgICAgICAg
KyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
KHN0ZDo6bWF4KGxvZ2ljYWxIZWlnaHQoKSwgbWluSGVpZ2h0Rm9yRW1wdHlMaW5lKSk7CiAgICAg
ICAgIH0KQEAgLTIwMTEsMTcgKzIwMTEsNiBAQCBib29sIFJlbmRlckdyaWQ6OmlzQmFzZWxpbmVB
bGlnbm1lbnRGb3JHcmlkSXRlbShjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVAogICAg
IHJldHVybiBpc0Jhc2VsaW5lUG9zaXRpb24oYWxpZ24pICYmICFoYXNBdXRvTWFyZ2luczsKIH0K
IAotLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgc2hhcmVkIGJ5IFJlbmRlckZsZXhpYmxlQm94LCBz
byBpdCBtaWdodCBiZSByZWZhY3RvcmVkIHNvbWVob3cuCi1MYXlvdXRVbml0IFJlbmRlckdyaWQ6
OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5l
UG9zaXRpb25Nb2RlIG1vZGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2Rl
ID09IFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7Ci0gICAgYXV0byBiYXNlbGluZSA9IGZpcnN0
TGluZUJhc2VsaW5lKCk7Ci0gICAgaWYgKCFiYXNlbGluZSkKLSAgICAgICAgcmV0dXJuIHN5bnRo
ZXNpemVkQmFzZWxpbmUoKnRoaXMsICpwYXJlbnRTdHlsZSgpLCBkaXJlY3Rpb24sIEJvcmRlckJv
eCkgKyBtYXJnaW5Mb2dpY2FsSGVpZ2h0KCk7Ci0KLSAgICByZXR1cm4gYmFzZWxpbmUudmFsdWUo
KSArIChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5Ub3AoKSA6IG1hcmdpblJp
Z2h0KCkpLnRvSW50KCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyR3Jp
ZDo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogewogICAgIGlmICgoaXNXcml0aW5nTW9kZVJv
b3QoKSAmJiAhaXNGbGV4SXRlbSgpKSB8fCAhY3VycmVudEdyaWQoKS5oYXNHcmlkSXRlbXMoKSB8
fCBzaG91bGRBcHBseUxheW91dENvbnRhaW5tZW50KCkpCkBAIC0yMDkwLDExICsyMDc5LDYgQEAg
U2luZ2xlVGhyZWFkV2Vha1B0cjxSZW5kZXJCb3g+IFJlbmRlckdyaWQ6OmdldEJhc2VsaW5lR3Jp
ZEl0ZW0oSXRlbVBvc2l0aW9uIGFsaWcKICAgICByZXR1cm4gYmFzZWxpbmVHcmlkSXRlbTsKIH0K
IAotc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJHcmlkOjppbmxpbmVCbG9ja0Jhc2Vs
aW5lKExpbmVEaXJlY3Rpb25Nb2RlKSBjb25zdAotewotICAgIHJldHVybiBmaXJzdExpbmVCYXNl
bGluZSgpOwotfQotCiBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNCYXNlbGluZU9m
ZnNldEZvckdyaWRJdGVtKGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0pIGNvbnN0CiB7CiAgICAg
Ly8gRklYTUUgOiBDU1MgTWFzb25yeSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgYmFzZWxpbmUg
Y2FsY3VsYXRpb25zIGN1cnJlbnRseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5o
CmluZGV4IDI2OTA0MmY0ZTA4MC4uMmE5ZWFiMzkzZTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmgKQEAgLTI3MCwxMSArMjcwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVw
ZGF0ZUF1dG9NYXJnaW5zSW5Sb3dBeGlzSWZOZWVkZWQoUmVuZGVyQm94Jik7CiAgICAgYm9vbCBp
c0NoaWxkRWxpZ2libGVGb3JNYXJnaW5UcmltKE1hcmdpblRyaW1UeXBlLCBjb25zdCBSZW5kZXJC
b3gmKSBjb25zdCBmaW5hbDsKIAotICAgIExheW91dFVuaXQgYmFzZWxpbmVQb3NpdGlvbihib29s
IGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlv
bk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0
VW5pdD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IGxhc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBmaW5hbDsKICAgICBTaW5nbGVU
aHJlYWRXZWFrUHRyPFJlbmRlckJveD4gZ2V0QmFzZWxpbmVHcmlkSXRlbShJdGVtUG9zaXRpb24g
YWxpZ25tZW50KSBjb25zdDsKLSAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlubGluZUJs
b2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNJ
bmxpbmVCYXNlbGluZUFsaWduZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKIAogICAg
IExheW91dFVuaXQgY29sdW1uQXhpc0Jhc2VsaW5lT2Zmc2V0Rm9yR3JpZEl0ZW0oY29uc3QgUmVu
ZGVyQm94JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApp
bmRleCBjZWVhNmFiY2FiMGYuLmVhZTFmYzg3MjdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCkBAIC0zMDYsMTggKzMwNiw2IEBAIExheW91dFVuaXQgUmVuZGVy
SW1hZ2U6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoc3RkOjpvcHRpb25hbDxMYXlvdXRV
bml0PiBlCiAgICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2Fs
SGVpZ2h0KGVzdGltYXRlZFVzZWRXaWR0aCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVySW1hZ2U6
OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVj
dGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIExh
eW91dFVuaXQgb2Zmc2V0OwotI2lmIEVOQUJMRShNVUxUSV9SRVBSRVNFTlRBVElPTl9IRUlDKQot
ICAgIGlmIChpc011bHRpUmVwcmVzZW50YXRpb25IRUlDKCkpIHsKLSAgICAgICAgYXV0byBtZXRy
aWNzID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCktPm1ldHJpY3NGb3JNdWx0
aVJlcHJlc2VudGF0aW9uSEVJQygpOwotICAgICAgICBvZmZzZXQgPSBMYXlvdXRVbml0Ojpmcm9t
RmxvYXRSb3VuZChtZXRyaWNzLmRlc2NlbnQpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBS
ZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3Np
dGlvbk1vZGUpIC0gb2Zmc2V0OwotfQotCiB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQo
V3JhcHBlZEltYWdlUHRyIG5ld0ltYWdlLCBjb25zdCBJbnRSZWN0KiByZWN0KQogewogICAgIGlm
IChyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmgKaW5kZXggMDUxZDE1NjRjMzEyLi5jNWVkNDdmZmYxZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCkBAIC0xMzgsOCArMTM4LDYgQEAgcHJpdmF0ZToKICAg
ICBMYXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJl
ZmVycmVkID0gU2hvdWxkQ29tcHV0ZVByZWZlcnJlZDo6Q29tcHV0ZUFjdHVhbCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KHN0ZDo6
b3B0aW9uYWw8TGF5b3V0VW5pdD4gZXN0aW1hdGVkVXNlZFdpZHRoID0gc3RkOjpudWxsb3B0KSBj
b25zdCBvdmVycmlkZTsKIAotICAgIExheW91dFVuaXQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZp
cnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9u
Q29udGFpbmluZ0xpbmUpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgYm9vbCBzaG91bGRDb2xsYXBz
ZVRvRW1wdHkoKSBjb25zdDsKIAogICAgIC8vIFRleHQgdG8gZGlzcGxheSBhcyBsb25nIGFzIHRo
ZSBpbWFnZSBpc24ndCBhdmFpbGFibGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCmluZGV4IGJhNWVmOTM1ZTRkZi4uN2VmZWFhMGUyODBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtODE3LDE5ICs4MTcsNiBAQCBMZWdh
Y3lJbmxpbmVGbG93Qm94KiBSZW5kZXJJbmxpbmU6OmNyZWF0ZUFuZEFwcGVuZElubGluZUZsb3dC
b3goKQogICAgIHJldHVybiBmbG93Qm94OwogfQogCi1MYXlvdXRVbml0IFJlbmRlcklubGluZTo6
bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgLypkaXJlY3Rpb24q
LywgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QKLXsKLSAgICBh
dXRvJiBsaW5lU3R5bGUgPSBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsK
LSAgICByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChsaW5lU3R5bGUuY29tcHV0ZWRM
aW5lSGVpZ2h0KCkpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlcklubGluZTo6YmFzZWxpbmVQb3Np
dGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9z
aXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBm
aXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogdGhpcy0+c3R5bGUoKTsKLSAgICBhdXRvJiBm
b250TWV0cmljcyA9IHN0eWxlLm1ldHJpY3NPZlByaW1hcnlGb250KCk7Ci0gICAgcmV0dXJuIExh
eW91dFVuaXQgeyBmb250TWV0cmljcy5hc2NlbnQoKSArIChsaW5lSGVpZ2h0KGZpcnN0TGluZSwg
ZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpKSAvIDIg
fTsKLX0KLQogTGF5b3V0U2l6ZSBSZW5kZXJJbmxpbmU6Om9mZnNldEZvckluRmxvd1Bvc2l0aW9u
ZWRJbmxpbmUoY29uc3QgUmVuZGVyQm94KiBjaGlsZCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTog
VGhpcyBmdW5jdGlvbiBpc24ndCByaWdodCB3aXRoIG1peGVkIHdyaXRpbmcgbW9kZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggNzVlNmRiMmQ4N2QxLi4yNDM0
YmU4OGJmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTEz
OSw5ICsxMzksNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaXJ0eUxpbmVGcm9tQ2hhbmdlZENo
aWxkKCkgZmluYWwgeyBtX2xlZ2FjeUxpbmVCb3hlcy5kaXJ0eUxpbmVGcm9tQ2hhbmdlZENoaWxk
KCp0aGlzKTsgfQogCi0gICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBM
aW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5n
TGluZSkgY29uc3QgZmluYWw7Ci0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wg
Zmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9u
T25Db250YWluaW5nTGluZSkgY29uc3QgZmluYWw7Ci0gICAgCiAgICAgdm9pZCB1cGRhdGVIaXRU
ZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0IGZpbmFs
OwogCiAgICAgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0
KiA9IDApIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCcmVhay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcAppbmRleCA0YjRkNzgzMjNjZWQuLjdlMGYyNmZmN2Q2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKQEAgLTU5LDI2ICs1OSw2IEBAIFJlbmRl
ckxpbmVCcmVhazo6flJlbmRlckxpbmVCcmVhaygpCiB7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVy
TGluZUJyZWFrOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSAv
KmRpcmVjdGlvbiovLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25z
dAotewotICAgIGlmIChmaXJzdExpbmUpIHsKLSAgICAgICAgYXV0byYgZmlyc3RMaW5lU3R5bGUg
PSB0aGlzLT5maXJzdExpbmVTdHlsZSgpOwotICAgICAgICBpZiAoJmZpcnN0TGluZVN0eWxlICE9
ICZzdHlsZSgpKQotICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwo
Zmlyc3RMaW5lU3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGlmICgh
bV9jYWNoZWRMaW5lSGVpZ2h0KQotICAgICAgICBtX2NhY2hlZExpbmVIZWlnaHQgPSBMYXlvdXRV
bml0Ojpmcm9tRmxvYXRDZWlsKHN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwotICAgIHJl
dHVybiAqbV9jYWNoZWRMaW5lSGVpZ2h0OwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxpbmVCcmVh
azo6YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGly
ZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAg
YXV0byYgc3R5bGUgPSBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogdGhpcy0+c3R5bGUo
KTsKLSAgICBhdXRvJiBmb250TWV0cmljcyA9IHN0eWxlLm1ldHJpY3NPZlByaW1hcnlGb250KCk7
Ci0gICAgcmV0dXJuIExheW91dFVuaXQgeyAoZm9udE1ldHJpY3MuYXNjZW50KCkgKyAobGluZUhl
aWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSkgLSBmb250TWV0cmlj
cy5oZWlnaHQoKSkgLyAyKSB9OwotfQotCiBpbnQgUmVuZGVyTGluZUJyZWFrOjpjYXJldE1pbk9m
ZnNldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CkBAIC0xMzEsNyArMTExLDYgQEAgdm9pZCBS
ZW5kZXJMaW5lQnJlYWs6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBi
b29sKiB3YXNGaXhlZCkgY28KIAogdm9pZCBSZW5kZXJMaW5lQnJlYWs6OnVwZGF0ZUZyb21TdHls
ZSgpCiB7Ci0gICAgbV9jYWNoZWRMaW5lSGVpZ2h0ID0geyB9OwogICAgIFJFTEVBU0VfQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNJbmxpbmUoKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCBkZjExOThhNWZjZDUuLmJlYjM1
OTNkZjEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
cmVhay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaApA
QCAtNjEsOSArNjEsNiBAQCBwcml2YXRlOgogICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0
IGZpbmFsOwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgZmluYWw7CiAKLSAg
ICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
LCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBmaW5hbDsKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5l
UG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25N
b2RlKSBjb25zdCBmaW5hbDsKLQogICAgIExheW91dFVuaXQgbWFyZ2luVG9wKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gMDsgfQogICAgIExheW91dFVuaXQgbWFyZ2luQm90dG9tKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gMDsgfQogICAgIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIDA7IH0KQEAgLTgwLDggKzc3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBk
YXRlRnJvbVN0eWxlKCkgZmluYWw7CiAgICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxMYXlvdXRV
bml0PiBtX2NhY2hlZExpbmVIZWlnaHQgeyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IGNmNTNi
YjhhYjZhYS4uMGU0MjUyM2YxMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCkBAIC04NywxMCArODcsNiBAQCBjb25zdCBpbnQgb3B0aW9uc1NwYWNpbmdJ
bmxpbmVTdGFydCA9IDI7CiAvLyBEZWZhdWx0IHNpemUgd2hlbiB0aGUgbXVsdGlwbGUgYXR0cmli
dXRlIGlzIHByZXNlbnQgYnV0IHNpemUgYXR0cmlidXRlIGlzIGFic2VudC4KIGNvbnN0IGludCBk
ZWZhdWx0U2l6ZSA9IDQ7CiAKLS8vIEZJWE1FOiBUaGlzIGhhcmRjb2RlZCBiYXNlbGluZUFkanVz
dG1lbnQgaXMgd2hhdCB3ZSB1c2VkIHRvIGRvIGZvciB0aGUgb2xkCi0vLyB3aWRnZXQsIGJ1dCBJ
J20gbm90IHN1cmUgdGhpcyBpcyByaWdodCBmb3IgdGhlIG5ldyBjb250cm9sLgotY29uc3QgaW50
IGJhc2VsaW5lQWRqdXN0bWVudCA9IDc7Ci0KIFJlbmRlckxpc3RCb3g6OlJlbmRlckxpc3RCb3go
SFRNTFNlbGVjdEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBS
ZW5kZXJCbG9ja0Zsb3coVHlwZTo6TGlzdEJveCwgZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiB7
CkBAIC0zMDgsMTQgKzMwNCw2IEBAIFJlbmRlckJveDo6TG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzIFJlbmRlckxpc3RCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91CiAgICAgcmV0dXJu
IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNhbFRv
cCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6YmFzZWxpbmVQb3NpdGlvbihib29s
IGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVjdGlvbiwgTGluZVBvc2l0aW9u
TW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIGF1dG8gYmFzZWxpbmUgPSBSZW5k
ZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uLCBsaW5lUG9z
aXRpb25Nb2RlKTsKLSAgICBpZiAoIXNob3VsZEFwcGx5TGF5b3V0Q29udGFpbm1lbnQoKSkKLSAg
ICAgICAgYmFzZWxpbmUgLT0gYmFzZWxpbmVBZGp1c3RtZW50OwotICAgIHJldHVybiBiYXNlbGlu
ZTsKLX0KLQogTGF5b3V0UmVjdCBSZW5kZXJMaXN0Qm94OjppdGVtQm91bmRpbmdCb3hSZWN0KGNv
bnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBpbnQgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgTGF5b3V0VW5pdCB4ID0gYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKaW5k
ZXggNGE1NDczZmUyMzA0Li4xMjFmZDM2YzhhMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaApAQCAtOTcsNyArOTcsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
b21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgs
IExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwotICAgIExheW91dFVuaXQg
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQ
b3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlTG9naWNhbEhlaWdodChMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCmluZGV4IDExNmY4YTYyMzE1ZS4uYmE4YjUwOGEx
YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
CkBAIC00MjIsMjAgKzQyMiw2IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlSW5saW5l
TWFyZ2lucygpCiAgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luRW5kKFN0eWxlOjpNYXJnaW5F
ZGdlOjpGaXhlZCB7IG1hcmdpbkVuZCB9KTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJMaXN0TWFy
a2VyOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rp
b24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKLXsKLSAgICBpZiAo
IWlzSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIG1fbGlzdEl0ZW0tPmxpbmVIZWlnaHQoZmlyc3RM
aW5lLCBkaXJlY3Rpb24sIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7Ci0gICAgcmV0dXJu
IFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9u
TW9kZSk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGlzdE1hcmtlcjo6YmFzZWxpbmVQb3NpdGlv
bihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRp
b25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0ltYWdlKCkpCi0g
ICAgICAgIHJldHVybiBtX2xpc3RJdGVtLT5iYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgZGly
ZWN0aW9uLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOwotICAgIHJldHVybiBSZW5kZXJC
b3g6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1v
ZGUpOwotfQotCiBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gc3R5bGUoKS5saXN0U3R5bGVQb3NpdGlvbigpID09IExpc3RTdHlsZVBvc2l0aW9u
OjpJbnNpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaApp
bmRleCAyNThjNmEwYjJkMzIuLjI2MWY4OWU0MmE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCkBAIC04MSw4ICs4MSw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIGZpbmFsOwogICAgIHZv
aWQgbGF5b3V0KCkgZmluYWw7CiAgICAgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRy
LCBjb25zdCBJbnRSZWN0KikgZmluYWw7Ci0gICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wg
Zmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmlu
YWw7Ci0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmluYWw7CiAgICAgTGF5b3V0
UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBmaW5hbDsKICAg
ICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlJiBuZXdTdHlsZSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5oCmluZGV4IDU1MDJkMTc3ODM4OS4uNTUxN2FhNjkyNTA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaApAQCAtMTI3LDE0ICsxMjcsNyBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIC8vIEZsZXhib3ggZGVmaW5lcyBiYXNlbGluZXMgZGlmZmVyZW50bHkgdGhh
biByZWd1bGFyIGJsb2Nrcy4KLSAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIG1l
bnVsaXN0cyBuZWVkIHRvIGRvIHRoZSByZWd1bGFyIGJsb2NrIGJlaGF2aW9yLgotICAgIExheW91
dFVuaXQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUg
ZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIHBvc2l0aW9uKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGlu
ZSwgZGlyZWN0aW9uLCBwb3NpdGlvbik7Ci0gICAgfQogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0
VW5pdD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBSZW5kZXJC
bG9jazo6Zmlyc3RMaW5lQmFzZWxpbmUoKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gaW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24pIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIFJlbmRlckJsb2NrOjppbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVj
dGlvbik7IH0KIAogICAgIHZvaWQgZ2V0SXRlbUJhY2tncm91bmRDb2xvcih1bnNpZ25lZCBsaXN0
SW5kZXgsIENvbG9yJiwgYm9vbCYgaXRlbUhhc0N1c3RvbUJhY2tncm91bmRDb2xvcikgY29uc3Q7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXggNTQzOTI5
ODZmMjZhLi5mNjdlNWQxNDczNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
bGlkZXIuY3BwCkBAIC03MiwxMiArNzIsNiBAQCBSZWY8SFRNTElucHV0RWxlbWVudD4gUmVuZGVy
U2xpZGVyOjpwcm90ZWN0ZWRFbGVtZW50KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsKIH0KIAotTGF5b3V0VW5pdCBS
ZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGly
ZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogUGF0
Y2ggdGhpcyBmdW5jdGlvbiBmb3Igd3JpdGluZy1tb2RlLgotICAgIHJldHVybiBoZWlnaHQoKSAr
IG1hcmdpblRvcCgpOwotfQotCiB2b2lkIFJlbmRlclNsaWRlcjo6Y29tcHV0ZUludHJpbnNpY0xv
Z2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhM
b2dpY2FsV2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKHNob3VsZEFwcGx5U2l6ZU9ySW5saW5lU2l6
ZUNvbnRhaW5tZW50KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaApp
bmRleCA1ODNkODIzMThiNjcuLjEzMGM2M2Q1NGViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuaApAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEFTQ0lJTGl0ZXJhbCByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRl
clNsaWRlciJfczsgfQogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25D
b250YWluaW5nTGluZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb21wdXRlSW50cmluc2lj
TG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1h
eExvZ2ljYWxXaWR0aCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAppbmRleCBmMWMxNDFlZDRlMWQuLjZmMDE3M2NiM2UzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0xNTgyLDE5ICsxNTgyLDYgQEAgUmVu
ZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEFmdGVyKGNvbnN0IFJlbmRlclRhYmxlQ2Vs
bCogY2VsbCkgY29uc3QKICAgICByZXR1cm4gY2VsbC0+c2VjdGlvbigpLT5wcmltYXJ5Q2VsbEF0
KGNlbGwtPnJvd0luZGV4KCksIGVmZkNvbCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyVGFibGU6
OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVj
dGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIGlm
IChhdXRvIGJhc2VsaW5lUG9zID0gZmlyc3RMaW5lQmFzZWxpbmUoKSkKLSAgICAgICAgcmV0dXJu
IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5Ub3AoKSA6IG1hcmdpblJpZ2h0
KCkpICsgYmFzZWxpbmVQb3MudmFsdWUoKTsKLSAgICByZXR1cm4gUmVuZGVyQm94OjpiYXNlbGlu
ZVBvc2l0aW9uKGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKLX0KLQot
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJUYWJsZTo6aW5saW5lQmxvY2tCYXNlbGlu
ZShMaW5lRGlyZWN0aW9uTW9kZSkgY29uc3QKLXsKLSAgICAvLyBUYWJsZXMgYXJlIHNraXBwZWQg
d2hlbiBjb21wdXRpbmcgYW4gaW5saW5lLWJsb2NrJ3MgYmFzZWxpbmUuCi0gICAgcmV0dXJuIHN0
ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4oKTsKLX0KLQogc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBSZW5kZXJUYWJsZTo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogewogICAgIC8vIFRoZSBi
YXNlbGluZSBvZiBhICd0YWJsZScgaXMgdGhlIHNhbWUgYXMgdGhlICdpbmxpbmUtdGFibGUnIGJh
c2VsaW5lIHBlciBDU1MgMyBGbGV4Ym94IChDU1MgMi4xCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5oCmluZGV4IDE5Yzk3NDQxZTVjMC4uNmYyYTBmZTM2YmVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaApAQCAtMjMxLDEwICsyMzEsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwog
ICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCi0g
ICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0
aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29u
c3QgZmluYWw7CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmaXJzdExpbmVCYXNlbGlu
ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gbGFzdExp
bmVCYXNlbGluZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gaW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSkgY29uc3QgZmluYWw7CiAK
ICAgICBSZW5kZXJUYWJsZUNvbCogc2xvd0NvbEVsZW1lbnQodW5zaWduZWQgY29sLCBib29sKiBz
dGFydEVkZ2UsIGJvb2wqIGVuZEVkZ2UpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAppbmRleCAxMjM4YjZhYzFiMmEuLjliZjY1N2Jj
ZjBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgUmVuZGVyQm94OjpMb2dpY2FsRXh0ZW50Q29tcHV0ZWRW
YWx1ZXMgUmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KEwKIAogICAgIGlm
IChSZW5kZXJCb3gqIGlubmVyVGV4dEJveCA9IGlubmVyVGV4dC0+cmVuZGVyQm94KCkpIHsKICAg
ICAgICAgTGF5b3V0VW5pdCBub25Db250ZW50SGVpZ2h0ID0gaW5uZXJUZXh0Qm94LT5ib3JkZXJB
bmRQYWRkaW5nTG9naWNhbEhlaWdodCgpICsgaW5uZXJUZXh0Qm94LT5tYXJnaW5Mb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlQ29udHJvbExvZ2ljYWxIZWln
aHQoaW5uZXJUZXh0Qm94LT5saW5lSGVpZ2h0KHRydWUsIEhvcml6b250YWxMaW5lLCBQb3NpdGlv
bk9mSW50ZXJpb3JMaW5lQm94ZXMpLCBub25Db250ZW50SGVpZ2h0KTsKKyAgICAgICAgbG9naWNh
bEhlaWdodCA9IGNvbXB1dGVDb250cm9sTG9naWNhbEhlaWdodChpbm5lclRleHRCb3gtPmxpbmVI
ZWlnaHQoKSwgbm9uQ29udGVudEhlaWdodCk7CiAKICAgICAgICAgLy8gV2UgYXJlIGFibGUgdG8g
aGF2ZSBhIGhvcml6b250YWwgc2Nyb2xsYmFyIGlmIHRoZSBvdmVyZmxvdyBzdHlsZSBpcyBzY3Jv
bGwsIG9yIGlmIGl0cyBhdXRvIGFuZCB0aGVyZSdzIG5vIHdvcmQgd3JhcC4KICAgICAgICAgYXV0
byBzaG91bGRJbmNsdWRlU2Nyb2xsYmFySGVpZ2h0ID0gWyZdIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKaW5kZXggODJlMzJjMzk4ZGZkLi4yNDMwM2Vh
ZDAxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5o
CkBAIC04OCwxMiArODgsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckNv
bnRhaW5lcihFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4
dENvbnRyb2xJbm5lckNvbnRhaW5lcigpOwogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0
aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3Np
dGlvbk1vZGUgcG9zaXRpb24pIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4g
UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIHBvc2l0
aW9uKTsKLSAgICB9CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmaXJzdExpbmVCYXNl
bGluZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFJlbmRlckJsb2NrOjpmaXJzdExpbmVCYXNl
bGluZSgpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbmxpbmVCbG9ja0Jhc2Vs
aW5lKExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
UmVuZGVyQmxvY2s6OmlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsgfQogCiBwcml2YXRl
OgogICAgIGJvb2wgaXNGbGV4aWJsZUJveEltcGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmNwcAppbmRleCA4NGIzZDZmNDFiMjAuLmM4NzY4OGYwMDhhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwCkBAIC05OCwxMSArOTgsNiBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lOjpjb21wdXRlQ29udHJvbExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsaQog
ICAgIHJldHVybiBsaW5lSGVpZ2h0ICogdGV4dEFyZWFFbGVtZW50KCkucm93cygpICsgbm9uQ29u
dGVudEhlaWdodDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0
aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGlu
ZVBvc2l0aW9uTW9kZSk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Omxh
eW91dEV4Y2x1ZGVkQ2hpbGRyZW4oUmVsYXlvdXRDaGlsZHJlbiByZWxheW91dENoaWxkcmVuKQog
ewogICAgIFJlbmRlclRleHRDb250cm9sOjpsYXlvdXRFeGNsdWRlZENoaWxkcmVuKHJlbGF5b3V0
Q2hpbGRyZW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaAppbmRleCBkZTE3YWRhM2Y1YmEuLjIzZWRjNmI2ZGY4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lLmgKQEAgLTQ0LDcgKzQ0LDYgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRBdmVyYWdl
Q2hhcldpZHRoKCkgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRDb250ZW50TG9n
aWNhbFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5p
dCBjb21wdXRlQ29udHJvbExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsaW5lSGVpZ2h0LCBMYXlv
dXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0IG92ZXJyaWRlOwotICAgIExheW91dFVuaXQg
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQ
b3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgdm9pZCBsYXlvdXRFeGNsdWRlZENoaWxkcmVuKFJlbGF5b3V0Q2hpbGRyZW4pIG92ZXJy
aWRlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVX
aWR0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguY3BwCmlu
ZGV4IGJhMDk3YmJlMzYyMC4uMzkxMDVhMGExMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0xpbmVXaWR0aC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBMaW5lV2lkdGg6
OmZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSBjb25zdAog
dm9pZCBMaW5lV2lkdGg6OnVwZGF0ZUF2YWlsYWJsZVdpZHRoKCkKIHsKICAgICBMYXlvdXRVbml0
IGhlaWdodCA9IG1fYmxvY2subG9naWNhbEhlaWdodCgpOwotICAgIGF1dG8gbGluZUhlaWdodCA9
IHN0ZDo6bWF4KDBfbHUsIG1fYmxvY2subGluZUhlaWdodCh0cnVlLCBtX2Jsb2NrLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRp
b25PZkludGVyaW9yTGluZUJveGVzKSk7CisgICAgYXV0byBsaW5lSGVpZ2h0ID0gc3RkOjptYXgo
MF9sdSwgbV9ibG9jay5saW5lSGVpZ2h0KCkpOwogICAgIG1fbGVmdCA9IG1fYmxvY2subG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgbGluZUhlaWdodCk7CiAgICAgbV9yaWdodCA9IG1f
YmxvY2subG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIGxpbmVIZWlnaHQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suY3BwCmluZGV4IDVkMTY3YWVkNzY4Ny4uMWFkZWJlNTg0MThkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAt
OTUsMTQgKzk1LDYgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6bWlycm9ySWZOZWVk
ZWQoTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBMYXlvdXQKICAgICByZXR1cm4gaG9yaXpv
bnRhbE9mZnNldDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6YmFzZWxpbmVQ
b3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5l
UG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKGxpbmVQb3Np
dGlvbk1vZGUgPT0gUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBmaXJzdExpbmVCYXNlbGluZSgpLnZhbHVlX29yKFJlbmRlckJsb2Nr
OjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2Rl
KSk7Ci19Ci0KIExheW91dFVuaXQgdG9Vc2VyVW5pdHMoY29uc3QgTWF0aE1MRWxlbWVudDo6TGVu
Z3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgTGF5b3V0VW5pdCYg
cmVmZXJlbmNlVmFsdWUpCiB7CiAgICAgc3dpdGNoIChsZW5ndGgudHlwZSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCmluZGV4
IGIwNWI2ZWQwNjU0ZC4uMzczYmI0YzgyODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC01OSw4ICs1OSw2IEBAIHB1
YmxpYzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2
MTcuCiAgICAgdmlydHVhbCBSZW5kZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJh
dG9yKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGlu
ZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>476087</attachid>
            <date>2025-07-17 19:45:35 -0700</date>
            <delta_ts>2025-07-18 05:12:45 -0700</delta_ts>
            <desc>[fast-cq]Patch</desc>
            <filename>bug-295663-20250717194535.patch</filename>
            <type>text/plain</type>
            <size>1861</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSA3Nzg1ZTM3ZGQ3YjU2MmFlOTU4NDQxYTlmMGJlNTE5NDU0M2E1NTg3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFdlZCwgOSBKdWwgMjAyNSAxNToyNzoxOSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFtDbGVhbnVw
XSBMZXQncyBjYWxsIGJhc2VsaW5lUG9zaXRpb24gb25seSBvbiBpbi1mbG93IGlubGluZQogbGV2
ZWwgYm94ZXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5NTY2MwoK
UmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCgpGbG9hdHMgYW5kIG91dC1vZi1mbG93IGJveGVz
IGRvIG5vdCBwYXJ0aWNpcGF0ZSBpbiBiYXNlbGluZSBhbGlnbm1lbnQgKG9yIGFueSBhbGlnbm1l
bnQgZm9yIHRoYXQgbWF0dGVyKS4KCiogU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcDoKKFdlYkNvcmU6OkxheW91
dEludGVncmF0aW9uOjpiYXNlbGluZVBvc2l0aW9uKToKKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpzZXRJbnRlZ3JhdGlvbkJhc2VsaW5lKToKLS0tCiAuLi4vaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwICAgICAgfCA1ICsrKysrCiAxIGZpbGUg
Y2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJveEdl
b21ldHJ5VXBkYXRlci5jcHAKaW5kZXggN2U4OThiZDBlMTRjLi4zNTc3MTdhMTEwZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkJveEdlb21ldHJ5VXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcApAQCAtMzk2LDYg
KzM5Niw4IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlubGluZUJsb2NrQmFz
ZWxpbmUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCiAKIExheW91dFVuaXQgc3RhdGljIGJh
c2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCiB7CisgICAgQVNTRVJU
KHJlbmRlckJveC5pc0luRmxvdygpKTsKKwogICAgIGF1dG8gd3JpdGluZ01vZGUgPSByZW5kZXJC
b3guY29udGFpbmluZ0Jsb2NrKCktPndyaXRpbmdNb2RlKCk7CiAgICAgYXV0byBtYXJnaW5CZWZv
cmUgPSB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IHJlbmRlckJveC5tYXJnaW5Ub3AoKSA6
IHJlbmRlckJveC5tYXJnaW5SaWdodCgpOwogCkBAIC01MzQsNiArNTM2LDkgQEAgTGF5b3V0VW5p
dCBzdGF0aWMgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIHJlbmRlckJveCkKIAog
c3RhdGljIGlubGluZSB2b2lkIHNldEludGVncmF0aW9uQmFzZWxpbmUoY29uc3QgUmVuZGVyQm94
JiByZW5kZXJCb3gpCiB7CisgICAgaWYgKHJlbmRlckJveC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gaGFzTm9uU3ludGhldGlj
QmFzZWxpbmUgPSBbJl0gewogICAgICAgICBpZiAoYXV0byogcmVuZGVyTGlzdE1hcmtlciA9IGR5
bmFtaWNEb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPihyZW5kZXJCb3gpKQogICAgICAgICAgICAg
cmV0dXJuICFyZW5kZXJMaXN0TWFya2VyLT5pc0ltYWdlKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>