<?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>234691</bug_id>
          
          <creation_ts>2021-12-26 10:38:08 -0800</creation_ts>
          <short_desc>Use StyleColor object instead of Color in WebCore</short_desc>
          <delta_ts>2022-10-03 12:14:13 -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>CSS</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>245970</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Matthieu Dubet">m_dubet</assigned_to>
          <cc>darin</cc>
    
    <cc>emilio</cc>
    
    <cc>ntim</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1826874</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-26 10:38:08 -0800</bug_when>
    <thetext>The CSS 5 color mutation functions (color-mix(), color-contrast(), relative color syntax) don&apos;t work with currentcolor or system-colors as one of their origin colors.

This is due to the parser not being the right time to resolve those values, so some intermediate type is going to be needed to late resolve these things (perhaps time for a CSSColor object that can be resolved into a Color when appropriate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827519</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-02 10:39:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/87050763&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1896546</commentid>
    <comment_count>2</comment_count>
    <who name="Matthieu Dubet">m_dubet</who>
    <bug_when>2022-09-06 13:14:31 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/4068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1896923</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-09-07 16:22:24 -0700</bug_when>
    <thetext>I’m having trouble getting my work in progress pushed to GitHub, so I am going to attach a patch here. Matthieu mentioned he wanted to see my cut at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1896924</commentid>
    <comment_count>4</comment_count>
      <attachid>462189</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-09-07 16:23:42 -0700</bug_when>
    <thetext>Created attachment 462189
Darin’s cut at part of the work for reference</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1902908</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-10-03 12:14:11 -0700</bug_when>
    <thetext>Committed 255095@main (b6c018250b04): &lt;https://commits.webkit.org/255095@main&gt;

Reviewed commits have been landed. Closing PR #4068 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>462189</attachid>
            <date>2022-09-07 16:23:42 -0700</date>
            <delta_ts>2022-09-07 16:23:42 -0700</delta_ts>
            <desc>Darin’s cut at part of the work for reference</desc>
            <filename>StyleColorExploration.patch</filename>
            <type>text/plain</type>
            <size>202704</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAzMTEyM2U0NDYzZDMuLmUyMzI0NjlmY2FhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzAxMyw2ICszMDEzLDcgQEAK
IAkJOTMzMDlFMjAwOTlFNjQ5MjAwNTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlERDEwOTlFNjQ5MTAw
NTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA5RTI0MDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMzA5REQ1MDk5RTY0OTEwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJ
bkR1bW15U3BhbkNvbW1hbmQuaCAqLzsgfTsKIAkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8q
IFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzMwOUVBMDA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5MzM2RUFEQjI4QzUwMTM3
MDA1Qjc4NjMgLyogU3R5bGVLZXl3b3JkQ29sb3JSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNkVBREEyOEM1MDEzNTAwNUI3ODYzIC8q
IFN0eWxlS2V5d29yZENvbG9yUmVzb2x2ZXIuaCAqLzsgfTsKIAkJOTMzQTE0MzAwQjdEMTg4NjAw
QTUzRkZEIC8qIFRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTMzQTE0MkQwQjdEMTg4NjAwQTUzRkZEIC8qIFRleHRFdmVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzM0ExNEI5MEI3
RDFENTIwMEE1M0ZGRCAvKiBKU1RleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzQTE0QjcwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2
ZW50LmggKi87IH07CiAJCTkzNDQyQzlFMEQyQjMzNUMwMDMzOEZGOSAvKiBIVE1MVGFibGVSb3dz
Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM0NDJDOUQwRDJCMzM1QzAwMzM4RkY5IC8qIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgg
Ki87IH07CkBAIC0xMzA1Miw2ICsxMzA1Myw3IEBACiAJCTkzMzJBQjhCMTY1M0E5NzkwMEQ4MjdF
QyAvKiBGRUxpZ2h0aW5nTkVPTi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
RUxpZ2h0aW5nTkVPTi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMyQUI4QzE2
NTNBOTc5MDBEODI3RUMgLyogTkVPTkhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTkVPTkhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMz
NTRBM0IwQjI0RjhDOTAwM0Y2REVBIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzZFQURBMjhDNTAxMzUwMDVCNzg2MyAvKiBT
dHlsZUtleXdvcmRDb2xvclJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0eWxlS2V5d29yZENvbG9yUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTMzQTE0MkIwQjdEMTg4NjAwQTUzRkZEIC8qIFRleHRFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzNBMTQyQzBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBUZXh0RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzNBMTQyRDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzAyNzUsNiArMzAyNzcsNyBAQAogCQkJCUNBMDkxRDg5MjNDRjkw
ODgwMEFENDM0NiAvKiBTdHlsZUltYWdlU2V0LmggKi8sCiAJCQkJQkMyMjczMDEwRTgyRjFFNjAw
RTdGOTc1IC8qIFN0eWxlSW5oZXJpdGVkRGF0YS5jcHAgKi8sCiAJCQkJQkMyMjczMDIwRTgyRjFF
NjAwRTdGOTc1IC8qIFN0eWxlSW5oZXJpdGVkRGF0YS5oICovLAorCQkJCTkzMzZFQURBMjhDNTAx
MzUwMDVCNzg2MyAvKiBTdHlsZUtleXdvcmRDb2xvclJlc29sdmVyLmggKi8sCiAJCQkJQkM1RUI3
MjcwRTgxREU4MTAwQjI1OTY1IC8qIFN0eWxlTWFycXVlZURhdGEuY3BwICovLAogCQkJCUJDNUVC
NzI4MEU4MURFODEwMEIyNTk2NSAvKiBTdHlsZU1hcnF1ZWVEYXRhLmggKi8sCiAJCQkJQkM1RUI3
NEIwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmNwcCAqLywKQEAgLTM1NTcw
LDYgKzM1NTczLDcgQEAKIAkJCQlDREY3NDgzRjE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0
aW9uc1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTJBMTA1MDE2NjQ0NEZEMDA4RkEz
MTEgLyogR3JpZFRyYWNrU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyREU3MTgxRTRCNzRB
NjAwRjlBQ0NGIC8qIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTMzNkVBREIyOEM1MDEzNzAwNUI3ODYzIC8qIFN0eWxlS2V5d29yZENvbG9yUmVzb2x2ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2RUE4OUE3MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNoYWJs
ZUFjdGlvbkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0ODJCNzQ2MTE5OEMzNTQwMEJGQjAw
NSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzQ4QkUwMTJDQkYy
REMwMDFGQkE0MSAvKiBIYXNoVG9vbHMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggOTc4OTAxOTdj
ZmI2Li5iMmFjMTRmZWNjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9D
U1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtODYsNiArODYsMTkgQEAgc3RydWN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDb250ZXh0IDogQmxlbmRpbmdDb250ZXh0IHsKICAgICB9CiB9OwogCitzdHJ1
Y3QgU2hhZG93V2l0aENvbG9yQ29udGV4dCB7CisgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
IHsgbnVsbHB0ciB9OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSB7IG51bGxwdHIgfTsK
KworICAgIENvbG9yIHJlc29sdmVkQ29sb3IoKSBjb25zdDsKK307CisKK0NvbG9yIFNoYWRvd1dp
dGhDb2xvckNvbnRleHQ6OnJlc29sdmVkQ29sb3IoKSBjb25zdAoreworICAgIEFTU0VSVChzaGFk
b3cpOworICAgIHJldHVybiBzdHlsZSA/IHN0eWxlLT5yZXNvbHZlZENvbG9yKHNoYWRvdy0+Y29s
b3IoKSkgOiBzaGFkb3ctPmNvbG9yKCkuYWxyZWFkeVJlc29sdmVkQ29sb3IoKTsKK30KKwogc3Rh
dGljIGlubGluZSBpbnQgYmxlbmRGdW5jKGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBibGVuZChmcm9tLCB0
bywgY29udGV4dCk7CkBAIC0xNDgsOCArMTYxLDExIEBAIHN0YXRpYyBpbmxpbmUgU2hhZG93U3R5
bGUgYmxlbmRGdW5jKFNoYWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBjb25zdCBDU1NQ
CiAgICAgcmV0dXJuIHJlc3VsdCA+IDAgPyBTaGFkb3dTdHlsZTo6Tm9ybWFsIDogU2hhZG93U3R5
bGU6Okluc2V0OwogfQogCi1zdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRh
PiBibGVuZEZ1bmMoY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSogdG8s
IGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KQorc3RhdGljIGlubGlu
ZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRGdW5jKFNoYWRvd1dpdGhDb2xvckNv
bnRleHQgZnJvbVdpdGhDb2xvckNvbnRleHQsIFNoYWRvd1dpdGhDb2xvckNvbnRleHQgdG9XaXRo
Q29sb3JDb250ZXh0LCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkK
IHsKKyAgICBhdXRvIGZyb20gPSBmcm9tV2l0aENvbG9yQ29udGV4dC5zaGFkb3c7CisgICAgYXV0
byB0byA9IHRvV2l0aENvbG9yQ29udGV4dC5zaGFkb3c7CisKICAgICBBU1NFUlQoZnJvbSAmJiB0
byk7CiAgICAgQVNTRVJUKGZyb20tPnN0eWxlKCkgPT0gdG8tPnN0eWxlKCkpOwogCkBAIC0xNTgs
NyArMTc0LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxl
bmRGdW5jKGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnMKICAgICAgICAgYmxlbmQoZnJvbS0+
c3ByZWFkKCksIHRvLT5zcHJlYWQoKSwgY29udGV4dCksCiAgICAgICAgIGJsZW5kRnVuYyhmcm9t
LT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgY29udGV4dCksCiAgICAgICAgIGZyb20tPmlzV2Via2l0
Qm94U2hhZG93KCksCi0gICAgICAgIGJsZW5kKGZyb20tPmNvbG9yKCksIHRvLT5jb2xvcigpLCBj
b250ZXh0KSk7CisgICAgICAgIGJsZW5kKGZyb21XaXRoQ29sb3JDb250ZXh0LnJlc29sdmVkQ29s
b3IoKSwgdG9XaXRoQ29sb3JDb250ZXh0LnJlc29sdmVkQ29sb3IoKSwgY29udGV4dCkpOwogfQog
CiBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTEzNzMsMjAgKzEzODks
MjAgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2hhZG93TGlzdExlbmd0aChjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3cpCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRv
dywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cpCitzdGF0aWMgaW5saW5lIFNoYWRvd1dp
dGhDb2xvckNvbnRleHQgc2hhZG93Rm9yQmxlbmRpbmcoU2hhZG93V2l0aENvbG9yQ29udGV4dCBz
cmNTaGFkb3csIFNoYWRvd1dpdGhDb2xvckNvbnRleHQgb3RoZXJTaGFkb3cpCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dEYXRhKExlbmd0aFBv
aW50KExlbmd0aChMZW5ndGhUeXBlOjpGaXhlZCksIExlbmd0aChMZW5ndGhUeXBlOjpGaXhlZCkp
LCBMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpLCBMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpLCBT
aGFkb3dTdHlsZTo6Tm9ybWFsLCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0SW5zZXRTaGFkb3dEYXRh
KExlbmd0aFBvaW50KExlbmd0aChMZW5ndGhUeXBlOjpGaXhlZCksIExlbmd0aChMZW5ndGhUeXBl
OjpGaXhlZCkpLCBMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpLCBMZW5ndGgoTGVuZ3RoVHlwZTo6
Rml4ZWQpLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRC
b3hTaGFkb3dEYXRhKExlbmd0aFBvaW50KExlbmd0aChMZW5ndGhUeXBlOjpGaXhlZCksIExlbmd0
aChMZW5ndGhUeXBlOjpGaXhlZCkpLCBMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpLCBMZW5ndGgo
TGVuZ3RoVHlwZTo6Rml4ZWQpLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJh
bnNwYXJlbnRCbGFjayk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRl
ZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEoTGVuZ3RoUG9pbnQoTGVuZ3RoKExlbmd0aFR5
cGU6OkZpeGVkKSwgTGVuZ3RoKExlbmd0aFR5cGU6OkZpeGVkKSksIExlbmd0aChMZW5ndGhUeXBl
OjpGaXhlZCksIExlbmd0aChMZW5ndGhUeXBlOjpGaXhlZCksIFNoYWRvd1N0eWxlOjpJbnNldCwg
dHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogCi0gICAgaWYgKHNyY1NoYWRvdykKKyAg
ICBpZiAoc3JjU2hhZG93LnNoYWRvdykKICAgICAgICAgcmV0dXJuIHNyY1NoYWRvdzsKIAotICAg
IGlmIChvdGhlclNoYWRvdy0+c3R5bGUoKSA9PSBTaGFkb3dTdHlsZTo6SW5zZXQpCi0gICAgICAg
IHJldHVybiBvdGhlclNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0SW5zZXRX
ZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRJbnNldFNoYWRvd0RhdGEuZ2V0KCk7
CisgICAgaWYgKG90aGVyU2hhZG93LnNoYWRvdy0+c3R5bGUoKSA9PSBTaGFkb3dTdHlsZTo6SW5z
ZXQpCisgICAgICAgIHJldHVybiB7IG90aGVyU2hhZG93LnNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSA/ICZkZWZhdWx0SW5zZXRXZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRJ
bnNldFNoYWRvd0RhdGEuZ2V0KCkgfTsKIAotICAgIHJldHVybiBvdGhlclNoYWRvdy0+aXNXZWJr
aXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZh
dWx0U2hhZG93RGF0YS5nZXQoKTsKKyAgICByZXR1cm4geyBvdGhlclNoYWRvdy5zaGFkb3ctPmlz
V2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdFdlYktpdEJveFNoYWRvd0RhdGEuZ2V0KCkgOiAm
ZGVmYXVsdFNoYWRvd0RhdGEuZ2V0KCksIG51bGxwdHIgfTsKIH0KIAogY2xhc3MgUHJvcGVydHlX
cmFwcGVyU2hhZG93IGZpbmFsIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
ewpAQCAtMTQ2MiwxMSArMTQ3OCwxMSBAQCBwcml2YXRlOgogICAgICAgICBpbnQgdG9MZW5ndGgg
PSBzaGFkb3dMaXN0TGVuZ3RoKHRvU2hhZG93KTsKIAogICAgICAgICBpZiAoZnJvbUxlbmd0aCA9
PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAxICYmIHRvTGVuZ3RoIDw9IDEpKSB7Ci0gICAg
ICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRv
d0xpc3RzKGZyb21TaGFkb3csIHRvU2hhZG93LCBjb250ZXh0KSwgZmFsc2UpOworICAgICAgICAg
ICAgKGRlc3RpbmF0aW9uLiptX3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0
cyh7IGZyb21TaGFkb3csICZmcm9tIH0sIHsgdG9TaGFkb3csICZ0byB9LCBjb250ZXh0KSwgZmFs
c2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgKGRlc3RpbmF0
aW9uLiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMoZnJvbVNoYWRvdywgdG9T
aGFkb3csIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBjb250ZXh0KSwgZmFsc2UpOworICAgICAgICAo
ZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyh7IGZyb21T
aGFkb3csICZmcm9tIH0sIHsgdG9TaGFkb3csICZ0byB9LCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCwg
Y29udGV4dCksIGZhbHNlKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0xNDc3LDEz
ICsxNDkzLDE0IEBAIHByaXZhdGU6CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93RGF0YT4gYWRkU2hhZG93TGlzdHMoY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSwg
Y29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hh
ZG93RGF0YT4gY29uY2F0ZW5hdGVTaGFkb3dMaXN0c0FuZFJlc29sdmVDb2xvcnMoU2hhZG93V2l0
aENvbG9yQ29udGV4dCBzaGFkb3dBLCBTaGFkb3dXaXRoQ29sb3JDb250ZXh0IHNoYWRvd0IpIGNv
bnN0CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93
RGF0YTsKICAgICAgICAgU2hhZG93RGF0YSogbGFzdFNoYWRvdyA9IG51bGxwdHI7Ci0gICAgICAg
IGF1dG8gYWRkU2hhZG93cyA9IFsmXShjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpIHsKLSAgICAg
ICAgICAgIHdoaWxlIChzaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGJsZW5kZWRTaGFk
b3cgPSBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpzaGFkb3cpOworICAgICAgICBhdXRvIGFkZFNo
YWRvd3MgPSBbJl0oU2hhZG93V2l0aENvbG9yQ29udGV4dCBzaGFkb3cpIHsKKyAgICAgICAgICAg
IHdoaWxlIChzaGFkb3cuc2hhZG93KSB7CisgICAgICAgICAgICAgICAgYXV0byBibGVuZGVkU2hh
ZG93ID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqc2hhZG93LnNoYWRvdyk7CisgICAgICAgICAg
ICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0Q29sb3Ioc2hhZG93LnJlc29sdmVkQ29sb3IoKSk7CiAg
ICAgICAgICAgICAgICAgYXV0byogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRTaGFkb3cuZ2V0
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93KQogICAgICAgICAgICAgICAgICAg
ICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKQEAgLTE0OTEsNyArMTUw
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQo
V1RGTW92ZShibGVuZGVkU2hhZG93KSk7CiAKICAgICAgICAgICAgICAgICBsYXN0U2hhZG93ID0g
YmxlbmRlZFNoYWRvd1B0cjsKLSAgICAgICAgICAgICAgICBzaGFkb3cgPSBzaGFkb3cgPyBzaGFk
b3ctPm5leHQoKSA6IG51bGxwdHI7CisgICAgICAgICAgICAgICAgc2hhZG93LnNoYWRvdyA9IHNo
YWRvdy5zaGFkb3ctPm5leHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICAgICAg
YWRkU2hhZG93cyhzaGFkb3dCKTsKQEAgLTE0OTksMjAgKzE1MTYsMjAgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoY29uc3QgU2hhZG93
RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CisgICAgc3RkOjp1bmlxdWVfcHRyPFNo
YWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoU2hhZG93V2l0aENvbG9y
Q29udGV4dCBzaGFkb3dBLCBTaGFkb3dXaXRoQ29sb3JDb250ZXh0IHNoYWRvd0IsIGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIHsKICAgICAgICAg
Ly8gZnJvbSBvciB0byBtaWdodCBiZSBudWxsIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0
byBkbyBhZGRpdGl2aXR5LCBidXQgZG8gcmVwbGFjZSBpbnN0ZWFkLgotICAgICAgICBpZiAoc2hh
ZG93QSAmJiBzaGFkb3dCICYmIGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uID09IENvbXBvc2l0
ZU9wZXJhdGlvbjo6QWRkKQotICAgICAgICAgICAgcmV0dXJuIGFkZFNoYWRvd0xpc3RzKHNoYWRv
d0EsIHNoYWRvd0IpOworICAgICAgICBpZiAoc2hhZG93QS5zaGFkb3cgJiYgc2hhZG93Qi5zaGFk
b3cgJiYgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24gPT0gQ29tcG9zaXRlT3BlcmF0aW9uOjpB
ZGQpCisgICAgICAgICAgICByZXR1cm4gY29uY2F0ZW5hdGVTaGFkb3dMaXN0c0FuZFJlc29sdmVD
b2xvcnMoc2hhZG93QSwgc2hhZG93Qik7CiAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRv
d0RhdGE+IG5ld1NoYWRvd0RhdGE7CiAgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSBu
dWxscHRyOwogCi0gICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKLSAgICAgICAg
ICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRv
d0EsIHNoYWRvd0IpOwotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0g
c2hhZG93Rm9yQmxlbmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CisgICAgICAgIHdoaWxlIChzaGFk
b3dBLnNoYWRvdyB8fCBzaGFkb3dCLnNoYWRvdykgeworICAgICAgICAgICAgYXV0byBzcmNTaGFk
b3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKKyAgICAgICAgICAgIGF1
dG8gZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CiAKLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxl
bmRGdW5jKHNyY1NoYWRvdywgZHN0U2hhZG93LCBjb250ZXh0KTsKKyAgICAgICAgICAgIGF1dG8g
YmxlbmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhzcmNTaGFkb3csIGRzdFNoYWRvdywgY29udGV4dCk7
CiAgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93UHRyID0gYmxlbmRlZFNoYWRv
dy5nZXQoKTsKIAogICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93KQpAQCAtMTUyMiw0MyArMTUz
OSw0NCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRv
d1B0cjsKIAotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkg
OiAwOwotICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAw
OworICAgICAgICAgICAgc2hhZG93QS5zaGFkb3cgPSBzaGFkb3dBLnNoYWRvdyA/IHNoYWRvd0Eu
c2hhZG93LT5uZXh0KCkgOiBudWxscHRyOworICAgICAgICAgICAgc2hhZG93Qi5zaGFkb3cgPSBz
aGFkb3dCLnNoYWRvdyA/IHNoYWRvd0Iuc2hhZG93LT5uZXh0KCkgOiBudWxscHRyOwogICAgICAg
ICB9CiAKICAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CiAgICAgfQogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IFNo
YWRvd0RhdGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IsIGludCBmcm9tTGVu
Z3RoLCBpbnQgdG9MZW5ndGgsIGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDb250ZXh0JiBjb250
ZXh0KSBjb25zdAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21hdGNo
ZWRTaGFkb3dMaXN0cyhTaGFkb3dXaXRoQ29sb3JDb250ZXh0IHNoYWRvd0EsIFNoYWRvd1dpdGhD
b2xvckNvbnRleHQgc2hhZG93QiwgaW50IGZyb21MZW5ndGgsIGludCB0b0xlbmd0aCwgY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAoc2hhZG93QSAmJiBzaGFkb3dCICYmIGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uICE9
IENvbXBvc2l0ZU9wZXJhdGlvbjo6UmVwbGFjZSkKLSAgICAgICAgICAgIHJldHVybiBhZGRTaGFk
b3dMaXN0cyhzaGFkb3dBLCBzaGFkb3dCKTsKKyAgICAgICAgaWYgKHNoYWRvd0Euc2hhZG93ICYm
IHNoYWRvd0Iuc2hhZG93ICYmIGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uICE9IENvbXBvc2l0
ZU9wZXJhdGlvbjo6UmVwbGFjZSkKKyAgICAgICAgICAgIHJldHVybiBjb25jYXRlbmF0ZVNoYWRv
d0xpc3RzQW5kUmVzb2x2ZUNvbG9ycyhzaGFkb3dBLCBzaGFkb3dCKTsKKworICAgICAgICBpbnQg
bWF4TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworCisgICAgICAgIFZl
Y3RvcjxTaGFkb3dXaXRoQ29sb3JDb250ZXh0LCA0PiBmcm9tU2hhZG93cyhtYXhMZW5ndGgpOwor
ICAgICAgICBWZWN0b3I8U2hhZG93V2l0aENvbG9yQ29udGV4dCwgND4gdG9TaGFkb3dzKG1heExl
bmd0aCk7CiAKICAgICAgICAgLy8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVk
IGluIHJldmVyc2Ugb3JkZXIsIHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCiAg
ICAgICAgIC8vIHJldmVyc2UgdGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgotICAgICAgICBW
ZWN0b3I8Y29uc3QgU2hhZG93RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOwogICAg
ICAgICBmb3IgKGludCBpID0gZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAg
ICAgICBmcm9tU2hhZG93c1tpXSA9IHNoYWRvd0E7Ci0gICAgICAgICAgICBzaGFkb3dBID0gc2hh
ZG93QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QS5zaGFkb3cgPSBzaGFkb3dBLnNoYWRv
dy0+bmV4dCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEq
LCA0PiB0b1NoYWRvd3ModG9MZW5ndGgpOwogICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGgg
LSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsK
LSAgICAgICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgICAgICBzaGFk
b3dCLnNoYWRvdyA9IHNoYWRvd0Iuc2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKIAotICAgICAgICBp
bnQgbWF4TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOwogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1heExlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBmcm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6
IDA7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0
aCA/IHRvU2hhZG93c1tpXSA6IDA7CisgICAgICAgICAgICBhdXRvJiBmcm9tU2hhZG93ID0gZnJv
bVNoYWRvd3NbaV07CisgICAgICAgICAgICBhdXRvJiB0b1NoYWRvdyA9IHRvU2hhZG93c1tpXTsK
IAotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93ID0gc2hhZG93Rm9yQmxl
bmRpbmcoZnJvbVNoYWRvdywgdG9TaGFkb3cpOwotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0
YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcodG9TaGFkb3csIGZyb21TaGFkb3cpOwor
ICAgICAgICAgICAgYXV0byBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhmcm9tU2hhZG93
LCB0b1NoYWRvdyk7CisgICAgICAgICAgICBhdXRvIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5k
aW5nKHRvU2hhZG93LCBmcm9tU2hhZG93KTsKIAotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFNoYWRvd0RhdGE+IGJsZW5kZWRTaGFkb3cgPSBibGVuZEZ1bmMoc3JjU2hhZG93LCBkc3RTaGFk
b3csIGNvbnRleHQpOworICAgICAgICAgICAgYXV0byBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5j
KHNyY1NoYWRvdywgZHN0U2hhZG93LCBjb250ZXh0KTsKICAgICAgICAgICAgIC8vIEluc2VydCBh
dCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJlc2VydmUgdGhlIG9yZGVyLgogICAgICAgICAg
ICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKICAgICAg
ICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwpAQCAtMTU3MSwx
MCArMTU4OSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIp
KHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiwgYm9vbCk7CiB9OwogCi1jbGFzcyBQcm9wZXJ0
eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlIHsKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNvbG9yIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJv
cGVydHksIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQorICAgIFByb3BlcnR5V3JhcHBl
ckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFN0eWxlQ29sb3ImIChSZW5kZXJT
dHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0
IFN0eWxlQ29sb3ImKSkKICAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHBy
b3BlcnR5KQogICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKICAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCkBAIC0xNTg0LDQyICsxNjAyLDE3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgUmVuZGVyU3R5bGUmIGIpIGNv
bnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoJmEgPT0gJmIpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAg
ICAgQ29sb3IgdG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlz
VmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLmNvbG9yKCk7Ci0gICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICB0b0NvbG9yID0gYi5jb2xvcigpOwotCi0gICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0g
dG9Db2xvcjsKKyAgICAgICAgcmV0dXJuICZhID09ICZiIHx8IHZhbHVlKGEpID09IHZhbHVlKGIp
OwogICAgIH0KIAogICAgIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAg
ICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGZyb20pOwotICAgICAgICBDb2xvciB0b0NvbG9y
ID0gdmFsdWUodG8pOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9D
b2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gZnJvbS5jb2xvcigpOwot
ICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgdG9Db2xvciA9IHRv
LmNvbG9yKCk7Ci0gICAgICAgIChkZXN0aW5hdGlvbi4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhmcm9t
Q29sb3IsIHRvQ29sb3IsIGNvbnRleHQpKTsKKyAgICAgICAgKGRlc3RpbmF0aW9uLiptX3NldHRl
cikoYmxlbmRGdW5jKHZhbHVlKGZyb20pLCB2YWx1ZSh0byksIGNvbnRleHQpKTsKICAgICB9CiAK
LXByaXZhdGU6CiAgICAgQ29sb3IgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIChzdHlsZS4qbV9nZXR0ZXIpKCk7CisgICAgICAgIHJl
dHVybiBzdHlsZS5yZXNvbHZlZENvbG9yKChzdHlsZS4qbV9nZXR0ZXIpKCkpOwogICAgIH0KIAog
I2lmICFMT0dfRElTQUJMRUQKQEAgLTE2MzAsMjUgKzE2MjMsMTcgQEAgcHJpdmF0ZToKICAgICB9
CiAjZW5kaWYKIAotICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBj
b25zdDsKLSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwor
ICAgIGNvbnN0IFN0eWxlQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0Owor
ICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IFN0eWxlQ29sb3ImKTsKIH07
CiAKLQotZW51bSBNYXliZUludmFsaWRDb2xvclRhZyB7IE1heWJlSW52YWxpZENvbG9yIH07CiBj
bGFzcyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciA6IHB1YmxpYyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3QgQ29sb3Im
IChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxl
OjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICBQcm9wZXJ0eVdyYXBwZXJWaXNp
dGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBTdHlsZUNvbG9y
JiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyKShjb25zdCBTdHlsZUNvbG9yJiksIGNvbnN0IFN0eWxlQ29sb3ImIChSZW5kZXJTdHlsZTo6
KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqdmlzaXRlZFNldHRl
cikoY29uc3QgU3R5bGVDb2xvciYpKQogICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UocHJvcGVydHkpCi0gICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlX
cmFwcGVyPGNvbnN0IENvbG9yJj4+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAg
ICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlcjxjb25zdCBDb2xv
ciY+Pihwcm9wZXJ0eSwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCi0gICAgewotICAg
IH0KLSAgICBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBNYXliZUludmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHls
ZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENv
bG9yJiksIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAg
ICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAgICAgICAgLCBt
X3dyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJv
cGVydHksIGdldHRlciwgc2V0dGVyKSkKLSAgICAgICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VV
bmlxdWU8UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I+KHByb3BlcnR5LCB2aXNpdGVk
R2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQ
cm9wZXJ0eVdyYXBwZXJDb2xvcj4ocHJvcGVydHksIGdldHRlciwgc2V0dGVyKSkKKyAgICAgICAg
LCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3Bl
cnR5LCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKICAgICB7CiAgICAgfQogCkBAIC0x
Njc3LDExICsxNjYyLDExIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLWNsYXNzIEFjY2VudENv
bG9yUHJvcGVydHlXcmFwcGVyIGZpbmFsIDogcHVibGljIFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yIHsKK2NsYXNzIEFjY2VudENvbG9yUHJvcGVydHlXcmFwcGVyIGZpbmFsIDogcHVi
bGljIFByb3BlcnR5V3JhcHBlckNvbG9yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBBY2NlbnRDb2xvclByb3BlcnR5V3JhcHBlcigpCi0gICAgICAgIDogUHJv
cGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlBY2NlbnRDb2xvciwgJlJl
bmRlclN0eWxlOjphY2NlbnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRBY2NlbnRDb2xvcikKKyAg
ICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJDb2xvcihDU1NQcm9wZXJ0eUFjY2VudENvbG9yLCAmUmVu
ZGVyU3R5bGU6OmFjY2VudENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEFjY2VudENvbG9yKQogICAg
IHsKICAgICB9CiAKQEAgLTE2ODksNyArMTY3NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiKSBjb25zdCBmaW5h
bAogICAgIHsKICAgICAgICAgcmV0dXJuIGEuaGFzQXV0b0FjY2VudENvbG9yKCkgPT0gYi5oYXNB
dXRvQWNjZW50Q29sb3IoKQotICAgICAgICAgICAgJiYgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3I6OmVxdWFscyhhLCBiKTsKKyAgICAgICAgICAgICYmIFByb3BlcnR5V3JhcHBlckNv
bG9yOjplcXVhbHMoYSwgYik7CiAgICAgfQogCiAgICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25z
dCBSZW5kZXJTdHlsZSYgZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBDb21wb3NpdGVPcGVy
YXRpb24pIGNvbnN0IGZpbmFsCkBAIC0xNzAwLDcgKzE2ODUsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgYmxlbmQoUmVuZGVyU3R5bGUmIGRlc3RpbmF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJv
bSwgY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ29udGV4
dCYgY29udGV4dCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChjYW5JbnRlcnBvbGF0
ZShmcm9tLCB0bywgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24pKSB7Ci0gICAgICAgICAgICBQ
cm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcjo6YmxlbmQoZGVzdGluYXRpb24sIGZyb20s
IHRvLCBjb250ZXh0KTsKKyAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlckNvbG9yOjpibGVuZChk
ZXN0aW5hdGlvbiwgZnJvbSwgdG8sIGNvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTE3MjQsNyArMTcwOSw3IEBAIGNsYXNzIENhcmV0Q29sb3JQcm9wZXJ0eVdy
YXBwZXIgZmluYWwgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sCiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgQ2FyZXRDb2xvclByb3Bl
cnR5V3JhcHBlcigpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlDYXJldENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxl
OjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6
dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ2FyZXRD
b2xvcikKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQ
cm9wZXJ0eUNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y2FyZXRDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ2FyZXRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NhcmV0Q29sb3IpCiAgICAgewogICAgIH0KIApAQCAt
MjIyNiw3ICsyMjExLDcgQEAgcHJpdmF0ZToKIGNsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50
IGZpbmFsIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFNWR1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6OipwYWlu
dFR5cGVHZXR0ZXIpKCkgY29uc3QsIENvbG9yIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgUHJvcGVy
dHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU1ZHUGFpbnRUeXBlIChS
ZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgU3R5bGVDb2xvciAoUmVuZGVy
U3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25z
dCBTdHlsZUNvbG9yJikpCiAgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wZXJ0eSkKICAgICAgICAgLCBtX3BhaW50VHlwZUdldHRlcihwYWludFR5cGVHZXR0ZXIpCiAg
ICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQpAQCAtMjI0NiwyMCArMjIzMSw5IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZHUGFpbnRz
IHRoYXQgYXJlIHB1cmUgQ29sb3IgdmFsdWVzLgogICAgICAgICAvLyBGb3IgZXZlcnl0aGluZyBl
bHNlIHdlIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UKICAgICAg
ICAgLy8gd2Ugd2lsbCB0cnkgdG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVyLgotICAg
ICAgICBpZiAoKGEuKm1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlwZTo6UkdCQ29s
b3IpIHsKLSAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLiptX2dldHRlcikoKTsKLSAg
ICAgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgICAg
IGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBhLmNvbG9yKCk7Ci0gICAgICAgICAg
ICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHRvQ29sb3IgPSBiLmNv
bG9yKCk7CisgICAgICAgIGlmICgoYS4qbV9wYWludFR5cGVHZXR0ZXIpKCkgPT0gU1ZHUGFpbnRU
eXBlOjpSR0JDb2xvcikKKyAgICAgICAgICAgIHJldHVybiBhLnJlc29sdmVkQ29sb3IoKGEuKm1f
Z2V0dGVyKSgpKSA9PSBiLnJlc29sdmVkQ29sb3IoKGIuKm1fZ2V0dGVyKSgpKTsKIAotICAgICAg
ICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOwotICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApAQCAtMjI3MiwxNyArMjI0Niw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghaXNWYWxpZFBhaW50VHlwZSgoZnJvbS4qbV9wYWludFR5cGVHZXR0ZXIpKCkpIHx8
ICFpc1ZhbGlkUGFpbnRUeXBlKCh0by4qbV9wYWludFR5cGVHZXR0ZXIpKCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IChmcm9tLiptX2dldHRlciko
KTsKLSAgICAgICAgQ29sb3IgdG9Db2xvciA9ICh0by4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAg
aWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBmcm9tQ29sb3IgPSBmcm9tLmNvbG9yKCk7Ci0gICAgICAgIGlmICghdG9Db2xvci5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICB0b0NvbG9yID0gdG8uY29sb3IoKTsKLSAgICAgICAgKGRlc3Rp
bmF0aW9uLiptX3NldHRlcikoYmxlbmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgY29udGV4dCkp
OworICAgICAgICAoZGVzdGluYXRpb24uKm1fc2V0dGVyKShibGVuZEZ1bmMoZnJvbS5yZXNvbHZl
ZENvbG9yKChmcm9tLiptX2dldHRlcikoKSksIHRvLnJlc29sdmVkQ29sb3IoKHRvLiptX2dldHRl
cikoKSksIGNvbnRleHQpKTsKICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0yMjk0LDgg
KzIyNTgsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBTVkdQYWludFR5cGUgKFJlbmRlclN0
eWxlOjoqbV9wYWludFR5cGVHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgQ29sb3IgKFJlbmRlclN0eWxl
OjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlciko
Y29uc3QgQ29sb3ImKTsKKyAgICBTdHlsZUNvbG9yIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgp
IGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IFN0eWxlQ29s
b3ImKTsKIH07CiAKIGNsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSBmaW5hbCA6IHB1Ymxp
YyBQcm9wZXJ0eVdyYXBwZXI8c3RkOjpvcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+PiB7CkBA
IC0zMDc5LDcgKzMwNDMsNyBAQCBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OkNTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCiAKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
clZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbG9yKSwKIAotICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtC
YWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29s
b3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tncm91bmRD
b2xvciksCiAKICAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRl
clN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKICAgICAgICAgbmV3IFN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjps
aXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCkBAIC0zMTYz
LDE0ICszMTI3LDE0IEBAIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVy
dHlBbmltYXRpb25XcmFwcGVyTWFwKCkKICAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVu
ZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luLCB7IExlbmd0aFByb3BlcnR5V3JhcHBlcjo6RmxhZ3M6
OklzTGVuZ3RoUGVyY2VudGFnZSwgTGVuZ3RoUHJvcGVydHlXcmFwcGVyOjpGbGFnczo6TmVnYXRp
dmVMZW5ndGhzQXJlSW52YWxpZCB9KSwKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBlSW1h
Z2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCiAKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5r
Q29sdW1uUnVsZUNvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZl
Y3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFsaWRD
b2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4
dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4
dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxsQ29s
b3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Vmlz
aXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlz
aXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdodENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJv
cmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVy
VG9wQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9t
Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRl
clN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9y
LCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGluZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sdW1u
UnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2x1bW5SdWxlQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldFRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRT
dHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4
dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxsQ29sb3IpLAor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdENvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRl
ckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckxlZnRDb2xvciks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eUJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5r
Qm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0
Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29s
b3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21Db2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9y
ZGVyQm90dG9tQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVj
dGVkQ29sb3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua091dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xv
ciksCiAKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eUJveFNo
YWRvdywgJlJlbmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93
KSwKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJv
eFNoYWRvdywgJlJlbmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hh
ZG93KSwKQEAgLTMxOTUsMTIgKzMxNTksMTIgQEAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVy
TWFwOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKQogICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WSwgJlJlbmRlclN0eWxlOjp5LCAmUmVuZGVyU3R5
bGU6OnNldFkpLAogCiAgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxl
OjpzZXRGbG9vZE9wYWNpdHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9vZENvbG9yLCAmUmVuZGVyU3R5bGU6OmZsb29kQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXJDb2xvcihDU1NQcm9wZXJ0eUZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRGbG9vZENvbG9yKSwKIAogICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFj
aXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0b3BPcGFjaXR5KSwKLSAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5
bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRTdG9wQ29sb3IpLAorICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyQ29sb3IoQ1NTUHJvcGVydHlTdG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6
c3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFN0b3BDb2xvciksCiAKLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvciwg
JlJlbmRlclN0eWxlOjpsaWdodGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldExpZ2h0aW5nQ29s
b3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQ29sb3IoQ1NTUHJvcGVydHlMaWdodGlu
Z0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0TGln
aHRpbmdDb2xvciksCiAKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1
ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0LCAmUmVuZGVyU3R5bGU6OmJhc2VsaW5lU2hpZnRW
YWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNlbGluZVNoaWZ0VmFsdWUpLAogICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUtlcm5pbmcsICZSZW5k
ZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0eWxlOjpzZXRLZXJuaW5nKSwKQEAgLTMyMTIsNyAr
MzE3Niw3IEBAIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmlt
YXRpb25XcmFwcGVyTWFwKCkKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSgp
LAogICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHREZWNvcmF0aW9uVGhpY2tuZXNzPihD
U1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uVGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnRleHREZWNv
cmF0aW9uVGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
KSwKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0VW5kZXJsaW5lT2Zmc2V0PihDU1NQ
cm9wZXJ0eVRleHRVbmRlcmxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZU9m
ZnNldCwgJlJlbmRlclN0eWxlOjpzZXRUZXh0VW5kZXJsaW5lT2Zmc2V0KSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb25Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dERlY29yYXRp
b25Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5
bGU6OnZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNp
dGVkTGlua1RleHREZWNvcmF0aW9uQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yLCAmUmVu
ZGVyU3R5bGU6OnRleHREZWNvcmF0aW9uQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29y
YXRpb25Db2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHREZWNvcmF0aW9uQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RGVjb3JhdGlvbkNvbG9yKSwKIAogICAg
ICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5RmxleEJhc2lzLCAmUmVu
ZGVyU3R5bGU6OmZsZXhCYXNpcywgJlJlbmRlclN0eWxlOjpzZXRGbGV4QmFzaXMsIHsgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyOjpGbGFnczo6SXNMZW5ndGhQZXJjZW50YWdlLCBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXI6OkZsYWdzOjpOZWdhdGl2ZUxlbmd0aHNBcmVJbnZhbGlkIH0pLAogICAgICAgICBu
ZXcgRmxvYXRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlGbGV4R3JvdywgJlJlbmRlclN0eWxl
OjpmbGV4R3JvdywgJlJlbmRlclN0eWxlOjpzZXRGbGV4R3JvdywgRmxvYXRQcm9wZXJ0eVdyYXBw
ZXI6OlZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKSwKQEAgLTMyOTMsNyArMzI1Nyw3IEBAIENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFw
KCkKICAgICAgICAgbmV3IERpc2NyZXRlUHJvcGVydHlXcmFwcGVyPFRleHRBbGlnbkxhc3Q+KENT
U1Byb3BlcnR5VGV4dEFsaWduTGFzdCwgJlJlbmRlclN0eWxlOjp0ZXh0QWxpZ25MYXN0LCAmUmVu
ZGVyU3R5bGU6OnNldFRleHRBbGlnbkxhc3QpLAogICAgICAgICBuZXcgRGlzY3JldGVQcm9wZXJ0
eVdyYXBwZXI8T3B0aW9uU2V0PFRleHREZWNvcmF0aW9uTGluZT4+KENTU1Byb3BlcnR5VGV4dERl
Y29yYXRpb25MaW5lLCAmUmVuZGVyU3R5bGU6OnRleHREZWNvcmF0aW9uTGluZSwgJlJlbmRlclN0
eWxlOjpzZXRUZXh0RGVjb3JhdGlvbkxpbmUpLAogICAgICAgICBuZXcgRGlzY3JldGVQcm9wZXJ0
eVdyYXBwZXI8VGV4dERlY29yYXRpb25TdHlsZT4oQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblN0
eWxlLCAmUmVuZGVyU3R5bGU6OnRleHREZWNvcmF0aW9uU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0
VGV4dERlY29yYXRpb25TdHlsZSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVk
QWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVRleHRFbXBoYXNpc0NvbG9yLCBNYXliZUludmFsaWRD
b2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRU
ZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRFbXBoYXNpc0Nv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dEVtcGhhc2lzQ29sb3IpLAorICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlU
ZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRUZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1Rl
eHRFbXBoYXNpc0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dEVtcGhhc2lz
Q29sb3IpLAogICAgICAgICBuZXcgRGlzY3JldGVQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uU2V0PFRl
eHRFbXBoYXNpc1Bvc2l0aW9uPj4oQ1NTUHJvcGVydHlUZXh0RW1waGFzaXNQb3NpdGlvbiwgJlJl
bmRlclN0eWxlOjp0ZXh0RW1waGFzaXNQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RW1w
aGFzaXNQb3NpdGlvbiksCiAgICAgICAgIG5ldyBUZXh0RW1waGFzaXNTdHlsZVdyYXBwZXIsCiAg
ICAgICAgIG5ldyBEaXNjcmV0ZVByb3BlcnR5V3JhcHBlcjxUZXh0SnVzdGlmeT4oQ1NTUHJvcGVy
dHlUZXh0SnVzdGlmeSwgJlJlbmRlclN0eWxlOjp0ZXh0SnVzdGlmeSwgJlJlbmRlclN0eWxlOjpz
ZXRUZXh0SnVzdGlmeSksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGFlNGZkM2Q4ZTdlMi4uZTI2NzcxNTQyMGFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cApAQCAtNDY1LDEyICs0NjUsMTAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25P
ZmZzZXRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENTU1Byb3BlcnQKICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBdXRvKTsKIH0KIAotUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFj
dG9yOjpjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OmN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUsIGNvbnN0IFN0eWxlQ29sb3ImIGNvbG9yKSBjb25zdAogewogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9uLCBzbyB0aGF0IGNv
bXB1dGVkIHN0eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9y
VmFsdWUoc3R5bGUtPmNvbG9yKCkpOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpOworICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPnJlc29sdmVkQ29sb3IoY29sb3IpKTsK
IH0KIAogc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gcGVyY2VudGFnZU9yWm9vbUFkanVz
dGVkVmFsdWUoTGVuZ3RoIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpAQCAtNzE4
LDkgKzcxNiw5IEBAIFJlZjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVG
b3JTaGFkb3coY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBDCiAgICAgICAgIGF1dG8geSA9IGFk
anVzdExlbmd0aEZvclpvb20oY3VyclNoYWRvd0RhdGEtPnkoKSwgc3R5bGUsIGFkanVzdCk7CiAg
ICAgICAgIGF1dG8gYmx1ciA9IGFkanVzdExlbmd0aEZvclpvb20oY3VyclNoYWRvd0RhdGEtPnJh
ZGl1cygpLCBzdHlsZSwgYWRqdXN0KTsKICAgICAgICAgYXV0byBzcHJlYWQgPSBwcm9wZXJ0eUlE
ID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4oKSA6
IGFkanVzdExlbmd0aEZvclpvb20oY3VyclNoYWRvd0RhdGEtPnNwcmVhZCgpLCBzdHlsZSwgYWRq
dXN0KTsKLSAgICAgICAgYXV0byBzdHlsZSA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlUZXh0
U2hhZG93IHx8IGN1cnJTaGFkb3dEYXRhLT5zdHlsZSgpID09IFNoYWRvd1N0eWxlOjpOb3JtYWwg
PyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+KCkgOiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlSW5zZXQpOwotICAgICAgICBhdXRvIGNvbG9yID0gY3NzVmFsdWVQ
b29sLmNyZWF0ZUNvbG9yVmFsdWUoY3VyclNoYWRvd0RhdGEtPmNvbG9yKCkpOwotICAgICAgICBs
aXN0LT5wcmVwZW5kKENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RGTW92ZSh4KSwgV1RGTW92ZSh5
KSwgV1RGTW92ZShibHVyKSwgV1RGTW92ZShzcHJlYWQpLCBXVEZNb3ZlKHN0eWxlKSwgV1RGTW92
ZShjb2xvcikpKTsKKyAgICAgICAgYXV0byBzaGFkb3dTdHlsZSA9IHByb3BlcnR5SUQgPT0gQ1NT
UHJvcGVydHlUZXh0U2hhZG93IHx8IGN1cnJTaGFkb3dEYXRhLT5zdHlsZSgpID09IFNoYWRvd1N0
eWxlOjpOb3JtYWwgPyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+KCkgOiBjc3NWYWx1ZVBvb2wu
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5zZXQpOworICAgICAgICBhdXRvIGNvbG9y
ID0gY3NzVmFsdWVQb29sLmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUucmVzb2x2ZWRDb2xvcihjdXJy
U2hhZG93RGF0YS0+Y29sb3IoKSkpOworICAgICAgICBsaXN0LT5wcmVwZW5kKENTU1NoYWRvd1Zh
bHVlOjpjcmVhdGUoV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSwgV1RGTW92ZShibHVyKSwgV1RGTW92
ZShzcHJlYWQpLCBXVEZNb3ZlKHNoYWRvd1N0eWxlKSwgV1RGTW92ZShjb2xvcikpKTsKICAgICB9
CiAgICAgcmV0dXJuIGxpc3Q7CiB9CkBAIC0yMzc2LDcgKzIzNzQsNyBAQCBzdGF0aWMgYm9vbCBu
b25Jbmhlcml0ZWRDb2xvclByb3BlcnR5SGFzVmFsdWVDdXJyZW50Q29sb3IoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eQogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
cmV0dXJuIFJlbmRlclN0eWxlOjppc0N1cnJlbnRDb2xvcihzdHlsZS0+dW5yZXNvbHZlZENvbG9y
Rm9yUHJvcGVydHkocHJvcGVydHlJRCkpOworICAgIHJldHVybiBzdHlsZS0+dW5yZXNvbHZlZENv
bG9yKHByb3BlcnR5SUQpLmlzQ3VycmVudENvbG9yKCk7CiB9CiAKIC8vIEluIENTUyAyLjEgdGhl
IHJldHVybmVkIG9iamVjdCBzaG91bGQgYWN0dWFsbHkgY29udGFpbiB0aGUgInVzZWQgdmFsdWVz
IgpAQCAtMjk4Niw3ICsyOTg0LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjp2YWx1ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNsZWFyOgogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZShzdHlsZS5jbGVhcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9y
OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVDb2xvclZhbHVlKG1fYWxs
b3dWaXNpdGVkU3R5bGUgPyBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcikgOiBzdHlsZS5jb2xvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wu
Y3JlYXRlQ29sb3JWYWx1ZShtX2FsbG93VmlzaXRlZFN0eWxlID8gc3R5bGUudmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpIDogc3R5bGUucmVzb2x2ZWRDb2xvcihzdHlsZS5j
b2xvcigpKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQcmludENvbG9yQWRqdXN0OgogICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS5wcmludENvbG9y
QWRqdXN0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQXhpczoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAppbmRl
eCBlMWRmNzcwN2QyZjUuLjI4ODM4NGIxODMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaApAQCAtODksNyArODksNyBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3ZnUHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEKTsK
ICAgICBSZWY8Q1NTVmFsdWU+IGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFNWR1BhaW50
VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImIGN1cnJl
bnRDb2xvcikgY29uc3Q7CiAgICAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JTaGFkb3co
Y29uc3QgU2hhZG93RGF0YSosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiwgQWRq
dXN0UGl4ZWxWYWx1ZXNGb3JDb21wdXRlZFN0eWxlID0gQWRqdXN0UGl4ZWxWYWx1ZXMpOwotICAg
IFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKGNvbnN0IFJl
bmRlclN0eWxlKiwgY29uc3QgQ29sb3ImKSBjb25zdDsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFN0
eWxlQ29sb3ImKSBjb25zdDsKIAogICAgIFJlZjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5
VmFsdWVzRm9yU2hvcnRoYW5kUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5k
Jik7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3IyU2lk
ZXNTaG9ydGhhbmQoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRl
eCBlMGY1NzU2MDNkOTUuLjFmNGZkMDE3ZDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEyNSw3ICsxMjUs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnN2Z1Byb3BlcnR5
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eQogICAgIGNhc2UgQ1NTUHJvcGVydHlTdG9wQ29s
b3I6CiAgICAgICAgIHJldHVybiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUsIHN2Z1N0
eWxlLnN0b3BDb2xvcigpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKLSAgICAgICAgcmV0
dXJuIGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKHN2Z1N0eWxlLmZpbGxQYWludFR5cGUo
KSwgc3ZnU3R5bGUuZmlsbFBhaW50VXJpKCksIHN2Z1N0eWxlLmZpbGxQYWludENvbG9yKCksIHN0
eWxlLT5jb2xvcigpKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENv
bG9yKHN2Z1N0eWxlLmZpbGxQYWludFR5cGUoKSwgc3ZnU3R5bGUuZmlsbFBhaW50VXJpKCksIHN0
eWxlLT5yZXNvbHZlZENvbG9yKHN2Z1N0eWxlLmZpbGxQYWludENvbG9yKCkpLCBzdHlsZS0+cmVz
b2x2ZWRDb2xvcihzdHlsZS0+Y29sb3IoKSkpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlLZXJuaW5n
OgogICAgICAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OnRvQ1NTUHJpbWl0aXZlVmFsdWUoc3Zn
U3R5bGUua2VybmluZygpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5kOgpAQCAtMTQx
LDcgKzE0MSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6c3Zn
UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5CiAgICAgICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtYWtlU3RyaW5nKCcjJywgc3ZnU3R5bGUubWFya2Vy
U3RhcnRSZXNvdXJjZSgpKSwgQ1NTVW5pdFR5cGU6OkNTU19VUkkpOwogICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVOb25lKTsKICAgICBj
YXNlIENTU1Byb3BlcnR5U3Ryb2tlOgotICAgICAgICByZXR1cm4gYWRqdXN0U1ZHUGFpbnRGb3JD
dXJyZW50Q29sb3Ioc3ZnU3R5bGUuc3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1N0eWxlLnN0cm9rZVBh
aW50VXJpKCksIHN2Z1N0eWxlLnN0cm9rZVBhaW50Q29sb3IoKSwgc3R5bGUtPmNvbG9yKCkpOwor
ICAgICAgICByZXR1cm4gYWRqdXN0U1ZHUGFpbnRGb3JDdXJyZW50Q29sb3Ioc3ZnU3R5bGUuc3Ry
b2tlUGFpbnRUeXBlKCksIHN2Z1N0eWxlLnN0cm9rZVBhaW50VXJpKCksIHN0eWxlLT5yZXNvbHZl
ZENvbG9yKHN2Z1N0eWxlLnN0cm9rZVBhaW50Q29sb3IoKSksIHN0eWxlLT5yZXNvbHZlZENvbG9y
KHN0eWxlLT5jb2xvcigpKSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheToK
ICAgICAgICAgcmV0dXJuIHN0cm9rZURhc2hBcnJheVRvQ1NTVmFsdWVMaXN0KHN2Z1N0eWxlLnN0
cm9rZURhc2hBcnJheSgpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5QmFzZWxpbmVTaGlmdDogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQ29sb3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQ29sb3IuY3BwCmluZGV4IDAzODZlMzY2MDllNC4uYTQ0NDY5YjRkMjAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVDb2xvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQ29sb3IuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM0LDE3ICszNCwzMCBAQAogCiAjaW5j
bHVkZSAiSGFzaFRvb2xzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJT
dHlsZUtleXdvcmRDb2xvclJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29s
b3IgU3R5bGVDb2xvcjo6Y29sb3JGcm9tS2V5d29yZChDU1NWYWx1ZUlEIGtleXdvcmQsIE9wdGlv
blNldDxTdHlsZUNvbG9yT3B0aW9ucz4gb3B0aW9ucykKK2NsYXNzIFN0eWxlQ29sb3I6Ok91dE9m
TGluZVN0eWxlQ29sb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZUNvbG9yOjpPdXRPZkxpbmVT
dHlsZUNvbG9yPiB7Cit9OworCitzdGF0aWMgQ29sb3IgYWJzb2x1dGVDb2xvcihDU1NWYWx1ZUlE
IGtleXdvcmQpCiB7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIHZhbHVlTmFtZSA9IGdldFZhbHVlTmFt
ZShrZXl3b3JkKSkgewotICAgICAgICBpZiAoY29uc3QgTmFtZWRDb2xvciogbmFtZWRDb2xvciA9
IGZpbmRDb2xvcih2YWx1ZU5hbWUsIHN0cmxlbih2YWx1ZU5hbWUpKSkKLSAgICAgICAgICAgIHJl
dHVybiBhc1NSR0JBKFBhY2tlZENvbG9yOjpBUkdCIHsgbmFtZWRDb2xvci0+QVJHQlZhbHVlIH0p
OworICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGhvdCB3ZSBjb3VsZCBidWlsZCBhbiBhcnJheSB3
aXRoIHRoZSBjb2xvciB2YWx1ZXMgYXQgY29tcGlsZSB0aW1lLgorICAgIGlmIChTdHlsZUNvbG9y
Ojppc0Fic29sdXRlQ29sb3JLZXl3b3JkKGtleXdvcmQpKSB7CisgICAgICAgIGlmIChhdXRvIHZh
bHVlTmFtZSA9IGdldFZhbHVlTmFtZShrZXl3b3JkKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IG5hbWVkQ29sb3IgPSBmaW5kQ29sb3IodmFsdWVOYW1lLCB2YWx1ZU5hbWUubGVuZ3RoKCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBhc1NSR0JBKFBhY2tlZENvbG9yOjpBUkdCIHsgbmFtZWRD
b2xvci0+QVJHQlZhbHVlIH0pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KKyAgICByZXR1cm4geyB9OworfQogCi0gICAgQVNTRVJUKCFpc0Fic29sdXRl
Q29sb3JLZXl3b3JkKGtleXdvcmQpKTsKK0NvbG9yIFN0eWxlQ29sb3I6OmNvbG9yRnJvbUtleXdv
cmQoQ1NTVmFsdWVJRCBrZXl3b3JkLCBPcHRpb25TZXQ8U3R5bGVDb2xvck9wdGlvbnM+IG9wdGlv
bnMpCit7CisgICAgaWYgKGF1dG8gY29sb3IgPSBhYnNvbHV0ZUNvbG9yKGtleXdvcmQpOyBjb2xv
ci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBjb2xvcjsKICAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OnNpbmdsZXRvbigpLnN5c3RlbUNvbG9yKGtleXdvcmQsIG9wdGlvbnMpOwogfQogCkBAIC04
MSw0ICs5NCw1NCBAQCBib29sIFN0eWxlQ29sb3I6OmlzQ29sb3JLZXl3b3JkKENTU1ZhbHVlSUQg
aWQsIE9wdGlvblNldDxDU1NDb2xvclR5cGU+IGFsbG93ZWRDbwogICAgICAgICB8fCAoYWxsb3dl
ZENvbG9yVHlwZXMuY29udGFpbnMoQ1NTQ29sb3JUeXBlOjpTeXN0ZW0pICYmIGlzU3lzdGVtQ29s
b3JLZXl3b3JkKGlkKSk7CiB9CiAKK1N0eWxlQ29sb3I6OlN0eWxlQ29sb3IoQ1NTVmFsdWVJRCB2
YWx1ZSkKKyAgICA6IG1fY29sb3IgeyBhYnNvbHV0ZUNvbG9yKHZhbHVlKSB9Cit7CisgICAgaWYg
KCFtX2NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgbV9jb2xvci5tX2NvbG9yQW5kRmxhZ3MgPSBl
bmNvZGUoVHlwZTo6S2V5d29yZCkgfCBlbmNvZGUodmFsdWUpOworfQorCit2b2lkIFN0eWxlQ29s
b3I6OnNldE91dE9mTGluZVN0eWxlQ29sb3IoY29uc3QgU3R5bGVDb2xvciYgY29sb3IpCit7Cisg
ICAgbV9jb2xvci5tX2NvbG9yQW5kRmxhZ3MgPSBjb2xvci5tX2NvbG9yLm1fY29sb3JBbmRGbGFn
czsKKyAgICBvdXRPZkxpbmVTdHlsZUNvbG9yKCkucmVmKCk7Cit9CisKK3ZvaWQgU3R5bGVDb2xv
cjo6ZGVzdHJveU91dE9mTGluZVN0eWxlQ29sb3IoKQoreworICAgIG91dE9mTGluZVN0eWxlQ29s
b3IoKS5kZXJlZigpOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHN0
cmVhbSwgY29uc3QgU3R5bGVDb2xvciYgY29sb3IpCit7CisgICAgc3dpdGNoIChjb2xvci50eXBl
KCkpIHsKKyAgICBjYXNlIFN0eWxlQ29sb3I6OlR5cGU6Ok5vcm1hbDoKKyAgICAgICAgcmV0dXJu
IHN0cmVhbSA8PCBjb2xvci5tX2NvbG9yOworICAgIGNhc2UgU3R5bGVDb2xvcjo6VHlwZTo6S2V5
d29yZDoKKyAgICAgICAgcmV0dXJuIHN0cmVhbSA8PCBnZXRWYWx1ZU5hbWUoY29sb3Iua2V5d29y
ZCgpKTsKKyAgICBjYXNlIFN0eWxlQ29sb3I6OlR5cGU6Ok91dE9mTGluZToKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICByZXR1cm4gc3RyZWFtIDw8ICJvdXQgb2Yg
bGluZSBzdHlsZSBjb2xvciI7CisgICAgfQorfQorCitDb2xvciBTdHlsZUNvbG9yOjpyZXNvbHZl
ZENvbG9yKFN0eWxlS2V5d29yZENvbG9yUmVzb2x2ZXImIHJlc29sdmVyKSBjb25zdAoreworICAg
IHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBTdHlsZUNvbG9yOjpUeXBlOjpOb3JtYWw6Cisg
ICAgICAgIHJldHVybiBhbHJlYWR5UmVzb2x2ZWRDb2xvcigpOworICAgIGNhc2UgU3R5bGVDb2xv
cjo6VHlwZTo6S2V5d29yZDoKKyAgICAgICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmVLZXl3b3Jk
Q29sb3Ioa2V5d29yZCgpKTsKKyAgICBjYXNlIFN0eWxlQ29sb3I6OlR5cGU6Ok91dE9mTGluZToK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlQ29sb3I6Ok91dE9mTGluZVN0
eWxlQ29sb3ImLCBjb25zdCBTdHlsZUNvbG9yOjpPdXRPZkxpbmVTdHlsZUNvbG9yJikKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVD
b2xvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQ29sb3IuaAppbmRleCAzMjE0NGY0ZjFm
NjUuLjVjNGQ3Y2YyNWIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQ29s
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVDb2xvci5oCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMzLDEwICszMywx
MSBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIFN0eWxlS2V5d29yZENvbG9yUmVzb2x2ZXI7CisKIGVudW0gY2xhc3MgU3R5bGVDb2xvck9w
dGlvbnMgOiB1aW50OF90IHsKICAgICBGb3JWaXNpdGVkTGluayA9IDEgPDwgMCwKICAgICBVc2VT
eXN0ZW1BcHBlYXJhbmNlID0gMSA8PCAxLApAQCAtNDQsMTggKzQ1LDE2NCBAQCBlbnVtIGNsYXNz
IFN0eWxlQ29sb3JPcHRpb25zIDogdWludDhfdCB7CiAgICAgVXNlRWxldmF0ZWRVc2VySW50ZXJm
YWNlTGV2ZWwgPSAxIDw8IDMKIH07CiAKLXN0cnVjdCBTdHlsZUNvbG9yIHsKLSAgICBzdGF0aWMg
Q29sb3IgY29sb3JGcm9tS2V5d29yZChDU1NWYWx1ZUlELCBPcHRpb25TZXQ8U3R5bGVDb2xvck9w
dGlvbnM+KTsKLSAgICBzdGF0aWMgYm9vbCBpc0Fic29sdXRlQ29sb3JLZXl3b3JkKENTU1ZhbHVl
SUQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzU3lzdGVtQ29sb3JLZXl3b3Jk
KENTU1ZhbHVlSUQpOwotCitjbGFzcyBTdHlsZUNvbG9yIHsKK3B1YmxpYzoKKyAgICAvLyBodHRw
czovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI3R5cGVkZWYtY29sb3IKICAgICBlbnVt
IGNsYXNzIENTU0NvbG9yVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBBYnNvbHV0ZSA9IDEgPDwg
MCwKICAgICAgICAgQ3VycmVudCA9IDEgPDwgMSwKICAgICAgICAgU3lzdGVtID0gMSA8PCAyLAog
ICAgIH07Ci0gICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyN0eXBl
ZGVmLWNvbG9yCiAgICAgc3RhdGljIGJvb2wgaXNDb2xvcktleXdvcmQoQ1NTVmFsdWVJRCwgT3B0
aW9uU2V0PENTU0NvbG9yVHlwZT4gPSB7IENTU0NvbG9yVHlwZTo6QWJzb2x1dGUsIENTU0NvbG9y
VHlwZTo6Q3VycmVudCwgQ1NTQ29sb3JUeXBlOjpTeXN0ZW0gfSk7CisgICAgc3RhdGljIGJvb2wg
aXNBYnNvbHV0ZUNvbG9yS2V5d29yZChDU1NWYWx1ZUlEKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBpc1N5c3RlbUNvbG9yS2V5d29yZChDU1NWYWx1ZUlEKTsKKworICAgIHN0YXRp
YyBDb2xvciBjb2xvckZyb21LZXl3b3JkKENTU1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9y
T3B0aW9ucz4pOworCisgICAgU3R5bGVDb2xvcigpOworICAgIFN0eWxlQ29sb3IoY29uc3QgQ29s
b3ImKTsKKyAgICBTdHlsZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBTdHlsZUNvbG9yKENT
U1ZhbHVlSUQpOworICAgIFN0eWxlQ29sb3IoRnVuY3Rpb248Q29sb3IoY29uc3QgQ29sb3ImKT4m
JiwgU3R5bGVDb2xvciYmKTsKKyAgICBTdHlsZUNvbG9yKEZ1bmN0aW9uPENvbG9yKGNvbnN0IENv
bG9yJiwgY29uc3QgQ29sb3ImKT4mJiwgU3R5bGVDb2xvciYmLCBTdHlsZUNvbG9yJiYpOworICAg
IFN0eWxlQ29sb3IoY29uc3QgU3R5bGVDb2xvciYpOworICAgIFN0eWxlQ29sb3IoU3R5bGVDb2xv
ciYmKTsKKyAgICBTdHlsZUNvbG9yJiBvcGVyYXRvcj0oY29uc3QgU3R5bGVDb2xvciYpOworICAg
IFN0eWxlQ29sb3ImIG9wZXJhdG9yPShTdHlsZUNvbG9yJiYpOworICAgIH5TdHlsZUNvbG9yKCk7
CisKKyAgICBib29sIGlzQ3VycmVudENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvci5tX2Nv
bG9yQW5kRmxhZ3MgPT0gKGVuY29kZShUeXBlOjpLZXl3b3JkKSB8IGVuY29kZShDU1NWYWx1ZUN1
cnJlbnRjb2xvcikpOyB9CisKKyAgICBib29sIGlzQWxyZWFkeVJlc29sdmVkKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IFR5cGU6Ok5vcm1hbDsgfQorICAgIGNvbnN0IENvbG9yJiBhbHJlYWR5
UmVzb2x2ZWRDb2xvcigpIGNvbnN0OworCisgICAgQ29sb3IgcmVzb2x2ZWRDb2xvcihTdHlsZUtl
eXdvcmRDb2xvclJlc29sdmVyJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgT3V0T2ZM
aW5lU3R5bGVDb2xvcjsKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsgTm9ybWFsLCBL
ZXl3b3JkLCBPdXRPZkxpbmUgfTsKKworICAgIGZyaWVuZCB2b2lkIHN3YXAoU3R5bGVDb2xvciYs
IFN0eWxlQ29sb3ImKTsKKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlQ29s
b3ImLCBjb25zdCBTdHlsZUNvbG9yJik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBPdXRPZkxpbmVTdHlsZUNvbG9yJiwgY29uc3QgT3V0T2ZMaW5lU3R5bGVDb2xvciYpOworICAg
IGZyaWVuZCB2b2lkIGFkZChIYXNoZXImLCBjb25zdCBTdHlsZUNvbG9yJik7CisgICAgZnJpZW5k
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBTdHls
ZUNvbG9yJik7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBkZWNvZGVUeXBlKG1f
Y29sb3IubV9jb2xvckFuZEZsYWdzKTsgfQorICAgIENTU1ZhbHVlSUQga2V5d29yZCgpIGNvbnN0
OworCisgICAgYm9vbCBpc091dE9mTGluZVN0eWxlQ29sb3IoKSBjb25zdCB7IHJldHVybiB0eXBl
KCkgPT0gVHlwZTo6T3V0T2ZMaW5lOyB9CisgICAgT3V0T2ZMaW5lU3R5bGVDb2xvciYgb3V0T2ZM
aW5lU3R5bGVDb2xvcigpIGNvbnN0OworICAgIHZvaWQgc2V0T3V0T2ZMaW5lU3R5bGVDb2xvcihj
b25zdCBTdHlsZUNvbG9yJik7CisgICAgdm9pZCBkZXN0cm95T3V0T2ZMaW5lU3R5bGVDb2xvcigp
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHN0eWxlQ29sb3JUeXBlU2hpZnQgPSBDb2xv
cjo6ZmxhZ3NTaGlmdCArIDY7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGVuY29k
ZShUeXBlIHR5cGUpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0eXBlKSA8PCBzdHls
ZUNvbG9yVHlwZVNoaWZ0OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBUeXBlIGRlY29kZVR5cGUo
dWludDY0X3QgY29sb3JBbmRGbGFncykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oKGNvbG9y
QW5kRmxhZ3MgPj4gc3R5bGVDb2xvclR5cGVTaGlmdCkgJiAweDMpOyB9CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ2NF90IGVuY29kZShDU1NWYWx1ZUlEIGtleXdvcmQpIHsgcmV0dXJuIGtl
eXdvcmQ7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIENTU1ZhbHVlSUQgZGVjb2RlS2V5d29yZCh1
aW50NjRfdCBjb2xvckFuZEZsYWdzKSB7IHJldHVybiBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPihj
b2xvckFuZEZsYWdzICYgMHhGRkZGKTsgfQorCisgICAgQ29sb3IgbV9jb2xvcjsKIH07CiAKK2Jv
b2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUNvbG9yJiwgY29uc3QgU3R5bGVDb2xvciYpOworYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQ29sb3ImLCBjb25zdCBTdHlsZUNvbG9yJik7CisKK2lu
bGluZSBTdHlsZUNvbG9yOjpTdHlsZUNvbG9yKCkKK3sKKyAgICBtX2NvbG9yLm1fY29sb3JBbmRG
bGFncyA9IGVuY29kZShUeXBlOjpLZXl3b3JkKSB8IGVuY29kZShDU1NWYWx1ZUN1cnJlbnRjb2xv
cik7Cit9CisKK2lubGluZSBTdHlsZUNvbG9yOjpTdHlsZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKKyAgICA6IG1fY29sb3IgeyBjb2xvciB9Cit7Cit9CisKK2lubGluZSBTdHlsZUNvbG9yOjpT
dHlsZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQorICAgIDogbV9jb2xvciB7IGNvbG9yIH0K
K3sKK30KKworaW5saW5lIFN0eWxlQ29sb3I6OlN0eWxlQ29sb3IoY29uc3QgU3R5bGVDb2xvciYg
Y29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzT3V0T2ZMaW5lU3R5bGVDb2xvcigpKQorICAgICAg
ICBzZXRPdXRPZkxpbmVTdHlsZUNvbG9yKGNvbG9yKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29s
b3IgPSBjb2xvci5tX2NvbG9yOworfQorCitpbmxpbmUgU3R5bGVDb2xvcjo6U3R5bGVDb2xvcihT
dHlsZUNvbG9yJiYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzT3V0T2ZMaW5lU3R5bGVDb2xv
cigpKQorICAgICAgICBtX2NvbG9yLm1fY29sb3JBbmRGbGFncyA9IHN0ZDo6ZXhjaGFuZ2UoY29s
b3IubV9jb2xvci5tX2NvbG9yQW5kRmxhZ3MsIENvbG9yOjppbnZhbGlkQ29sb3JBbmRGbGFncyk7
CisgICAgZWxzZQorICAgICAgICBtX2NvbG9yID0gV1RGTW92ZShjb2xvci5tX2NvbG9yKTsKK30K
KworaW5saW5lIFN0eWxlQ29sb3ImIFN0eWxlQ29sb3I6Om9wZXJhdG9yPShjb25zdCBTdHlsZUNv
bG9yJiBjb2xvcikKK3sKKyAgICBTdHlsZUNvbG9yIGNvcHkgeyBjb2xvciB9OworICAgIHN3YXAo
Y29weSwgKnRoaXMpOworICAgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFN0eWxlQ29sb3Im
IFN0eWxlQ29sb3I6Om9wZXJhdG9yPShTdHlsZUNvbG9yJiYgY29sb3IpCit7CisgICAgU3R5bGVD
b2xvciBjb3B5IHsgV1RGTW92ZShjb2xvcikgfTsKKyAgICBzd2FwKGNvcHksICp0aGlzKTsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBTdHlsZUNvbG9yOjp+U3R5bGVDb2xvcigpCit7
CisgICAgaWYgKGlzT3V0T2ZMaW5lU3R5bGVDb2xvcigpKQorICAgICAgICBkZXN0cm95T3V0T2ZM
aW5lU3R5bGVDb2xvcigpOworfQorCitpbmxpbmUgdm9pZCBzd2FwKFN0eWxlQ29sb3ImIGEsIFN0
eWxlQ29sb3ImIGIpCit7CisgICAgc3dhcChhLm1fY29sb3IsIGIubV9jb2xvcik7Cit9CisKK2lu
bGluZSBhdXRvIFN0eWxlQ29sb3I6Om91dE9mTGluZVN0eWxlQ29sb3IoKSBjb25zdCAtPiBPdXRP
ZkxpbmVTdHlsZUNvbG9yJgoreworICAgIEFTU0VSVChpc091dE9mTGluZVN0eWxlQ29sb3IoKSk7
CisgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxPdXRPZkxpbmVTdHlsZUNvbG9yKj4oQ29sb3I6OmRl
Y29kZWRPdXRPZkxpbmVQb2ludGVyKG1fY29sb3IubV9jb2xvckFuZEZsYWdzKSk7Cit9CisKK2lu
bGluZSBDU1NWYWx1ZUlEIFN0eWxlQ29sb3I6OmtleXdvcmQoKSBjb25zdAoreworICAgIEFTU0VS
VCh0eXBlKCkgPT0gVHlwZTo6S2V5d29yZCk7CisgICAgcmV0dXJuIGRlY29kZUtleXdvcmQobV9j
b2xvci5tX2NvbG9yQW5kRmxhZ3MpOworfQorCitpbmxpbmUgY29uc3QgQ29sb3ImIFN0eWxlQ29s
b3I6OmFscmVhZHlSZXNvbHZlZENvbG9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNBbHJlYWR5
UmVzb2x2ZWQoKSk7CisgICAgcmV0dXJuIG1fY29sb3I7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgU3R5bGVDb2xvciYgYSwgY29uc3QgU3R5bGVDb2xvciYgYikKK3sKKyAgICBh
dXRvIHR5cGUgPSBhLnR5cGUoKTsKKyAgICBpZiAodHlwZSAhPSBiLnR5cGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdHlsZUNvbG9y
OjpUeXBlOjpOb3JtYWw6CisgICAgICAgIHJldHVybiBhLmFscmVhZHlSZXNvbHZlZENvbG9yKCkg
PT0gYi5hbHJlYWR5UmVzb2x2ZWRDb2xvcigpOworICAgIGNhc2UgU3R5bGVDb2xvcjo6VHlwZTo6
S2V5d29yZDoKKyAgICAgICAgcmV0dXJuIGEua2V5d29yZCgpID09IGIua2V5d29yZCgpOworICAg
IGNhc2UgU3R5bGVDb2xvcjo6VHlwZTo6T3V0T2ZMaW5lOgorICAgICAgICByZXR1cm4gYS5vdXRP
ZkxpbmVTdHlsZUNvbG9yKCkgPT0gYi5vdXRPZkxpbmVTdHlsZUNvbG9yKCk7CisgICAgfQorfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQ29sb3ImIGEsIGNvbnN0IFN0eWxl
Q29sb3ImIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsIGIvU291
cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCmluZGV4IDMwM2NhYjI5YmQyNi4uNWFjNWYwY2I3
M2I4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCkBAIC0xNDg4LDcgKzE0ODgsNyBAQCBzdWIgZ2Vu
ZXJhdGVJbmhlcml0VmFsdWVTZXR0ZXIgewogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgICAgICByZXR1cm47XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
ICAgIH1cbiI7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJP
cHRpb25zeyRuYW1lfXsidmlzaXRlZC1saW5rLWNvbG9yLXN1cHBvcnQifSkgewotICAgICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIENvbG9yIGNvbG9yID0gIiAuICRwYXJlbnRTdHls
ZSAuICIuIiAuICRnZXR0ZXIgLiAiKCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiICAgIGF1dG8gY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi4iIC4gJGdldHRlciAu
ICIoKTtcbiI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVDb2xvclZhbHVlU2V0dGVy
KCRuYW1lLCAiY29sb3IiLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAkZGlkQ2FsbFNldFZhbHVl
ID0gMTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlv
bnN7JG5hbWV9eyJhbmltYXRhYmxlIn0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tYWtldmFsdWVzLnBsIGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2V2YWx1ZXMucGwKaW5kZXgg
NWM5ZmE1YmU0MTk4Li43YTM1OTM3MjU4YmUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tYWtldmFsdWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtldmFsdWVzLnBsCkBA
IC0xNzMsNyArMTczLDcgQEAgcHJpbnQgSEVBREVSIDw8ICJFT0YiOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWVudW0gQ1NTVmFsdWVJRCB7CitlbnVtIENTU1ZhbHVlSUQgOiB1aW50MTZfdCB7
CiAgICAgQ1NTVmFsdWVJbnZhbGlkID0gMCwKIEVPRgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKaW5kZXggYTQyNDU0
NTA5M2M1Li41YjQ5NDc0NDlhOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTE2OTAsMjUgKzE2OTAsMjQg
QEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6Q1NTX1VSSSk7CiB9CiAKLXN0YXRpYyBD
b2xvciBjb25zdW1lT3JpZ2luQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3N0YXRpYyBTdHlsZUNvbG9yIGNvbnN1bWVPcmln
aW5Db2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBjb250ZXh0KQogewogICAgIGF1dG8gdmFsdWUgPSBjb25zdW1lQ29sb3IoYXJncywgY29udGV4
dCk7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQorICAgICAgICByZXR1
cm4gQ29sb3IgeyB9OwogICAgIGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQogICAgICAgICByZXR1
cm4gdmFsdWUtPmNvbG9yKCk7Ci0KICAgICBBU1NFUlQodmFsdWUtPmlzVmFsdWVJRCgpKTsKLSAg
ICBhdXRvIGtleXdvcmQgPSB2YWx1ZS0+dmFsdWVJRCgpOworICAgIHJldHVybiB2YWx1ZS0+dmFs
dWVJRCgpOworfQogCi0gICAgLy8gRklYTUU6IFdlIGRvbid0IGhhdmUgZW5vdWdoIGNvbnRleHQg
aW4gdGhlIHBhcnNlciB0byByZXNvbHZpbmcgYSBzeXN0ZW0ga2V5d29yZAotICAgIC8vIGNvcnJl
Y3RseS4gV2Ugc2hvdWxkIHBhY2thZ2UgdXAgdGhlIHJlbGF0aXZlIGNvbG9yIHBhcmFtZXRlcnMg
YW5kIHJlc29sdmUgdGhlCi0gICAgLy8gd2hvbGUgdGhpbmcgYXQgdGhlIGFwcHJvcHJpYXRlIHRp
bWUgd2hlbiB0aGUgb3JpZ2luIGNvbG9yIGlzIGEgc3lzdGVtIGtleXdvcmQuCi0gICAgaWYgKFN0
eWxlQ29sb3I6OmlzU3lzdGVtQ29sb3JLZXl3b3JkKGtleXdvcmQpKQorc3RhdGljIENvbG9yIGNv
bnN1bWVBbHJlYWR5UmVzb2x2ZWRPcmlnaW5Db2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdz
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBXZSBk
b24ndCBoYXZlIGVub3VnaCBjb250ZXh0IGluIHRoZSBwYXJzZXIgdG8gcmVzb2x2ZSBhIHN5c3Rl
bSBrZXl3b3JkIGNvcnJlY3RseS4KKyAgICBhdXRvIGNvbG9yID0gY29uc3VtZU9yaWdpbkNvbG9y
KGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghY29sb3IuaXNBbHJlYWR5UmVzb2x2ZWQoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBTdHlsZUNvbG9yOjpjb2xvckZyb21LZXl3
b3JkKGtleXdvcmQsIHsgfSk7CisgICAgcmV0dXJuIGNvbG9yLmFscmVhZHlSZXNvbHZlZENvbG9y
KCk7CiB9CiAKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU9wdGlvbmFsQWxw
aGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC0xNzkwLDcgKzE3ODksNyBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
YXJncywgY29uc3QgQ1NTUGFycwogICAgIEFTU0VSVChhcmdzLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlRnJvbSk7CiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5D
b2xvciA9IGNvbnN1bWVPcmlnaW5Db2xvcihhcmdzLCBjb250ZXh0KTsKKyAgICBhdXRvIG9yaWdp
bkNvbG9yID0gY29uc3VtZUFscmVhZHlSZXNvbHZlZE9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQp
OwogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9Owog
CkBAIC0yMDA3LDcgKzIwMDYsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhTTFBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFycwogICAgIEFTU0VS
VChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRnJvbSk7CiAgICAgY29uc3VtZUlkZW50UmF3
KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xvciA9IGNvbnN1bWVPcmlnaW5Db2xvcihhcmdz
LCBjb250ZXh0KTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yID0gY29uc3VtZUFscmVhZHlSZXNvbHZl
ZE9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxp
ZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0yMTQxLDcgKzIxNDAsNyBAQCBzdGF0aWMg
Q29sb3IgcGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cywgY29uc3QgQ1NTUGFycwogICAgIEFTU0VSVChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVl
RnJvbSk7CiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xv
ciA9IGNvbnN1bWVPcmlnaW5Db2xvcihhcmdzLCBjb250ZXh0KTsKKyAgICBhdXRvIG9yaWdpbkNv
bG9yID0gY29uc3VtZUFscmVhZHlSZXNvbHZlZE9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwog
ICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCkBA
IC0yMjI4LDcgKzIyMjcsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxhYlBhcmFtZXRl
cnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFycwogICAgIEFTU0VSVChh
cmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRnJvbSk7CiAgICAgY29uc3VtZUlkZW50UmF3KGFy
Z3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xvciA9IGNvbnN1bWVPcmlnaW5Db2xvcihhcmdzLCBj
b250ZXh0KTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yID0gY29uc3VtZUFscmVhZHlSZXNvbHZlZE9y
aWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0yMzE4LDcgKzIzMTcsNyBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywg
Y29uc3QgQ1NTUGFycwogICAgIEFTU0VSVChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRnJv
bSk7CiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0byBvcmlnaW5Db2xvciA9
IGNvbnN1bWVPcmlnaW5Db2xvcihhcmdzLCBjb250ZXh0KTsKKyAgICBhdXRvIG9yaWdpbkNvbG9y
ID0gY29uc3VtZUFscmVhZHlSZXNvbHZlZE9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwogICAg
IGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0y
NTAxLDcgKzI1MDAsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUNvbG9yRnVuY3Rpb25Q
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbgogICAgIEFTU0VSVChhcmdz
LnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRnJvbSk7CiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3Mp
OwogCi0gICAgYXV0byBvcmlnaW5Db2xvciA9IGNvbnN1bWVPcmlnaW5Db2xvcihhcmdzLCBjb250
ZXh0KTsKKyAgICBhdXRvIG9yaWdpbkNvbG9yID0gY29uc3VtZUFscmVhZHlSZXNvbHZlZE9yaWdp
bkNvbG9yKGFyZ3MsIGNvbnRleHQpOwogICAgIGlmICghb3JpZ2luQ29sb3IuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4geyB9OwogCkBAIC0yNjE2LDcgKzI2MTUsNyBAQCBzdGF0aWMgQ29sb3Ig
cGFyc2VDb2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjbwogCiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAot
ICAgIGF1dG8gb3JpZ2luQmFja2dyb3VuZENvbG9yID0gY29uc3VtZU9yaWdpbkNvbG9yKGFyZ3Ms
IGNvbnRleHQpOworICAgIGF1dG8gb3JpZ2luQmFja2dyb3VuZENvbG9yID0gY29uc3VtZUFscmVh
ZHlSZXNvbHZlZE9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwogICAgIGlmICghb3JpZ2luQmFj
a2dyb3VuZENvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMjYyNiw3
ICsyNjI1LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JDb250cmFzdEZ1bmN0aW9uUGFyYW1l
dGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY28KICAgICBWZWN0b3I8Q29sb3I+IGNv
bG9yc1RvQ29tcGFyZUFnYWluc3Q7CiAgICAgYm9vbCBjb25zdW1lZFRvID0gZmFsc2U7CiAgICAg
ZG8gewotICAgICAgICBhdXRvIGNvbG9yVG9Db21wYXJlQWdhaW5zdCA9IGNvbnN1bWVPcmlnaW5D
b2xvcihhcmdzLCBjb250ZXh0KTsKKyAgICAgICAgYXV0byBjb2xvclRvQ29tcGFyZUFnYWluc3Qg
PSBjb25zdW1lQWxyZWFkeVJlc29sdmVkT3JpZ2luQ29sb3IoYXJncywgY29udGV4dCk7CiAgICAg
ICAgIGlmICghY29sb3JUb0NvbXBhcmVBZ2FpbnN0LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAKQEAgLTI3NjksNyArMjc2OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENv
bG9yTWl4Q29tcG9uZW50PiBjb25zdW1lQ29sb3JNaXhDb21wb25lbnQoQ1NTUGFyc2VyVG9rZW5S
CiAgICAgICAgIHJlc3VsdC5wZXJjZW50YWdlID0gcGVyY2VudGFnZS0+dmFsdWU7CiAgICAgfQog
Ci0gICAgcmVzdWx0LmNvbG9yID0gY29uc3VtZU9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwor
ICAgIHJlc3VsdC5jb2xvciA9IGNvbnN1bWVBbHJlYWR5UmVzb2x2ZWRPcmlnaW5Db2xvcihhcmdz
LCBjb250ZXh0KTsKICAgICBpZiAoIXJlc3VsdC5jb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDQ2MmE3MDZlNmU1
ZS4uZGUxN2IxMjRjMTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3Bs
YXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEyOTIsNyArMTI5Miw3
IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29u
dGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdp
biA9IGZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBh
dXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmls
bFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwg
c2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50
aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93
UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLmFscmVhZHlSZXNvbHZlZENvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykg
ewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5
IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xMzY3LDEx
ICsxMzY3LDEzIEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBh
aW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgICAgICByb3VuZGVk
SG9sZVJlY3Quc2V0UmFkaWkocm91bmRlZFJlY3RDb3JyZWN0aW5nRm9yU3ByZWFkLnJhZGlpKCkp
OwogICAgICAgICB9CiAKKyAgICAgICAgYXV0byYgc2hhZG93Q29sb3IgPSBzaGFkb3cuY29sb3Io
KS5hbHJlYWR5UmVzb2x2ZWRDb2xvcigpOworCiAgICAgICAgIGlmIChyb3VuZGVkSG9sZVJlY3Qu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKQotICAgICAgICAg
ICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmZpbGxSb3VuZGVkUmVjdChib3JkZXJSZWN0
LCBzaGFkb3cuY29sb3IoKSk7CisgICAgICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuZmlsbFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIHNoYWRvd0NvbG9yKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUmVjdChi
b3JkZXJSZWN0LnJlY3QoKSwgc2hhZG93LmNvbG9yKCkpOworICAgICAgICAgICAgICAgIHBhaW50
aW5nQ29udGV4dC5jb250ZXh0LmZpbGxSZWN0KGJvcmRlclJlY3QucmVjdCgpLCBzaGFkb3dDb2xv
cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTM4OCw3ICsxMzkwLDcg
QEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250
ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgICAgIHJldHVybiB1bmlvblJlY3Qo
Ym91bmRzLCBvZmZzZXRCb3VuZHMpOwogICAgICAgICB9OwogCi0gICAgICAgIENvbG9yIGZpbGxD
b2xvciA9IHNoYWRvdy5jb2xvcigpLm9wYXF1ZUNvbG9yKCk7CisgICAgICAgIENvbG9yIGZpbGxD
b2xvciA9IHNoYWRvd0NvbG9yLm9wYXF1ZUNvbG9yKCk7CiAgICAgICAgIGF1dG8gc2hhZG93Q2Fz
dGluZ1JlY3QgPSBhcmVhQ2FzdGluZ1NoYWRvd0luSG9sZShib3JkZXJSZWN0LnJlY3QoKSwgc2hh
ZG93UGFpbnRpbmdFeHRlbnQsIHNoYWRvd1NwcmVhZCwgc2hhZG93T2Zmc2V0KTsKIAogICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRpbmdDb250ZXh0LmNv
bnRleHQpOwpAQCAtMTQwMyw3ICsxNDA1LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6
cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAg
ICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgp
LCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgcGFp
bnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LnZhbHVlKCksIHNoYWRvd0NvbG9yLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShzaGFkb3dD
YXN0aW5nUmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuY3BwCmluZGV4IDdmNWU4YmZkNGMz
Ni4uNmU0Mjg3YjZmNzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlT
dHlsZS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dE
YXRhPiBkZWVwQ29weShjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGNvbnN0IFJlbmQKIAogICAg
IGZvciAoYXV0byogY3VyclNoYWRvdyA9IHNoYWRvdzsgY3VyclNoYWRvdzsgY3VyclNoYWRvdyA9
IGN1cnJTaGFkb3ctPm5leHQoKSkgewogICAgICAgICBhdXRvIHNoYWRvd0NvcHkgPSBtYWtlVW5p
cXVlPFNoYWRvd0RhdGE+KCpjdXJyU2hhZG93KTsKLSAgICAgICAgc2hhZG93Q29weS0+c2V0Q29s
b3Ioc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc2hhZG93Q29weS0+Y29sb3IoKSkp
OworICAgICAgICBzaGFkb3dDb3B5LT5zZXRDb2xvcihzdHlsZS5yZXNvbHZlZENvbG9yQXBwbHlp
bmdDb2xvckZpbHRlcihzaGFkb3dDb3B5LT5jb2xvcigpKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoIWZpcnN0U2hhZG93KSB7CiAgICAgICAgICAgICBjdXJyQ29waWVkU2hhZG93ID0gc2hhZG93
Q29weS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKaW5k
ZXggOGQ4YTlkMzhlMzJhLi41N2E3MzA3ZmNhZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlTdHlsZS5oCkBAIC0yNSw3ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQm9yZGVyVmFsdWUuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiTmluZVBpZWNlSW1hZ2UuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAzMWY0MDhhMDVkNTcuLjY5OGNlMGU3Y2FjZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtNTM5LDkgKzUzOSw5
IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVl
ZGVkKGNvbnN0IFJlbmRlclN0eWxlKiByZW5kCiAgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBmaWxs
IGNvbG9yIGlzIGludmFsaWQsIHRoZW4gaXRzIGNoaWxkcmVuIHVzZSAKICAgICAvLyB0aGVpciBm
b250LWNvbG9yIGFzIHRoZWlyIHRleHQgZmlsbCBjb2xvciAodGhleSBkb24ndAogICAgIC8vIGlu
aGVyaXQgaXQpLiAgTGlrZXdpc2UgZm9yIHN0cm9rZSBjb2xvci4KLSAgICBpZiAoIXJlbmRlclN0
eWxlLT50ZXh0RmlsbENvbG9yKCkuaXNWYWxpZCgpKQorICAgIGlmIChyZW5kZXJTdHlsZS0+dGV4
dEZpbGxDb2xvcigpLmlzQ3VycmVudENvbG9yKCkpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwotICAgIGlmICgh
cmVuZGVyU3R5bGUtPnRleHRTdHJva2VDb2xvcigpLmlzVmFsaWQoKSkKKyAgICBpZiAocmVuZGVy
U3R5bGUtPnRleHRTdHJva2VDb2xvcigpLmlzQ3VycmVudENvbG9yKCkpCiAgICAgICAgIG1fbXV0
YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xv
cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA3YmMzMjBlYWNjMTcuLmUw
ZmE4YTQ5ZDcwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNDEwMiw3ICs0MTAy
LDcgQEAgRm9udEF0dHJpYnV0ZXMgRWRpdG9yOjpmb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3Rh
cnQoKQogICAgICAgICBhdHRyaWJ1dGVzLmZvcmVncm91bmRDb2xvciA9IGZvcmVncm91bmRDb2xv
cjsKIAogICAgIGlmIChhdXRvKiBzaGFkb3dEYXRhID0gc3R5bGUtPnRleHRTaGFkb3coKSkKLSAg
ICAgICAgYXR0cmlidXRlcy5mb250U2hhZG93ID0geyBzaGFkb3dEYXRhLT5jb2xvcigpLCB7IHNo
YWRvd0RhdGEtPngoKS52YWx1ZSgpLCBzaGFkb3dEYXRhLT55KCkudmFsdWUoKSB9LCBzaGFkb3dE
YXRhLT5yYWRpdXMoKS52YWx1ZSgpIH07CisgICAgICAgIGF0dHJpYnV0ZXMuZm9udFNoYWRvdyA9
IHsgc3R5bGUtPnJlc29sdmVkQ29sb3Ioc2hhZG93RGF0YS0+Y29sb3IoKSksIHsgc2hhZG93RGF0
YS0+eCgpLnZhbHVlKCksIHNoYWRvd0RhdGEtPnkoKS52YWx1ZSgpIH0sIHNoYWRvd0RhdGEtPnJh
ZGl1cygpLnZhbHVlKCkgfTsKIAogICAgIHN3aXRjaCAoc3R5bGUtPnZlcnRpY2FsQWxpZ24oKSkg
ewogICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDg0ZThhYzEwYmMxZi4uM2Q1ZTE4NmUzNzBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTg0OSw4ICsx
ODQ5LDcgQEAgQ29sb3IgQ2FyZXRCYXNlOjpjb21wdXRlQ2FyZXRDb2xvcihjb25zdCBSZW5kZXJT
dHlsZSYgZWxlbWVudFN0eWxlLCBjb25zdCBOb2RlKgogI2Vsc2UKICAgICBSZWZQdHIgcGFyZW50
RWxlbWVudCA9IG5vZGUgPyBub2RlLT5wYXJlbnRFbGVtZW50KCkgOiBudWxscHRyOwogICAgIGF1
dG8qIHBhcmVudFN0eWxlID0gcGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LT5yZW5kZXJl
cigpID8gJnBhcmVudEVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwotICAg
IC8vIENTUyB2YWx1ZSAiYXV0byIgaXMgdHJlYXRlZCBhcyBhbiBpbnZhbGlkIGNvbG9yLgotICAg
IGlmICghZWxlbWVudFN0eWxlLmNhcmV0Q29sb3IoKS5pc1ZhbGlkKCkgJiYgcGFyZW50U3R5bGUp
IHsKKyAgICBpZiAoIWVsZW1lbnRTdHlsZS5oYXNBdXRvQ2FyZXRDb2xvcigpICYmIHBhcmVudFN0
eWxlKSB7CiAgICAgICAgIGF1dG8gcGFyZW50QmFja2dyb3VuZENvbG9yID0gcGFyZW50U3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CiAgICAgICAgIGF1dG8gZWxlbWVudEJhY2tncm91bmRDb2xvciA9IGVsZW1lbnRT
dHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpOwogICAgICAgICBhdXRvIGRpc2FwcGVhcnNJbnRvQmFja2dyb3VuZCA9IGJs
ZW5kU291cmNlT3ZlcihwYXJlbnRCYWNrZ3JvdW5kQ29sb3IsIGVsZW1lbnRCYWNrZ3JvdW5kQ29s
b3IpID09IHBhcmVudEJhY2tncm91bmRDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNDcyNzg0M2UyNmFlLi4zNmQ1
MDU0ZmM5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC01NzksNyArNTc5LDcgQEAgc3RhdGljIGJvb2wgZnJhZ21lbnRO
ZWVkc0NvbG9yVHJhbnNmb3JtZWQoUmVwbGFjZW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIGNvbnN0
IFAKICAgICAgICAgaWYgKCFjb2xvciB8fCAhY29sb3IudmFsdWUoKS5pc1Zpc2libGUoKSB8fCBj
b2xvci52YWx1ZSgpLmlzU2VtYW50aWMoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICAgICAgcmV0dXJuIGNvbG9yLnZhbHVlKCkubGlnaHRuZXNzKCk7CisgICAgICAgIHJldHVybiBj
b2xvci52YWx1ZSgpLmRlcHJlY2F0ZWRMaWdodG5lc3MoKTsKICAgICB9OwogCiAgICAgY29uc3Qg
ZG91YmxlIGxpZ2h0bmVzc0RhcmtFbm91Z2hGb3JUZXh0ID0gMC40OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCmluZGV4IGM4NGRiNDcwZGYwZS4uYTE1ODc1YzU2MTA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlY2Fs
Y3VsYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkKICAgICAgICAgfQogICAgICAgICBhdXRvIGJh
Y2tncm91bmQgPSBkb2N1bWVudEJhY2tncm91bmRDb2xvcigpOwogICAgICAgICBpZiAoYmFja2dy
b3VuZC5pc1Zpc2libGUoKSkgewotICAgICAgICAgICAgaWYgKGJhY2tncm91bmQubGlnaHRuZXNz
KCkgPD0gLjVmKQorICAgICAgICAgICAgaWYgKGJhY2tncm91bmQuZGVwcmVjYXRlZExpZ2h0bmVz
cygpIDw9IC41ZikKICAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
TGlnaHQ7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAodXNlRGFya0FwcGVhcmFu
Y2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDY1ODI3MWEzZTUw
Mi4uMzVmYzdkMzIxZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRp
Y2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAg
LTE5OCw4ICsxOTgsMTAgQEAgc3RhdGljIEhhc2hTZXQ8Q29sb3I+IGVzdGltYXRlZFRleHRDb2xv
cnNGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgICAgIGlmICghbm9kZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVu
ZGVyZXIoKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkKLSAgICAgICAg
ICAgIGNvbG9ycy5hZGQocmVuZGVyZXItPnN0eWxlKCkuY29sb3IoKSk7CisgICAgICAgIGlmIChp
czxSZW5kZXJUZXh0PihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gZG93
bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5zdHlsZSgpOworICAgICAgICAgICAgY29sb3Jz
LmFkZChzdHlsZS5yZXNvbHZlZENvbG9yKHN0eWxlLmNvbG9yKCkpKTsKKyAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gY29sb3JzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCmluZGV4IDE5MDJhYzE0MjFkNS4uNjgxOTA0ZmE1ZDM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAg
Q29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKICAgICByZXR1cm4gY29udmVydENvbG9yPFNS
R0JBPHVpbnQ4X3Q+PihTUkdCQTxmbG9hdD4geyBtdWx0aXBsaWVyICogciwgbXVsdGlwbGllciAq
IGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCi1kb3VibGUgQ29sb3I6OmxpZ2h0bmVzcygp
IGNvbnN0Citkb3VibGUgQ29sb3I6OmRlcHJlY2F0ZWRMaWdodG5lc3MoKSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNlLgogICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gdG9Db2xvclR5cGVMb3NzeTxTUkdCQTxmbG9hdD4+KCkucmVzb2x2
ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGM4MTE1
NjUxMDMyMi4uYTYwOWUzZDljMTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmgKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIGZsb2F0IGFscGhhQXNGbG9h
dCgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgpLnJlc29sdmVk
QWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5yZXNvbHZlZCgp
LmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZG91YmxlIGx1bWluYW5jZSgpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBsaWdodG5lc3MoKSBjb25zdDsgLy8gRklYTUU6
IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFuY2UuCisgICAgV0VCQ09SRV9FWFBP
UlQgZG91YmxlIGRlcHJlY2F0ZWRMaWdodG5lc3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2Ug
cmVtYWluaW5nIHVzZXMgd2l0aCBsdW1pbmFuY2UuCiAKICAgICBib29sIGFueUNvbXBvbmVudElz
Tm9uZSgpIGNvbnN0OwogCkBAIC0xNzgsNyArMTc4LDkgQEAgcHVibGljOgogICAgIFN0cmluZyBk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0
eWxlQ29sb3I7CiAgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0IENvbG9yJik7Cisg
ICAgZnJpZW5kIHZvaWQgc3dhcChDb2xvciYsIENvbG9yJik7CiAKICAgICBjbGFzcyBPdXRPZkxp
bmVDb21wb25lbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE91dE9mTGluZUNvbXBv
bmVudHM+IHsKICAgICBwdWJsaWM6CkBAIC0yMTMsNiArMjE1LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgT3V0T2ZMaW5lICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKICAgICAgICAgSGFz
aFRhYmxlRW1wdHlWYWx1ZSAgICAgICAgICAgICA9IDEgPDwgNCwKICAgICAgICAgSGFzaFRhYmxl
RGVsZXRlZFZhbHVlICAgICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAgU3R5bGVDb2xvckZsYWcx
ICAgICAgICAgICAgICAgICA9IDEgPDwgNiwKKyAgICAgICAgU3R5bGVDb2xvckZsYWcyICAgICAg
ICAgICAgICAgICA9IDEgPDwgNywKICAgICB9OwogICAgIHN0YXRpYyBPcHRpb25TZXQ8RmxhZ3NJ
bmNsdWRpbmdQcml2YXRlPiB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShPcHRpb25TZXQ8RmxhZ3M+
IGZsYWdzKSB7IHJldHVybiBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJh
dyhmbGFncy50b1JhdygpKTsgfQogCkBAIC0yNDUsMTIgKzI0OSwxNCBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkQ29sb3JTcGFjZShDb2xvclNwYWNlKTsKICAgICBzdGF0
aWMgdWludDY0X3QgZW5jb2RlZElubGluZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KTsKICAgICBzdGF0
aWMgdWludDY0X3QgZW5jb2RlZFBhY2tlZElubGluZUNvbG9yKFBhY2tlZENvbG9yOjpSR0JBKTsK
KyAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZE91dE9mTGluZVBvaW50ZXIodm9pZCopOwogICAg
IHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50cyhSZWY8T3V0T2ZMaW5l
Q29tcG9uZW50cz4mJik7CiAKICAgICBzdGF0aWMgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJp
dmF0ZT4gZGVjb2RlZEZsYWdzKHVpbnQ2NF90KTsKICAgICBzdGF0aWMgQ29sb3JTcGFjZSBkZWNv
ZGVkQ29sb3JTcGFjZSh1aW50NjRfdCk7CiAgICAgc3RhdGljIFNSR0JBPHVpbnQ4X3Q+IGRlY29k
ZWRJbmxpbmVDb2xvcih1aW50NjRfdCk7CiAgICAgc3RhdGljIFBhY2tlZENvbG9yOjpSR0JBIGRl
Y29kZWRQYWNrZWRJbmxpbmVDb2xvcih1aW50NjRfdCk7CisgICAgc3RhdGljIHZvaWQqIGRlY29k
ZWRPdXRPZkxpbmVQb2ludGVyKHVpbnQ2NF90KTsKICAgICBzdGF0aWMgT3V0T2ZMaW5lQ29tcG9u
ZW50cyYgZGVjb2RlZE91dE9mTGluZUNvbXBvbmVudHModWludDY0X3QpOwogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50NjRfdCBpbnZhbGlkQ29sb3JBbmRGbGFncyA9IDA7CkBAIC0yODAsNiAr
Mjg2LDExIEBAIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHJv
dW5kQW5kQ2xhbXBUb1NSR0JBTG9zc3koQ0dDb2xvclJlCiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwog
CitpbmxpbmUgdm9pZCBzd2FwKENvbG9yJiBhLCBDb2xvciYgYikKK3sKKyAgICBzdGQ6OnN3YXAo
YS5tX2NvbG9yQW5kRmxhZ3MsIGIubV9jb2xvckFuZEZsYWdzKTsKK30KKwogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEu
aXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5lKCkpCkBAIC00OTMsMTUgKzUwNCwyMCBAQCBp
bmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRQYWNrZWRJbmxpbmVDb2xvcihQYWNrZWRDb2xv
cjo6UkdCQSBjb2xvcikKICAgICByZXR1cm4gY29sb3IudmFsdWU7CiB9CiAKLWlubGluZSB1aW50
NjRfdCBDb2xvcjo6ZW5jb2RlZE91dE9mTGluZUNvbXBvbmVudHMoUmVmPE91dE9mTGluZUNvbXBv
bmVudHM+JiYgb3V0T2ZMaW5lQ29tcG9uZW50cykKK2lubGluZSB1aW50NjRfdCBDb2xvcjo6ZW5j
b2RlZE91dE9mTGluZVBvaW50ZXIodm9pZCogcG9pbnRlcikKIHsKICNpZiBDUFUoQUREUkVTUzY0
KQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KCZvdXRPZkxpbmVDb21wb25lbnRz
LmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4ocG9pbnRlcik7
CiAjZWxzZQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KCZvdXRPZkxpbmVDb21w
b25lbnRzLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4ocG9p
bnRlcik7CiAjZW5kaWYKIH0KIAoraW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkT3V0T2ZM
aW5lQ29tcG9uZW50cyhSZWY8T3V0T2ZMaW5lQ29tcG9uZW50cz4mJiBvdXRPZkxpbmVDb21wb25l
bnRzKQoreworICAgIHJldHVybiBlbmNvZGVkT3V0T2ZMaW5lUG9pbnRlcigmb3V0T2ZMaW5lQ29t
cG9uZW50cy5sZWFrUmVmKCkpOworfQorCiBpbmxpbmUgT3B0aW9uU2V0PENvbG9yOjpGbGFnc0lu
Y2x1ZGluZ1ByaXZhdGU+IENvbG9yOjpkZWNvZGVkRmxhZ3ModWludDY0X3QgdmFsdWUpCiB7CiAg
ICAgcmV0dXJuIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJh
dyhzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiBmbGFnc1NoaWZ0KSk7CkBAIC01MjIsMTUg
KzUzOCwyMCBAQCBpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgQ29sb3I6OmRlY29kZWRQYWNrZWRJ
bmxpbmVDb2xvcih1aW50NjRfdCB2YWx1ZSkKICAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEg
eyBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUgJiBjb2xvclZhbHVlTWFzaykgfTsKIH0KIAot
aW5saW5lIENvbG9yOjpPdXRPZkxpbmVDb21wb25lbnRzJiBDb2xvcjo6ZGVjb2RlZE91dE9mTGlu
ZUNvbXBvbmVudHModWludDY0X3QgdmFsdWUpCitpbmxpbmUgdm9pZCogQ29sb3I6OmRlY29kZWRP
dXRPZkxpbmVQb2ludGVyKHVpbnQ2NF90IHZhbHVlKQogewogI2lmIENQVShBRERSRVNTNjQpCi0g
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8T3V0T2ZMaW5lQ29tcG9uZW50cyo+KHZhbHVlICYgY29s
b3JWYWx1ZU1hc2spOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlICYgY29s
b3JWYWx1ZU1hc2spOwogI2Vsc2UKLSAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxPdXRPZkxpbmVD
b21wb25lbnRzKj4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2sp
KTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dmFsdWUgJiBjb2xvclZhbHVlTWFzaykpOwogI2VuZGlmCiB9CiAKK2lubGluZSBDb2xvcjo6T3V0
T2ZMaW5lQ29tcG9uZW50cyYgQ29sb3I6OmRlY29kZWRPdXRPZkxpbmVDb21wb25lbnRzKHVpbnQ2
NF90IHZhbHVlKQoreworICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8T3V0T2ZMaW5lQ29tcG9uZW50
cyo+KGRlY29kZWRPdXRPZkxpbmVQb2ludGVyKHZhbHVlKSk7Cit9CisKIGlubGluZSB2b2lkIENv
bG9yOjpzZXRDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvciwgT3B0aW9uU2V0PEZsYWdzSW5jbHVk
aW5nUHJpdmF0ZT4gZmxhZ3MpCiB7CiAgICAgZmxhZ3MuYWRkKHsgRmxhZ3NJbmNsdWRpbmdQcml2
YXRlOjpWYWxpZCB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxp
cHNpc0JveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
UGFpbnRlci5jcHAKaW5kZXggODA4ODQxZmU2NDU0Li5iNTFjNWEzOWJjNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveFBhaW50ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveFBhaW50ZXIuY3BwCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgRWxsaXBzaXNCb3hQYWludGVyOjpwYWludCgpCiAKICAgICBhdXRvIHNldFNo
YWRvdyA9IGZhbHNlOwogICAgIGlmIChzdHlsZS50ZXh0U2hhZG93KCkpIHsKLSAgICAgICAgYXV0
byBzaGFkb3dDb2xvciA9IHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN0eWxlLnRl
eHRTaGFkb3coKS0+Y29sb3IoKSk7CisgICAgICAgIGF1dG8gc2hhZG93Q29sb3IgPSBzdHlsZS5y
ZXNvbHZlZENvbG9yQXBwbHlpbmdDb2xvckZpbHRlcihzdHlsZS50ZXh0U2hhZG93KCktPmNvbG9y
KCkpOwogICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhMYXlvdXRTaXplKHN0eWxlLnRleHRTaGFk
b3coKS0+eCgpLnZhbHVlKCksIHN0eWxlLnRleHRTaGFkb3coKS0+eSgpLnZhbHVlKCkpLCBzdHls
ZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKICAgICAgICAg
c2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBkZDA0Y2QyOWJmYTQuLmQyNTA3OGQ5NDkw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCkBAIC0xMjAwLDcgKzEyMDAsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAg
ICAgICBpZiAoc2hhZG93T2Zmc2V0LmlzWmVybygpICYmICFzaGFkb3dSYWRpdXMgJiYgIXNoYWRv
d1NwcmVhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgQ29sb3Ig
c2hhZG93Q29sb3IgPSBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzaGFkb3ctPmNv
bG9yKCkpOworICAgICAgICBDb2xvciBzaGFkb3dDb2xvciA9IHN0eWxlLnJlc29sdmVkQ29sb3JB
cHBseWluZ0NvbG9yRmlsdGVyKHNoYWRvdy0+Y29sb3IoKSk7CiAKICAgICAgICAgaWYgKHNoYWRv
dy0+c3R5bGUoKSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsKSB7CiAgICAgICAgICAgICBhdXRvIGZp
bGxSZWN0ID0gYm9yZGVyUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwCmluZGV4IGVjMjc2OTJlODBkYi4uN2U4NzBjZDU2ZmEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBD
b2xvciBSZW5kZXJSZXBsYWNlZDo6Y2FsY3VsYXRlSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaGlnaGxpZ2h0U3R5bGUgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6
OkhpZ2hsaWdodCwgaGlnaGxpZ2h0LmtleSB9LCAmc3R5bGUoKSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaGlnaGxpZ2h0U3R5bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodFN0eWxlLT5yZXNvbHZlZENvbG9yKGhp
Z2hsaWdodFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwCmluZGV4IDBhNzhlOGUxNzg5Ni4uZmQ1ZmYyYzA0ZDk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNTQ5LDcgKzU0OSwx
MyBAQCBib29sIFJlbmRlclRhYmxlQ2VsbDo6aGFzRW5kQm9yZGVyQWRqb2luaW5nVGFibGUoKSBj
b25zdAogCiBzdGF0aWMgQ29sbGFwc2VkQm9yZGVyVmFsdWUgZW1wdHlCb3JkZXIoKQogewotICAg
IHJldHVybiBDb2xsYXBzZWRCb3JkZXJWYWx1ZShCb3JkZXJWYWx1ZSgpLCBDb2xvcigpLCBCb3Jk
ZXJQcmVjZWRlbmNlOjpDZWxsKTsKKyAgICByZXR1cm4gQ29sbGFwc2VkQm9yZGVyVmFsdWUoQm9y
ZGVyUHJlY2VkZW5jZTo6Q2VsbCk7Cit9CisKK3N0YXRpYyBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBj
b2xsYXBzZWRCb3JkZXIoY29uc3QgUmVuZGVyRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQm9yZGVy
VmFsdWUmIHZhbHVlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UpCit7CisgICAgYXV0byYgc3R5bGUgPSBlbGVtZW50LnN0eWxlKCk7CisgICAgcmV0
dXJuIHsgTGF5b3V0VW5pdCB7IHZhbHVlLm5vblplcm8oKSA/IHZhbHVlLndpZHRoKCkgOiAwIH0s
IHByb3BlcnR5ID09IENTU1Byb3BlcnR5SW52YWxpZCA/IENvbG9yKCkgOiBzdHlsZS52aXNpdGVk
RGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIocHJvcGVydHkpLCB2YWx1ZS5zdHlsZSgpLCBw
cmVjZWRlbmNlLCB2YWx1ZS5pc1RyYW5zcGFyZW50KHN0eWxlKSB9OwogfQogCiBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVC
b3JkZXJDb2xvck9yTm90IGluY2x1ZGVDb2xvcikgY29uc3QKQEAgLTU3Niw3ICs1ODIsNyBAQCBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRTdGFy
dEJvcmRlcihJbmNsdWRlQm9yZGVyQwogICAgIC8vICgxKSBPdXIgc3RhcnQgYm9yZGVyLgogICAg
IENTU1Byb3BlcnR5SUQgc3RhcnRDb2xvclByb3BlcnR5ID0gaW5jbHVkZUNvbG9yID8gQ1NTUHJv
cGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW5s
aW5lU3RhcnRDb2xvciwgc3R5bGVGb3JDZWxsRmxvdygpLmRpcmVjdGlvbigpLCBzdHlsZUZvckNl
bGxGbG93KCkud3JpdGluZ01vZGUoKSkgOiBDU1NQcm9wZXJ0eUludmFsaWQ7CiAgICAgQ1NTUHJv
cGVydHlJRCBlbmRDb2xvclByb3BlcnR5ID0gaW5jbHVkZUNvbG9yID8gQ1NTUHJvcGVydHk6OnJl
c29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW5saW5lRW5kQ29s
b3IsIHN0eWxlRm9yQ2VsbEZsb3coKS5kaXJlY3Rpb24oKSwgc3R5bGVGb3JDZWxsRmxvdygpLndy
aXRpbmdNb2RlKCkpIDogQ1NTUHJvcGVydHlJbnZhbGlkOwotICAgIENvbGxhcHNlZEJvcmRlclZh
bHVlIHJlc3VsdChzdHlsZSgpLmJvcmRlclN0YXJ0KCksIGluY2x1ZGVDb2xvciA/IHN0eWxlKCku
dmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKHN0YXJ0Q29sb3JQcm9wZXJ0eSkg
OiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpDZWxsKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNv
bGxhcHNlZEJvcmRlcigqdGhpcywgc3R5bGUoKS5ib3JkZXJTdGFydCgpLCBzdGFydENvbG9yUHJv
cGVydHksIEJvcmRlclByZWNlZGVuY2U6OkNlbGwpOwogCiAgICAgUmVuZGVyVGFibGUqIHRhYmxl
ID0gdGhpcy0+dGFibGUoKTsKICAgICBpZiAoIXRhYmxlKQpAQCAtNTg0LDcgKzU5MCw3IEBAIENv
bGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZFN0YXJ0
Qm9yZGVyKEluY2x1ZGVCb3JkZXJDCiAgICAgLy8gKDIpIFRoZSBlbmQgYm9yZGVyIG9mIHRoZSBw
cmVjZWRpbmcgY2VsbC4KICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGxCZWZvcmUgPSB0YWJsZS0+
Y2VsbEJlZm9yZSh0aGlzKTsKICAgICBpZiAoY2VsbEJlZm9yZSkgewotICAgICAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSBjZWxsQmVmb3JlQWRqb2luaW5nQm9yZGVyID0gQ29sbGFwc2VkQm9yZGVy
VmFsdWUoY2VsbEJlZm9yZS0+Ym9yZGVyQWRqb2luaW5nQ2VsbEFmdGVyKCp0aGlzKSwgaW5jbHVk
ZUNvbG9yID8gY2VsbEJlZm9yZS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29s
b3JGaWx0ZXIoZW5kQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpD
ZWxsKTsKKyAgICAgICAgYXV0byBjZWxsQmVmb3JlQWRqb2luaW5nQm9yZGVyID0gY29sbGFwc2Vk
Qm9yZGVyKCpjZWxsQmVmb3JlLCBjZWxsQmVmb3JlLT5ib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIo
KnRoaXMpLCBlbmRDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpDZWxsKTsKICAgICAg
ICAgLy8gfHJlc3VsdHwgc2hvdWxkIGJlIHRoZSAybmQgYXJndW1lbnQgYXMgfGNlbGxCZWZvcmV8
IHNob3VsZCB3aW4gaW4gY2FzZSBvZiBlcXVhbGl0eSBwZXIgQ1NTIDIuMSAoQm9yZGVyIGNvbmZs
aWN0IHJlc29sdXRpb24sIHBvaW50IDQpLgogICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIo
Y2VsbEJlZm9yZUFkam9pbmluZ0JvcmRlciwgcmVzdWx0KTsKICAgICAgICAgaWYgKCFyZXN1bHQu
ZXhpc3RzKCkpCkBAIC01OTQsMTIgKzYwMCwxMiBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5k
ZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQwog
ICAgIGJvb2wgc3RhcnRCb3JkZXJBZGpvaW5zVGFibGUgPSBoYXNTdGFydEJvcmRlckFkam9pbmlu
Z1RhYmxlKCk7CiAgICAgaWYgKHN0YXJ0Qm9yZGVyQWRqb2luc1RhYmxlKSB7CiAgICAgICAgIC8v
ICgzKSBPdXIgcm93J3Mgc3RhcnQgYm9yZGVyLgotICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3Jk
ZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShyb3coKS0+Ym9yZGVyQWRqb2luaW5nU3Rh
cnRDZWxsKCp0aGlzKSwgaW5jbHVkZUNvbG9yID8gcGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKHN0YXJ0Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigp
LCBCb3JkZXJQcmVjZWRlbmNlOjpSb3cpKTsKKyAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVy
KHJlc3VsdCwgY29sbGFwc2VkQm9yZGVyKCpyb3coKSwgcm93KCktPmJvcmRlckFkam9pbmluZ1N0
YXJ0Q2VsbCgqdGhpcyksIHN0YXJ0Q29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJlY2VkZW5jZTo6Um93
KSk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAogICAgICAgICAvLyAoNCkgT3VyIHJvdyBncm91cCdzIHN0YXJ0IGJvcmRlci4KLSAg
ICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUo
c2VjdGlvbigpLT5ib3JkZXJBZGpvaW5pbmdTdGFydENlbGwoKnRoaXMpLCBpbmNsdWRlQ29sb3Ig
PyBzZWN0aW9uKCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVy
KHN0YXJ0Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpSb3dHcm91
cCkpOworICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBjb2xsYXBzZWRCb3Jk
ZXIoKnNlY3Rpb24oKSwgc2VjdGlvbigpLT5ib3JkZXJBZGpvaW5pbmdTdGFydENlbGwoKnRoaXMp
LCBzdGFydENvbG9yUHJvcGVydHksIEJvcmRlclByZWNlZGVuY2U6OlJvd0dyb3VwKSk7CiAgICAg
ICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CkBAIC02MTAsMTkgKzYxNiwxOSBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJs
ZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRTdGFydEJvcmRlcihJbmNsdWRlQm9yZGVyQwogICAgIGlm
IChSZW5kZXJUYWJsZUNvbCogY29sRWx0ID0gdGFibGUtPmNvbEVsZW1lbnQoY29sKCksICZzdGFy
dENvbEVkZ2UsICZlbmRDb2xFZGdlKSkgewogICAgICAgICBpZiAoY29sRWx0LT5pc1RhYmxlQ29s
dW1uR3JvdXAoKSAmJiBzdGFydENvbEVkZ2UpIHsKICAgICAgICAgICAgIC8vIFRoZSB8Y29sRWx0
fCBpcyBhIGNvbHVtbiBncm91cCBhbmQgaXMgYWxzbyB0aGUgZmlyc3QgY29sZ3JvdXAgKGluIGNh
c2Ugb2Ygc3Bhbm5lZCBjb2xncm91cHMpLgotICAgICAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9y
ZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY29sRWx0LT5ib3JkZXJBZGpvaW5pbmdD
ZWxsU3RhcnRCb3JkZXIoKSwgaW5jbHVkZUNvbG9yID8gY29sRWx0LT5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihzdGFydENvbG9yUHJvcGVydHkpIDogQ29sb3Io
KSwgQm9yZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGNob29zZUJvcmRlcihyZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqY29sRWx0LCBjb2xFbHQtPmJv
cmRlckFkam9pbmluZ0NlbGxTdGFydEJvcmRlcigpLCBzdGFydENvbG9yUHJvcGVydHksIEJvcmRl
clByZWNlZGVuY2U6OkNvbHVtbkdyb3VwKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5leGlz
dHMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9IGVsc2UgaWYg
KCFjb2xFbHQtPmlzVGFibGVDb2x1bW5Hcm91cCgpKSB7CiAgICAgICAgICAgICAvLyBXZSBmaXJz
dCBjb25zaWRlciB0aGUgfGNvbEVsdHwgYW5kIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIGl0IGlz
IGEgc3Bhbm5lZCBjb2wgb3Igbm90LCB3ZSBhcHBseQogICAgICAgICAgICAgLy8gaXRzIHN0YXJ0
IGJvcmRlci4gVGhpcyBpcyBhcyBwZXIgSFRNTDUgd2hpY2ggc3RhdGVzIHRoYXQ6ICJGb3IgdGhl
IHB1cnBvc2VzIG9mIHRoZSBDU1MgdGFibGUgbW9kZWwsCiAgICAgICAgICAgICAvLyB0aGUgY29s
IGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUgdHJlYXRlZCBhcyBpZiBpdCB3YXMgcHJlc2VudCBh
cyBtYW55IHRpbWVzIGFzIGl0cyBzcGFuIGF0dHJpYnV0ZSBzcGVjaWZpZXMiLgotICAgICAgICAg
ICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY29s
RWx0LT5ib3JkZXJBZGpvaW5pbmdDZWxsU3RhcnRCb3JkZXIoKSwgaW5jbHVkZUNvbG9yID8gY29s
RWx0LT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihzdGFydENv
bG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9yZGVyUHJlY2VkZW5jZTo6Q29sdW1uKSk7CisgICAg
ICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBjb2xsYXBzZWRCb3JkZXIoKmNv
bEVsdCwgY29sRWx0LT5ib3JkZXJBZGpvaW5pbmdDZWxsU3RhcnRCb3JkZXIoKSwgc3RhcnRDb2xv
clByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW4pKTsKICAgICAgICAgICAgIGlmICgh
cmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICAvLyBOZXh0LCBhcHBseSB0aGUgc3RhcnQgYm9yZGVyIG9mIHRoZSBlbmNsb3NpbmcgY29s
Z3JvdXAgYnV0IG9ubHkgaWYgaXQgaXMgYWRqYWNlbnQgdG8gdGhlIGNlbGwncyBlZGdlLgogICAg
ICAgICAgICAgaWYgKFJlbmRlclRhYmxlQ29sKiBlbmNsb3NpbmdDb2x1bW5Hcm91cCA9IGNvbEVs
dC0+ZW5jbG9zaW5nQ29sdW1uR3JvdXBJZkFkamFjZW50QmVmb3JlKCkpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShl
bmNsb3NpbmdDb2x1bW5Hcm91cC0+Ym9yZGVyQWRqb2luaW5nQ2VsbFN0YXJ0Qm9yZGVyKCksIGlu
Y2x1ZGVDb2xvciA/IGVuY2xvc2luZ0NvbHVtbkdyb3VwLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcldpdGhDb2xvckZpbHRlcihzdGFydENvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9y
ZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBj
aG9vc2VCb3JkZXIocmVzdWx0LCBjb2xsYXBzZWRCb3JkZXIoKmVuY2xvc2luZ0NvbHVtbkdyb3Vw
LCBlbmNsb3NpbmdDb2x1bW5Hcm91cC0+Ym9yZGVyQWRqb2luaW5nQ2VsbFN0YXJ0Qm9yZGVyKCks
IHN0YXJ0Q29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTYzNCwxOCArNjQwLDE4IEBAIENvbGxh
cHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9y
ZGVyKEluY2x1ZGVCb3JkZXJDCiAgICAgICAgIGlmIChSZW5kZXJUYWJsZUNvbCogY29sRWx0ID0g
dGFibGUtPmNvbEVsZW1lbnQoY29sKCkgLSAxLCAmc3RhcnRDb2xFZGdlLCAmZW5kQ29sRWRnZSkp
IHsKICAgICAgICAgICAgIGlmIChjb2xFbHQtPmlzVGFibGVDb2x1bW5Hcm91cCgpICYmIGVuZENv
bEVkZ2UpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgZWxlbWVudCBpcyBhIGNvbGdyb3VwIGFu
ZCBpcyBhbHNvIHRoZSBsYXN0IGNvbGdyb3VwIChpbiBjYXNlIG9mIHNwYW5uZWQgY29sZ3JvdXBz
KS4KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoQ29sbGFwc2VkQm9yZGVy
VmFsdWUoY29sRWx0LT5ib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIoKnRoaXMpLCBpbmNsdWRlQ29s
b3IgPyBjb2xFbHQtPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVy
KGVuZENvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9yZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3Jv
dXApLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihjb2xs
YXBzZWRCb3JkZXIoKmNvbEVsdCwgY29sRWx0LT5ib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIoKnRo
aXMpLCBlbmRDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW5Hcm91cCksIHJl
c3VsdCk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbEVsdC0+
aXNUYWJsZUNvbHVtbigpKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgY29sbGFw
c2luZyBib3JkZXIgYWdhaW5zdCB0aGUgY29sJ3MgYm9yZGVyIGlnbm9yaW5nIGFueSAnc3Bhbicg
YXMgcGVyIEhUTUw1LgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihDb2xs
YXBzZWRCb3JkZXJWYWx1ZShjb2xFbHQtPmJvcmRlckFkam9pbmluZ0NlbGxBZnRlcigqdGhpcyks
IGluY2x1ZGVDb2xvciA/IGNvbEVsdC0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRo
Q29sb3JGaWx0ZXIoZW5kQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNl
OjpDb2x1bW4pLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRl
cihjb2xsYXBzZWRCb3JkZXIoKmNvbEVsdCwgY29sRWx0LT5ib3JkZXJBZGpvaW5pbmdDZWxsQWZ0
ZXIoKnRoaXMpLCBlbmRDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW4pLCBy
ZXN1bHQpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIC8vIE5leHQsIGlmIHRo
ZSBwcmV2aW91cyBjb2wgaGFzIGEgcGFyZW50IGNvbGdyb3VwIHRoZW4gaXRzIGVuZCBib3JkZXIg
c2hvdWxkIGJlIGFwcGxpZWQKICAgICAgICAgICAgICAgICAvLyBidXQgb25seSBpZiBpdCBpcyBh
ZGphY2VudCB0byB0aGUgY2VsbCdzIGVkZ2UuCiAgICAgICAgICAgICAgICAgaWYgKFJlbmRlclRh
YmxlQ29sKiBlbmNsb3NpbmdDb2x1bW5Hcm91cCA9IGNvbEVsdC0+ZW5jbG9zaW5nQ29sdW1uR3Jv
dXBJZkFkamFjZW50QWZ0ZXIoKSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9v
c2VCb3JkZXIoQ29sbGFwc2VkQm9yZGVyVmFsdWUoZW5jbG9zaW5nQ29sdW1uR3JvdXAtPmJvcmRl
ckFkam9pbmluZ0NlbGxFbmRCb3JkZXIoKSwgaW5jbHVkZUNvbG9yID8gZW5jbG9zaW5nQ29sdW1u
R3JvdXAtPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKGVuZENv
bG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9yZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApLCBy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoY29sbGFw
c2VkQm9yZGVyKCplbmNsb3NpbmdDb2x1bW5Hcm91cCwgZW5jbG9zaW5nQ29sdW1uR3JvdXAtPmJv
cmRlckFkam9pbmluZ0NlbGxFbmRCb3JkZXIoKSwgZW5kQ29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJl
Y2VkZW5jZTo6Q29sdW1uR3JvdXApLCByZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNjU1LDcgKzY2MSw3IEBAIENvbGxhcHNlZEJvcmRlclZh
bHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZFN0YXJ0Qm9yZGVyKEluY2x1ZGVC
b3JkZXJDCiAKICAgICBpZiAoc3RhcnRCb3JkZXJBZGpvaW5zVGFibGUpIHsKICAgICAgICAgLy8g
KDcpIFRoZSB0YWJsZSdzIHN0YXJ0IGJvcmRlci4KLSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9y
ZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUodGFibGUtPnRhYmxlU3RhcnRCb3JkZXJB
ZGpvaW5pbmdDZWxsKCp0aGlzKSwgaW5jbHVkZUNvbG9yID8gdGFibGUtPnN0eWxlKCkudmlzaXRl
ZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKHN0YXJ0Q29sb3JQcm9wZXJ0eSkgOiBDb2xv
cigpLCBCb3JkZXJQcmVjZWRlbmNlOjpUYWJsZSkpOworICAgICAgICByZXN1bHQgPSBjaG9vc2VC
b3JkZXIocmVzdWx0LCBjb2xsYXBzZWRCb3JkZXIoKnRhYmxlLCB0YWJsZS0+dGFibGVTdGFydEJv
cmRlckFkam9pbmluZ0NlbGwoKnRoaXMpLCBzdGFydENvbG9yUHJvcGVydHksIEJvcmRlclByZWNl
ZGVuY2U6OlRhYmxlKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC02ODcsNyArNjkzLDcgQEAgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQ29sbGFwc2VkRW5kQm9yZGVyKEluY2x1
ZGVCb3JkZXJDb2wKICAgICAvLyAoMSkgT3VyIGVuZCBib3JkZXIuCiAgICAgQ1NTUHJvcGVydHlJ
RCBzdGFydENvbG9yUHJvcGVydHkgPSBpbmNsdWRlQ29sb3IgPyBDU1NQcm9wZXJ0eTo6cmVzb2x2
ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbmxpbmVTdGFydENvbG9y
LCBzdHlsZUZvckNlbGxGbG93KCkuZGlyZWN0aW9uKCksIHN0eWxlRm9yQ2VsbEZsb3coKS53cml0
aW5nTW9kZSgpKSA6IENTU1Byb3BlcnR5SW52YWxpZDsKICAgICBDU1NQcm9wZXJ0eUlEIGVuZENv
bG9yUHJvcGVydHkgPSBpbmNsdWRlQ29sb3IgPyBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlv
bkF3YXJlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbmxpbmVFbmRDb2xvciwgc3R5bGVGb3JD
ZWxsRmxvdygpLmRpcmVjdGlvbigpLCBzdHlsZUZvckNlbGxGbG93KCkud3JpdGluZ01vZGUoKSkg
OiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgcmVzdWx0ID0g
Q29sbGFwc2VkQm9yZGVyVmFsdWUoc3R5bGUoKS5ib3JkZXJFbmQoKSwgaW5jbHVkZUNvbG9yID8g
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoZW5kQ29sb3JQcm9w
ZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpDZWxsKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGNvbGxhcHNlZEJvcmRlcigqdGhpcywgc3R5bGUoKS5ib3JkZXJFbmQoKSwgZW5kQ29sb3JQ
cm9wZXJ0eSwgQm9yZGVyUHJlY2VkZW5jZTo6Q2VsbCk7CiAKICAgICBSZW5kZXJUYWJsZSogdGFi
bGUgPSB0aGlzLT50YWJsZSgpOwogICAgIGlmICghdGFibGUpCkBAIC02OTgsNyArNzA0LDcgQEAg
Q29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQ29sbGFwc2VkRW5k
Qm9yZGVyKEluY2x1ZGVCb3JkZXJDb2wKICAgICAvLyAoMikgVGhlIHN0YXJ0IGJvcmRlciBvZiB0
aGUgZm9sbG93aW5nIGNlbGwuCiAgICAgaWYgKCFpc0VuZENvbHVtbikgewogICAgICAgICBpZiAo
UmVuZGVyVGFibGVDZWxsKiBjZWxsQWZ0ZXIgPSB0YWJsZS0+Y2VsbEFmdGVyKHRoaXMpKSB7Ci0g
ICAgICAgICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjZWxsQWZ0ZXJBZGpvaW5pbmdCb3JkZXIg
PSBDb2xsYXBzZWRCb3JkZXJWYWx1ZShjZWxsQWZ0ZXItPmJvcmRlckFkam9pbmluZ0NlbGxCZWZv
cmUoKnRoaXMpLCBpbmNsdWRlQ29sb3IgPyBjZWxsQWZ0ZXItPnN0eWxlKCkudmlzaXRlZERlcGVu
ZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKHN0YXJ0Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBC
b3JkZXJQcmVjZWRlbmNlOjpDZWxsKTsKKyAgICAgICAgICAgIGF1dG8gY2VsbEFmdGVyQWRqb2lu
aW5nQm9yZGVyID0gY29sbGFwc2VkQm9yZGVyKCpjZWxsQWZ0ZXIsIGNlbGxBZnRlci0+Ym9yZGVy
QWRqb2luaW5nQ2VsbEJlZm9yZSgqdGhpcyksIHN0YXJ0Q29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJl
Y2VkZW5jZTo6Q2VsbCk7CiAgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0
LCBjZWxsQWZ0ZXJBZGpvaW5pbmdCb3JkZXIpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhp
c3RzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcwOCwxMiArNzE0LDEy
IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNl
ZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVyQ29sCiAgICAgYm9vbCBlbmRCb3JkZXJBZGpvaW5zVGFi
bGUgPSBoYXNFbmRCb3JkZXJBZGpvaW5pbmdUYWJsZSgpOwogICAgIGlmIChlbmRCb3JkZXJBZGpv
aW5zVGFibGUpIHsKICAgICAgICAgLy8gKDMpIE91ciByb3cncyBlbmQgYm9yZGVyLgotICAgICAg
ICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShyb3co
KS0+Ym9yZGVyQWRqb2luaW5nRW5kQ2VsbCgqdGhpcyksIGluY2x1ZGVDb2xvciA/IHBhcmVudCgp
LT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihlbmRDb2xvclBy
b3BlcnR5KSA6IENvbG9yKCksIEJvcmRlclByZWNlZGVuY2U6OlJvdykpOworICAgICAgICByZXN1
bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBjb2xsYXBzZWRCb3JkZXIoKnJvdygpLCByb3coKS0+
Ym9yZGVyQWRqb2luaW5nRW5kQ2VsbCgqdGhpcyksIGVuZENvbG9yUHJvcGVydHksIEJvcmRlclBy
ZWNlZGVuY2U6OlJvdykpOwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICAvLyAoNCkgT3VyIHJvdyBncm91
cCdzIGVuZCBib3JkZXIuCi0gICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENv
bGxhcHNlZEJvcmRlclZhbHVlKHNlY3Rpb24oKS0+Ym9yZGVyQWRqb2luaW5nRW5kQ2VsbCgqdGhp
cyksIGluY2x1ZGVDb2xvciA/IHNlY3Rpb24oKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29s
b3JXaXRoQ29sb3JGaWx0ZXIoZW5kQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVj
ZWRlbmNlOjpSb3dHcm91cCkpOworICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0
LCBjb2xsYXBzZWRCb3JkZXIoKnNlY3Rpb24oKSwgc2VjdGlvbigpLT5ib3JkZXJBZGpvaW5pbmdF
bmRDZWxsKCp0aGlzKSwgZW5kQ29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJlY2VkZW5jZTo6Um93R3Jv
dXApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KQEAgLTcyNCwxOSArNzMwLDE5IEBAIENvbGxhcHNlZEJvcmRlclZhbHVl
IFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEVuZEJvcmRlcihJbmNsdWRlQm9yZGVy
Q29sCiAgICAgaWYgKFJlbmRlclRhYmxlQ29sKiBjb2xFbHQgPSB0YWJsZS0+Y29sRWxlbWVudChj
b2woKSArIGNvbFNwYW4oKSAtIDEsICZzdGFydENvbEVkZ2UsICZlbmRDb2xFZGdlKSkgewogICAg
ICAgICBpZiAoY29sRWx0LT5pc1RhYmxlQ29sdW1uR3JvdXAoKSAmJiBlbmRDb2xFZGdlKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgZWxlbWVudCBpcyBhIGNvbGdyb3VwIGFuZCBpcyBhbHNvIHRoZSBs
YXN0IGNvbGdyb3VwIChpbiBjYXNlIG9mIHNwYW5uZWQgY29sZ3JvdXBzKS4KLSAgICAgICAgICAg
IHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKGNvbEVs
dC0+Ym9yZGVyQWRqb2luaW5nQ2VsbEVuZEJvcmRlcigpLCBpbmNsdWRlQ29sb3IgPyBjb2xFbHQt
PnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKGVuZENvbG9yUHJv
cGVydHkpIDogQ29sb3IoKSwgQm9yZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqY29s
RWx0LCBjb2xFbHQtPmJvcmRlckFkam9pbmluZ0NlbGxFbmRCb3JkZXIoKSwgZW5kQ29sb3JQcm9w
ZXJ0eSwgQm9yZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApKTsKICAgICAgICAgICAgIGlmICgh
cmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0gZWxzZSBpZiAoIWNvbEVsdC0+aXNUYWJsZUNvbHVtbkdyb3VwKCkpIHsKICAgICAgICAgICAg
IC8vIEZpcnN0IGFwcGx5IHRoZSBlbmQgYm9yZGVyIG9mIHRoZSBjb2x1bW4gaXJyZXNwZWN0aXZl
IG9mIHdoZXRoZXIgaXQgaXMgc3Bhbm5lZCBvciBub3QuIFRoaXMgaXMgYXMgcGVyCiAgICAgICAg
ICAgICAvLyBIVE1MNSB3aGljaCBzdGF0ZXMgdGhhdDogIkZvciB0aGUgcHVycG9zZXMgb2YgdGhl
IENTUyB0YWJsZSBtb2RlbCwgdGhlIGNvbCBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGJlCiAgICAg
ICAgICAgICAvLyB0cmVhdGVkIGFzIGlmIGl0IHdhcyBwcmVzZW50IGFzIG1hbnkgdGltZXMgYXMg
aXRzIHNwYW4gYXR0cmlidXRlIHNwZWNpZmllcyIuCi0gICAgICAgICAgICByZXN1bHQgPSBjaG9v
c2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShjb2xFbHQtPmJvcmRlckFkam9p
bmluZ0NlbGxFbmRCb3JkZXIoKSwgaW5jbHVkZUNvbG9yID8gY29sRWx0LT5zdHlsZSgpLnZpc2l0
ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihlbmRDb2xvclByb3BlcnR5KSA6IENvbG9y
KCksIEJvcmRlclByZWNlZGVuY2U6OkNvbHVtbikpOworICAgICAgICAgICAgcmVzdWx0ID0gY2hv
b3NlQm9yZGVyKHJlc3VsdCwgY29sbGFwc2VkQm9yZGVyKCpjb2xFbHQsIGNvbEVsdC0+Ym9yZGVy
QWRqb2luaW5nQ2VsbEVuZEJvcmRlcigpLCBlbmRDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRl
bmNlOjpDb2x1bW4pKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAvLyBOZXh0LCBpZiBpdCBoYXMg
YSBwYXJlbnQgY29sZ3JvdXAgdGhlbiB3ZSBhcHBseSBpdHMgZW5kIGJvcmRlciBidXQgb25seSBp
ZiBpdCBpcyBhZGphY2VudCB0byB0aGUgY2VsbC4KICAgICAgICAgICAgIGlmIChSZW5kZXJUYWJs
ZUNvbCogZW5jbG9zaW5nQ29sdW1uR3JvdXAgPSBjb2xFbHQtPmVuY2xvc2luZ0NvbHVtbkdyb3Vw
SWZBZGphY2VudEFmdGVyKCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3Jk
ZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShlbmNsb3NpbmdDb2x1bW5Hcm91cC0+Ym9y
ZGVyQWRqb2luaW5nQ2VsbEVuZEJvcmRlcigpLCBpbmNsdWRlQ29sb3IgPyBlbmNsb3NpbmdDb2x1
bW5Hcm91cC0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoZW5k
Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW5Hcm91cCkp
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIGNvbGxhcHNl
ZEJvcmRlcigqZW5jbG9zaW5nQ29sdW1uR3JvdXAsIGVuY2xvc2luZ0NvbHVtbkdyb3VwLT5ib3Jk
ZXJBZGpvaW5pbmdDZWxsRW5kQm9yZGVyKCksIGVuZENvbG9yUHJvcGVydHksIEJvcmRlclByZWNl
ZGVuY2U6OkNvbHVtbkdyb3VwKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3Rz
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CkBA
IC03NDgsMTcgKzc1NCwxNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6
OmNvbXB1dGVDb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRlckNvbAogICAgICAgICBpZiAo
UmVuZGVyVGFibGVDb2wqIGNvbEVsdCA9IHRhYmxlLT5jb2xFbGVtZW50KGNvbCgpICsgY29sU3Bh
bigpLCAmc3RhcnRDb2xFZGdlLCAmZW5kQ29sRWRnZSkpIHsKICAgICAgICAgICAgIGlmIChjb2xF
bHQtPmlzVGFibGVDb2x1bW5Hcm91cCgpICYmIHN0YXJ0Q29sRWRnZSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgY2FzZSBpcyBhIGNvbGdyb3VwIHdpdGhvdXQgYW55IGNvbCwgd2Ugb25seSBj
b21wdXRlIGl0IGlmIGl0IGlzIGFkamFjZW50IHRvIHRoZSBjZWxsJ3MgZWRnZS4KLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZShjb2xFbHQtPmJvcmRlckFkam9pbmluZ0NlbGxCZWZvcmUoKnRoaXMpLCBpbmNsdWRlQ29sb3Ig
PyBjb2xFbHQtPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKHN0
YXJ0Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW5Hcm91
cCkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIGNvbGxh
cHNlZEJvcmRlcigqY29sRWx0LCBjb2xFbHQtPmJvcmRlckFkam9pbmluZ0NlbGxCZWZvcmUoKnRo
aXMpLCBzdGFydENvbG9yUHJvcGVydHksIEJvcmRlclByZWNlZGVuY2U6OkNvbHVtbkdyb3VwKSk7
CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbEVsdC0+aXNUYWJs
ZUNvbHVtbigpKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgY29sbGFwc2luZyBi
b3JkZXIgYWdhaW5zdCB0aGUgY29sJ3MgYm9yZGVyIGlnbm9yaW5nIGFueSAnc3BhbicgYXMgcGVy
IEhUTUw1LgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENv
bGxhcHNlZEJvcmRlclZhbHVlKGNvbEVsdC0+Ym9yZGVyQWRqb2luaW5nQ2VsbEJlZm9yZSgqdGhp
cyksIGluY2x1ZGVDb2xvciA/IGNvbEVsdC0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JX
aXRoQ29sb3JGaWx0ZXIoc3RhcnRDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJvcmRlclByZWNl
ZGVuY2U6OkNvbHVtbikpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihy
ZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqY29sRWx0LCBjb2xFbHQtPmJvcmRlckFkam9pbmluZ0Nl
bGxCZWZvcmUoKnRoaXMpLCBzdGFydENvbG9yUHJvcGVydHksIEJvcmRlclByZWNlZGVuY2U6OkNv
bHVtbikpOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUg
YSBwYXJlbnQgY29sZ3JvdXAsIHJlc29sdmUgdGhlIGJvcmRlciBvbmx5IGlmIGl0IGlzIGFkamFj
ZW50IHRvIHRoZSBjZWxsLgogICAgICAgICAgICAgICAgIGlmIChSZW5kZXJUYWJsZUNvbCogZW5j
bG9zaW5nQ29sdW1uR3JvdXAgPSBjb2xFbHQtPmVuY2xvc2luZ0NvbHVtbkdyb3VwSWZBZGphY2Vu
dEJlZm9yZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihy
ZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKGVuY2xvc2luZ0NvbHVtbkdyb3VwLT5ib3JkZXJB
ZGpvaW5pbmdDZWxsU3RhcnRCb3JkZXIoKSwgaW5jbHVkZUNvbG9yID8gZW5jbG9zaW5nQ29sdW1u
R3JvdXAtPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKHN0YXJ0
Q29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW5Hcm91cCkp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBjb2xs
YXBzZWRCb3JkZXIoKmVuY2xvc2luZ0NvbHVtbkdyb3VwLCBlbmNsb3NpbmdDb2x1bW5Hcm91cC0+
Ym9yZGVyQWRqb2luaW5nQ2VsbFN0YXJ0Qm9yZGVyKCksIHN0YXJ0Q29sb3JQcm9wZXJ0eSwgQm9y
ZGVyUHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgICAgIH0KQEAgLTc2OCw3ICs3NzQsNyBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRFbmRCb3JkZXIoSW5jbHVkZUJvcmRl
ckNvbAogCiAgICAgaWYgKGVuZEJvcmRlckFkam9pbnNUYWJsZSkgewogICAgICAgICAvLyAoNykg
VGhlIHRhYmxlJ3MgZW5kIGJvcmRlci4KLSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJl
c3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUodGFibGUtPnRhYmxlRW5kQm9yZGVyQWRqb2luaW5n
Q2VsbCgqdGhpcyksIGluY2x1ZGVDb2xvciA/IHRhYmxlLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcldpdGhDb2xvckZpbHRlcihlbmRDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJvcmRl
clByZWNlZGVuY2U6OlRhYmxlKSk7CisgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1
bHQsIGNvbGxhcHNlZEJvcmRlcigqdGFibGUsIHRhYmxlLT50YWJsZUVuZEJvcmRlckFkam9pbmlu
Z0NlbGwoKnRoaXMpLCBlbmRDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpUYWJsZSkp
OwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQpAQCAtODAwLDcgKzgwNiw3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRl
clRhYmxlQ2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEJlZm9yZUJvcmRlcihJbmNsdWRlQm9yZGVyCiAg
ICAgLy8gKDEpIE91ciBiZWZvcmUgYm9yZGVyLgogICAgIENTU1Byb3BlcnR5SUQgYmVmb3JlQ29s
b3JQcm9wZXJ0eSA9IGluY2x1ZGVDb2xvciA/IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9u
QXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckJsb2NrU3RhcnRDb2xvciwgc3R5bGVGb3JD
ZWxsRmxvdygpLmRpcmVjdGlvbigpLCBzdHlsZUZvckNlbGxGbG93KCkud3JpdGluZ01vZGUoKSkg
OiBDU1NQcm9wZXJ0eUludmFsaWQ7CiAgICAgQ1NTUHJvcGVydHlJRCBhZnRlckNvbG9yUHJvcGVy
dHkgPSBpbmNsdWRlQ29sb3IgPyBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJv
cGVydHkoQ1NTUHJvcGVydHlCb3JkZXJCbG9ja0VuZENvbG9yLCBzdHlsZUZvckNlbGxGbG93KCku
ZGlyZWN0aW9uKCksIHN0eWxlRm9yQ2VsbEZsb3coKS53cml0aW5nTW9kZSgpKSA6IENTU1Byb3Bl
cnR5SW52YWxpZDsKLSAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSByZXN1bHQgPSBDb2xsYXBzZWRC
b3JkZXJWYWx1ZShzdHlsZSgpLmJvcmRlckJlZm9yZSgpLCBpbmNsdWRlQ29sb3IgPyBzdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihiZWZvcmVDb2xvclByb3BlcnR5
KSA6IENvbG9yKCksIEJvcmRlclByZWNlZGVuY2U6OkNlbGwpOworICAgIGF1dG8gcmVzdWx0ID0g
Y29sbGFwc2VkQm9yZGVyKCp0aGlzLCBzdHlsZSgpLmJvcmRlckJlZm9yZSgpLCBiZWZvcmVDb2xv
clByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpDZWxsKTsKICAgICAKICAgICBSZW5kZXJUYWJs
ZSogdGFibGUgPSB0aGlzLT50YWJsZSgpOwogICAgIGlmICghdGFibGUpCkBAIC04MDgsNDMgKzgx
NCw0MiBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xs
YXBzZWRCZWZvcmVCb3JkZXIoSW5jbHVkZUJvcmRlcgogICAgIFJlbmRlclRhYmxlQ2VsbCogcHJl
dkNlbGwgPSB0YWJsZS0+Y2VsbEFib3ZlKHRoaXMpOwogICAgIGlmIChwcmV2Q2VsbCkgewogICAg
ICAgICAvLyAoMikgQSBiZWZvcmUgY2VsbCdzIGFmdGVyIGJvcmRlci4KLSAgICAgICAgcmVzdWx0
ID0gY2hvb3NlQm9yZGVyKENvbGxhcHNlZEJvcmRlclZhbHVlKHByZXZDZWxsLT5zdHlsZSgpLmJv
cmRlckFmdGVyKCksIGluY2x1ZGVDb2xvciA/IHByZXZDZWxsLT5zdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihhZnRlckNvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwg
Qm9yZGVyUHJlY2VkZW5jZTo6Q2VsbCksIHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IGNob29z
ZUJvcmRlcihjb2xsYXBzZWRCb3JkZXIoKnByZXZDZWxsLCBwcmV2Q2VsbC0+c3R5bGUoKS5ib3Jk
ZXJBZnRlcigpLCBhZnRlckNvbG9yUHJvcGVydHksIEJvcmRlclByZWNlZGVuY2U6OkNlbGwpLCBy
ZXN1bHQpOwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIC8vICgzKSBPdXIgcm93J3MgYmVmb3JlIGJvcmRl
ci4KLSAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1
ZShwYXJlbnQoKS0+c3R5bGUoKS5ib3JkZXJCZWZvcmUoKSwgaW5jbHVkZUNvbG9yID8gcGFyZW50
KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKGJlZm9yZUNv
bG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9yZGVyUHJlY2VkZW5jZTo6Um93KSk7CisgICAgcmVz
dWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgY29sbGFwc2VkQm9yZGVyKCpwYXJlbnQoKSwgcGFy
ZW50KCktPnN0eWxlKCkuYm9yZGVyQmVmb3JlKCksIGJlZm9yZUNvbG9yUHJvcGVydHksIEJvcmRl
clByZWNlZGVuY2U6OlJvdykpOwogICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIAogICAgIC8vICg0KSBUaGUgcHJldmlvdXMgcm93J3MgYWZ0ZXIg
Ym9yZGVyLgogICAgIGlmIChwcmV2Q2VsbCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHByZXZS
b3cgPSAwOworICAgICAgICBSZW5kZXJUYWJsZVJvdyogcHJldlJvdzsKICAgICAgICAgaWYgKHBy
ZXZDZWxsLT5zZWN0aW9uKCkgPT0gc2VjdGlvbigpKQotICAgICAgICAgICAgcHJldlJvdyA9IHBh
cmVudCgpLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIHByZXZSb3cgPSBkeW5hbWlj
RG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KHBhcmVudCgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHByZXZSb3cgPSBwcmV2Q2VsbC0+c2VjdGlvbigpLT5s
YXN0Um93KCk7Ci0gICAgCiAgICAgICAgIGlmIChwcmV2Um93KSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBjaG9vc2VCb3JkZXIoQ29sbGFwc2VkQm9yZGVyVmFsdWUocHJldlJvdy0+c3R5bGUoKS5i
b3JkZXJBZnRlcigpLCBpbmNsdWRlQ29sb3IgPyBwcmV2Um93LT5zdHlsZSgpLnZpc2l0ZWREZXBl
bmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihhZnRlckNvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwg
Qm9yZGVyUHJlY2VkZW5jZTo6Um93KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNo
b29zZUJvcmRlcihjb2xsYXBzZWRCb3JkZXIoKnByZXZSb3csIHByZXZSb3ctPnN0eWxlKCkuYm9y
ZGVyQWZ0ZXIoKSwgYWZ0ZXJDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpSb3cpLCBy
ZXN1bHQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIE5vdyBj
aGVjayByb3cgZ3JvdXBzLgogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogY3VyclNlY3Rpb24gPSBz
ZWN0aW9uKCk7CiAgICAgaWYgKCFyb3dJbmRleCgpKSB7CiAgICAgICAgIC8vICg1KSBPdXIgcm93
IGdyb3VwJ3MgYmVmb3JlIGJvcmRlci4KLSAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJl
c3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUoY3VyclNlY3Rpb24tPnN0eWxlKCkuYm9yZGVyQmVm
b3JlKCksIGluY2x1ZGVDb2xvciA/IGN1cnJTZWN0aW9uLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcldpdGhDb2xvckZpbHRlcihiZWZvcmVDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJv
cmRlclByZWNlZGVuY2U6OlJvd0dyb3VwKSk7CisgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRl
cihyZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqY3VyclNlY3Rpb24sIGN1cnJTZWN0aW9uLT5zdHls
ZSgpLmJvcmRlckJlZm9yZSgpLCBiZWZvcmVDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNl
OjpSb3dHcm91cCkpOwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICAvLyAoNikgUHJldmlvdXMgcm93IGdy
b3VwJ3MgYWZ0ZXIgYm9yZGVyLgogICAgICAgICBjdXJyU2VjdGlvbiA9IHRhYmxlLT5zZWN0aW9u
QWJvdmUoY3VyclNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25zKTsKICAgICAgICAgaWYgKGN1cnJT
ZWN0aW9uKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoQ29sbGFwc2VkQm9y
ZGVyVmFsdWUoY3VyclNlY3Rpb24tPnN0eWxlKCkuYm9yZGVyQWZ0ZXIoKSwgaW5jbHVkZUNvbG9y
ID8gY3VyclNlY3Rpb24tPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmls
dGVyKGFmdGVyQ29sb3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpSb3dH
cm91cCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIoY29sbGFw
c2VkQm9yZGVyKCpjdXJyU2VjdGlvbiwgY3VyclNlY3Rpb24tPnN0eWxlKCkuYm9yZGVyQWZ0ZXIo
KSwgYWZ0ZXJDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpSb3dHcm91cCksIHJlc3Vs
dCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC04NTQsMTggKzg1OSwxOCBAQCBDb2xsYXBzZWRC
b3JkZXJWYWx1ZSBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVDb2xsYXBzZWRCZWZvcmVCb3JkZXIo
SW5jbHVkZUJvcmRlcgogICAgICAgICAvLyAoOCkgT3VyIGNvbHVtbiBhbmQgY29sdW1uIGdyb3Vw
J3MgYmVmb3JlIGJvcmRlcnMuCiAgICAgICAgIFJlbmRlclRhYmxlQ29sKiBjb2xFbHQgPSB0YWJs
ZS0+Y29sRWxlbWVudChjb2woKSk7CiAgICAgICAgIGlmIChjb2xFbHQpIHsKLSAgICAgICAgICAg
IHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKGNvbEVs
dC0+c3R5bGUoKS5ib3JkZXJCZWZvcmUoKSwgaW5jbHVkZUNvbG9yID8gY29sRWx0LT5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihiZWZvcmVDb2xvclByb3BlcnR5
KSA6IENvbG9yKCksIEJvcmRlclByZWNlZGVuY2U6OkNvbHVtbikpOworICAgICAgICAgICAgcmVz
dWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgY29sbGFwc2VkQm9yZGVyKCpjb2xFbHQsIGNvbEVs
dC0+c3R5bGUoKS5ib3JkZXJCZWZvcmUoKSwgYmVmb3JlQ29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJl
Y2VkZW5jZTo6Q29sdW1uKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgaWYgKFJlbmRlclRhYmxl
Q29sKiBlbmNsb3NpbmdDb2x1bW5Hcm91cCA9IGNvbEVsdC0+ZW5jbG9zaW5nQ29sdW1uR3JvdXAo
KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxh
cHNlZEJvcmRlclZhbHVlKGVuY2xvc2luZ0NvbHVtbkdyb3VwLT5zdHlsZSgpLmJvcmRlckJlZm9y
ZSgpLCBpbmNsdWRlQ29sb3IgPyBlbmNsb3NpbmdDb2x1bW5Hcm91cC0+c3R5bGUoKS52aXNpdGVk
RGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoYmVmb3JlQ29sb3JQcm9wZXJ0eSkgOiBDb2xv
cigpLCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW5Hcm91cCkpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqZW5jbG9zaW5nQ29s
dW1uR3JvdXAsIGVuY2xvc2luZ0NvbHVtbkdyb3VwLT5zdHlsZSgpLmJvcmRlckJlZm9yZSgpLCBi
ZWZvcmVDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW5Hcm91cCkpOwogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0cygpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyAoOSkgVGhlIHRhYmxlJ3MgYmVmb3JlIGJvcmRlci4KLSAgICAgICAgcmVzdWx0ID0gY2hv
b3NlQm9yZGVyKHJlc3VsdCwgQ29sbGFwc2VkQm9yZGVyVmFsdWUodGFibGUtPnN0eWxlKCkuYm9y
ZGVyQmVmb3JlKCksIGluY2x1ZGVDb2xvciA/IHRhYmxlLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcldpdGhDb2xvckZpbHRlcihiZWZvcmVDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJv
cmRlclByZWNlZGVuY2U6OlRhYmxlKSk7CisgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihy
ZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqdGFibGUsIHRhYmxlLT5zdHlsZSgpLmJvcmRlckJlZm9y
ZSgpLCBiZWZvcmVDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpUYWJsZSkpOwogICAg
ICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtODk3LDcgKzkwMiw3IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxl
Q2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDCiAgICAgLy8g
KDEpIE91ciBhZnRlciBib3JkZXIuCiAgICAgQ1NTUHJvcGVydHlJRCBiZWZvcmVDb2xvclByb3Bl
cnR5ID0gaW5jbHVkZUNvbG9yID8gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVBy
b3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQmxvY2tTdGFydENvbG9yLCBzdHlsZUZvckNlbGxGbG93
KCkuZGlyZWN0aW9uKCksIHN0eWxlRm9yQ2VsbEZsb3coKS53cml0aW5nTW9kZSgpKSA6IENTU1By
b3BlcnR5SW52YWxpZDsKICAgICBDU1NQcm9wZXJ0eUlEIGFmdGVyQ29sb3JQcm9wZXJ0eSA9IGlu
Y2x1ZGVDb2xvciA/IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUJvcmRlckJsb2NrRW5kQ29sb3IsIHN0eWxlRm9yQ2VsbEZsb3coKS5kaXJlY3Rp
b24oKSwgc3R5bGVGb3JDZWxsRmxvdygpLndyaXRpbmdNb2RlKCkpIDogQ1NTUHJvcGVydHlJbnZh
bGlkOwotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJlc3VsdCA9IENvbGxhcHNlZEJvcmRlclZh
bHVlKHN0eWxlKCkuYm9yZGVyQWZ0ZXIoKSwgaW5jbHVkZUNvbG9yID8gc3R5bGUoKS52aXNpdGVk
RGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoYWZ0ZXJDb2xvclByb3BlcnR5KSA6IENvbG9y
KCksIEJvcmRlclByZWNlZGVuY2U6OkNlbGwpOworICAgIGF1dG8gcmVzdWx0ID0gY29sbGFwc2Vk
Qm9yZGVyKCp0aGlzLCBzdHlsZSgpLmJvcmRlckFmdGVyKCksIGFmdGVyQ29sb3JQcm9wZXJ0eSwg
Qm9yZGVyUHJlY2VkZW5jZTo6Q2VsbCk7CiAgICAgCiAgICAgUmVuZGVyVGFibGUqIHRhYmxlID0g
dGhpcy0+dGFibGUoKTsKICAgICBpZiAoIXRhYmxlKQpAQCAtOTA1LDE5ICs5MTAsMTkgQEAgQ29s
bGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQ29sbGFwc2VkQWZ0ZXJC
b3JkZXIoSW5jbHVkZUJvcmRlckMKICAgICBSZW5kZXJUYWJsZUNlbGwqIG5leHRDZWxsID0gdGFi
bGUtPmNlbGxCZWxvdyh0aGlzKTsKICAgICBpZiAobmV4dENlbGwpIHsKICAgICAgICAgLy8gKDIp
IEFuIGFmdGVyIGNlbGwncyBiZWZvcmUgYm9yZGVyLgotICAgICAgICByZXN1bHQgPSBjaG9vc2VC
b3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShuZXh0Q2VsbC0+c3R5bGUoKS5ib3Jk
ZXJCZWZvcmUoKSwgaW5jbHVkZUNvbG9yID8gbmV4dENlbGwtPnN0eWxlKCkudmlzaXRlZERlcGVu
ZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKGJlZm9yZUNvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwg
Qm9yZGVyUHJlY2VkZW5jZTo6Q2VsbCkpOworICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIo
cmVzdWx0LCBjb2xsYXBzZWRCb3JkZXIoKm5leHRDZWxsLCBuZXh0Q2VsbC0+c3R5bGUoKS5ib3Jk
ZXJCZWZvcmUoKSwgYmVmb3JlQ29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJlY2VkZW5jZTo6Q2VsbCkp
OwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIAogICAgIC8vICgzKSBPdXIgcm93J3MgYWZ0ZXIgYm9yZGVyLiAoRklY
TUU6IERlYWwgd2l0aCByb3dzcGFuISkKLSAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0
LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShwYXJlbnQoKS0+c3R5bGUoKS5ib3JkZXJBZnRlcigpLCBp
bmNsdWRlQ29sb3IgPyBwYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRo
Q29sb3JGaWx0ZXIoYWZ0ZXJDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJvcmRlclByZWNlZGVu
Y2U6OlJvdykpOworICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIGNvbGxhcHNlZEJv
cmRlcigqcGFyZW50KCksIHBhcmVudCgpLT5zdHlsZSgpLmJvcmRlckFmdGVyKCksIGFmdGVyQ29s
b3JQcm9wZXJ0eSwgQm9yZGVyUHJlY2VkZW5jZTo6Um93KSk7CiAgICAgaWYgKCFyZXN1bHQuZXhp
c3RzKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCiAgICAgLy8gKDQpIFRoZSBuZXh0
IHJvdydzIGJlZm9yZSBib3JkZXIuCiAgICAgaWYgKG5leHRDZWxsKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKG5leHRDZWxsLT5w
YXJlbnQoKS0+c3R5bGUoKS5ib3JkZXJCZWZvcmUoKSwgaW5jbHVkZUNvbG9yID8gbmV4dENlbGwt
PnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihi
ZWZvcmVDb2xvclByb3BlcnR5KSA6IENvbG9yKCksIEJvcmRlclByZWNlZGVuY2U6OlJvdykpOwor
ICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVzdWx0LCBjb2xsYXBzZWRCb3JkZXIoKm5l
eHRDZWxsLT5wYXJlbnQoKSwgbmV4dENlbGwtPnBhcmVudCgpLT5zdHlsZSgpLmJvcmRlckJlZm9y
ZSgpLCBiZWZvcmVDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpSb3cpKTsKICAgICAg
ICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KQEAgLTkyNiwxNCArOTMxLDE0IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxl
Q2VsbDo6Y29tcHV0ZUNvbGxhcHNlZEFmdGVyQm9yZGVyKEluY2x1ZGVCb3JkZXJDCiAgICAgUmVu
ZGVyVGFibGVTZWN0aW9uKiBjdXJyU2VjdGlvbiA9IHNlY3Rpb24oKTsKICAgICBpZiAocm93SW5k
ZXgoKSArIHJvd1NwYW4oKSA+PSBjdXJyU2VjdGlvbi0+bnVtUm93cygpKSB7CiAgICAgICAgIC8v
ICg1KSBPdXIgcm93IGdyb3VwJ3MgYWZ0ZXIgYm9yZGVyLgotICAgICAgICByZXN1bHQgPSBjaG9v
c2VCb3JkZXIocmVzdWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShjdXJyU2VjdGlvbi0+c3R5bGUo
KS5ib3JkZXJBZnRlcigpLCBpbmNsdWRlQ29sb3IgPyBjdXJyU2VjdGlvbi0+c3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoYWZ0ZXJDb2xvclByb3BlcnR5KSA6IENv
bG9yKCksIEJvcmRlclByZWNlZGVuY2U6OlJvd0dyb3VwKSk7CisgICAgICAgIHJlc3VsdCA9IGNo
b29zZUJvcmRlcihyZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqY3VyclNlY3Rpb24sIGN1cnJTZWN0
aW9uLT5zdHlsZSgpLmJvcmRlckFmdGVyKCksIGFmdGVyQ29sb3JQcm9wZXJ0eSwgQm9yZGVyUHJl
Y2VkZW5jZTo6Um93R3JvdXApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKICAgICAgICAgLy8gKDYpIEZvbGxvd2lu
ZyByb3cgZ3JvdXAncyBiZWZvcmUgYm9yZGVyLgogICAgICAgICBjdXJyU2VjdGlvbiA9IHRhYmxl
LT5zZWN0aW9uQmVsb3coY3VyclNlY3Rpb24sIFNraXBFbXB0eVNlY3Rpb25zKTsKICAgICAgICAg
aWYgKGN1cnJTZWN0aW9uKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBjaG9vc2VCb3JkZXIocmVz
dWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZShjdXJyU2VjdGlvbi0+c3R5bGUoKS5ib3JkZXJCZWZv
cmUoKSwgaW5jbHVkZUNvbG9yID8gY3VyclNlY3Rpb24tPnN0eWxlKCkudmlzaXRlZERlcGVuZGVu
dENvbG9yV2l0aENvbG9yRmlsdGVyKGJlZm9yZUNvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9y
ZGVyUHJlY2VkZW5jZTo6Um93R3JvdXApKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJv
cmRlcihyZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqY3VyclNlY3Rpb24sIGN1cnJTZWN0aW9uLT5z
dHlsZSgpLmJvcmRlckJlZm9yZSgpLCBiZWZvcmVDb2xvclByb3BlcnR5LCBCb3JkZXJQcmVjZWRl
bmNlOjpSb3dHcm91cCkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtOTQzLDE3ICs5NDgsMTcg
QEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQ29sbGFwc2Vk
QWZ0ZXJCb3JkZXIoSW5jbHVkZUJvcmRlckMKICAgICAgICAgLy8gKDgpIE91ciBjb2x1bW4gYW5k
IGNvbHVtbiBncm91cCdzIGFmdGVyIGJvcmRlcnMuCiAgICAgICAgIFJlbmRlclRhYmxlQ29sKiBj
b2xFbHQgPSB0YWJsZS0+Y29sRWxlbWVudChjb2woKSk7CiAgICAgICAgIGlmIChjb2xFbHQpIHsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRl
clZhbHVlKGNvbEVsdC0+c3R5bGUoKS5ib3JkZXJBZnRlcigpLCBpbmNsdWRlQ29sb3IgPyBjb2xF
bHQtPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKGFmdGVyQ29s
b3JQcm9wZXJ0eSkgOiBDb2xvcigpLCBCb3JkZXJQcmVjZWRlbmNlOjpDb2x1bW4pKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIGNvbGxhcHNlZEJvcmRlcigqY29s
RWx0LCBjb2xFbHQtPnN0eWxlKCkuYm9yZGVyQWZ0ZXIoKSwgYWZ0ZXJDb2xvclByb3BlcnR5LCBC
b3JkZXJQcmVjZWRlbmNlOjpDb2x1bW4pKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmV4aXN0
cygpKSByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgaWYgKFJlbmRlclRhYmxlQ29sKiBlbmNs
b3NpbmdDb2x1bW5Hcm91cCA9IGNvbEVsdC0+ZW5jbG9zaW5nQ29sdW1uR3JvdXAoKSkgewotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1bHQsIENvbGxhcHNlZEJvcmRl
clZhbHVlKGVuY2xvc2luZ0NvbHVtbkdyb3VwLT5zdHlsZSgpLmJvcmRlckFmdGVyKCksIGluY2x1
ZGVDb2xvciA/IGVuY2xvc2luZ0NvbHVtbkdyb3VwLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcldpdGhDb2xvckZpbHRlcihhZnRlckNvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9yZGVy
UHJlY2VkZW5jZTo6Q29sdW1uR3JvdXApKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9v
c2VCb3JkZXIocmVzdWx0LCBjb2xsYXBzZWRCb3JkZXIoKmVuY2xvc2luZ0NvbHVtbkdyb3VwLCBl
bmNsb3NpbmdDb2x1bW5Hcm91cC0+c3R5bGUoKS5ib3JkZXJBZnRlcigpLCBhZnRlckNvbG9yUHJv
cGVydHksIEJvcmRlclByZWNlZGVuY2U6OkNvbHVtbkdyb3VwKSk7CiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQuZXhpc3RzKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vICg5KSBUaGUg
dGFibGUncyBhZnRlciBib3JkZXIuCi0gICAgICAgIHJlc3VsdCA9IGNob29zZUJvcmRlcihyZXN1
bHQsIENvbGxhcHNlZEJvcmRlclZhbHVlKHRhYmxlLT5zdHlsZSgpLmJvcmRlckFmdGVyKCksIGlu
Y2x1ZGVDb2xvciA/IHRhYmxlLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xv
ckZpbHRlcihhZnRlckNvbG9yUHJvcGVydHkpIDogQ29sb3IoKSwgQm9yZGVyUHJlY2VkZW5jZTo6
VGFibGUpKTsKKyAgICAgICAgcmVzdWx0ID0gY2hvb3NlQm9yZGVyKHJlc3VsdCwgY29sbGFwc2Vk
Qm9yZGVyKCp0YWJsZSwgdGFibGUtPnN0eWxlKCkuYm9yZGVyQWZ0ZXIoKSwgYWZ0ZXJDb2xvclBy
b3BlcnR5LCBCb3JkZXJQcmVjZWRlbmNlOjpUYWJsZSkpOwogICAgICAgICBpZiAoIXJlc3VsdC5l
eGlzdHMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAppbmRleCA3Yzc1NzA3YmM4
YzQuLjZkZDkzZWVjYTEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAKQEAgLTE1NDAsNyArMTU0MCw3IEBAIENvbGxhcHNlZEJvcmRlclZh
bHVlIFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FjaGVkQ29sbGFwc2VkQm9yZGVyKGNvbnN0IFJlbmRl
clRhYmxlCiAgICAgYXV0byBpdCA9IG1fY2VsbHNDb2xsYXBzZWRCb3JkZXJzLmZpbmQoc3RkOjpt
YWtlX3BhaXIoJmNlbGwsIHNpZGUpKTsKICAgICAvLyBPbmx5IG5vbi1lbXB0eSBjb2xsYXBzZWQg
Ym9yZGVycyBhcmUgaW4gdGhlIGhhc2htYXAuCiAgICAgaWYgKGl0ID09IG1fY2VsbHNDb2xsYXBz
ZWRCb3JkZXJzLmVuZCgpKQotICAgICAgICByZXR1cm4gQ29sbGFwc2VkQm9yZGVyVmFsdWUoQm9y
ZGVyVmFsdWUoKSwgQ29sb3IoKSwgQm9yZGVyUHJlY2VkZW5jZTo6Q2VsbCk7CisgICAgICAgIHJl
dHVybiBDb2xsYXBzZWRCb3JkZXJWYWx1ZShCb3JkZXJQcmVjZWRlbmNlOjpDZWxsKTsKICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0KaW5kZXggYmE3NmUzNDg2OWUxLi5jZDk5NDY1YjE2MmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI3MjYsNyArMjcyNiw3IEBAIHN0
YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFRpdGxlQmFja2dyb3VuZChjb25zdCBSZW5kZXJBdHRh
Y2htZW50JiBhdHRhY2htZW50LCBHCiAgICAgfSBlbHNlCiAgICAgICAgIGJhY2tncm91bmRDb2xv
ciA9IGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yOwogCi0gICAgYmFja2dy
b3VuZENvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KGJhY2tncm91bmRDb2xvcik7CisgICAgYmFja2dyb3VuZENvbG9yID0gYXR0YWNobWVudC5zdHls
ZSgpLnJlc29sdmVkQ29sb3JBcHBseWluZ0NvbG9yRmlsdGVyKGJhY2tncm91bmRDb2xvcik7CiAg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yKTsKIAogICAgIFBhdGggYmFj
a2dyb3VuZFBhdGggPSBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0cyhi
YWNrZ3JvdW5kUmVjdHMsIGF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmRSYWRpdXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGZiM2UzNDI5
YjVjMC4uYTYwYjc2ODU2ODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCkBAIC0zNzAsOSArMzcwLDcgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0
Ojp3cml0ZVJlbmRlck9iamVjdChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBv
LAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgdHMgPDwgIiAoIiA8PCBib3Jk
ZXJUb3AgPDwgInB4ICI7CiAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgby5z
dHlsZSgpLmJvcmRlclRvcFN0eWxlKCkpOwotICAgICAgICAgICAgICAgIGF1dG8gY29sb3IgPSBv
LnN0eWxlKCkuYm9yZGVyVG9wQ29sb3IoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbG9yLmlz
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBvLnN0eWxlKCkuY29sb3IoKTsK
KyAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gby5zdHlsZSgpLnJlc29sdmVkQ29sb3Ioby5z
dHlsZSgpLmJvcmRlclRvcENvbG9yKCkpOwogICAgICAgICAgICAgICAgIHRzIDw8IHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKSA8PCAiKSI7CiAgICAgICAgICAgICB9CiAK
QEAgLTM4Myw5ICszODEsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2Jq
ZWN0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiAgICAgICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8ICIgKCIgPDwgYm9yZGVyUmlnaHQg
PDwgInB4ICI7CiAgICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8uc3R5
bGUoKS5ib3JkZXJSaWdodFN0eWxlKCkpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbG9y
ID0gby5zdHlsZSgpLmJvcmRlclJpZ2h0Q29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IG8uc3R5
bGUoKS5jb2xvcigpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gby5zdHlsZSgp
LnJlc29sdmVkQ29sb3Ioby5zdHlsZSgpLmJvcmRlclJpZ2h0Q29sb3IoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKSA8
PCAiKSI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzk3LDkgKzM5Myw3
IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgdHMgPDwgIiAoIiA8PCBib3JkZXJCb3R0b20gPDwgInB4ICI7CiAgICAg
ICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8uc3R5bGUoKS5ib3JkZXJCb3R0
b21TdHlsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb2xvciA9IG8uc3R5bGUoKS5i
b3JkZXJCb3R0b21Db2xvcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gby5zdHlsZSgpLmNvbG9yKCk7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29sb3IgPSBvLnN0eWxlKCkucmVzb2x2ZWRDb2xv
cihvLnN0eWxlKCkuYm9yZGVyQm90dG9tQ29sb3IoKSk7CiAgICAgICAgICAgICAgICAgICAgIHRz
IDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKSA8PCAiKSI7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDExLDkgKzQwNSw3IEBAIHZvaWQgUmVu
ZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlck9iamVjdCYgbywKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgdHMgPDwgIiAoIiA8PCBib3JkZXJMZWZ0IDw8ICJweCAiOwogICAgICAgICAgICAgICAgICAg
ICBwcmludEJvcmRlclN0eWxlKHRzLCBvLnN0eWxlKCkuYm9yZGVyTGVmdFN0eWxlKCkpOwotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbG9yID0gby5zdHlsZSgpLmJvcmRlckxlZnRDb2xvcigp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yID0gby5zdHlsZSgpLmNvbG9yKCk7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY29sb3IgPSBvLnN0eWxlKCkucmVzb2x2ZWRDb2xvcihvLnN0eWxlKCkuYm9yZGVy
TGVmdENvbG9yKCkpOwogICAgICAgICAgICAgICAgICAgICB0cyA8PCBzZXJpYWxpemF0aW9uRm9y
UmVuZGVyVHJlZUFzVGV4dChjb2xvcikgPDwgIikiOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJr
ZWRUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNw
cAppbmRleCBmNTY5OWQ4YWRkY2UuLmM4NTMyZmE1NTA2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNwcApAQCAtNDksNyArNDksNyBAQCBzdGF0aWMg
U3R5bGVkTWFya2VkVGV4dCByZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KGNvbnN0IE1hcmtlZFRl
eHQmIG1hcmtlZFRleHQsCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWFya2VkVGV4dDo6SGln
aGxpZ2h0OgogICAgICAgICBpZiAoYXV0byByZW5kZXJTdHlsZSA9IHJlbmRlcmVyLnBhcmVudCgp
LT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OkhpZ2hsaWdodCwgbWFya2VkVGV4
dC5oaWdobGlnaHROYW1lIH0sICZyZW5kZXJlci5zdHlsZSgpKSkgewotICAgICAgICAgICAgc3R5
bGUuYmFja2dyb3VuZENvbG9yID0gcmVuZGVyU3R5bGUtPmJhY2tncm91bmRDb2xvcigpOworICAg
ICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcmVuZGVyU3R5bGUtPnJlc29sdmVkQ29s
b3IocmVuZGVyU3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAgICAgIHN0eWxlLnRl
eHRTdHlsZXMuZmlsbENvbG9yID0gcmVuZGVyU3R5bGUtPmNvbXB1dGVkU3Ryb2tlQ29sb3IoKTsK
ICAgICAgICAgICAgIHN0eWxlLnRleHRTdHlsZXMuc3Ryb2tlQ29sb3IgPSByZW5kZXJTdHlsZS0+
Y29tcHV0ZWRTdHJva2VDb2xvcigpOwogCkBAIC0xMTUsNyArMTE1LDcgQEAgU3R5bGVkTWFya2Vk
VGV4dDo6U3R5bGUgU3R5bGVkTWFya2VkVGV4dDo6Y29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJr
ZWRUZXh0KGNvbnMKICAgICBTdHlsZWRNYXJrZWRUZXh0OjpTdHlsZSBzdHlsZTsKICAgICBzdHls
ZS50ZXh0RGVjb3JhdGlvblN0eWxlcyA9IFRleHREZWNvcmF0aW9uUGFpbnRlcjo6c3R5bGVzRm9y
UmVuZGVyZXIocmVuZGVyZXIsIGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCBp
c0ZpcnN0TGluZSk7CiAgICAgc3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0UGFpbnRTdHls
ZShyZW5kZXJlci5mcmFtZSgpLCBsaW5lU3R5bGUsIHBhaW50SW5mbyk7Ci0gICAgc3R5bGUudGV4
dFNoYWRvdyA9IFNoYWRvd0RhdGE6OmNsb25lKHBhaW50SW5mby5mb3JjZVRleHRDb2xvcigpID8g
bnVsbHB0ciA6IGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpOworICAgIHN0eWxlLnRleHRTaGFkb3cg
PSByZXNvbHZlZFRleHRTaGFkb3dGb3JQYWludGluZyhsaW5lU3R5bGUsIHBhaW50SW5mbyk7CiAg
ICAgcmV0dXJuIHN0eWxlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQ
YWludGVyLmNwcAppbmRleCA5MDE0MjZkYjM5NTguLmM0ZDZmNTllYmI1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC02NzEsNyArNjcxLDcgQEAg
dm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Q29tcG9zaXRpb25VbmRlcmxp
bmUoY29uc3QgQ29tcG9zaXRpb25VbmQKICAgICB3aWR0aCAtPSAyOwogCiAgICAgYXV0byYgc3R5
bGUgPSBtX3JlbmRlcmVyLnN0eWxlKCk7Ci0gICAgQ29sb3IgdW5kZXJsaW5lQ29sb3IgPSB1bmRl
cmxpbmUuY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9PSBDb21wb3NpdGlvblVuZGVybGluZUNv
bG9yOjpUZXh0Q29sb3IgPyBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0
ZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSA6IHN0eWxlLmNvbG9yQnlBcHBseWlu
Z0NvbG9yRmlsdGVyKHVuZGVybGluZS5jb2xvcik7CisgICAgQ29sb3IgdW5kZXJsaW5lQ29sb3Ig
PSB1bmRlcmxpbmUuY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9PSBDb21wb3NpdGlvblVuZGVy
bGluZUNvbG9yOjpUZXh0Q29sb3IgPyBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29s
b3JGaWx0ZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSA6IHN0eWxlLnJlc29sdmVk
Q29sb3JBcHBseWluZ0NvbG9yRmlsdGVyKHVuZGVybGluZS5jb2xvcik7CiAKICAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CiAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcih1bmRlcmxpbmVDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IGNkYzYxYzlhODRjZi4uNGJl
YTZlNGU5ZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29y
YXRpb25QYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29y
YXRpb25QYWludGVyLmNwcApAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgVGV4dERlY29yYXRpb25Q
YWludGVyOjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyhjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCBjCiAgICAgICAgICAgICAgICAgYm94T3JpZ2luLm1vdmUoMCwgLWV4dHJhT2Zmc2V0KTsKICAg
ICAgICAgICAgICAgICBleHRyYU9mZnNldCA9IDA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhdXRvIHNoYWRvd0NvbG9yID0gc2hhZG93LT5jb2xvcigpOworICAgICAgICAgICAgYXV0byBz
aGFkb3dDb2xvciA9IHNoYWRvdy0+Y29sb3IoKS5hbHJlYWR5UmVzb2x2ZWRDb2xvcigpOwogICAg
ICAgICAgICAgaWYgKG1fc2hhZG93Q29sb3JGaWx0ZXIpCiAgICAgICAgICAgICAgICAgbV9zaGFk
b3dDb2xvckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93Q29sb3IpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAppbmRleCAzYzA4M2IxOTE2Y2QuLjYy
MzZiZDdkOGU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dFN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgVGV4dFBhaW50U3R5bGUgY29tcHV0ZVRleHRQYWludFN0
eWxlKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmUKICAgICBpZiAo
Zm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSkKICAgICAgICAgcGFpbnRTdHlsZS5maWxsQ29sb3IgPSBh
ZGp1c3RDb2xvckZvclZpc2liaWxpdHlPbkJhY2tncm91bmQocGFpbnRTdHlsZS5maWxsQ29sb3Is
IENvbG9yOjp3aGl0ZSk7CiAKLSAgICBwYWludFN0eWxlLnN0cm9rZUNvbG9yID0gbGluZVN0eWxl
LmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGxpbmVTdHlsZS5jb21wdXRlZFN0cm9rZUNvbG9y
KCkpOworICAgIHBhaW50U3R5bGUuc3Ryb2tlQ29sb3IgPSBsaW5lU3R5bGUucmVzb2x2ZWRDb2xv
ckFwcGx5aW5nQ29sb3JGaWx0ZXIobGluZVN0eWxlLmNvbXB1dGVkU3Ryb2tlQ29sb3IoKSk7CiAK
ICAgICAvLyBNYWtlIHRoZSB0ZXh0IHN0cm9rZSBjb2xvciBsZWdpYmxlIGFnYWluc3QgYSB3aGl0
ZSBiYWNrZ3JvdW5kCiAgICAgaWYgKGZvcmNlQmFja2dyb3VuZFRvV2hpdGUpCkBAIC0xMzUsNiAr
MTM1LDE1IEBAIFRleHRQYWludFN0eWxlIGNvbXB1dGVUZXh0UGFpbnRTdHlsZShjb25zdCBGcmFt
ZSYgZnJhbWUsIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lCiAgICAgcmV0dXJuIHBhaW50U3R5bGU7
CiB9CiAKK3N0ZDo6b3B0aW9uYWw8U2hhZG93RGF0YT4gcmVzb2x2ZWRUZXh0U2hhZG93Rm9yUGFp
bnRpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bykKK3sKKyAgICBhdXRvIHJlc3VsdCA9IFNoYWRvd0RhdGE6OmNsb25lKHBhaW50SW5mby5mb3Jj
ZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IHN0eWxlLnRleHRTaGFkb3coKSk7CisgICAgLy8gRklY
TUU6IFJlc29sdmUgY29sb3JzLgorICAgIGlmIChyZXN1bHQpIHsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogVGV4dFBhaW50U3R5bGUgY29tcHV0ZVRleHRTZWxlY3Rpb25QYWludFN0
eWxlKGNvbnN0IFRleHRQYWludFN0eWxlJiB0ZXh0UGFpbnRTdHlsZSwgY29uc3QgUmVuZGVyVGV4
dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBzdGQ6Om9wdGlvbmFsPFNoYWRvd0RhdGE+JiBzZWxlY3Rpb25TaGFkb3cp
CiB7CiAgICAgVGV4dFBhaW50U3R5bGUgc2VsZWN0aW9uUGFpbnRTdHlsZSA9IHRleHRQYWludFN0
eWxlOwpAQCAtMTQ5LDcgKzE1OCw3IEBAIFRleHRQYWludFN0eWxlIGNvbXB1dGVUZXh0U2VsZWN0
aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFpbnRTdHlsZSYgdGV4dFBhaW50U3R5CiAgICAgICAg
IHNlbGVjdGlvblBhaW50U3R5bGUuZW1waGFzaXNNYXJrQ29sb3IgPSBlbXBoYXNpc01hcmtGb3Jl
Z3JvdW5kOwogCiAgICAgaWYgKGF1dG8gcHNldWRvU3R5bGUgPSByZW5kZXJlci5zZWxlY3Rpb25Q
c2V1ZG9TdHlsZSgpKSB7Ci0gICAgICAgIHNlbGVjdGlvblNoYWRvdyA9IFNoYWRvd0RhdGE6OmNs
b25lKHBhaW50SW5mby5mb3JjZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IHBzZXVkb1N0eWxlLT50
ZXh0U2hhZG93KCkpOworICAgICAgICBzZWxlY3Rpb25TaGFkb3cgPSByZXNvbHZlZFRleHRTaGFk
b3dGb3JQYWludGluZygqcHNldWRvU3R5bGUsIHBhaW50SW5mbyk7CiAgICAgICAgIGF1dG8gdmll
d3BvcnRTaXplID0gcmVuZGVyZXIuZnJhbWUoKS52aWV3KCkgPyByZW5kZXJlci5mcmFtZSgpLnZp
ZXcoKS0+c2l6ZSgpIDogSW50U2l6ZSgpOwogICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHBz
ZXVkb1N0eWxlLT5jb21wdXRlZFN0cm9rZVdpZHRoKHZpZXdwb3J0U2l6ZSk7CiAgICAgICAgIGlm
IChzdHJva2VXaWR0aCAhPSBzZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoKQpAQCAtMTU5
LDEzICsxNjgsMTQgQEAgVGV4dFBhaW50U3R5bGUgY29tcHV0ZVRleHRTZWxlY3Rpb25QYWludFN0
eWxlKGNvbnN0IFRleHRQYWludFN0eWxlJiB0ZXh0UGFpbnRTdHkKICAgICAgICAgaWYgKHN0cm9r
ZSAhPSBzZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZUNvbG9yKQogICAgICAgICAgICAgc2VsZWN0
aW9uUGFpbnRTdHlsZS5zdHJva2VDb2xvciA9IHN0cm9rZTsKICAgICB9IGVsc2UKLSAgICAgICAg
c2VsZWN0aW9uU2hhZG93ID0gU2hhZG93RGF0YTo6Y2xvbmUocGFpbnRJbmZvLmZvcmNlVGV4dENv
bG9yKCkgPyBudWxscHRyIDogbGluZVN0eWxlLnRleHRTaGFkb3coKSk7CisgICAgICAgIHNlbGVj
dGlvblNoYWRvdyA9IHJlc29sdmVkVGV4dFNoYWRvd0ZvclBhaW50aW5nKGxpbmVTdHlsZSwgcGFp
bnRJbmZvKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKICAgICBVTlVTRURf
UEFSQU0obGluZVN0eWxlKTsKICAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKLSAgICBzZWxl
Y3Rpb25TaGFkb3cgPSBTaGFkb3dEYXRhOjpjbG9uZShwYWludEluZm8uZm9yY2VUZXh0Q29sb3Io
KSA/IG51bGxwdHIgOiBsaW5lU3R5bGUudGV4dFNoYWRvdygpKTsKKyAgICBzZWxlY3Rpb25TaGFk
b3cgPSByZXNvbHZlZFRleHRTaGFkb3dGb3JQYWludGluZyhsaW5lU3R5bGUsIHBhaW50SW5mbyk7
CiAjZW5kaWYKKwogICAgIHJldHVybiBzZWxlY3Rpb25QYWludFN0eWxlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5oCmluZGV4IDQ1OWJhZjExMmZjMC4uMmNj
N2NjNmRjZTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
U3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Niw2ICszNiw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFJlbmRlclRleHQ7CiBj
bGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFNoYWRvd0RhdGE7CisKIHN0cnVjdCBQYWludEluZm87
CiAKIHN0cnVjdCBUZXh0UGFpbnRTdHlsZSB7CkBAIC02NSw0ICs2Niw2IEBAIFRleHRQYWludFN0
eWxlIGNvbXB1dGVUZXh0U2VsZWN0aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFpbnRTdHlsZSYs
IGNvbnN0IFJlbmRlCiBlbnVtIEZpbGxDb2xvclR5cGUgeyBVc2VOb3JtYWxGaWxsQ29sb3IsIFVz
ZUVtcGhhc2lzTWFya0NvbG9yIH07CiB2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBUZXh0UGFpbnRTdHlsZSYsIEZpbGxDb2xvclR5cGUgPSBVc2VOb3Jt
YWxGaWxsQ29sb3IpOwogCitzdGQ6Om9wdGlvbmFsPFNoYWRvd0RhdGE+IHJlc29sdmVkVGV4dFNo
YWRvd0ZvclBhaW50aW5nKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUGFpbnRJbmZvJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuY3BwCmluZGV4IDhlZmVlOTc5Yjg3Ny4uMzA0YWNhNDY1YmU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgU2hhZG93QXBwbGll
cjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdywKICAgICBmbG9hdCBzaGFkb3dZID0gb3JpZW50YXRpb24gPT0gRm9udE9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsID8gc2hhZG93LT55KCkudmFsdWUoKSA6IC1zaGFkb3ctPngoKS52
YWx1ZSgpOwogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoc2hhZG93WCwgc2hhZG93WSk7CiAg
ICAgYXV0byBzaGFkb3dSYWRpdXMgPSBzaGFkb3ctPnJhZGl1cygpOwotICAgIENvbG9yIHNoYWRv
d0NvbG9yID0gc2hhZG93LT5jb2xvcigpOworICAgIENvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93
LT5jb2xvcigpLmFscmVhZHlSZXNvbHZlZENvbG9yKCk7CiAgICAgaWYgKGNvbG9yRmlsdGVyKQog
ICAgICAgICBjb2xvckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93Q29sb3IpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5jcHAKaW5kZXggNTkyYzI0
MjU2NzU0Li4zZmJmMzMwMTg4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9Cb3JkZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvQm9yZGVyRGF0YS5jcHAKQEAgLTMyLDIxICszMiw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotYm9vbCBCb3JkZXJEYXRhOjppc0VxdWl2YWxlbnRGb3JQYWludGluZyhjb25zdCBCb3Jk
ZXJEYXRhJiBvdGhlciwgYm9vbCBjdXJyZW50Q29sb3JEaWZmZXJzKSBjb25zdAotewotICAgIGlm
ICgqdGhpcyAhPSBvdGhlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjdXJy
ZW50Q29sb3JEaWZmZXJzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gdmlzaWJs
ZUJvcmRlckhhc0N1cnJlbnRDb2xvciA9IChtX3RvcC5pc1Zpc2libGUoKSAmJiBSZW5kZXJTdHls
ZTo6aXNDdXJyZW50Q29sb3IobV90b3AuY29sb3IoKSkpCi0gICAgICAgIHx8IChtX3JpZ2h0Lmlz
VmlzaWJsZSgpICYmIFJlbmRlclN0eWxlOjppc0N1cnJlbnRDb2xvcihtX3JpZ2h0LmNvbG9yKCkp
KQotICAgICAgICB8fCAobV9ib3R0b20uaXNWaXNpYmxlKCkgJiYgUmVuZGVyU3R5bGU6OmlzQ3Vy
cmVudENvbG9yKG1fYm90dG9tLmNvbG9yKCkpKQotICAgICAgICB8fCAobV9sZWZ0LmlzVmlzaWJs
ZSgpICYmIFJlbmRlclN0eWxlOjppc0N1cnJlbnRDb2xvcihtX2xlZnQuY29sb3IoKSkpOwotICAg
IHJldHVybiAhdmlzaWJsZUJvcmRlckhhc0N1cnJlbnRDb2xvcjsKLX0KLQogVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlclZhbHVl
KQogewogICAgIHRzIDw8IGJvcmRlclZhbHVlLndpZHRoKCkgPDwgIiAiIDw8IGJvcmRlclZhbHVl
LnN0eWxlKCkgPDwgIiAiIDw8IGJvcmRlclZhbHVlLmNvbG9yKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaAppbmRleCBmMzQzYjU4N2VkNmUuLmZlMWRmMTAw
MWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oCkBA
IC00OCw5ICs0OCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbGVmdC5ub25aZXJvKCkg
fHwgbV9yaWdodC5ub25aZXJvKCkgfHwgbV90b3Aubm9uWmVybygpIHx8IG1fYm90dG9tLm5vblpl
cm8oKTsKICAgICB9CiAKLSAgICBib29sIGhhc1Zpc2libGVCb3JkZXIoKSBjb25zdAorICAgIGJv
b2wgaGFzVmlzaWJsZUJvcmRlcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9sZWZ0LmlzVmlzaWJsZSgpIHx8IG1fcmlnaHQuaXNWaXNpYmxl
KCkgfHwgbV90b3AuaXNWaXNpYmxlKCkgfHwgbV9ib3R0b20uaXNWaXNpYmxlKCk7CisgICAgICAg
IHJldHVybiBtX2xlZnQuaXNWaXNpYmxlKHN0eWxlKSB8fCBtX3JpZ2h0LmlzVmlzaWJsZShzdHls
ZSkgfHwgbV90b3AuaXNWaXNpYmxlKHN0eWxlKSB8fCBtX2JvdHRvbS5pc1Zpc2libGUoc3R5bGUp
OwogICAgIH0KIAogICAgIGJvb2wgaGFzQm9yZGVySW1hZ2UoKSBjb25zdApAQCAtMTA3LDggKzEw
Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZsb2F0Qm94RXh0ZW50KGJvcmRlclRvcFdp
ZHRoKCksIGJvcmRlclJpZ2h0V2lkdGgoKSwgYm9yZGVyQm90dG9tV2lkdGgoKSwgYm9yZGVyTGVm
dFdpZHRoKCkpOwogICAgIH0KIAotICAgIGJvb2wgaXNFcXVpdmFsZW50Rm9yUGFpbnRpbmcoY29u
c3QgQm9yZGVyRGF0YSYgb3RoZXIsIGJvb2wgY3VycmVudENvbG9yRGlmZmVycykgY29uc3Q7Ci0K
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQm9yZGVyRGF0YSYgbykgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2xlZnQgPT0gby5tX2xlZnQgJiYgbV9yaWdodCA9PSBvLm1fcmlnaHQg
JiYgbV90b3AgPT0gby5tX3RvcCAmJiBtX2JvdHRvbSA9PSBvLm1fYm90dG9tICYmIG1faW1hZ2Ug
PT0gby5tX2ltYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
Qm9yZGVyVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Cb3JkZXJWYWx1
ZS5oCmluZGV4IGRjZWZmNGE2MmU0MC4uNDA5ZTU5ZDBkYjlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyVmFsdWUuaApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlz
QGdtYWlsLmNvbSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCwxMSArMjQsMTMgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRz
LmgiCisjaW5jbHVkZSAiU3R5bGVDb2xvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIFJlbmRlclN0eWxlOworCiBjbGFzcyBCb3JkZXJWYWx1ZSB7CiBmcmllbmQgY2xhc3MgUmVu
ZGVyU3R5bGU7CiBwdWJsaWM6CkBAIC00MywxNCArNDUsMTEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gd2lkdGgoKSAmJiBzdHlsZSgpICE9IEJvcmRlclN0eWxlOjpOb25lOwogICAgIH0KIAot
ICAgIGJvb2wgaXNUcmFuc3BhcmVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9j
b2xvci5pc1ZhbGlkKCkgJiYgIW1fY29sb3IuaXNWaXNpYmxlKCk7Ci0gICAgfQorICAgIGJvb2wg
aXNUcmFuc3BhcmVudChjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogCi0gICAgYm9vbCBpc1Zp
c2libGUoKSBjb25zdAorICAgIGJvb2wgaXNWaXNpYmxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBub25aZXJvKCkgJiYgIWlzVHJhbnNwYXJl
bnQoKSAmJiBzdHlsZSgpICE9IEJvcmRlclN0eWxlOjpIaWRkZW47CisgICAgICAgIHJldHVybiBu
b25aZXJvKCkgJiYgIWlzVHJhbnNwYXJlbnQoc3R5bGUpICYmIHRoaXMtPnN0eWxlKCkgIT0gQm9y
ZGVyU3R5bGU6OkhpZGRlbjsKICAgICB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQm9y
ZGVyVmFsdWUmIG8pIGNvbnN0CkBAIC02MywyMSArNjIsMTkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IFN0eWxlQ29sb3ImIGNvbG9yKQog
ICAgIHsKICAgICAgICAgbV9jb2xvciA9IGNvbG9yOwogICAgIH0KIAotICAgIGNvbnN0IENvbG9y
JiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBjb25zdCBTdHlsZUNvbG9y
JiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogICAgIGZsb2F0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQogICAgIEJvcmRlclN0eWxlIHN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Qm9yZGVyU3R5bGU+KG1fc3R5bGUpOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBDb2xvciBtX2NvbG9yOwotCisgICAgU3R5bGVDb2xvciBtX2NvbG9yOwogICAgIGZs
b2F0IG1fd2lkdGggeyAzIH07Ci0KICAgICB1bnNpZ25lZCBtX3N0eWxlIDogNDsgLy8gQm9yZGVy
U3R5bGUKIAogICAgIC8vIFRoaXMgaXMgb25seSB1c2VkIGJ5IE91dGxpbmVWYWx1ZSBidXQgbW92
ZWQgaGVyZSB0byBrZWVwIHRoZSBiaXRzIHBhY2tlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmgKaW5kZXggMTYwYmNmYWFi
NDRlLi40ODU4Yzk0MjBkNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNA
Z21haWwuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDcgKzI0LDggQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJCb3JkZXJWYWx1ZS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEyICszOSwxOSBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KIAotICAgIENvbGxhcHNlZEJvcmRlclZhbHVlKGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXIs
IGNvbnN0IENvbG9yJiBjb2xvciwgQm9yZGVyUHJlY2VkZW5jZSBwcmVjZWRlbmNlKQotICAgICAg
ICA6IG1fd2lkdGgoTGF5b3V0VW5pdChib3JkZXIubm9uWmVybygpID8gYm9yZGVyLndpZHRoKCkg
OiAwKSkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fc3R5bGUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGJvcmRlci5zdHlsZSgpKSkKKyAgICBleHBsaWNpdCBDb2xsYXBzZWRC
b3JkZXJWYWx1ZShCb3JkZXJQcmVjZWRlbmNlIHByZWNlZGVuY2UpCisgICAgICAgIDogbV9zdHls
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQm9yZGVyU3R5bGU6Ok5vbmUpKQorICAgICAgICAsIG1f
cHJlY2VkZW5jZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJlY2VkZW5jZSkpCisgICAgICAgICwg
bV90cmFuc3BhcmVudChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgQ29sbGFwc2VkQm9yZGVy
VmFsdWUoTGF5b3V0VW5pdCB3aWR0aCwgQ29sb3ImJiBjb2xvciwgQm9yZGVyU3R5bGUgc3R5bGUs
IEJvcmRlclByZWNlZGVuY2UgcHJlY2VkZW5jZSwgYm9vbCBpc1RyYW5zcGFyZW50KQorICAgICAg
ICA6IG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9jb2xvcihXVEZNb3ZlKGNvbG9yKSkKKyAg
ICAgICAgLCBtX3N0eWxlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdHlsZSkpCiAgICAgICAgICwg
bV9wcmVjZWRlbmNlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihwcmVjZWRlbmNlKSkKLSAgICAgICAg
LCBtX3RyYW5zcGFyZW50KGJvcmRlci5pc1RyYW5zcGFyZW50KCkpCisgICAgICAgICwgbV90cmFu
c3BhcmVudChpc1RyYW5zcGFyZW50KQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDViOTg2NzQzMzY3Ny4uNGQ5
YmVkYTYzYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWRE
YXRhLmgiCisjaW5jbHVkZSAiU3R5bGVLZXl3b3JkQ29sb3JSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKICNp
bmNsdWRlICJTdHlsZVNlbGZBbGlnbm1lbnREYXRhLmgiCkBAIC0xNzksNiArMTgwLDkgQEAgUmVu
ZGVyU3R5bGU6OlJlbmRlclN0eWxlKENyZWF0ZURlZmF1bHRTdHlsZVRhZykKICNpZiBFTkFCTEUo
VEVYVF9BVVRPU0laSU5HKQogICAgIG1faW5oZXJpdGVkRmxhZ3MuYXV0b3NpemVTdGF0dXMgPSAw
OwogI2VuZGlmCisgICAgbV9pbmhlcml0ZWRGbGFncy51c2VTeXN0ZW1BcHBlYXJhbmNlID0gMDsK
KyAgICBtX2luaGVyaXRlZEZsYWdzLnVzZURhcmtBcHBlYXJhbmNlID0gMDsKKyAgICBtX2luaGVy
aXRlZEZsYWdzLnVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsID0gMDsKIAogICAgIG1fbm9u
SW5oZXJpdGVkRmxhZ3MuZWZmZWN0aXZlRGlzcGxheSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
bml0aWFsRGlzcGxheSgpKTsKICAgICBtX25vbkluaGVyaXRlZEZsYWdzLm9yaWdpbmFsRGlzcGxh
eSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbml0aWFsRGlzcGxheSgpKTsKQEAgLTExODgsNiAr
MTE5Miw2NCBAQCBpbmxpbmUgc3RhdGljIGJvb2wgY2hhbmdlZEN1c3RvbVBhaW50V2F0Y2hlZFBy
b3BlcnR5KGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdAogfQogI2VuZGlmCiAKK3N0YXRpYyBi
b29sIGFyZUVxdWl2YWxlbnRGb3JQYWludGluZyhjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3Im
IGIpCit7CisgICAgcmV0dXJuIGEgPT0gYiB8fCAoIWEuaXNWaXNpYmxlKCkgJiYgIWIuaXNWaXNp
YmxlKCkpOworfQorCitzdGF0aWMgYm9vbCBhcmVFcXVpdmFsZW50Rm9yUGFpbnRpbmcoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlQSwgY29uc3QgU3R5bGVDb2xvciYgYSwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlQiwgY29uc3QgU3R5bGVDb2xvciYgYikKK3sKKyAgICByZXR1cm4gYXJlRXF1aXZh
bGVudEZvclBhaW50aW5nKHN0eWxlQS5yZXNvbHZlZENvbG9yKGEpLCBzdHlsZUIucmVzb2x2ZWRD
b2xvcihiKSk7Cit9CisKK3N0YXRpYyBib29sIGFyZUVxdWl2YWxlbnRGb3JQYWludGluZyhjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGVBLCBjb25zdCBCb3JkZXJWYWx1ZSYgYSwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlQiwgY29uc3QgQm9yZGVyVmFsdWUmIGIpCit7CisgICAgaWYgKCZhID09ICZi
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWEuaXNWaXNpYmxlKHN0eWxlQSkgJiYg
IWIuaXNWaXNpYmxlKHN0eWxlQikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBh
cmVFcXVpdmFsZW50Rm9yUGFpbnRpbmcoc3R5bGVBLCBhLmNvbG9yKCksIHN0eWxlQiwgYi5jb2xv
cigpKQorICAgICAgICAmJiBhLndpZHRoKCkgPT0gYi53aWR0aCgpCisgICAgICAgICYmIGEuc3R5
bGUoKSA9PSBiLnN0eWxlKCk7Cit9CisKK3N0YXRpYyBib29sIGFyZUVxdWl2YWxlbnRGb3JQYWlu
dGluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVBLCBjb25zdCBCb3JkZXJEYXRhJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGVCLCBjb25zdCBCb3JkZXJEYXRhJiBiKQoreworICAgIGlmICgm
YSA9PSAmYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIg
b3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB0aGUgcmFkaWkgYXJlIGRpZmZlcmVudCBidXQgdGhl
IHJlbGV2YW50IGJvcmRlcnMgYXJlIG5vdCB2aXNpYmxlLgorICAgIHJldHVybiBhcmVFcXVpdmFs
ZW50Rm9yUGFpbnRpbmcoc3R5bGVBLCBhLmxlZnQoKSwgc3R5bGVCLCBiLmxlZnQoKSkKKyAgICAg
ICAgJiYgYXJlRXF1aXZhbGVudEZvclBhaW50aW5nKHN0eWxlQSwgYS5yaWdodCgpLCBzdHlsZUIs
IGIucmlnaHQoKSkKKyAgICAgICAgJiYgYXJlRXF1aXZhbGVudEZvclBhaW50aW5nKHN0eWxlQSwg
YS50b3AoKSwgc3R5bGVCLCBiLnRvcCgpKQorICAgICAgICAmJiBhcmVFcXVpdmFsZW50Rm9yUGFp
bnRpbmcoc3R5bGVBLCBhLmJvdHRvbSgpLCBzdHlsZUIsIGIuYm90dG9tKCkpCisgICAgICAgICYm
IGEuaW1hZ2UoKSA9PSBiLmltYWdlKCkKKyAgICAgICAgJiYgYS50b3BMZWZ0UmFkaXVzKCkgPT0g
Yi50b3BMZWZ0UmFkaXVzKCkKKyAgICAgICAgJiYgYS50b3BSaWdodFJhZGl1cygpID09IGIudG9w
UmlnaHRSYWRpdXMoKQorICAgICAgICAmJiBhLmJvdHRvbUxlZnRSYWRpdXMoKSA9PSBiLmJvdHRv
bUxlZnRSYWRpdXMoKQorICAgICAgICAmJiBhLmJvdHRvbVJpZ2h0UmFkaXVzKCkgPT0gYi5ib3R0
b21SaWdodFJhZGl1cygpOworfQorCitzdGF0aWMgYm9vbCBhcmVFcXVpdmFsZW50Rm9yUGFpbnRp
bmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlQSwgY29uc3QgT3V0bGluZVZhbHVlJiBhLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGVCLCBjb25zdCBPdXRsaW5lVmFsdWUmIGIpCit7CisgICAgaWYg
KCZhID09ICZiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWEuaXNWaXNpYmxlKHN0
eWxlQSkgJiYgIWIuaXNWaXNpYmxlKHN0eWxlQikpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBhcmVFcXVpdmFsZW50Rm9yUGFpbnRpbmcoc3R5bGVBLCBhLmNvbG9yKCksIHN0eWxl
QiwgYi5jb2xvcigpKQorICAgICAgICAmJiBhLndpZHRoKCkgPT0gYi53aWR0aCgpCisgICAgICAg
ICYmIGEuc3R5bGUoKSA9PSBiLnN0eWxlKCkKKyAgICAgICAgJiYgYS5vZmZzZXQoKSA9PSBiLm9m
ZnNldCgpCisgICAgICAgICYmIGEuaXNBdXRvKCkgPT0gYi5pc0F1dG8oKTsKK30KKworc3RhdGlj
IGJvb2wgYXJlRXF1aXZhbGVudEZvclBhaW50aW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZUEs
IGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEmIGEsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZUIs
IGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEmIGIpCit7CisgICAgcmV0dXJuIGEuYmFja2dyb3Vu
ZCA9PSBiLmJhY2tncm91bmQKKyAgICAgICAgJiYgYXJlRXF1aXZhbGVudEZvclBhaW50aW5nKHN0
eWxlQSwgYS5jb2xvciwgc3R5bGVCLCBiLmNvbG9yKQorICAgICAgICAmJiBhcmVFcXVpdmFsZW50
Rm9yUGFpbnRpbmcoc3R5bGVBLCBhLm91dGxpbmUsIHN0eWxlQiwgYi5vdXRsaW5lKTsKK30KKwog
Ym9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNSZXBhaW50KGNvbnN0IFJlbmRlclN0eWxl
JiBvdGhlciwgT3B0aW9uU2V0PFN0eWxlRGlmZmVyZW5jZUNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0
eT4mIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3QKIHsKICAgICBpZiAo
IXJlcXVpcmVzUGFpbnRpbmcoKnRoaXMpICYmICFyZXF1aXJlc1BhaW50aW5nKG90aGVyKSkKQEAg
LTExOTYsMjAgKzEyNTgsMTcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNSZXBh
aW50KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgT3B0aW9uU2V0PFN0eWwKICAgICBpZiAobV9p
bmhlcml0ZWRGbGFncy52aXNpYmlsaXR5ICE9IG90aGVyLm1faW5oZXJpdGVkRmxhZ3MudmlzaWJp
bGl0eQogICAgICAgICB8fCBtX2luaGVyaXRlZEZsYWdzLnByaW50Q29sb3JBZGp1c3QgIT0gb3Ro
ZXIubV9pbmhlcml0ZWRGbGFncy5wcmludENvbG9yQWRqdXN0CiAgICAgICAgIHx8IG1faW5oZXJp
dGVkRmxhZ3MuaW5zaWRlTGluayAhPSBvdGhlci5tX2luaGVyaXRlZEZsYWdzLmluc2lkZUxpbmsK
LSAgICAgICAgfHwgbV9pbmhlcml0ZWRGbGFncy5pbnNpZGVEZWZhdWx0QnV0dG9uICE9IG90aGVy
Lm1faW5oZXJpdGVkRmxhZ3MuaW5zaWRlRGVmYXVsdEJ1dHRvbikKKyAgICAgICAgfHwgbV9pbmhl
cml0ZWRGbGFncy5pbnNpZGVEZWZhdWx0QnV0dG9uICE9IG90aGVyLm1faW5oZXJpdGVkRmxhZ3Mu
aW5zaWRlRGVmYXVsdEJ1dHRvbgorICAgICAgICB8fCBtX2luaGVyaXRlZEZsYWdzLnVzZVN5c3Rl
bUFwcGVhcmFuY2UgIT0gb3RoZXIubV9pbmhlcml0ZWRGbGFncy51c2VTeXN0ZW1BcHBlYXJhbmNl
CisgICAgICAgIHx8IG1faW5oZXJpdGVkRmxhZ3MudXNlRGFya0FwcGVhcmFuY2UgIT0gb3RoZXIu
bV9pbmhlcml0ZWRGbGFncy51c2VEYXJrQXBwZWFyYW5jZQorICAgICAgICB8fCBtX2luaGVyaXRl
ZEZsYWdzLnVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsICE9IG90aGVyLm1faW5oZXJpdGVk
RmxhZ3MudXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCisgICAgaWYgKCFhcmVFcXVpdmFsZW50Rm9yUGFpbnRpbmcoKnRoaXMsICptX2JhY2tncm91
bmREYXRhLCBvdGhlciwgKm90aGVyLm1fYmFja2dyb3VuZERhdGEpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGJvb2wgY3VycmVudENvbG9yRGlmZmVycyA9IG1faW5oZXJpdGVkRGF0YS0+
Y29sb3IgIT0gb3RoZXIubV9pbmhlcml0ZWREYXRhLT5jb2xvcjsKLSAgICBpZiAobV9iYWNrZ3Jv
dW5kRGF0YS5wdHIoKSAhPSBvdGhlci5tX2JhY2tncm91bmREYXRhLnB0cigpKSB7Ci0gICAgICAg
IGlmICghbV9iYWNrZ3JvdW5kRGF0YS0+aXNFcXVpdmFsZW50Rm9yUGFpbnRpbmcoKm90aGVyLm1f
YmFja2dyb3VuZERhdGEsIGN1cnJlbnRDb2xvckRpZmZlcnMpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fc3Vycm91bmREYXRhLnB0cigpICE9IG90aGVyLm1f
c3Vycm91bmREYXRhLnB0cigpKSB7Ci0gICAgICAgIGlmICghbV9zdXJyb3VuZERhdGEtPmJvcmRl
ci5pc0VxdWl2YWxlbnRGb3JQYWludGluZyhvdGhlci5tX3N1cnJvdW5kRGF0YS0+Ym9yZGVyLCBj
dXJyZW50Q29sb3JEaWZmZXJzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAg
ICBpZiAoIWFyZUVxdWl2YWxlbnRGb3JQYWludGluZygqdGhpcywgbV9zdXJyb3VuZERhdGEtPmJv
cmRlciwgb3RoZXIsIG90aGVyLm1fc3Vycm91bmREYXRhLT5ib3JkZXIpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGlmIChtX3JhcmVOb25Jbmhlcml0ZWREYXRhLnB0cigpICE9IG90aGVy
Lm1fcmFyZU5vbkluaGVyaXRlZERhdGEucHRyKCkKICAgICAgICAgJiYgcmFyZU5vbkluaGVyaXRl
ZERhdGFDaGFuZ2VSZXF1aXJlc1JlcGFpbnQoKm1fcmFyZU5vbkluaGVyaXRlZERhdGEsICpvdGhl
ci5tX3JhcmVOb25Jbmhlcml0ZWREYXRhLCBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRp
ZXMpKQpAQCAtMTY5MiwyMiArMTc1MSwyMiBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRMaXN0U3R5
bGVJbWFnZShSZWZQdHI8U3R5bGVJbWFnZT4mJiB2KQogICAgICAgICBtX3JhcmVJbmhlcml0ZWRE
YXRhLmFjY2VzcygpLmxpc3RTdHlsZUltYWdlID0gV1RGTW92ZSh2KTsKIH0KIAotY29uc3QgQ29s
b3ImIFJlbmRlclN0eWxlOjpjb2xvcigpIGNvbnN0Citjb25zdCBTdHlsZUNvbG9yJiBSZW5kZXJT
dHlsZTo6Y29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBtX2luaGVyaXRlZERhdGEtPmNvbG9y
OwogfQogCi1jb25zdCBDb2xvciYgUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29sb3IoKSBjb25z
dAorY29uc3QgU3R5bGVDb2xvciYgUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29sb3IoKSBjb25z
dAogewogICAgIHJldHVybiBtX2luaGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rQ29sb3I7CiB9CiAK
LXZvaWQgUmVuZGVyU3R5bGU6OnNldENvbG9yKGNvbnN0IENvbG9yJiB2KQordm9pZCBSZW5kZXJT
dHlsZTo6c2V0Q29sb3IoY29uc3QgU3R5bGVDb2xvciYgdikKIHsKICAgICBTRVRfVkFSKG1faW5o
ZXJpdGVkRGF0YSwgY29sb3IsIHYpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0NvbG9yKGNvbnN0IENvbG9yJiB2KQordm9pZCBSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExp
bmtDb2xvcihjb25zdCBTdHlsZUNvbG9yJiB2KQogewogICAgIFNFVF9WQVIobV9pbmhlcml0ZWRE
YXRhLCB2aXNpdGVkTGlua0NvbG9yLCB2KTsKIH0KQEAgLTIxOTYsNyArMjI1NSw3IEBAIHZvaWQg
UmVuZGVyU3R5bGU6OmdldFNoYWRvd1ZlcnRpY2FsRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqIHNo
YWRvdywgTGF5b3V0VW5pdCAmCiAgICAgfQogfQogCi1Db2xvciBSZW5kZXJTdHlsZTo6dW5yZXNv
bHZlZENvbG9yRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBjb2xvclByb3BlcnR5LCBib29sIHZp
c2l0ZWRMaW5rKSBjb25zdAorU3R5bGVDb2xvciBSZW5kZXJTdHlsZTo6dW5yZXNvbHZlZENvbG9y
KENTU1Byb3BlcnR5SUQgY29sb3JQcm9wZXJ0eSwgYm9vbCB2aXNpdGVkTGluaykgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGNvbG9yUHJvcGVydHkpIHsKICAgICBjYXNlIENTU1Byb3BlcnR5QWNjZW50
Q29sb3I6CkBAIC0yMjMxLDcgKzIyOTAsNyBAQCBDb2xvciBSZW5kZXJTdHlsZTo6dW5yZXNvbHZl
ZENvbG9yRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBjb2xvclByb3BlcnR5LCBib29sCiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJsb2NrU3RhcnRDb2xvcjoKICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVySW5saW5lRW5kQ29sb3I6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklubGlu
ZVN0YXJ0Q29sb3I6Ci0gICAgICAgIHJldHVybiB1bnJlc29sdmVkQ29sb3JGb3JQcm9wZXJ0eShD
U1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoY29sb3JQcm9wZXJ0eSwg
ZGlyZWN0aW9uKCksIHdyaXRpbmdNb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuIHVucmVzb2x2ZWRD
b2xvcihDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoY29sb3JQcm9w
ZXJ0eSwgZGlyZWN0aW9uKCksIHdyaXRpbmdNb2RlKCkpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5
Q29sdW1uUnVsZUNvbG9yOgogICAgICAgICByZXR1cm4gdmlzaXRlZExpbmsgPyB2aXNpdGVkTGlu
a0NvbHVtblJ1bGVDb2xvcigpIDogY29sdW1uUnVsZUNvbG9yKCk7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRFbXBoYXNpc0NvbG9yOgpAQCAtMjI1Miw1OCArMjMxMSw3OCBAQCBDb2xvciBSZW5k
ZXJTdHlsZTo6dW5yZXNvbHZlZENvbG9yRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBjb2xvclBy
b3BlcnR5LCBib29sCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotQ29sb3IgUmVuZGVyU3R5bGU6OmNv
bG9yUmVzb2x2aW5nQ3VycmVudENvbG9yKENTU1Byb3BlcnR5SUQgY29sb3JQcm9wZXJ0eSwgYm9v
bCB2aXNpdGVkTGluaykgY29uc3QKLXsKLSAgICBhdXRvIGNvbXB1dGVCb3JkZXJTdHlsZSA9IFsm
XSB7Ci0gICAgICAgIHN3aXRjaCAoY29sb3JQcm9wZXJ0eSkgewotICAgICAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyTGVmdENvbG9yOgotICAgICAgICAgICAgcmV0dXJuIGJvcmRlckxlZnRTdHls
ZSgpOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAgICAg
ICAgIHJldHVybiBib3JkZXJSaWdodFN0eWxlKCk7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJUb3BDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBib3JkZXJUb3BTdHlsZSgpOwotICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAgICAgICAgICByZXR1
cm4gYm9yZGVyQm90dG9tU3R5bGUoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBCb3JkZXJTdHlsZTo6Tm9uZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhdXRvIHJl
c3VsdCA9IHVucmVzb2x2ZWRDb2xvckZvclByb3BlcnR5KGNvbG9yUHJvcGVydHksIHZpc2l0ZWRM
aW5rKTsKK1N0eWxlS2V5d29yZENvbG9yUmVzb2x2ZXI6OlN0eWxlS2V5d29yZENvbG9yUmVzb2x2
ZXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29s
IGluVmlzaXRlZExpbmspCisgICAgOiBtX3N0eWxlIHsgc3R5bGUgfQorICAgICwgbV9wcm9wZXJ0
eSB7IHByb3BlcnR5IH0KKyAgICAsIG1faW5WaXNpdGVkTGluayB7IGluVmlzaXRlZExpbmsgfQor
eworfQogCi0gICAgaWYgKGlzQ3VycmVudENvbG9yKHJlc3VsdCkpIHsKLSAgICAgICAgaWYgKGNv
bG9yUHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yKSB7Ci0gICAgICAg
ICAgICBpZiAoaGFzUG9zaXRpdmVTdHJva2VXaWR0aCgpKSB7CitDb2xvciBTdHlsZUtleXdvcmRD
b2xvclJlc29sdmVyOjpyZXNvbHZlS2V5d29yZENvbG9yKENTU1ZhbHVlSUQga2V5d29yZCkgY29u
c3QKK3sKKyAgICBpZiAoa2V5d29yZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikgeworICAgICAg
ICBpZiAobV9wcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IpIHsKKyAg
ICAgICAgICAgIGlmIChtX3N0eWxlLmhhc1Bvc2l0aXZlU3Ryb2tlV2lkdGgoKSkgewogICAgICAg
ICAgICAgICAgIC8vIFByZWZlciBzdHJva2UgY29sb3IgaWYgcG9zc2libGUgYnV0IG5vdCBpZiBp
dCdzIGZ1bGx5IHRyYW5zcGFyZW50LgotICAgICAgICAgICAgICAgIGF1dG8gc3Ryb2tlQ29sb3Ig
PSBjb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihlZmZlY3RpdmVTdHJva2VDb2xvclByb3BlcnR5
KCksIHZpc2l0ZWRMaW5rKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN0cm9rZUNvbG9yID0gbV9z
dHlsZS5yZXNvbHZlZENvbG9yKG1fc3R5bGUuZWZmZWN0aXZlU3Ryb2tlQ29sb3JQcm9wZXJ0eSgp
LCBtX2luVmlzaXRlZExpbmspOwogICAgICAgICAgICAgICAgIGlmIChzdHJva2VDb2xvci5pc1Zp
c2libGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cm9rZUNvbG9yOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gY29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3Io
Q1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCB2aXNpdGVkTGluayk7CisgICAgICAgICAg
ICByZXR1cm4gbV9zdHlsZS5yZXNvbHZlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxD
b2xvciwgbV9pblZpc2l0ZWRMaW5rKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYm9yZGVy
U3R5bGUgPSBjb21wdXRlQm9yZGVyU3R5bGUoKTsKLSAgICAgICAgaWYgKCF2aXNpdGVkTGluayAm
JiAoYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0IHx8IGJvcmRlclN0eWxlID09IEJv
cmRlclN0eWxlOjpPdXRzZXQgfHwgYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6OlJpZGdlIHx8
IGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpHcm9vdmUpKQotICAgICAgICAgICAgcmV0dXJu
IFNSR0JBPHVpbnQ4X3Q+IHsgMjM4LCAyMzgsIDIzOCB9OworICAgICAgICBpZiAoIW1faW5WaXNp
dGVkTGluaykgeworICAgICAgICAgICAgYXV0byBib3JkZXJTdHlsZSA9IFsmXSB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChtX3Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3R5
bGUuYm9yZGVyTGVmdFN0eWxlKCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0Q29sb3I6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLmJvcmRl
clJpZ2h0U3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9w
Q29sb3I6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3N0eWxlLmJvcmRlclRvcFN0eWxl
KCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHlsZS5ib3JkZXJCb3R0b21TdHlsZSgpOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBCb3Jk
ZXJTdHlsZTo6Tm9uZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KCk7CisgICAg
ICAgICAgICBpZiAoYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6Okluc2V0IHx8IGJvcmRlclN0
eWxlID09IEJvcmRlclN0eWxlOjpPdXRzZXQgfHwgYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6
OlJpZGdlIHx8IGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpHcm9vdmUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFNSR0JBPHVpbnQ4X3Q+IHsgMjM4LCAyMzgsIDIzOCB9OworICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIHZpc2l0ZWRMaW5rID8gdmlzaXRlZExpbmtDb2xvcigpIDogY29s
b3IoKTsKKyAgICAgICAgcmV0dXJuIG1fc3R5bGUucmVzb2x2ZWRDb2xvcihtX2luVmlzaXRlZExp
bmsgPyBtX3N0eWxlLnZpc2l0ZWRMaW5rQ29sb3IoKSA6IG1fc3R5bGUuY29sb3IoKSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBPcHRpb25TZXQ8U3R5bGVDb2xvck9wdGlvbnM+
IG9wdGlvbnM7CisgICAgaWYgKG1faW5WaXNpdGVkTGluaykKKyAgICAgICAgb3B0aW9ucy5hZGQo
U3R5bGVDb2xvck9wdGlvbnM6OkZvclZpc2l0ZWRMaW5rKTsKKyAgICBpZiAobV9zdHlsZS5tX2lu
aGVyaXRlZEZsYWdzLnVzZVN5c3RlbUFwcGVhcmFuY2UpCisgICAgICAgIG9wdGlvbnMuYWRkKFN0
eWxlQ29sb3JPcHRpb25zOjpVc2VTeXN0ZW1BcHBlYXJhbmNlKTsKKyAgICBpZiAobV9zdHlsZS5t
X2luaGVyaXRlZEZsYWdzLnVzZURhcmtBcHBlYXJhbmNlKSB7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIG5vdCB5ZXQgY29ycmVjdCBiZWNhdXNlIGl0IGRvZXMgbm90IGRvIHRoZSByaWdodCB0
aGluZyB3aGVuIHRoZSBDU1MgY29sb3Itc2NoZW1lIHByb3BlcnR5IGlzIGludm9sdmVkLgorICAg
ICAgICBvcHRpb25zLmFkZChTdHlsZUNvbG9yT3B0aW9uczo6VXNlRGFya0FwcGVhcmFuY2UpOwor
ICAgIH0KKyAgICBpZiAobV9zdHlsZS5tX2luaGVyaXRlZEZsYWdzLnVzZUVsZXZhdGVkVXNlcklu
dGVyZmFjZUxldmVsKQorICAgICAgICBvcHRpb25zLmFkZChTdHlsZUNvbG9yT3B0aW9uczo6VXNl
RWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwpOworICAgIHJldHVybiBTdHlsZUNvbG9yOjpjb2xv
ckZyb21LZXl3b3JkKGtleXdvcmQsIG9wdGlvbnMpOwogfQogCi1Db2xvciBSZW5kZXJTdHlsZTo6
Y29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorQ29s
b3IgUmVuZGVyU3R5bGU6OnJlc29sdmVkQ29sb3IoQ1NTUHJvcGVydHlJRCBjb2xvclByb3BlcnR5
LCBib29sIHZpc2l0ZWRMaW5rKSBjb25zdAogewotICAgIGlmIChpc0N1cnJlbnRDb2xvcihjb2xv
cikpCi0gICAgICAgIHJldHVybiB0aGlzLT5jb2xvcigpOworICAgIFN0eWxlS2V5d29yZENvbG9y
UmVzb2x2ZXIgcmVzb2x2ZXIgeyAqdGhpcywgY29sb3JQcm9wZXJ0eSwgdmlzaXRlZExpbmsgfTsK
KyAgICByZXR1cm4gdW5yZXNvbHZlZENvbG9yKGNvbG9yUHJvcGVydHksIHZpc2l0ZWRMaW5rKS5y
ZXNvbHZlZENvbG9yKHJlc29sdmVyKTsKK30KIAotICAgIHJldHVybiBjb2xvcjsKK0NvbG9yIFJl
bmRlclN0eWxlOjpyZXNvbHZlZENvbG9yKGNvbnN0IFN0eWxlQ29sb3ImIGNvbG9yKSBjb25zdAor
eworICAgIFN0eWxlS2V5d29yZENvbG9yUmVzb2x2ZXIgcmVzb2x2ZXIgeyAqdGhpcywgQ1NTUHJv
cGVydHlJbnZhbGlkLCBmYWxzZSB9OworICAgIHJldHVybiBjb2xvci5yZXNvbHZlZENvbG9yKHJl
c29sdmVyKTsKIH0KIAogQ29sb3IgUmVuZGVyU3R5bGU6OnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUlEIGNvbG9yUHJvcGVydHkpIGNvbnN0CiB7Ci0gICAgQ29sb3IgdW52aXNpdGVk
Q29sb3IgPSBjb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihjb2xvclByb3BlcnR5LCBmYWxzZSk7
CisgICAgQ29sb3IgdW52aXNpdGVkQ29sb3IgPSByZXNvbHZlZENvbG9yKGNvbG9yUHJvcGVydHks
IGZhbHNlKTsKICAgICBpZiAoaW5zaWRlTGluaygpICE9IEluc2lkZUxpbms6Okluc2lkZVZpc2l0
ZWQpCiAgICAgICAgIHJldHVybiB1bnZpc2l0ZWRDb2xvcjsKIApAQCAtMjMxMiw3ICsyMzkxLDcg
QEAgQ29sb3IgUmVuZGVyU3R5bGU6OnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUlE
IGNvbG9yUHJvcGVydHkpIGNvbnN0CiAgICAgICAgIHJldHVybiB1bnZpc2l0ZWRDb2xvcjsKICNl
bmRpZgogICAgIAotICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IGNvbG9yUmVzb2x2aW5nQ3VycmVu
dENvbG9yKGNvbG9yUHJvcGVydHksIHRydWUpOworICAgIENvbG9yIHZpc2l0ZWRDb2xvciA9IHJl
c29sdmVkQ29sb3IoY29sb3JQcm9wZXJ0eSwgdHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogVGVjaG5p
Y2FsbHkgc29tZW9uZSBjb3VsZCBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGNvbG9yIHRyYW5zcGFy
ZW50LCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0CiAgICAgLy8gYXNzdW1lIHRoYXQgaWYgdGhlIGJh
Y2tncm91bmQgY29sb3IgaXMgdHJhbnNwYXJlbnQgdGhhdCBpdCB3YXNuJ3Qgc2V0LiBOb3RlIHRo
YXQgaXQncyB3ZWlyZCB0aGF0CkBAIC0yMzQxLDE1ICsyNDIwLDIwIEBAIENvbG9yIFJlbmRlclN0
eWxlOjpjb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkQ29sb3I7CiB9CiAKK0NvbG9yIFJlbmRlclN0eWxlOjpy
ZXNvbHZlZENvbG9yQXBwbHlpbmdDb2xvckZpbHRlcihjb25zdCBTdHlsZUNvbG9yJiBjb2xvcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVzb2x2ZWRD
b2xvcihjb2xvcikpOworfQorCiBDb2xvciBSZW5kZXJTdHlsZTo6ZWZmZWN0aXZlQWNjZW50Q29s
b3IoKSBjb25zdAogewogICAgIGlmIChoYXNBdXRvQWNjZW50Q29sb3IoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIGlmIChoYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgIHJldHVy
biBjb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihjb2xvclJlc29sdmluZ0N1cnJlbnRDb2xvcihh
Y2NlbnRDb2xvcigpKSk7CisgICAgICAgIHJldHVybiByZXNvbHZlZENvbG9yQXBwbHlpbmdDb2xv
ckZpbHRlcihhY2NlbnRDb2xvcigpKTsKIAotICAgIHJldHVybiBjb2xvclJlc29sdmluZ0N1cnJl
bnRDb2xvcihhY2NlbnRDb2xvcigpKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvcihhY2NlbnRD
b2xvcigpKTsKIH0KIAogY29uc3QgQm9yZGVyVmFsdWUmIFJlbmRlclN0eWxlOjpib3JkZXJCZWZv
cmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAppbmRleCBmZTdlMTY5MjA1NzQuLjVkNzZlY2QyYWQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNCb3JkZXIoKSBjb25zdCB7IHJldHVybiBtX3N1cnJvdW5kRGF0YS0+Ym9y
ZGVyLmhhc0JvcmRlcigpOyB9CiAgICAgYm9vbCBoYXNCb3JkZXJJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3Vycm91bmREYXRhLT5ib3JkZXIuaGFzQm9yZGVySW1hZ2UoKTsgfQogICAgIGJvb2wg
aGFzVmlzaWJsZUJvcmRlckRlY29yYXRpb24oKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlQm9y
ZGVyKCkgfHwgaGFzQm9yZGVySW1hZ2UoKTsgfQotICAgIGJvb2wgaGFzVmlzaWJsZUJvcmRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fc3Vycm91bmREYXRhLT5ib3JkZXIuaGFzVmlzaWJsZUJvcmRlcigp
OyB9CisgICAgYm9vbCBoYXNWaXNpYmxlQm9yZGVyKCkgY29uc3QgeyByZXR1cm4gbV9zdXJyb3Vu
ZERhdGEtPmJvcmRlci5oYXNWaXNpYmxlQm9yZGVyKCp0aGlzKTsgfQogICAgIGJvb2wgaGFzUGFk
ZGluZygpIGNvbnN0IHsgcmV0dXJuICFtX3N1cnJvdW5kRGF0YS0+cGFkZGluZy5pc1plcm8oKTsg
fQogICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gIW1fc3Vycm91bmREYXRhLT5v
ZmZzZXQuaXNaZXJvKCk7IH0KICAgICBib29sIGhhc01hcmdpbkJlZm9yZVF1aXJrKCkgY29uc3Qg
eyByZXR1cm4gbWFyZ2luQmVmb3JlKCkuaGFzUXVpcmsoKTsgfQpAQCAtMzE2LDE2ICszMTYsMTYg
QEAgcHVibGljOgogCiAgICAgZmxvYXQgYm9yZGVyTGVmdFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9zdXJyb3VuZERhdGEtPmJvcmRlci5ib3JkZXJMZWZ0V2lkdGgoKTsgfQogICAgIEJvcmRlclN0
eWxlIGJvcmRlckxlZnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vycm91bmREYXRhLT5ib3Jk
ZXIubGVmdCgpLnN0eWxlKCk7IH0KLSAgICBib29sIGJvcmRlckxlZnRJc1RyYW5zcGFyZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci5sZWZ0KCkuaXNUcmFuc3BhcmVu
dCgpOyB9CisgICAgYm9vbCBib3JkZXJMZWZ0SXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3Vycm91bmREYXRhLT5ib3JkZXIubGVmdCgpLmlzVHJhbnNwYXJlbnQoKnRoaXMpOyB9CiAg
ICAgZmxvYXQgYm9yZGVyUmlnaHRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vycm91bmREYXRh
LT5ib3JkZXIuYm9yZGVyUmlnaHRXaWR0aCgpOyB9CiAgICAgQm9yZGVyU3R5bGUgYm9yZGVyUmln
aHRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vycm91bmREYXRhLT5ib3JkZXIucmlnaHQoKS5z
dHlsZSgpOyB9Ci0gICAgYm9vbCBib3JkZXJSaWdodElzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3N1cnJvdW5kRGF0YS0+Ym9yZGVyLnJpZ2h0KCkuaXNUcmFuc3BhcmVudCgpOyB9Cisg
ICAgYm9vbCBib3JkZXJSaWdodElzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3N1cnJv
dW5kRGF0YS0+Ym9yZGVyLnJpZ2h0KCkuaXNUcmFuc3BhcmVudCgqdGhpcyk7IH0KICAgICBmbG9h
dCBib3JkZXJUb3BXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vycm91bmREYXRhLT5ib3JkZXIu
Ym9yZGVyVG9wV2lkdGgoKTsgfQogICAgIEJvcmRlclN0eWxlIGJvcmRlclRvcFN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci50b3AoKS5zdHlsZSgpOyB9Ci0gICAg
Ym9vbCBib3JkZXJUb3BJc1RyYW5zcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdXJyb3VuZERh
dGEtPmJvcmRlci50b3AoKS5pc1RyYW5zcGFyZW50KCk7IH0KKyAgICBib29sIGJvcmRlclRvcElz
VHJhbnNwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3N1cnJvdW5kRGF0YS0+Ym9yZGVyLnRvcCgp
LmlzVHJhbnNwYXJlbnQoKnRoaXMpOyB9CiAgICAgZmxvYXQgYm9yZGVyQm90dG9tV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3N1cnJvdW5kRGF0YS0+Ym9yZGVyLmJvcmRlckJvdHRvbVdpZHRoKCk7
IH0KICAgICBCb3JkZXJTdHlsZSBib3JkZXJCb3R0b21TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vycm91bmREYXRhLT5ib3JkZXIuYm90dG9tKCkuc3R5bGUoKTsgfQotICAgIGJvb2wgYm9yZGVy
Qm90dG9tSXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vycm91bmREYXRhLT5ib3Jk
ZXIuYm90dG9tKCkuaXNUcmFuc3BhcmVudCgpOyB9CisgICAgYm9vbCBib3JkZXJCb3R0b21Jc1Ry
YW5zcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci5ib3R0b20o
KS5pc1RyYW5zcGFyZW50KCp0aGlzKTsgfQogICAgIEZsb2F0Qm94RXh0ZW50IGJvcmRlcldpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci5ib3JkZXJXaWR0aCgpOyB9
CiAKICAgICBmbG9hdCBib3JkZXJCZWZvcmVXaWR0aCgpIGNvbnN0OwpAQCAtNjY1LDcgKzY2NSw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBHYXBMZW5ndGgmIHJvd0dhcCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPnJvd0dhcDsgfQogICAgIEJvcmRlclN0eWxlIGNvbHVt
blJ1bGVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm11bHRp
Q29sLT5ydWxlLnN0eWxlKCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBjb2x1bW5SdWxlV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5tdWx0aUNvbC0+cnVsZVdp
ZHRoKCk7IH0KLSAgICBib29sIGNvbHVtblJ1bGVJc1RyYW5zcGFyZW50KCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bXVsdGlDb2wtPnJ1bGUuaXNUcmFuc3BhcmVudCgp
OyB9CisgICAgYm9vbCBjb2x1bW5SdWxlSXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZU5vbkluaGVyaXRlZERhdGEtPm11bHRpQ29sLT5ydWxlLmlzVHJhbnNwYXJlbnQoKnRoaXMp
OyB9CiAgICAgQ29sdW1uU3BhbiBjb2x1bW5TcGFuKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Q29sdW1uU3Bhbj4obV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bXVsdGlDb2wtPmNvbHVtblNw
YW4pOyB9CiAKICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT50cmFuc2Zvcm0tPm9wZXJhdGlvbnM7
IH0KQEAgLTgwNyw3ICs4MDcsNyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsU25hcFN0b3Agc2Nyb2xs
U25hcFN0b3AoKSBjb25zdDsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgQ29sb3Ig
dGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT50
YXBIaWdobGlnaHRDb2xvcjsgfQorICAgIFN0eWxlQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT50YXBIaWdobGlnaHRDb2xvcjsgfQog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtOTM0LDcgKzkzNCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlc2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cygpIHsgU0VUX1ZBUiht
X3N1cnJvdW5kRGF0YSwgYm9yZGVyLm1fYm90dG9tTGVmdFJhZGl1cywgaW5pdGlhbEJvcmRlclJh
ZGl1cygpKTsgfQogICAgIHZvaWQgcmVzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cygpIHsgU0VU
X1ZBUihtX3N1cnJvdW5kRGF0YSwgYm9yZGVyLm1fYm90dG9tUmlnaHRSYWRpdXMsIGluaXRpYWxC
b3JkZXJSYWRpdXMoKSk7IH0KIAotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENv
bG9yJiB2KSB7IFNFVF9WQVIobV9iYWNrZ3JvdW5kRGF0YSwgY29sb3IsIHYpOyB9CisgICAgdm9p
ZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgU3R5bGVDb2xvciYgdikgeyBTRVRfVkFSKG1fYmFj
a2dyb3VuZERhdGEsIGNvbG9yLCB2KTsgfQogCiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kWFBvc2l0
aW9uKExlbmd0aCYmIGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihtX2JhY2tncm91bmREYXRhLCBi
YWNrZ3JvdW5kLCBtX3hQb3NpdGlvbiwgV1RGTW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0
QmFja2dyb3VuZFlQb3NpdGlvbihMZW5ndGgmJiBsZW5ndGgpIHsgU0VUX05FU1RFRF9WQVIobV9i
YWNrZ3JvdW5kRGF0YSwgYmFja2dyb3VuZCwgbV95UG9zaXRpb24sIFdURk1vdmUobGVuZ3RoKSk7
IH0KQEAgLTk3NiwyMSArOTc2LDIxIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Qm9yZGVyTGVm
dFdpZHRoKGZsb2F0IHYpIHsgU0VUX1ZBUihtX3N1cnJvdW5kRGF0YSwgYm9yZGVyLm1fbGVmdC5t
X3dpZHRoLCB2KTsgfQogICAgIHZvaWQgc2V0Qm9yZGVyTGVmdFN0eWxlKEJvcmRlclN0eWxlIHYp
IHsgU0VUX1ZBUihtX3N1cnJvdW5kRGF0YSwgYm9yZGVyLm1fbGVmdC5tX3N0eWxlLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odikpOyB9Ci0gICAgdm9pZCBzZXRCb3JkZXJMZWZ0Q29sb3IoY29uc3Qg
Q29sb3ImIHYpIHsgU0VUX0JPUkRFUlZBTFVFX0NPTE9SKG1fc3Vycm91bmREYXRhLCBib3JkZXIu
bV9sZWZ0LCB2KTsgfQorICAgIHZvaWQgc2V0Qm9yZGVyTGVmdENvbG9yKGNvbnN0IFN0eWxlQ29s
b3ImIHYpIHsgU0VUX0JPUkRFUlZBTFVFX0NPTE9SKG1fc3Vycm91bmREYXRhLCBib3JkZXIubV9s
ZWZ0LCB2KTsgfQogICAgIHZvaWQgc2V0Qm9yZGVyUmlnaHRXaWR0aChmbG9hdCB2KSB7IFNFVF9W
QVIobV9zdXJyb3VuZERhdGEsIGJvcmRlci5tX3JpZ2h0Lm1fd2lkdGgsIHYpOyB9CiAgICAgdm9p
ZCBzZXRCb3JkZXJSaWdodFN0eWxlKEJvcmRlclN0eWxlIHYpIHsgU0VUX1ZBUihtX3N1cnJvdW5k
RGF0YSwgYm9yZGVyLm1fcmlnaHQubV9zdHlsZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHYpKTsg
fQotICAgIHZvaWQgc2V0Qm9yZGVyUmlnaHRDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfQk9S
REVSVkFMVUVfQ09MT1IobV9zdXJyb3VuZERhdGEsIGJvcmRlci5tX3JpZ2h0LCB2KTsgfQorICAg
IHZvaWQgc2V0Qm9yZGVyUmlnaHRDb2xvcihjb25zdCBTdHlsZUNvbG9yJiB2KSB7IFNFVF9CT1JE
RVJWQUxVRV9DT0xPUihtX3N1cnJvdW5kRGF0YSwgYm9yZGVyLm1fcmlnaHQsIHYpOyB9CiAgICAg
dm9pZCBzZXRCb3JkZXJUb3BXaWR0aChmbG9hdCB2KSB7IFNFVF9WQVIobV9zdXJyb3VuZERhdGEs
IGJvcmRlci5tX3RvcC5tX3dpZHRoLCB2KTsgfQogICAgIHZvaWQgc2V0Qm9yZGVyVG9wU3R5bGUo
Qm9yZGVyU3R5bGUgdikgeyBTRVRfVkFSKG1fc3Vycm91bmREYXRhLCBib3JkZXIubV90b3AubV9z
dHlsZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHYpKTsgfQotICAgIHZvaWQgc2V0Qm9yZGVyVG9w
Q29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX0JPUkRFUlZBTFVFX0NPTE9SKG1fc3Vycm91bmRE
YXRhLCBib3JkZXIubV90b3AsIHYpOyB9CisgICAgdm9pZCBzZXRCb3JkZXJUb3BDb2xvcihjb25z
dCBTdHlsZUNvbG9yJiB2KSB7IFNFVF9CT1JERVJWQUxVRV9DT0xPUihtX3N1cnJvdW5kRGF0YSwg
Ym9yZGVyLm1fdG9wLCB2KTsgfQogICAgIHZvaWQgc2V0Qm9yZGVyQm90dG9tV2lkdGgoZmxvYXQg
dikgeyBTRVRfVkFSKG1fc3Vycm91bmREYXRhLCBib3JkZXIubV9ib3R0b20ubV93aWR0aCwgdik7
IH0KICAgICB2b2lkIHNldEJvcmRlckJvdHRvbVN0eWxlKEJvcmRlclN0eWxlIHYpIHsgU0VUX1ZB
UihtX3N1cnJvdW5kRGF0YSwgYm9yZGVyLm1fYm90dG9tLm1fc3R5bGUsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPih2KSk7IH0KLSAgICB2b2lkIHNldEJvcmRlckJvdHRvbUNvbG9yKGNvbnN0IENvbG9y
JiB2KSB7IFNFVF9CT1JERVJWQUxVRV9DT0xPUihtX3N1cnJvdW5kRGF0YSwgYm9yZGVyLm1fYm90
dG9tLCB2KTsgfQorICAgIHZvaWQgc2V0Qm9yZGVyQm90dG9tQ29sb3IoY29uc3QgU3R5bGVDb2xv
ciYgdikgeyBTRVRfQk9SREVSVkFMVUVfQ09MT1IobV9zdXJyb3VuZERhdGEsIGJvcmRlci5tX2Jv
dHRvbSwgdik7IH0KIAogICAgIHZvaWQgc2V0T3V0bGluZVdpZHRoKGZsb2F0IHYpIHsgU0VUX1ZB
UihtX2JhY2tncm91bmREYXRhLCBvdXRsaW5lLm1fd2lkdGgsIHYpOyB9CiAgICAgdm9pZCBzZXRP
dXRsaW5lU3R5bGVJc0F1dG8oT3V0bGluZUlzQXV0byBpc0F1dG8pIHsgU0VUX1ZBUihtX2JhY2tn
cm91bmREYXRhLCBvdXRsaW5lLm1faXNBdXRvLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXNBdXRv
KSk7IH0KICAgICB2b2lkIHNldE91dGxpbmVTdHlsZShCb3JkZXJTdHlsZSB2KSB7IFNFVF9WQVIo
bV9iYWNrZ3JvdW5kRGF0YSwgb3V0bGluZS5tX3N0eWxlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dikpOyB9Ci0gICAgdm9pZCBzZXRPdXRsaW5lQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX0JP
UkRFUlZBTFVFX0NPTE9SKG1fYmFja2dyb3VuZERhdGEsIG91dGxpbmUsIHYpOyB9CisgICAgdm9p
ZCBzZXRPdXRsaW5lQ29sb3IoY29uc3QgU3R5bGVDb2xvciYgdikgeyBTRVRfQk9SREVSVkFMVUVf
Q09MT1IobV9iYWNrZ3JvdW5kRGF0YSwgb3V0bGluZSwgdik7IH0KIAogICAgIHZvaWQgc2V0T3Zl
cmZsb3dYKE92ZXJmbG93IHYpIHsgbV9ub25Jbmhlcml0ZWRGbGFncy5vdmVyZmxvd1ggPSAgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHYpOyB9CiAgICAgdm9pZCBzZXRPdmVyZmxvd1koT3ZlcmZsb3cg
dikgeyBtX25vbkluaGVyaXRlZEZsYWdzLm92ZXJmbG93WSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih2KTsgfQpAQCAtMTAyNCw3ICsxMDI0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Rm9udEl0
YWxpYyhzdGQ6Om9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4pOwogICAgIHZvaWQgc2V0Rm9u
dFBhbGV0dGUoRm9udFBhbGV0dGUpOwogCi0gICAgdm9pZCBzZXRDb2xvcihjb25zdCBDb2xvciYp
OworICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgU3R5bGVDb2xvciYpOwogICAgIHZvaWQgc2V0VGV4
dEluZGVudChMZW5ndGgmJiBsZW5ndGgpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCBp
bmRlbnQsIFdURk1vdmUobGVuZ3RoKSk7IH0KICAgICB2b2lkIHNldFRleHRBbGlnbihUZXh0QWxp
Z25Nb2RlIHYpIHsgbV9pbmhlcml0ZWRGbGFncy50ZXh0QWxpZ24gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odik7IH0KICAgICB2b2lkIHNldFRleHRBbGlnbkxhc3QoVGV4dEFsaWduTGFzdCB2KSB7
IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgdGV4dEFsaWduTGFzdCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHYpKTsgfQpAQCAtMTE4MiwxMiArMTE4MiwxMiBAQCBwdWJsaWM6CiAgICAgLy8g
Q1NTMyBTZXR0ZXJzCiAgICAgdm9pZCBzZXRPdXRsaW5lT2Zmc2V0KGZsb2F0IHYpIHsgU0VUX1ZB
UihtX2JhY2tncm91bmREYXRhLCBvdXRsaW5lLm1fb2Zmc2V0LCB2KTsgfQogICAgIHZvaWQgc2V0
VGV4dFNoYWRvdyhzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4sIGJvb2wgYWRkID0gZmFsc2Up
OwotICAgIHZvaWQgc2V0VGV4dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjKSB7IFNFVF9WQVIo
bV9yYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFN0cm9rZUNvbG9yLCBjKTsgfQorICAgIHZvaWQgc2V0
VGV4dFN0cm9rZUNvbG9yKGNvbnN0IFN0eWxlQ29sb3ImIGMpIHsgU0VUX1ZBUihtX3JhcmVJbmhl
cml0ZWREYXRhLCB0ZXh0U3Ryb2tlQ29sb3IsIGMpOyB9CiAgICAgdm9pZCBzZXRUZXh0U3Ryb2tl
V2lkdGgoZmxvYXQgdykgeyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIHRleHRTdHJva2VX
aWR0aCwgdyk7IH0KLSAgICB2b2lkIHNldFRleHRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGMpIHsg
U0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0RmlsbENvbG9yLCBjKTsgfQotICAgIHZv
aWQgc2V0Q2FyZXRDb2xvcihjb25zdCBDb2xvciYgYykgeyBTRVRfVkFSKG1fcmFyZUluaGVyaXRl
ZERhdGEsIGNhcmV0Q29sb3IsIGMpOyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIGhhc0F1
dG9DYXJldENvbG9yLCBmYWxzZSk7ICB9CisgICAgdm9pZCBzZXRUZXh0RmlsbENvbG9yKGNvbnN0
IFN0eWxlQ29sb3ImIGMpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0RmlsbENv
bG9yLCBjKTsgfQorICAgIHZvaWQgc2V0Q2FyZXRDb2xvcihjb25zdCBTdHlsZUNvbG9yJiBjKSB7
IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgY2FyZXRDb2xvciwgYyk7IFNFVF9WQVIobV9y
YXJlSW5oZXJpdGVkRGF0YSwgaGFzQXV0b0NhcmV0Q29sb3IsIGZhbHNlKTsgIH0KICAgICB2b2lk
IHNldEhhc0F1dG9DYXJldENvbG9yKCkgeyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIGhh
c0F1dG9DYXJldENvbG9yLCB0cnVlKTsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCBjYXJl
dENvbG9yLCBjdXJyZW50Q29sb3IoKSk7IH0KLSAgICB2b2lkIHNldEFjY2VudENvbG9yKGNvbnN0
IENvbG9yJiBjKSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgYWNjZW50Q29sb3IsIGMp
OyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIGhhc0F1dG9BY2NlbnRDb2xvciwgZmFsc2Up
OyAgfQorICAgIHZvaWQgc2V0QWNjZW50Q29sb3IoY29uc3QgU3R5bGVDb2xvciYgYykgeyBTRVRf
VkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIGFjY2VudENvbG9yLCBjKTsgU0VUX1ZBUihtX3JhcmVJ
bmhlcml0ZWREYXRhLCBoYXNBdXRvQWNjZW50Q29sb3IsIGZhbHNlKTsgIH0KICAgICB2b2lkIHNl
dEhhc0F1dG9BY2NlbnRDb2xvcigpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCBoYXNB
dXRvQWNjZW50Q29sb3IsIHRydWUpOyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIGFjY2Vu
dENvbG9yLCBjdXJyZW50Q29sb3IoKSk7IH0KICAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQgZikg
eyBmbG9hdCB2ID0gY2xhbXBUbzxmbG9hdD4oZiwgMC5mLCAxLmYpOyBTRVRfVkFSKG1fcmFyZU5v
bkluaGVyaXRlZERhdGEsIG9wYWNpdHksIHYpOyB9CiAgICAgc3RhdGljX2Fzc2VydChsYXJnZXN0
Q29udHJvbFBhcnQgPCAxIDw8IGFwcGVhcmFuY2VCaXRXaWR0aCwgIkNvbnRyb2wgcGFydCBtdXN0
IGZpdCBpbiBzdG9yYWdlIGJpdHMiKTsKQEAgLTEyNzcsNyArMTI3Nyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldENvbHVtbkZpbGwoQ29sdW1uRmlsbCBjb2x1bW5GaWxsKSB7IFNFVF9ORVNURURf
VkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG11bHRpQ29sLCBmaWxsLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oY29sdW1uRmlsbCkpOyB9CiAgICAgdm9pZCBzZXRDb2x1bW5HYXAoR2FwTGVuZ3Ro
JiYgZ2FwTGVuZ3RoKSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgY29sdW1uR2Fw
LCBXVEZNb3ZlKGdhcExlbmd0aCkpOyB9CiAgICAgdm9pZCBzZXRSb3dHYXAoR2FwTGVuZ3RoJiYg
Z2FwTGVuZ3RoKSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgcm93R2FwLCBXVEZN
b3ZlKGdhcExlbmd0aCkpOyB9Ci0gICAgdm9pZCBzZXRDb2x1bW5SdWxlQ29sb3IoY29uc3QgQ29s
b3ImIGMpIHsgU0VUX0JPUkRFUlZBTFVFX0NPTE9SKG1fcmFyZU5vbkluaGVyaXRlZERhdGEuYWNj
ZXNzKCkubXVsdGlDb2wsIHJ1bGUsIGMpOyB9CisgICAgdm9pZCBzZXRDb2x1bW5SdWxlQ29sb3Io
Y29uc3QgU3R5bGVDb2xvciYgYykgeyBTRVRfQk9SREVSVkFMVUVfQ09MT1IobV9yYXJlTm9uSW5o
ZXJpdGVkRGF0YS5hY2Nlc3MoKS5tdWx0aUNvbCwgcnVsZSwgYyk7IH0KICAgICB2b2lkIHNldENv
bHVtblJ1bGVTdHlsZShCb3JkZXJTdHlsZSBiKSB7IFNFVF9ORVNURURfVkFSKG1fcmFyZU5vbklu
aGVyaXRlZERhdGEsIG11bHRpQ29sLCBydWxlLm1fc3R5bGUsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihiKSk7IH0KICAgICB2b2lkIHNldENvbHVtblJ1bGVXaWR0aCh1bnNpZ25lZCBzaG9ydCB3KSB7
IFNFVF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG11bHRpQ29sLCBydWxlLm1f
d2lkdGgsIHcpOyB9CiAgICAgdm9pZCByZXNldENvbHVtblJ1bGUoKSB7IFNFVF9ORVNURURfVkFS
KG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIG11bHRpQ29sLCBydWxlLCBCb3JkZXJWYWx1ZSgpKTsg
fQpAQCAtMTI5Niw4ICsxMjk2LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRTcGVha0FzKE9w
dGlvblNldDxTcGVha0FzPiBzKSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgc3BlYWtB
cywgcy50b1JhdygpKTsgfQogICAgIHZvaWQgc2V0VGV4dENvbWJpbmUoVGV4dENvbWJpbmUgdikg
eyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIHRleHRDb21iaW5lLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odikpOyB9Ci0gICAgdm9pZCBzZXRUZXh0RGVjb3JhdGlvbkNvbG9yKGNvbnN0IENv
bG9yJiBjKSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgdGV4dERlY29yYXRpb25D
b2xvciwgYyk7IH0KLSAgICB2b2lkIHNldFRleHRFbXBoYXNpc0NvbG9yKGNvbnN0IENvbG9yJiBj
KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgdGV4dEVtcGhhc2lzQ29sb3IsIGMpOyB9
CisgICAgdm9pZCBzZXRUZXh0RGVjb3JhdGlvbkNvbG9yKGNvbnN0IFN0eWxlQ29sb3ImIGMpIHsg
U0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCB0ZXh0RGVjb3JhdGlvbkNvbG9yLCBjKTsg
fQorICAgIHZvaWQgc2V0VGV4dEVtcGhhc2lzQ29sb3IoY29uc3QgU3R5bGVDb2xvciYgYykgeyBT
RVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIHRleHRFbXBoYXNpc0NvbG9yLCBjKTsgfQogICAg
IHZvaWQgc2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsIGZpbGwpIHsgU0VUX1ZB
UihtX3JhcmVJbmhlcml0ZWREYXRhLCB0ZXh0RW1waGFzaXNGaWxsLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZmlsbCkpOyB9CiAgICAgdm9pZCBzZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNp
c01hcmsgbWFyaykgeyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIHRleHRFbXBoYXNpc01h
cmssIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtYXJrKSk7IH0KICAgICB2b2lkIHNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsoY29uc3QgQXRvbVN0cmluZyYgbWFyaykgeyBTRVRfVkFSKG1fcmFyZUlu
aGVyaXRlZERhdGEsIHRleHRFbXBoYXNpc0N1c3RvbU1hcmssIG1hcmspOyB9CkBAIC0xMzc5LDcg
KzEzNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxTbmFwU3RvcChjb25zdCBTY3Jv
bGxTbmFwU3RvcCk7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQgc2V0VGFw
SGlnaGxpZ2h0Q29sb3IoY29uc3QgQ29sb3ImIGMpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWRE
YXRhLCB0YXBIaWdobGlnaHRDb2xvciwgYyk7IH0KKyAgICB2b2lkIHNldFRhcEhpZ2hsaWdodENv
bG9yKGNvbnN0IFN0eWxlQ29sb3ImIGMpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB0
YXBIaWdobGlnaHRDb2xvciwgYyk7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKQEAgLTE0MzcsMTAgKzE0MzcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwbGljaXRs
eVNldFN0cm9rZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+aGFz
U2V0U3Ryb2tlV2lkdGg7IH07CiAgICAgYm9vbCBoYXNQb3NpdGl2ZVN0cm9rZVdpZHRoKCkgY29u
c3Q7CiAgICAgCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJ
bmhlcml0ZWREYXRhLT5zdHJva2VDb2xvcjsgfQotICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29u
c3QgQ29sb3ImIHYpICB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgc3Ryb2tlQ29sb3Is
IHYpOyB9Ci0gICAgdm9pZCBzZXRWaXNpdGVkTGlua1N0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiB2
KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtTdHJva2VDb2xvciwg
dik7IH0KLSAgICBjb25zdCBDb2xvciYgdmlzaXRlZExpbmtTdHJva2VDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3I7IH0KKyAg
ICBTdHlsZUNvbG9yIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVk
RGF0YS0+c3Ryb2tlQ29sb3I7IH0KKyAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IFN0eWxl
Q29sb3ImIHYpICB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgc3Ryb2tlQ29sb3IsIHYp
OyB9CisgICAgdm9pZCBzZXRWaXNpdGVkTGlua1N0cm9rZUNvbG9yKGNvbnN0IFN0eWxlQ29sb3Im
IHYpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua1N0cm9rZUNvbG9y
LCB2KTsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIHZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3IoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua1N0cm9rZUNvbG9y
OyB9CiAgICAgdm9pZCBzZXRIYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IoYm9vbCB2KSB7IFNF
VF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgaGFzU2V0U3Ryb2tlQ29sb3IsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2KSk7IH0KICAgICBib29sIGhhc0V4cGxpY2l0bHlTZXRTdHJva2VDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPmhhc1NldFN0cm9rZUNvbG9yOyB9
OwogICAgIHN0YXRpYyBDb2xvciBpbml0aWFsU3Ryb2tlQ29sb3IoKSB7IHJldHVybiBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjazsgfQpAQCAtMTQ1NiwxNCArMTQ1NiwxNCBAQCBwdWJsaWM6CiAgICAg
U1ZHUmVuZGVyU3R5bGUmIGFjY2Vzc1NWR1N0eWxlKCkgeyByZXR1cm4gbV9zdmdTdHlsZS5hY2Nl
c3MoKTsgfQogCiAgICAgU1ZHUGFpbnRUeXBlIGZpbGxQYWludFR5cGUoKSBjb25zdCB7IHJldHVy
biBzdmdTdHlsZSgpLmZpbGxQYWludFR5cGUoKTsgfQotICAgIENvbG9yIGZpbGxQYWludENvbG9y
KCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUoKS5maWxsUGFpbnRDb2xvcigpOyB9Ci0gICAgdm9p
ZCBzZXRGaWxsUGFpbnRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgYWNjZXNzU1ZHU3R5bGUo
KS5zZXRGaWxsUGFpbnQoU1ZHUGFpbnRUeXBlOjpSR0JDb2xvciwgY29sb3IsIGVtcHR5U3RyaW5n
KCkpOyB9CisgICAgU3R5bGVDb2xvciBmaWxsUGFpbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN2
Z1N0eWxlKCkuZmlsbFBhaW50Q29sb3IoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhaW50Q29sb3Io
Y29uc3QgU3R5bGVDb2xvciYgY29sb3IpIHsgYWNjZXNzU1ZHU3R5bGUoKS5zZXRGaWxsUGFpbnQo
U1ZHUGFpbnRUeXBlOjpSR0JDb2xvciwgY29sb3IsIGVtcHR5U3RyaW5nKCkpOyB9CiAgICAgZmxv
YXQgZmlsbE9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBzdmdTdHlsZSgpLmZpbGxPcGFjaXR5KCk7
IH0KICAgICB2b2lkIHNldEZpbGxPcGFjaXR5KGZsb2F0IGYpIHsgYWNjZXNzU1ZHU3R5bGUoKS5z
ZXRGaWxsT3BhY2l0eShmKTsgfQogCiAgICAgU1ZHUGFpbnRUeXBlIHN0cm9rZVBhaW50VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN2Z1N0eWxlKCkuc3Ryb2tlUGFpbnRUeXBlKCk7IH0KLSAgICBDb2xv
ciBzdHJva2VQYWludENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUoKS5zdHJva2VQYWlu
dENvbG9yKCk7IH0KLSAgICB2b2lkIHNldFN0cm9rZVBhaW50Q29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKSB7IGFjY2Vzc1NWR1N0eWxlKCkuc2V0U3Ryb2tlUGFpbnQoU1ZHUGFpbnRUeXBlOjpSR0JD
b2xvciwgY29sb3IsIGVtcHR5U3RyaW5nKCkpOyB9CisgICAgU3R5bGVDb2xvciBzdHJva2VQYWlu
dENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUoKS5zdHJva2VQYWludENvbG9yKCk7IH0K
KyAgICB2b2lkIHNldFN0cm9rZVBhaW50Q29sb3IoY29uc3QgU3R5bGVDb2xvciYgY29sb3IpIHsg
YWNjZXNzU1ZHU3R5bGUoKS5zZXRTdHJva2VQYWludChTVkdQYWludFR5cGU6OlJHQkNvbG9yLCBj
b2xvciwgZW1wdHlTdHJpbmcoKSk7IH0KICAgICBmbG9hdCBzdHJva2VPcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gc3ZnU3R5bGUoKS5zdHJva2VPcGFjaXR5KCk7IH0KICAgICB2b2lkIHNldFN0cm9r
ZU9wYWNpdHkoZmxvYXQgZikgeyBhY2Nlc3NTVkdTdHlsZSgpLnNldFN0cm9rZU9wYWNpdHkoZik7
IH0KICAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHN0cm9rZURhc2hBcnJheSgpIGNvbnN0IHsg
cmV0dXJuIHN2Z1N0eWxlKCkuc3Ryb2tlRGFzaEFycmF5KCk7IH0KQEAgLTE0OTIsOSArMTQ5Miw5
IEBAIHB1YmxpYzoKICAgICBmbG9hdCBzdG9wT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHN2Z1N0
eWxlKCkuc3RvcE9wYWNpdHkoKTsgfQogICAgIHZvaWQgc2V0U3RvcE9wYWNpdHkoZmxvYXQgZikg
eyBhY2Nlc3NTVkdTdHlsZSgpLnNldFN0b3BPcGFjaXR5KGYpOyB9CiAKLSAgICB2b2lkIHNldFN0
b3BDb2xvcihjb25zdCBDb2xvciYgYykgeyBhY2Nlc3NTVkdTdHlsZSgpLnNldFN0b3BDb2xvcihj
KTsgfQotICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgYykgeyBhY2Nlc3NTVkdT
dHlsZSgpLnNldEZsb29kQ29sb3IoYyk7IH0KLSAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29u
c3QgQ29sb3ImIGMpIHsgYWNjZXNzU1ZHU3R5bGUoKS5zZXRMaWdodGluZ0NvbG9yKGMpOyB9Cisg
ICAgdm9pZCBzZXRTdG9wQ29sb3IoY29uc3QgU3R5bGVDb2xvciYgYykgeyBhY2Nlc3NTVkdTdHls
ZSgpLnNldFN0b3BDb2xvcihjKTsgfQorICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBTdHls
ZUNvbG9yJiBjKSB7IGFjY2Vzc1NWR1N0eWxlKCkuc2V0Rmxvb2RDb2xvcihjKTsgfQorICAgIHZv
aWQgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBTdHlsZUNvbG9yJiBjKSB7IGFjY2Vzc1NWR1N0eWxl
KCkuc2V0TGlnaHRpbmdDb2xvcihjKTsgfQogCiAgICAgU1ZHTGVuZ3RoVmFsdWUgYmFzZWxpbmVT
aGlmdFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUoKS5iYXNlbGluZVNoaWZ0VmFsdWUo
KTsgfQogICAgIHZvaWQgc2V0QmFzZWxpbmVTaGlmdFZhbHVlKFNWR0xlbmd0aFZhbHVlIHMpIHsg
YWNjZXNzU1ZHU3R5bGUoKS5zZXRCYXNlbGluZVNoaWZ0VmFsdWUocyk7IH0KQEAgLTE1ODUsMTUg
KzE1ODUsMTggQEAgcHVibGljOgogICAgIGJvb2wgbGFzdENoaWxkU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX25vbkluaGVyaXRlZEZsYWdzLmxhc3RDaGlsZFN0YXRlOyB9CiAgICAgdm9pZCBzZXRM
YXN0Q2hpbGRTdGF0ZSgpIHsgc2V0VW5pcXVlKCk7IG1fbm9uSW5oZXJpdGVkRmxhZ3MubGFzdENo
aWxkU3RhdGUgPSB0cnVlOyB9CiAKLSAgICBDb2xvciB1bnJlc29sdmVkQ29sb3JGb3JQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGNvbG9yUHJvcGVydHksIGJvb2wgdmlzaXRlZExpbmsgPSBmYWxzZSkg
Y29uc3Q7Ci0gICAgQ29sb3IgY29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IoY29uc3QgQ29sb3Im
KSBjb25zdDsKKyAgICBTdHlsZUNvbG9yIHVucmVzb2x2ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIGNv
bG9yUHJvcGVydHksIGJvb2wgdmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7CisgICAgQ29sb3Ig
cmVzb2x2ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIGNvbG9yUHJvcGVydHksIGJvb2wgdmlzaXRlZExp
bmspIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIHJlc29sdmVkQ29sb3IoY29uc3Qg
U3R5bGVDb2xvciYpIGNvbnN0OworICAgIHZvaWQgcmVzb2x2ZWRDb2xvcihjb25zdCBDb2xvciYp
IGNvbnN0ID0gZGVsZXRlOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgdmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5SUQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
IHZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUlEKSBjb25z
dDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KGNvbnN0IENvbG9yJikgY29uc3Q7CisgICAgQ29sb3IgcmVzb2x2ZWRDb2xvckFwcGx5aW5nQ29s
b3JGaWx0ZXIoY29uc3QgU3R5bGVDb2xvciYpIGNvbnN0OwogCi0gICAgYm9vbCBiYWNrZ3JvdW5k
Q29sb3JFcXVhbHNUb0NvbG9ySWdub3JpbmdWaXNpdGVkKGNvbnN0IENvbG9yJiBjb2xvcikgY29u
c3QgeyByZXR1cm4gY29sb3IgPT0gYmFja2dyb3VuZENvbG9yKCk7IH0KKyAgICBib29sIGJhY2tn
cm91bmRDb2xvckVxdWFsc1RvQ29sb3JJZ25vcmluZ1Zpc2l0ZWQoY29uc3QgU3R5bGVDb2xvciYg
Y29sb3IpIGNvbnN0IHsgcmV0dXJuIGNvbG9yID09IGJhY2tncm91bmRDb2xvcigpOyB9CiAKICAg
ICB2b2lkIHNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgeyBtX25vbkluaGVy
aXRlZEZsYWdzLmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzID0gdHJ1ZTsgfQogICAg
IGJvb2wgaGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBt
X25vbkluaGVyaXRlZEZsYWdzLmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzOyB9CkBA
IC0xNzU1LDcgKzE3NTgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsUGVy
c3BlY3RpdmVPcmlnaW5YKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjBmLCBMZW5ndGhUeXBlOjpQZXJj
ZW50KTsgfQogICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbFBlcnNwZWN0aXZlT3JpZ2luWSgpIHsg
cmV0dXJuIExlbmd0aCg1MC4wZiwgTGVuZ3RoVHlwZTo6UGVyY2VudCk7IH0KICAgICBzdGF0aWMg
Q29sb3IgaW5pdGlhbEJhY2tncm91bmRDb2xvcigpIHsgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrOyB9Ci0gICAgc3RhdGljIENvbG9yIGluaXRpYWxUZXh0RW1waGFzaXNDb2xvcigpIHsg
cmV0dXJuIGN1cnJlbnRDb2xvcigpOyB9CisgICAgc3RhdGljIFN0eWxlQ29sb3IgaW5pdGlhbFRl
eHRFbXBoYXNpc0NvbG9yKCkgeyByZXR1cm4gY3VycmVudENvbG9yKCk7IH0KICAgICBzdGF0aWMg
VGV4dEVtcGhhc2lzRmlsbCBpbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpIHsgcmV0dXJuIFRleHRF
bXBoYXNpc0ZpbGw6OkZpbGxlZDsgfQogICAgIHN0YXRpYyBUZXh0RW1waGFzaXNNYXJrIGluaXRp
YWxUZXh0RW1waGFzaXNNYXJrKCkgeyByZXR1cm4gVGV4dEVtcGhhc2lzTWFyazo6Tm9uZTsgfQog
ICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBpbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFy
aygpIHsgcmV0dXJuIG51bGxBdG9tKCk7IH0KQEAgLTE4ODEsMTkgKzE4ODQsMTkgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNOb3RGaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRl
ZERhdGEtPmlzTm90RmluYWw7IH0KICAgICB2b2lkIHNldElzTm90RmluYWwoKSB7IFNFVF9WQVIo
bV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgaXNOb3RGaW5hbCwgdHJ1ZSk7IH0KIAotICAgIHZvaWQg
c2V0VmlzaXRlZExpbmtDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZvaWQgc2V0VmlzaXRlZExp
bmtCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihtX3JhcmVOb25Jbmhl
cml0ZWREYXRhLCB2aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgdik7IH0KLSAgICB2b2lkIHNl
dFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIobV9y
YXJlTm9uSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsIHYpOyB9Ci0g
ICAgdm9pZCBzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IoY29uc3QgQ29sb3ImIHYpIHsg
U0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29s
b3IsIHYpOyB9Ci0gICAgdm9pZCBzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKGNvbnN0
IENvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtC
b3JkZXJCb3R0b21Db2xvciwgdik7IH0KLSAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQm9yZGVyVG9w
Q29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCB2
aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCB2KTsgfQotICAgIHZvaWQgc2V0VmlzaXRlZExpbmtP
dXRsaW5lQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWRE
YXRhLCB2aXNpdGVkTGlua091dGxpbmVDb2xvciwgdik7IH0KLSAgICB2b2lkIHNldFZpc2l0ZWRM
aW5rQ29sdW1uUnVsZUNvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9ORVNURURfVkFSKG1fcmFy
ZU5vbkluaGVyaXRlZERhdGEsIG11bHRpQ29sLCB2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwg
dik7IH0KLSAgICB2b2lkIHNldFZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvcihjb25zdCBD
b2xvciYgdikgeyBTRVRfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIHZpc2l0ZWRMaW5rVGV4
dERlY29yYXRpb25Db2xvciwgdik7IH0KLSAgICB2b2lkIHNldFZpc2l0ZWRMaW5rVGV4dEVtcGhh
c2lzQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB2
aXNpdGVkTGlua1RleHRFbXBoYXNpc0NvbG9yLCB2KTsgfQotICAgIHZvaWQgc2V0VmlzaXRlZExp
bmtUZXh0RmlsbENvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVk
RGF0YSwgdmlzaXRlZExpbmtUZXh0RmlsbENvbG9yLCB2KTsgfQotICAgIHZvaWQgc2V0VmlzaXRl
ZExpbmtUZXh0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihtX3JhcmVJbmhl
cml0ZWREYXRhLCB2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwgdik7IH0KLSAgICB2b2lkIHNl
dFZpc2l0ZWRMaW5rQ2FyZXRDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKG1fcmFyZUlu
aGVyaXRlZERhdGEsIHZpc2l0ZWRMaW5rQ2FyZXRDb2xvciwgdik7IFNFVF9WQVIobV9yYXJlSW5o
ZXJpdGVkRGF0YSwgaGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvciwgZmFsc2UpOyB9CisgICAg
dm9pZCBzZXRWaXNpdGVkTGlua0NvbG9yKGNvbnN0IFN0eWxlQ29sb3ImKTsKKyAgICB2b2lkIHNl
dFZpc2l0ZWRMaW5rQmFja2dyb3VuZENvbG9yKGNvbnN0IFN0eWxlQ29sb3ImIHYpIHsgU0VUX1ZB
UihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgdik7
IH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKGNvbnN0IFN0eWxlQ29s
b3ImIHYpIHsgU0VUX1ZBUihtX3JhcmVOb25Jbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua0JvcmRl
ckxlZnRDb2xvciwgdik7IH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xv
cihjb25zdCBTdHlsZUNvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwg
dmlzaXRlZExpbmtCb3JkZXJSaWdodENvbG9yLCB2KTsgfQorICAgIHZvaWQgc2V0VmlzaXRlZExp
bmtCb3JkZXJCb3R0b21Db2xvcihjb25zdCBTdHlsZUNvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJl
Tm9uSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgdik7IH0KKyAg
ICB2b2lkIHNldFZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3IoY29uc3QgU3R5bGVDb2xvciYgdikg
eyBTRVRfVkFSKG1fcmFyZU5vbkluaGVyaXRlZERhdGEsIHZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29s
b3IsIHYpOyB9CisgICAgdm9pZCBzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvcihjb25zdCBTdHls
ZUNvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtP
dXRsaW5lQ29sb3IsIHYpOyB9CisgICAgdm9pZCBzZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xv
cihjb25zdCBTdHlsZUNvbG9yJiB2KSB7IFNFVF9ORVNURURfVkFSKG1fcmFyZU5vbkluaGVyaXRl
ZERhdGEsIG11bHRpQ29sLCB2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgdik7IH0KKyAgICB2
b2lkIHNldFZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvcihjb25zdCBTdHlsZUNvbG9yJiB2
KSB7IFNFVF9WQVIobV9yYXJlTm9uSW5oZXJpdGVkRGF0YSwgdmlzaXRlZExpbmtUZXh0RGVjb3Jh
dGlvbkNvbG9yLCB2KTsgfQorICAgIHZvaWQgc2V0VmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xv
cihjb25zdCBTdHlsZUNvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgdmlz
aXRlZExpbmtUZXh0RW1waGFzaXNDb2xvciwgdik7IH0KKyAgICB2b2lkIHNldFZpc2l0ZWRMaW5r
VGV4dEZpbGxDb2xvcihjb25zdCBTdHlsZUNvbG9yJiB2KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJp
dGVkRGF0YSwgdmlzaXRlZExpbmtUZXh0RmlsbENvbG9yLCB2KTsgfQorICAgIHZvaWQgc2V0Vmlz
aXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IoY29uc3QgU3R5bGVDb2xvciYgdikgeyBTRVRfVkFSKG1f
cmFyZUluaGVyaXRlZERhdGEsIHZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCB2KTsgfQorICAg
IHZvaWQgc2V0VmlzaXRlZExpbmtDYXJldENvbG9yKGNvbnN0IFN0eWxlQ29sb3ImIHYpIHsgU0VU
X1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua0NhcmV0Q29sb3IsIHYpOyBTRVRf
VkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIGhhc1Zpc2l0ZWRMaW5rQXV0b0NhcmV0Q29sb3IsIGZh
bHNlKTsgfQogICAgIHZvaWQgc2V0SGFzVmlzaXRlZExpbmtBdXRvQ2FyZXRDb2xvcigpIHsgU0VU
X1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCBoYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9yLCB0
cnVlKTsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWREYXRhLCB2aXNpdGVkTGlua0NhcmV0Q29sb3Is
IGN1cnJlbnRDb2xvcigpKTsgfQogCiAgICAgdm9pZCBpbmhlcml0VW5pY29kZUJpZGlGcm9tKGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnQpIHsgbV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlk
aSA9IHBhcmVudC0+bV9ub25Jbmhlcml0ZWRGbGFncy51bmljb2RlQmlkaTsgfQpAQCAtMTkwMSw0
NSArMTkwNCw0MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRTaGFkb3dJbmxpbmVEaXJlY3Rpb25F
eHRlbnQoY29uc3QgU2hhZG93RGF0YSosIExheW91dFVuaXQmIGxvZ2ljYWxMZWZ0LCBMYXlvdXRV
bml0JiBsb2dpY2FsUmlnaHQpIGNvbnN0OwogICAgIHZvaWQgZ2V0U2hhZG93QmxvY2tEaXJlY3Rp
b25FeHRlbnQoY29uc3QgU2hhZG93RGF0YSosIExheW91dFVuaXQmIGxvZ2ljYWxUb3AsIExheW91
dFVuaXQmIGxvZ2ljYWxCb3R0b20pIGNvbnN0OwogCi0gICAgLy8gSW4gUmVuZGVyU3R5bGUgaW52
YWxpZCBjb2xvciB2YWx1ZSBpcyB1c2VkIHRvIHNpZ25pZnkgJ2N1cnJlbnRjb2xvcicgd2hpY2gg
cmVzb2x2ZXMgdG8gY29sb3IoKS4KLSAgICBzdGF0aWMgQ29sb3IgY3VycmVudENvbG9yKCkgeyBy
ZXR1cm4geyB9OyB9Ci0gICAgc3RhdGljIGJvb2wgaXNDdXJyZW50Q29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKSB7IHJldHVybiAhY29sb3IuaXNWYWxpZCgpOyB9Ci0KLSAgICBjb25zdCBDb2xvciYg
Ym9yZGVyTGVmdENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci5s
ZWZ0KCkuY29sb3IoKTsgfQotICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KLSAg
ICBjb25zdCBDb2xvciYgYm9yZGVyVG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N1cnJvdW5k
RGF0YS0+Ym9yZGVyLnRvcCgpLmNvbG9yKCk7IH0KLSAgICBjb25zdCBDb2xvciYgYm9yZGVyQm90
dG9tQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N1cnJvdW5kRGF0YS0+Ym9yZGVyLmJvdHRvbSgp
LmNvbG9yKCk7IH0KLSAgICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YS0+Y29sb3I7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBDb2xvciYgY29sb3IoKSBjb25zdDsKLSAgICBjb25zdCBDb2xvciYgY29sdW1uUnVsZUNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bXVsdGlDb2wtPnJ1bGUu
Y29sb3IoKTsgfQotICAgIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmREYXRhLT5vdXRsaW5lLmNvbG9yKCk7IH0KLSAgICBjb25zdCBDb2xvciYg
dGV4dEVtcGhhc2lzQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT50
ZXh0RW1waGFzaXNDb2xvcjsgfQotICAgIGNvbnN0IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+dGV4dEZpbGxDb2xvcjsgfQotICAgIGNv
bnN0IENvbG9yJiB0ZXh0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0
ZWREYXRhLT50ZXh0U3Ryb2tlQ29sb3I7IH0KLSAgICBjb25zdCBDb2xvciYgY2FyZXRDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPmNhcmV0Q29sb3I7IH0KKyAgICBz
dGF0aWMgU3R5bGVDb2xvciBjdXJyZW50Q29sb3IoKSB7IHJldHVybiBTdHlsZUNvbG9yIHsgfTsg
fQorCisgICAgY29uc3QgU3R5bGVDb2xvciYgYm9yZGVyTGVmdENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci5sZWZ0KCkuY29sb3IoKTsgfQorICAgIGNvbnN0IFN0
eWxlQ29sb3ImIGJvcmRlclJpZ2h0Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N1cnJvdW5kRGF0
YS0+Ym9yZGVyLnJpZ2h0KCkuY29sb3IoKTsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIGJvcmRl
clRvcENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdXJyb3VuZERhdGEtPmJvcmRlci50b3AoKS5j
b2xvcigpOyB9CisgICAgY29uc3QgU3R5bGVDb2xvciYgYm9yZGVyQm90dG9tQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX3N1cnJvdW5kRGF0YS0+Ym9yZGVyLmJvdHRvbSgpLmNvbG9yKCk7IH0KKyAg
ICBjb25zdCBTdHlsZUNvbG9yJiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tncm91bmREYXRhLT5jb2xvcjsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFN0eWxlQ29s
b3ImIGNvbG9yKCkgY29uc3Q7CisgICAgY29uc3QgU3R5bGVDb2xvciYgY29sdW1uUnVsZUNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bXVsdGlDb2wtPnJ1bGUu
Y29sb3IoKTsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIG91dGxpbmVDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2dyb3VuZERhdGEtPm91dGxpbmUuY29sb3IoKTsgfQorICAgIGNvbnN0IFN0
eWxlQ29sb3ImIHRleHRFbXBoYXNpc0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJp
dGVkRGF0YS0+dGV4dEVtcGhhc2lzQ29sb3I7IH0KKyAgICBjb25zdCBTdHlsZUNvbG9yJiB0ZXh0
RmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+dGV4dEZpbGxD
b2xvcjsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIHRleHRTdHJva2VDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsgfQorICAgIGNvbnN0
IFN0eWxlQ29sb3ImIGNhcmV0Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWRE
YXRhLT5jYXJldENvbG9yOyB9CiAgICAgYm9vbCBoYXNBdXRvQ2FyZXRDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPmhhc0F1dG9DYXJldENvbG9yOyB9Ci0gICAgY29u
c3QgQ29sb3ImIHZpc2l0ZWRMaW5rQ29sb3IoKSBjb25zdDsKLSAgICBjb25zdCBDb2xvciYgdmlz
aXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0
ZWREYXRhLT52aXNpdGVkTGlua0JhY2tncm91bmRDb2xvcjsgfQotICAgIGNvbnN0IENvbG9yJiB2
aXNpdGVkTGlua0JvcmRlckxlZnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVy
aXRlZERhdGEtPnZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yOyB9Ci0gICAgY29uc3QgQ29sb3Im
IHZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbklu
aGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvcjsgfQotICAgIGNvbnN0IENv
bG9yJiB2aXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvcjsgfQotICAgIGNv
bnN0IENvbG9yJiB2aXNpdGVkTGlua0JvcmRlclRvcENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9y
YXJlTm9uSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvcjsgfQotICAgIGNv
bnN0IENvbG9yJiB2aXNpdGVkTGlua091dGxpbmVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZU5vbkluaGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yOyB9Ci0gICAgY29uc3Qg
Q29sb3ImIHZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bXVsdGlDb2wtPnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yOyB9
Ci0gICAgY29uc3QgQ29sb3ImIHRleHREZWNvcmF0aW9uQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X3JhcmVOb25Jbmhlcml0ZWREYXRhLT50ZXh0RGVjb3JhdGlvbkNvbG9yOyB9Ci0gICAgY29uc3Qg
Q29sb3ImIHZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZU5vbkluaGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvcjsgfQot
ICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkTGlua1RleHRFbXBoYXNpc0NvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvcjsg
fQotICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkTGlua1RleHRGaWxsQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua1RleHRGaWxsQ29sb3I7IH0KLSAg
ICBjb25zdCBDb2xvciYgdmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua1RleHRTdHJva2VDb2xvcjsgfQotICAg
IGNvbnN0IENvbG9yJiB2aXNpdGVkTGlua0NhcmV0Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua0NhcmV0Q29sb3I7IH0KKyAgICBjb25zdCBTdHls
ZUNvbG9yJiB2aXNpdGVkTGlua0NvbG9yKCkgY29uc3Q7CisgICAgY29uc3QgU3R5bGVDb2xvciYg
dmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhl
cml0ZWREYXRhLT52aXNpdGVkTGlua0JhY2tncm91bmRDb2xvcjsgfQorICAgIGNvbnN0IFN0eWxl
Q29sb3ImIHZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3I7IH0KKyAgICBjb25z
dCBTdHlsZUNvbG9yJiB2aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3I7IH0K
KyAgICBjb25zdCBTdHlsZUNvbG9yJiB2aXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtCb3JkZXJCb3R0
b21Db2xvcjsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIHZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29s
b3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua0Jv
cmRlclRvcENvbG9yOyB9CisgICAgY29uc3QgU3R5bGVDb2xvciYgdmlzaXRlZExpbmtPdXRsaW5l
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT52aXNpdGVkTGlu
a091dGxpbmVDb2xvcjsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIHZpc2l0ZWRMaW5rQ29sdW1u
UnVsZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bXVsdGlD
b2wtPnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yOyB9CisgICAgY29uc3QgU3R5bGVDb2xvciYg
dGV4dERlY29yYXRpb25Db2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERh
dGEtPnRleHREZWNvcmF0aW9uQ29sb3I7IH0KKyAgICBjb25zdCBTdHlsZUNvbG9yJiB2aXNpdGVk
TGlua1RleHREZWNvcmF0aW9uQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0
ZWREYXRhLT52aXNpdGVkTGlua1RleHREZWNvcmF0aW9uQ29sb3I7IH0KKyAgICBjb25zdCBTdHls
ZUNvbG9yJiB2aXNpdGVkTGlua1RleHRFbXBoYXNpc0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9y
YXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvcjsgfQorICAgIGNv
bnN0IFN0eWxlQ29sb3ImIHZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZUluaGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvcjsgfQorICAgIGNv
bnN0IFN0eWxlQ29sb3ImIHZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3I7IH0KKyAg
ICBjb25zdCBTdHlsZUNvbG9yJiB2aXNpdGVkTGlua0NhcmV0Q29sb3IoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua0NhcmV0Q29sb3I7IH0KICAgICBib29s
IGhhc1Zpc2l0ZWRMaW5rQXV0b0NhcmV0Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhl
cml0ZWREYXRhLT5oYXNWaXNpdGVkTGlua0F1dG9DYXJldENvbG9yOyB9CiAKLSAgICBjb25zdCBD
b2xvciYgc3RvcENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUoKS5zdG9wQ29sb3IoKTsg
fQotICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUo
KS5mbG9vZENvbG9yKCk7IH0KLSAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIHN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpOyB9CisgICAgY29uc3QgU3R5bGVD
b2xvciYgc3RvcENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3ZnU3R5bGUoKS5zdG9wQ29sb3IoKTsg
fQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIGZsb29kQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdmdT
dHlsZSgpLmZsb29kQ29sb3IoKTsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIGxpZ2h0aW5nQ29s
b3IoKSBjb25zdCB7IHJldHVybiBzdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKTsgfQogCiAgICAg
Q29sb3IgZWZmZWN0aXZlQWNjZW50Q29sb3IoKSBjb25zdDsKLSAgICBjb25zdCBDb2xvciYgYWNj
ZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT5hY2NlbnRDb2xv
cjsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIGFjY2VudENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlSW5oZXJpdGVkRGF0YS0+YWNjZW50Q29sb3I7IH0KICAgICBib29sIGhhc0F1dG9BY2Nl
bnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPmhhc0F1dG9BY2Nl
bnRDb2xvcjsgfQogCiAgICAgUGF0aE9wZXJhdGlvbiogb2Zmc2V0UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPm9mZnNldFBhdGguZ2V0KCk7IH0KQEAgLTE5Njks
NiArMTk3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgT3ZlcmZsb3dBbmNob3IgaW5pdGlhbE92
ZXJmbG93QW5jaG9yKCkgeyByZXR1cm4gT3ZlcmZsb3dBbmNob3I6OkF1dG87IH0KIAogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgU3R5bGVLZXl3b3JkQ29sb3JSZXNvbHZlcjsKKwogICAgIHN0
cnVjdCBOb25Jbmhlcml0ZWRGbGFncyB7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBO
b25Jbmhlcml0ZWRGbGFncyYpIGNvbnN0OwogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Tm9uSW5oZXJpdGVkRmxhZ3MmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsgfQpAQCAtMjAzNCw3ICsyMDM3LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICB1bnNp
Z25lZCBkaXJlY3Rpb24gOiAxOyAvLyBUZXh0RGlyZWN0aW9uCiAgICAgICAgIHVuc2lnbmVkIHdo
aXRlU3BhY2UgOiAzOyAvLyBXaGl0ZVNwYWNlCi0gICAgICAgIC8vIDM1IGJpdHMKKworICAgICAg
ICAvLyAzNCBiaXRzCisKICAgICAgICAgdW5zaWduZWQgYm9yZGVyQ29sbGFwc2UgOiAxOyAvLyBC
b3JkZXJDb2xsYXBzZQogICAgICAgICB1bnNpZ25lZCBib3hEaXJlY3Rpb24gOiAxOyAvLyBCb3hE
aXJlY3Rpb24KIApAQCAtMjA0NCwxNiArMjA0OSwyNiBAQCBwcml2YXRlOgogICAgICAgICB1bnNp
Z25lZCBwb2ludGVyRXZlbnRzIDogNDsgLy8gUG9pbnRlckV2ZW50cwogICAgICAgICB1bnNpZ25l
ZCBpbnNpZGVMaW5rIDogMjsgLy8gSW5zaWRlTGluawogICAgICAgICB1bnNpZ25lZCBpbnNpZGVE
ZWZhdWx0QnV0dG9uIDogMTsKLSAgICAgICAgLy8gNDYgYml0cworCisgICAgICAgIC8vIDQ1IGJp
dHMKIAogICAgICAgICAvLyBDU1MgVGV4dCBMYXlvdXQgTW9kdWxlIExldmVsIDM6IFZlcnRpY2Fs
IHdyaXRpbmcgc3VwcG9ydAogICAgICAgICB1bnNpZ25lZCB3cml0aW5nTW9kZSA6IDI7IC8vIFdy
aXRpbmdNb2RlCi0gICAgICAgIC8vIDQ4IGJpdHMKKworICAgICAgICAvLyA0NyBiaXRzCiAKICNp
ZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogICAgICAgICB1bnNpZ25lZCBhdXRvc2l6ZVN0YXR1
cyA6IDU7CiAjZW5kaWYKLSAgICAgICAgLy8gNTMgYml0cworCisgICAgICAgIC8vIDUyIGJpdHMK
KworICAgICAgICAvLyBjb2xvciBvcHRpb25zIGZyb20gZG9jdW1lbnQKKyAgICAgICAgdW5zaWdu
ZWQgdXNlU3lzdGVtQXBwZWFyYW5jZSA6IDE7CisgICAgICAgIHVuc2lnbmVkIHVzZURhcmtBcHBl
YXJhbmNlIDogMTsKKyAgICAgICAgdW5zaWduZWQgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2
ZWwgOiAxOworCisgICAgICAgIC8vIDU1IGJpdHMKICAgICB9OwogCiAgICAgLy8gVGhpcyBjb25z
dHJ1Y3RvciBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgcmVwbGFjZSBvcGVyYXRpb24uCkBAIC0y
MDc3LDggKzIwOTIsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldFNoYWRvd0hvcml6
b250YWxFeHRlbnQoY29uc3QgU2hhZG93RGF0YSosIExheW91dFVuaXQmIGxlZnQsIExheW91dFVu
aXQmIHJpZ2h0KTsKICAgICBzdGF0aWMgdm9pZCBnZXRTaGFkb3dWZXJ0aWNhbEV4dGVudChjb25z
dCBTaGFkb3dEYXRhKiwgTGF5b3V0VW5pdCYgdG9wLCBMYXlvdXRVbml0JiBib3R0b20pOwogCi0g
ICAgQ29sb3IgY29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IoQ1NTUHJvcGVydHlJRCBjb2xvclBy
b3BlcnR5LCBib29sIHZpc2l0ZWRMaW5rKSBjb25zdDsKLQogICAgIGJvb2wgY2hhbmdlQWZmZWN0
c1Zpc3VhbE92ZXJmbG93KGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAgICAgYm9vbCBjaGFu
Z2VSZXF1aXJlc0xheW91dChjb25zdCBSZW5kZXJTdHlsZSYsIE9wdGlvblNldDxTdHlsZURpZmZl
cmVuY2VDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHk+JiBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVBy
b3BlcnRpZXMpIGNvbnN0OwogICAgIGJvb2wgY2hhbmdlUmVxdWlyZXNQb3NpdGlvbmVkTGF5b3V0
T25seShjb25zdCBSZW5kZXJTdHlsZSYsIE9wdGlvblNldDxTdHlsZURpZmZlcmVuY2VDb250ZXh0
U2Vuc2l0aXZlUHJvcGVydHk+JiBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNv
bnN0OwpAQCAtMjU1MCw0ICsyNTYzLDEwIEBAIGlubGluZSBib29sIGdlbmVyYXRlc0JveChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkoKSAhPSBEaXNw
bGF5VHlwZTo6Tm9uZSAmJiBzdHlsZS5kaXNwbGF5KCkgIT0gRGlzcGxheVR5cGU6OkNvbnRlbnRz
OwogfQogCitpbmxpbmUgYm9vbCBCb3JkZXJWYWx1ZTo6aXNUcmFuc3BhcmVudChjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUpIGNvbnN0Cit7CisgICAgYXV0byByZXNvbHZlZENvbG9yID0gc3R5bGUu
cmVzb2x2ZWRDb2xvcihtX2NvbG9yKTsKKyAgICByZXR1cm4gcmVzb2x2ZWRDb2xvci5pc1ZhbGlk
KCkgJiYgIXJlc29sdmVkQ29sb3IuaXNWaXNpYmxlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5k
ZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxl
LmgKaW5kZXggYmZjY2U4NTgyMzQ3Li4xZmFiY2IzYjZlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCkBAIC0xMDcsMTggKzEwNywxOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRYKGNvbnN0IExlbmd0aCYpOwogICAgIHZvaWQgc2V0WShj
b25zdCBMZW5ndGgmKTsKICAgICB2b2lkIHNldEZpbGxPcGFjaXR5KGZsb2F0KTsKLSAgICB2b2lk
IHNldEZpbGxQYWludChTVkdQYWludFR5cGUsIGNvbnN0IENvbG9yJiwgY29uc3QgU3RyaW5nJiB1
cmksIGJvb2wgYXBwbHlUb1JlZ3VsYXJTdHlsZSA9IHRydWUsIGJvb2wgYXBwbHlUb1Zpc2l0ZWRM
aW5rU3R5bGUgPSBmYWxzZSk7CisgICAgdm9pZCBzZXRGaWxsUGFpbnQoU1ZHUGFpbnRUeXBlLCBj
b25zdCBTdHlsZUNvbG9yJiwgY29uc3QgU3RyaW5nJiB1cmksIGJvb2wgYXBwbHlUb1JlZ3VsYXJT
dHlsZSA9IHRydWUsIGJvb2wgYXBwbHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBmYWxzZSk7CiAgICAg
dm9pZCBzZXRTdHJva2VPcGFjaXR5KGZsb2F0KTsKLSAgICB2b2lkIHNldFN0cm9rZVBhaW50KFNW
R1BhaW50VHlwZSwgY29uc3QgQ29sb3ImLCBjb25zdCBTdHJpbmcmIHVyaSwgYm9vbCBhcHBseVRv
UmVndWxhclN0eWxlID0gdHJ1ZSwgYm9vbCBhcHBseVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNl
KTsKKyAgICB2b2lkIHNldFN0cm9rZVBhaW50KFNWR1BhaW50VHlwZSwgY29uc3QgU3R5bGVDb2xv
ciYsIGNvbnN0IFN0cmluZyYgdXJpLCBib29sIGFwcGx5VG9SZWd1bGFyU3R5bGUgPSB0cnVlLCBi
b29sIGFwcGx5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2UpOwogCiAgICAgdm9pZCBzZXRTdHJv
a2VEYXNoQXJyYXkoY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYpOwogICAgIHZvaWQgc2V0
U3Ryb2tlRGFzaE9mZnNldChjb25zdCBMZW5ndGgmKTsKICAgICB2b2lkIHNldEtlcm5pbmcoY29u
c3QgU1ZHTGVuZ3RoVmFsdWUmKTsKICAgICB2b2lkIHNldFN0b3BPcGFjaXR5KGZsb2F0KTsKLSAg
ICB2b2lkIHNldFN0b3BDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0U3RvcENvbG9y
KGNvbnN0IFN0eWxlQ29sb3ImKTsKICAgICB2b2lkIHNldEZsb29kT3BhY2l0eShmbG9hdCk7Ci0g
ICAgdm9pZCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBzZXRMaWdodGlu
Z0NvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRGbG9vZENvbG9yKGNvbnN0IFN0eWxl
Q29sb3ImKTsKKyAgICB2b2lkIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgU3R5bGVDb2xvciYpOwog
ICAgIHZvaWQgc2V0QmFzZWxpbmVTaGlmdFZhbHVlKGNvbnN0IFNWR0xlbmd0aFZhbHVlJik7CiAK
ICAgICAvLyBTZXR0ZXJzIGZvciBpbmhlcml0ZWQgcmVzb3VyY2VzCkBAIC0xNDIsMjAgKzE0Miwy
MCBAQCBwdWJsaWM6CiAgICAgR2x5cGhPcmllbnRhdGlvbiBnbHlwaE9yaWVudGF0aW9uVmVydGlj
YWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHbHlwaE9yaWVudGF0aW9uPihtX2luaGVy
aXRlZEZsYWdzLmdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCk7IH0KICAgICBmbG9hdCBmaWxsT3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbERhdGEtPm9wYWNpdHk7IH0KICAgICBTVkdQYWlu
dFR5cGUgZmlsbFBhaW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhaW50
VHlwZT4obV9maWxsRGF0YS0+cGFpbnRUeXBlKTsgfQotICAgIGNvbnN0IENvbG9yJiBmaWxsUGFp
bnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbERhdGEtPnBhaW50Q29sb3I7IH0KKyAgICBj
b25zdCBTdHlsZUNvbG9yJiBmaWxsUGFpbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbERh
dGEtPnBhaW50Q29sb3I7IH0KICAgICBjb25zdCBTdHJpbmcmIGZpbGxQYWludFVyaSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsbERhdGEtPnBhaW50VXJpOyB9ICAgIAogICAgIGZsb2F0IHN0cm9rZU9w
YWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZURhdGEtPm9wYWNpdHk7IH0KICAgICBTVkdQ
YWludFR5cGUgc3Ryb2tlUGFpbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZH
UGFpbnRUeXBlPihtX3N0cm9rZURhdGEtPnBhaW50VHlwZSk7IH0KLSAgICBjb25zdCBDb2xvciYg
c3Ryb2tlUGFpbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlRGF0YS0+cGFpbnRDb2xv
cjsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIHN0cm9rZVBhaW50Q29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX3N0cm9rZURhdGEtPnBhaW50Q29sb3I7IH0KICAgICBjb25zdCBTdHJpbmcmIHN0cm9r
ZVBhaW50VXJpKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VEYXRhLT5wYWludFVyaTsgfQogICAg
IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gc3Ryb2tlRGFzaEFycmF5KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJva2VEYXRhLT5kYXNoQXJyYXk7IH0KICAgICBjb25zdCBMZW5ndGgmIHN0cm9rZURhc2hP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZURhdGEtPmRhc2hPZmZzZXQ7IH0KICAgICBT
VkdMZW5ndGhWYWx1ZSBrZXJuaW5nKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RGF0YS0+a2Vybmlu
ZzsgfQogICAgIGZsb2F0IHN0b3BPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wRGF0YS0+
b3BhY2l0eTsgfQotICAgIGNvbnN0IENvbG9yJiBzdG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BEYXRhLT5jb2xvcjsgfQorICAgIGNvbnN0IFN0eWxlQ29sb3ImIHN0b3BDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RvcERhdGEtPmNvbG9yOyB9CiAgICAgZmxvYXQgZmxvb2RPcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9taXNjRGF0YS0+Zmxvb2RPcGFjaXR5OyB9Ci0gICAgY29uc3Qg
Q29sb3ImIGZsb29kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX21pc2NEYXRhLT5mbG9vZENvbG9y
OyB9Ci0gICAgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX21p
c2NEYXRhLT5saWdodGluZ0NvbG9yOyB9CisgICAgY29uc3QgU3R5bGVDb2xvciYgZmxvb2RDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbWlzY0RhdGEtPmZsb29kQ29sb3I7IH0KKyAgICBjb25zdCBT
dHlsZUNvbG9yJiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9taXNjRGF0YS0+bGln
aHRpbmdDb2xvcjsgfQogICAgIFNWR0xlbmd0aFZhbHVlIGJhc2VsaW5lU2hpZnRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWlzY0RhdGEtPmJhc2VsaW5lU2hpZnRWYWx1ZTsgfQogICAgIGNvbnN0
IExlbmd0aCYgY3goKSBjb25zdCB7IHJldHVybiBtX2xheW91dERhdGEtPmN4OyB9CiAgICAgY29u
c3QgTGVuZ3RoJiBjeSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0RGF0YS0+Y3k7IH0KQEAgLTE3
MCwxMCArMTcwLDEwIEBAIHB1YmxpYzoKICAgICBNYXNrVHlwZSBtYXNrVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PE1hc2tUeXBlPihtX25vbkluaGVyaXRlZEZsYWdzLmZsYWdCaXRz
Lm1hc2tUeXBlKTsgfQogCiAgICAgU1ZHUGFpbnRUeXBlIHZpc2l0ZWRMaW5rRmlsbFBhaW50VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhaW50VHlwZT4obV9maWxsRGF0YS0+
dmlzaXRlZExpbmtQYWludFR5cGUpOyB9Ci0gICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRMaW5rRmls
bFBhaW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxEYXRhLT52aXNpdGVkTGlua1BhaW50
Q29sb3I7IH0KKyAgICBjb25zdCBTdHlsZUNvbG9yJiB2aXNpdGVkTGlua0ZpbGxQYWludENvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9maWxsRGF0YS0+dmlzaXRlZExpbmtQYWludENvbG9yOyB9CiAg
ICAgY29uc3QgU3RyaW5nJiB2aXNpdGVkTGlua0ZpbGxQYWludFVyaSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsbERhdGEtPnZpc2l0ZWRMaW5rUGFpbnRVcmk7IH0KICAgICBTVkdQYWludFR5cGUgdmlz
aXRlZExpbmtTdHJva2VQYWludFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdQ
YWludFR5cGU+KG1fc3Ryb2tlRGF0YS0+dmlzaXRlZExpbmtQYWludFR5cGUpOyB9Ci0gICAgY29u
c3QgQ29sb3ImIHZpc2l0ZWRMaW5rU3Ryb2tlUGFpbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c3Ryb2tlRGF0YS0+dmlzaXRlZExpbmtQYWludENvbG9yOyB9CisgICAgY29uc3QgU3R5bGVDb2xv
ciYgdmlzaXRlZExpbmtTdHJva2VQYWludENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VE
YXRhLT52aXNpdGVkTGlua1BhaW50Q29sb3I7IH0KICAgICBjb25zdCBTdHJpbmcmIHZpc2l0ZWRM
aW5rU3Ryb2tlUGFpbnRVcmkoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZURhdGEtPnZpc2l0ZWRM
aW5rUGFpbnRVcmk7IH0KIAogICAgIC8vIGNvbnZlbmllbmNlCkBAIC0yODcsNyArMjg3LDcgQEAg
aW5saW5lIHZvaWQgU1ZHUmVuZGVyU3R5bGU6OnNldEZpbGxPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
CiAgICAgICAgIG1fZmlsbERhdGEuYWNjZXNzKCkub3BhY2l0eSA9IGNsYW1wZWRPcGFjaXR5Owog
fQogCi1pbmxpbmUgdm9pZCBTVkdSZW5kZXJTdHlsZTo6c2V0RmlsbFBhaW50KFNWR1BhaW50VHlw
ZSB0eXBlLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFN0cmluZyYgdXJpLCBib29sIGFwcGx5
VG9SZWd1bGFyU3R5bGUsIGJvb2wgYXBwbHlUb1Zpc2l0ZWRMaW5rU3R5bGUpCitpbmxpbmUgdm9p
ZCBTVkdSZW5kZXJTdHlsZTo6c2V0RmlsbFBhaW50KFNWR1BhaW50VHlwZSB0eXBlLCBjb25zdCBT
dHlsZUNvbG9yJiBjb2xvciwgY29uc3QgU3RyaW5nJiB1cmksIGJvb2wgYXBwbHlUb1JlZ3VsYXJT
dHlsZSwgYm9vbCBhcHBseVRvVmlzaXRlZExpbmtTdHlsZSkKIHsKICAgICBpZiAoYXBwbHlUb1Jl
Z3VsYXJTdHlsZSkgewogICAgICAgICBpZiAoIShtX2ZpbGxEYXRhLT5wYWludFR5cGUgPT0gdHlw
ZSkpCkBAIC0zMTQsNyArMzE0LDcgQEAgaW5saW5lIHZvaWQgU1ZHUmVuZGVyU3R5bGU6OnNldFN0
cm9rZU9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKICAgICAgICAgbV9zdHJva2VEYXRhLmFjY2Vzcygp
Lm9wYWNpdHkgPSBjbGFtcGVkT3BhY2l0eTsKIH0KIAotaW5saW5lIHZvaWQgU1ZHUmVuZGVyU3R5
bGU6OnNldFN0cm9rZVBhaW50KFNWR1BhaW50VHlwZSB0eXBlLCBjb25zdCBDb2xvciYgY29sb3Is
IGNvbnN0IFN0cmluZyYgdXJpLCBib29sIGFwcGx5VG9SZWd1bGFyU3R5bGUsIGJvb2wgYXBwbHlU
b1Zpc2l0ZWRMaW5rU3R5bGUpCitpbmxpbmUgdm9pZCBTVkdSZW5kZXJTdHlsZTo6c2V0U3Ryb2tl
UGFpbnQoU1ZHUGFpbnRUeXBlIHR5cGUsIGNvbnN0IFN0eWxlQ29sb3ImIGNvbG9yLCBjb25zdCBT
dHJpbmcmIHVyaSwgYm9vbCBhcHBseVRvUmVndWxhclN0eWxlLCBib29sIGFwcGx5VG9WaXNpdGVk
TGlua1N0eWxlKQogewogICAgIGlmIChhcHBseVRvUmVndWxhclN0eWxlKSB7CiAgICAgICAgIGlm
ICghKG1fc3Ryb2tlRGF0YS0+cGFpbnRUeXBlID09IHR5cGUpKQpAQCAtMzU5LDcgKzM1OSw3IEBA
IGlubGluZSB2b2lkIFNWR1JlbmRlclN0eWxlOjpzZXRTdG9wT3BhY2l0eShmbG9hdCBvcGFjaXR5
KQogICAgICAgICBtX3N0b3BEYXRhLmFjY2VzcygpLm9wYWNpdHkgPSBjbGFtcGVkT3BhY2l0eTsK
IH0KIAotaW5saW5lIHZvaWQgU1ZHUmVuZGVyU3R5bGU6OnNldFN0b3BDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCitpbmxpbmUgdm9pZCBTVkdSZW5kZXJTdHlsZTo6c2V0U3RvcENvbG9yKGNvbnN0
IFN0eWxlQ29sb3ImIGNvbG9yKQogewogICAgIGlmICghKG1fc3RvcERhdGEtPmNvbG9yID09IGNv
bG9yKSkKICAgICAgICAgbV9zdG9wRGF0YS5hY2Nlc3MoKS5jb2xvciA9IGNvbG9yOwpAQCAtMzcy
LDEzICszNzIsMTMgQEAgaW5saW5lIHZvaWQgU1ZHUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0
eShmbG9hdCBvcGFjaXR5KQogICAgICAgICBtX21pc2NEYXRhLmFjY2VzcygpLmZsb29kT3BhY2l0
eSA9IGNsYW1wZWRPcGFjaXR5OwogfQogCi1pbmxpbmUgdm9pZCBTVkdSZW5kZXJTdHlsZTo6c2V0
Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitpbmxpbmUgdm9pZCBTVkdSZW5kZXJTdHls
ZTo6c2V0Rmxvb2RDb2xvcihjb25zdCBTdHlsZUNvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoISht
X21pc2NEYXRhLT5mbG9vZENvbG9yID09IGNvbG9yKSkKICAgICAgICAgbV9taXNjRGF0YS5hY2Nl
c3MoKS5mbG9vZENvbG9yID0gY29sb3I7CiB9CiAKLWlubGluZSB2b2lkIFNWR1JlbmRlclN0eWxl
OjpzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK2lubGluZSB2b2lkIFNWR1Jl
bmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKGNvbnN0IFN0eWxlQ29sb3ImIGNvbG9yKQogewog
ICAgIGlmICghKG1fbWlzY0RhdGEtPmxpZ2h0aW5nQ29sb3IgPT0gY29sb3IpKQogICAgICAgICBt
X21pc2NEYXRhLmFjY2VzcygpLmxpZ2h0aW5nQ29sb3IgPSBjb2xvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaAppbmRleCBlMTM0
MThhYWJmOGEuLjU5YzdiNTYzMmE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaApAQCAtMTU1LDggKzE1NSw4IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBmbG9hdCBvcGFjaXR5OwotICAgIENvbG9yIHBhaW50Q29sb3I7Ci0g
ICAgQ29sb3IgdmlzaXRlZExpbmtQYWludENvbG9yOworICAgIFN0eWxlQ29sb3IgcGFpbnRDb2xv
cjsKKyAgICBTdHlsZUNvbG9yIHZpc2l0ZWRMaW5rUGFpbnRDb2xvcjsKICAgICBTdHJpbmcgcGFp
bnRVcmk7CiAgICAgU3RyaW5nIHZpc2l0ZWRMaW5rUGFpbnRVcmk7CiAgICAgU1ZHUGFpbnRUeXBl
IHBhaW50VHlwZTsKQEAgLTE4MCw4ICsxODAsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBvcGFj
aXR5OwogCi0gICAgQ29sb3IgcGFpbnRDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVkTGlua1BhaW50
Q29sb3I7CisgICAgU3R5bGVDb2xvciBwYWludENvbG9yOworICAgIFN0eWxlQ29sb3IgdmlzaXRl
ZExpbmtQYWludENvbG9yOwogCiAgICAgU3RyaW5nIHBhaW50VXJpOwogICAgIFN0cmluZyB2aXNp
dGVkTGlua1BhaW50VXJpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBmbG9hdCBvcGFjaXR5OwotICAgIENvbG9yIGNvbG9yOworICAgIFN0eWxlQ29sb3IgY29sb3I7
CiAKIHByaXZhdGU6CiAgICAgU3R5bGVTdG9wRGF0YSgpOwpAQCAtMjQ3LDggKzI0Nyw4IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBmbG9hdCBmbG9vZE9wYWNpdHk7Ci0gICAgQ29sb3IgZmxvb2RD
b2xvcjsKLSAgICBDb2xvciBsaWdodGluZ0NvbG9yOworICAgIFN0eWxlQ29sb3IgZmxvb2RDb2xv
cjsKKyAgICBTdHlsZUNvbG9yIGxpZ2h0aW5nQ29sb3I7CiAKICAgICAvLyBub24taW5oZXJpdGVk
IHRleHQgc3R1ZmYgbGl2ZXMgaGVyZSBub3QgaW4gU3R5bGVUZXh0RGF0YS4KICAgICBTVkdMZW5n
dGhWYWx1ZSBiYXNlbGluZVNoaWZ0VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NoYWRvd0RhdGEuaAppbmRleCBiODVjYjA1ZGYyYzUuLmY2YmE3MWIzZDMzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCkBAIC0yLDcgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5u
aXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDExICsyNCwx
MSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgog
I2luY2x1ZGUgIkxlbmd0aFBvaW50LmgiCisjaW5jbHVkZSAiU3R5bGVDb2xvci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgU2hhZG93RGF0YSB7CiBw
dWJsaWM6CiAgICAgU2hhZG93RGF0YSgpID0gZGVmYXVsdDsKIAotICAgIFNoYWRvd0RhdGEoY29u
c3QgTGVuZ3RoUG9pbnQmIGxvY2F0aW9uLCBMZW5ndGggcmFkaXVzLCBMZW5ndGggc3ByZWFkLCBT
aGFkb3dTdHlsZSBzdHlsZSwgYm9vbCBpc1dlYmtpdEJveFNoYWRvdywgY29uc3QgQ29sb3ImIGNv
bG9yKQorICAgIFNoYWRvd0RhdGEoY29uc3QgTGVuZ3RoUG9pbnQmIGxvY2F0aW9uLCBMZW5ndGgg
cmFkaXVzLCBMZW5ndGggc3ByZWFkLCBTaGFkb3dTdHlsZSBzdHlsZSwgYm9vbCBpc1dlYmtpdEJv
eFNoYWRvdywgY29uc3QgU3R5bGVDb2xvciYgY29sb3IpCiAgICAgICAgIDogbV9sb2NhdGlvbihs
b2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSkKICAgICAgICAgLCBtX3NwcmVhZChzcHJlYWQpCiAg
ICAgICAgICwgbV9yYWRpdXMocmFkaXVzKQpAQCAtNzksOCArNzksOCBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgTGVuZ3RoJiBzcHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3NwcmVhZDsgfQogICAgIFNo
YWRvd1N0eWxlIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogCi0gICAgdm9pZCBz
ZXRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9Ci0gICAgY29u
c3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0
Q29sb3IoY29uc3QgU3R5bGVDb2xvciYgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisgICAg
Y29uc3QgU3R5bGVDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKICAg
ICBib29sIGlzV2Via2l0Qm94U2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYmtpdEJveFNo
YWRvdzsgfQogCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgTGVuZ3RoUG9pbnQgbV9s
b2NhdGlvbjsKICAgICBMZW5ndGggbV9zcHJlYWQ7CiAgICAgTGVuZ3RoIG1fcmFkaXVzOyAvLyBU
aGlzIGlzIHRoZSAiYmx1ciByYWRpdXMiLCBvciB0d2ljZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9u
IG9mIHRoZSBHYXVzc2lhbiBibHVyLgotICAgIENvbG9yIG1fY29sb3I7CisgICAgU3R5bGVDb2xv
ciBtX2NvbG9yOwogICAgIFNoYWRvd1N0eWxlIG1fc3R5bGUgeyBTaGFkb3dTdHlsZTo6Tm9ybWFs
IH07CiAgICAgYm9vbCBtX2lzV2Via2l0Qm94U2hhZG93IHsgZmFsc2UgfTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gbV9uZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCmluZGV4IGIwYTRlOWFiZjFi
NS4uYjE4YTczZDNhMGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuY3BwCkBAIC01MSwyNCArNTEsMTEgQEAgYm9vbCBT
dHlsZUJhY2tncm91bmREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEm
IG90aGVyKSBjb25zdAogICAgIHJldHVybiBiYWNrZ3JvdW5kID09IG90aGVyLmJhY2tncm91bmQg
JiYgY29sb3IgPT0gb3RoZXIuY29sb3IgJiYgb3V0bGluZSA9PSBvdGhlci5vdXRsaW5lOwogfQog
Ci1ib29sIFN0eWxlQmFja2dyb3VuZERhdGE6OmlzRXF1aXZhbGVudEZvclBhaW50aW5nKGNvbnN0
IFN0eWxlQmFja2dyb3VuZERhdGEmIG90aGVyLCBib29sIGN1cnJlbnRDb2xvckRpZmZlcnMpIGNv
bnN0Ci17Ci0gICAgaWYgKGJhY2tncm91bmQgIT0gb3RoZXIuYmFja2dyb3VuZCB8fCBjb2xvciAh
PSBvdGhlci5jb2xvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjdXJyZW50Q29s
b3JEaWZmZXJzICYmIGNvbG9yID09IFJlbmRlclN0eWxlOjpjdXJyZW50Q29sb3IoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghb3V0bGluZS5pc1Zpc2libGUoKSAmJiAhb3RoZXIu
b3V0bGluZS5pc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGN1cnJl
bnRDb2xvckRpZmZlcnMgJiYgb3V0bGluZS5jb2xvcigpID09IFJlbmRlclN0eWxlOjpjdXJyZW50
Q29sb3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBvdXRsaW5lID09IG90
aGVyLm91dGxpbmU7Ci19Ci0KIHZvaWQgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6ZHVtcChUZXh0U3Ry
ZWFtJiB0cywgRHVtcFN0eWxlVmFsdWVzIGJlaGF2aW9yKSBjb25zdAogewogICAgIGlmIChiZWhh
dmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFsbCB8fCAqYmFja2dyb3VuZCAhPSBGaWxsTGF5ZXI6
OmNyZWF0ZShGaWxsTGF5ZXJUeXBlOjpCYWNrZ3JvdW5kKS5nZXQoKSkKICAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJiYWNrZ3JvdW5kLWltYWdlIiwgYmFja2dyb3VuZCk7Ci0gICAgaWYgKGJlaGF2
aW9yID09IER1bXBTdHlsZVZhbHVlczo6QWxsIHx8IGNvbG9yICE9IFJlbmRlclN0eWxlOjppbml0
aWFsQmFja2dyb3VuZENvbG9yKCkpCisgICAgaWYgKGJlaGF2aW9yID09IER1bXBTdHlsZVZhbHVl
czo6QWxsIHx8ICFjb2xvci5pc0N1cnJlbnRDb2xvcigpKQogICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImJhY2tncm91bmQtY29sb3IiLCBjb2xvcik7CiAgICAgaWYgKGJlaGF2aW9yID09IER1bXBT
dHlsZVZhbHVlczo6QWxsIHx8IG91dGxpbmUgIT0gT3V0bGluZVZhbHVlKCkpCiAgICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSgib3V0bGluZSIsIG91dGxpbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmgKaW5kZXggN2YzYmNjZDky
N2JlLi4wZjU2ZmI0NDAwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaApAQCAtMjQsOSArMjQsOSBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsbExheWVyLmgiCiAjaW5j
bHVkZSAiT3V0bGluZVZhbHVlLmgiCisjaW5jbHVkZSAiU3R5bGVDb2xvci5oIgogI2luY2x1ZGUg
PHd0Zi9EYXRhUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmLmg+CkBAIC00MSwxMCArNDEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEmKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOyB9CiAKLSAgICBib29sIGlzRXF1aXZhbGVudEZvclBhaW50aW5nKGNvbnN0IFN0
eWxlQmFja2dyb3VuZERhdGEmLCBib29sIGN1cnJlbnRDb2xvckRpZmZlcnMpIGNvbnN0OwotCiAg
ICAgRGF0YVJlZjxGaWxsTGF5ZXI+IGJhY2tncm91bmQ7Ci0gICAgQ29sb3IgY29sb3I7CisgICAg
U3R5bGVDb2xvciBjb2xvcjsKICAgICBPdXRsaW5lVmFsdWUgb3V0bGluZTsKIAogICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiwgRHVtcFN0eWxlVmFsdWVzID0gRHVtcFN0eWxlVmFsdWVzOjpBbGwp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
SW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5o
ZXJpdGVkRGF0YS5oCmluZGV4IDVjN2YzOTM4M2ZmMi4uMDViMjVjZTBjZjg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5oCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRl
bm5pc0BnbWFpbC5jb20pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsOSArMjQsOSBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNp
bmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlICJTdHlsZUNvbG9yLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIEZvbnRD
YXNjYWRlIGZvbnRDYXNjYWRlOwotICAgIENvbG9yIGNvbG9yOwotICAgIENvbG9yIHZpc2l0ZWRM
aW5rQ29sb3I7CisgICAgU3R5bGVDb2xvciBjb2xvcjsKKyAgICBTdHlsZUNvbG9yIHZpc2l0ZWRM
aW5rQ29sb3I7CiAKIHByaXZhdGU6CiAgICAgU3R5bGVJbmhlcml0ZWREYXRhKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVLZXl3b3JkQ29sb3JSZXNv
bHZlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlS2V5d29yZENvbG9y
UmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM4YTQz
NjgyM2I2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUtleXdvcmRDb2xvclJlc29sdmVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOwor
CitlbnVtIENTU1Byb3BlcnR5SUQgOiB1aW50MTZfdDsKK2VudW0gQ1NTVmFsdWVJRCA6IHVpbnQx
Nl90OworCitjbGFzcyBTdHlsZUtleXdvcmRDb2xvclJlc29sdmVyIHsKK3B1YmxpYzoKKyAgICBT
dHlsZUtleXdvcmRDb2xvclJlc29sdmVyKGNvbnN0IFJlbmRlclN0eWxlJiwgQ1NTUHJvcGVydHlJ
RCwgYm9vbCBpblZpc2l0ZWRMaW5rKTsKKyAgICBDb2xvciByZXNvbHZlS2V5d29yZENvbG9yKENT
U1ZhbHVlSUQpIGNvbnN0OworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9zdHls
ZTsKKyAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcGVydHk7CisgICAgYm9vbCBtX2luVmlzaXRlZExp
bms7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVNdWx0aUNvbERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZU11bHRpQ29sRGF0YS5oCmluZGV4IGVjZDQ0ZmQ3NjU5ZS4uZjk3YzUyNTRjMzhhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuaApA
QCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5k
ZW5uaXNAZ21haWwuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgog
ICAgIGZsb2F0IHdpZHRoIHsgMCB9OwogICAgIHVuc2lnbmVkIHNob3J0IGNvdW50OwogICAgIEJv
cmRlclZhbHVlIHJ1bGU7Ci0gICAgQ29sb3IgdmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3I7Cisg
ICAgU3R5bGVDb2xvciB2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvcjsKIAogICAgIGJvb2wgYXV0
b1dpZHRoIDogMTsKICAgICBib29sIGF1dG9Db3VudCA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuaAppbmRleCBj
ZDIyZDg4OTc2MGEuLjlhZTU3ZWQwZTlmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5oCkBAIC0yLDcgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdy
YWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDkgKzI0LDkgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiU3R5bGVDb2xvci5o
IgogI2luY2x1ZGUgIlN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmgiCiAjaW5jbHVkZSAiVGFiU2l6
ZS5oIgogI2luY2x1ZGUgIlRleHRVbmRlcmxpbmVPZmZzZXQuaCIKQEAgLTc2LDE4ICs3NiwxOCBA
QCBwdWJsaWM6CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxpc3RTdHlsZUltYWdlOwogICAgIEF0
b21TdHJpbmcgbGlzdFN0eWxlU3RyaW5nVmFsdWU7CiAKLSAgICBDb2xvciB0ZXh0U3Ryb2tlQ29s
b3I7Ci0gICAgQ29sb3IgdGV4dEZpbGxDb2xvcjsKLSAgICBDb2xvciB0ZXh0RW1waGFzaXNDb2xv
cjsKKyAgICBTdHlsZUNvbG9yIHRleHRTdHJva2VDb2xvcjsKKyAgICBTdHlsZUNvbG9yIHRleHRG
aWxsQ29sb3I7CisgICAgU3R5bGVDb2xvciB0ZXh0RW1waGFzaXNDb2xvcjsKICAgICAKLSAgICBD
b2xvciB2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVkTGlua1Rl
eHRGaWxsQ29sb3I7Ci0gICAgQ29sb3IgdmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvcjsKKyAg
ICBTdHlsZUNvbG9yIHZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yOworICAgIFN0eWxlQ29sb3Ig
dmlzaXRlZExpbmtUZXh0RmlsbENvbG9yOworICAgIFN0eWxlQ29sb3IgdmlzaXRlZExpbmtUZXh0
RW1waGFzaXNDb2xvcjsKIAotICAgIENvbG9yIGNhcmV0Q29sb3I7Ci0gICAgQ29sb3IgdmlzaXRl
ZExpbmtDYXJldENvbG9yOworICAgIFN0eWxlQ29sb3IgY2FyZXRDb2xvcjsKKyAgICBTdHlsZUNv
bG9yIHZpc2l0ZWRMaW5rQ2FyZXRDb2xvcjsKIAotICAgIENvbG9yIGFjY2VudENvbG9yOworICAg
IFN0eWxlQ29sb3IgYWNjZW50Q29sb3I7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0
YT4gdGV4dFNoYWRvdzsKICAgICAKQEAgLTE3Miw4ICsxNzIsOCBAQCBwdWJsaWM6CiAgICAgT3B0
aW9uU2V0PEV2ZW50TGlzdGVuZXJSZWdpb25UeXBlPiBldmVudExpc3RlbmVyUmVnaW9uVHlwZXM7
CiAKICAgICBMZW5ndGggc3Ryb2tlV2lkdGg7Ci0gICAgQ29sb3Igc3Ryb2tlQ29sb3I7Ci0gICAg
Q29sb3IgdmlzaXRlZExpbmtTdHJva2VDb2xvcjsKKyAgICBTdHlsZUNvbG9yIHN0cm9rZUNvbG9y
OworICAgIFN0eWxlQ29sb3IgdmlzaXRlZExpbmtTdHJva2VDb2xvcjsKIAogICAgIEF0b21TdHJp
bmcgaHlwaGVuYXRpb25TdHJpbmc7CiAgICAgc2hvcnQgaHlwaGVuYXRpb25MaW1pdEJlZm9yZSB7
IC0xIH07CkBAIC0yMDAsNyArMjAwLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgIENvbG9yIHRhcEhpZ2hsaWdodENvbG9yOworICAgIFN0eWxlQ29s
b3IgdGFwSGlnaGxpZ2h0Q29sb3I7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YS5oCmluZGV4IGZlYmNhMjkwODI5YS4uZDMwODFiZDhhZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
LmgKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFo
YW0uZGVubmlzQGdtYWlsLmNvbSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xNzUsMTQgKzE3NSwxNCBAQCBw
dWJsaWM6CiAKICAgICBSZWZQdHI8UGF0aE9wZXJhdGlvbj4gY2xpcFBhdGg7CiAKLSAgICBDb2xv
ciB0ZXh0RGVjb3JhdGlvbkNvbG9yOwotICAgIENvbG9yIHZpc2l0ZWRMaW5rVGV4dERlY29yYXRp
b25Db2xvcjsKLSAgICBDb2xvciB2aXNpdGVkTGlua0JhY2tncm91bmRDb2xvcjsKLSAgICBDb2xv
ciB2aXNpdGVkTGlua091dGxpbmVDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVkTGlua0JvcmRlckxl
ZnRDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3I7Ci0gICAgQ29s
b3IgdmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvcjsKLSAgICBDb2xvciB2aXNpdGVkTGlua0JvcmRl
ckJvdHRvbUNvbG9yOworICAgIFN0eWxlQ29sb3IgdGV4dERlY29yYXRpb25Db2xvcjsKKyAgICBT
dHlsZUNvbG9yIHZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvcjsKKyAgICBTdHlsZUNvbG9y
IHZpc2l0ZWRMaW5rQmFja2dyb3VuZENvbG9yOworICAgIFN0eWxlQ29sb3IgdmlzaXRlZExpbmtP
dXRsaW5lQ29sb3I7CisgICAgU3R5bGVDb2xvciB2aXNpdGVkTGlua0JvcmRlckxlZnRDb2xvcjsK
KyAgICBTdHlsZUNvbG9yIHZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvcjsKKyAgICBTdHlsZUNv
bG9yIHZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3I7CisgICAgU3R5bGVDb2xvciB2aXNpdGVkTGlu
a0JvcmRlckJvdHRvbUNvbG9yOwogCiAgICAgU3R5bGVDb250ZW50QWxpZ25tZW50RGF0YSBhbGln
bkNvbnRlbnQ7CiAgICAgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBhbGlnbkl0ZW1zOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAppbmRl
eCBiZWI2YWYzMDc2MmMuLjc5NjFmZWUxMzJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKQEAgLTQ3LDggKzQ3LDkgQEAgc3Rh
dGljIGlubGluZSBib29sIGluaGVyaXRDb2xvckZyb21QYXJlbnRTdHlsZUlmTmVlZGVkKFJlbmRl
ckVsZW1lbnQmIG9iamVjdCwgYm8KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFvYmpl
Y3QucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSYgcGFyZW50U1ZHU3R5bGUgPSBvYmplY3QucGFyZW50KCktPnN0eWxlKCkuc3ZnU3R5bGUo
KTsKLSAgICBjb2xvciA9IGFwcGx5VG9GaWxsID8gcGFyZW50U1ZHU3R5bGUuZmlsbFBhaW50Q29s
b3IoKSA6IHBhcmVudFNWR1N0eWxlLnN0cm9rZVBhaW50Q29sb3IoKTsKKyAgICBhdXRvJiBwYXJl
bnRTdHlsZSA9IG9iamVjdC5wYXJlbnQoKS0+c3R5bGUoKTsKKyAgICBhdXRvJiBwYXJlbnRTVkdT
dHlsZSA9IHBhcmVudFN0eWxlLnN2Z1N0eWxlKCk7CisgICAgY29sb3IgPSBwYXJlbnRTdHlsZS5y
ZXNvbHZlZENvbG9yKGFwcGx5VG9GaWxsID8gcGFyZW50U1ZHU3R5bGUuZmlsbFBhaW50Q29sb3Io
KSA6IHBhcmVudFNWR1N0eWxlLnN0cm9rZVBhaW50Q29sb3IoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTg1LDcgKzg2LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZSog
cmVxdWVzdFBhaW50aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIG0KICAgICBjYXNl
IFNWR1BhaW50VHlwZTo6UkdCQ29sb3I6CiAgICAgY2FzZSBTVkdQYWludFR5cGU6OlVSSUN1cnJl
bnRDb2xvcjoKICAgICBjYXNlIFNWR1BhaW50VHlwZTo6VVJJUkdCQ29sb3I6Ci0gICAgICAgIGNv
bG9yID0gYXBwbHlUb0ZpbGwgPyBzdmdTdHlsZS5maWxsUGFpbnRDb2xvcigpIDogc3ZnU3R5bGUu
c3Ryb2tlUGFpbnRDb2xvcigpOworICAgICAgICBjb2xvciA9IHN0eWxlLnJlc29sdmVkQ29sb3Io
YXBwbHlUb0ZpbGwgPyBzdmdTdHlsZS5maWxsUGFpbnRDb2xvcigpIDogc3ZnU3R5bGUuc3Ryb2tl
UGFpbnRDb2xvcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CkBAIC05NiwxMSArOTcsOCBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlKiBy
ZXF1ZXN0UGFpbnRpbmdSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZU1vZGUgbQogICAgICAgICBT
VkdQYWludFR5cGUgdmlzaXRlZFBhaW50VHlwZSA9IGFwcGx5VG9GaWxsID8gc3ZnU3R5bGUudmlz
aXRlZExpbmtGaWxsUGFpbnRUeXBlKCkgOiBzdmdTdHlsZS52aXNpdGVkTGlua1N0cm9rZVBhaW50
VHlwZSgpOwogCiAgICAgICAgIC8vIEZvciBTVkdQYWludFR5cGU6OkN1cnJlbnRDb2xvciwgJ2Nv
bG9yJyBhbHJlYWR5IGNvbnRhaW5zIHRoZSAndmlzaXRlZENvbG9yJy4KLSAgICAgICAgaWYgKHZp
c2l0ZWRQYWludFR5cGUgPCBTVkdQYWludFR5cGU6OlVSSU5vbmUgJiYgdmlzaXRlZFBhaW50VHlw
ZSAhPSBTVkdQYWludFR5cGU6OkN1cnJlbnRDb2xvcikgewotICAgICAgICAgICAgY29uc3QgQ29s
b3ImIHZpc2l0ZWRDb2xvciA9IGFwcGx5VG9GaWxsID8gc3ZnU3R5bGUudmlzaXRlZExpbmtGaWxs
UGFpbnRDb2xvcigpIDogc3ZnU3R5bGUudmlzaXRlZExpbmtTdHJva2VQYWludENvbG9yKCk7Ci0g
ICAgICAgICAgICBpZiAodmlzaXRlZENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBj
b2xvciA9IHZpc2l0ZWRDb2xvci5jb2xvcldpdGhBbHBoYShjb2xvci5hbHBoYUFzRmxvYXQoKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHZpc2l0ZWRQYWludFR5cGUgPCBTVkdQYWludFR5cGU6
OlVSSU5vbmUgJiYgdmlzaXRlZFBhaW50VHlwZSAhPSBTVkdQYWludFR5cGU6OkN1cnJlbnRDb2xv
cikKKyAgICAgICAgICAgIGNvbG9yID0gc3R5bGUucmVzb2x2ZWRDb2xvcihhcHBseVRvRmlsbCA/
IHN2Z1N0eWxlLnZpc2l0ZWRMaW5rRmlsbFBhaW50Q29sb3IoKSA6IHN2Z1N0eWxlLnZpc2l0ZWRM
aW5rU3Ryb2tlUGFpbnRDb2xvcigpKS5jb2xvcldpdGhBbHBoYShjb2xvci5hbHBoYUFzRmxvYXQo
KSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIHByaW1hcnkgcmVzb3VyY2UgaXMganVzdCBhIGNv
bG9yLCByZXR1cm4gaW1tZWRpYXRlbHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCmluZGV4IDA0M2I4MGQwZmQ5OC4uYTQzMmVkMGE1ZmQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtNzg3LDcgKzc4Nyw3IEBAIGlubGlu
ZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENhcmV0Q29sb3IoQnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiAKIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dENhcmV0Q29sb3IoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgQ29sb3IgY29s
b3IgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5jYXJldENvbG9yKCk7CisgICAgYXV0byBj
b2xvciA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmNhcmV0Q29sb3IoKTsKICAgICBpZiAo
YnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKSB7CiAgICAgICAgIGlm
IChidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5oYXNBdXRvQ2FyZXRDb2xvcigpKQogICAgICAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzQXV0b0NhcmV0Q29sb3IoKTsKQEAgLTky
OSwxMyArOTI5LDEzIEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VGV4dE9yQm94
U2hhZG93VmFsdWUoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsCiAgICAgICAgIGF1dG8gYmx1
ciA9IHNoYWRvd1ZhbHVlLmJsdXIgPyBzaGFkb3dWYWx1ZS5ibHVyLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oY29udmVyc2lvbkRhdGEpIDogTGVuZ3RoKDAsIExlbmd0aFR5cGU6OkZpeGVkKTsKICAg
ICAgICAgYXV0byBzcHJlYWQgPSBzaGFkb3dWYWx1ZS5zcHJlYWQgPyBzaGFkb3dWYWx1ZS5zcHJl
YWQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSkgOiBMZW5ndGgoMCwgTGVu
Z3RoVHlwZTo6Rml4ZWQpOwogICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IHNoYWRv
d1ZhbHVlLnN0eWxlICYmIHNoYWRvd1ZhbHVlLnN0eWxlLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVJ
bnNldCA/IFNoYWRvd1N0eWxlOjpJbnNldCA6IFNoYWRvd1N0eWxlOjpOb3JtYWw7Ci0gICAgICAg
IENvbG9yIGNvbG9yOworICAgICAgICBTdHlsZUNvbG9yIGNvbG9yOwogICAgICAgICBpZiAoc2hh
ZG93VmFsdWUuY29sb3IpCiAgICAgICAgICAgICBjb2xvciA9IGJ1aWxkZXJTdGF0ZS5jb2xvckZy
b21QcmltaXRpdmVWYWx1ZVdpdGhSZXNvbHZlZEN1cnJlbnRDb2xvcigqc2hhZG93VmFsdWUuY29s
b3IpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2xvciA9IGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLmNvbG9yKCk7CiAKLSAgICAgICAgYXV0byBzaGFkb3dEYXRhID0gbWFrZVVuaXF1ZTxTaGFk
b3dEYXRhPihMZW5ndGhQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgcHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNv
bG9yIDogQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBhdXRvIHNoYWRvd0RhdGEg
PSBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KExlbmd0aFBvaW50KHgsIHkpLCBibHVyLCBzcHJlYWQs
IHNoYWRvd1N0eWxlLCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29s
b3IpOwogICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQogICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dFNoYWRvdyhXVEZNb3ZlKHNoYWRv
d0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90
IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICBlbHNlCkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBpbmxp
bmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRmlsbChCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVmFsdWUmCiAgICAgaWYgKCFsb2NhbFZhbHVlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBDb2xvciBjb2xvcjsKKyAgICBTdHlsZUNvbG9yIGNvbG9yOwogICAgIGF1dG8gcGFp
bnRUeXBlID0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcjsKICAgICBpZiAobG9jYWxWYWx1ZS0+aXNV
UkkoKSkgewogICAgICAgICBwYWludFR5cGUgPSBTVkdQYWludFR5cGU6OlVSSTsKQEAgLTE1MTYs
NyArMTUxNiw3IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2Uo
QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlCiAgICAgaWYgKCFsb2NhbFZhbHVl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBDb2xvciBjb2xvcjsKKyAgICBTdHlsZUNvbG9yIGNv
bG9yOwogICAgIGF1dG8gcGFpbnRUeXBlID0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcjsKICAgICBp
ZiAobG9jYWxWYWx1ZS0+aXNVUkkoKSkgewogICAgICAgICBwYWludFR5cGUgPSBTVkdQYWludFR5
cGU6OlVSSTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAppbmRl
eCBhMzczMDhlYjMzZDQuLmNkNzNlYzEzZDlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlclN0YXRlLmNwcApAQCAtMjYzLDkgKzI2Myw5IEBAIGJvb2wgQnVpbGRlclN0YXRl
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJP
cGVyYXRpCiAgICAgICAgICAgICBpbnQgeSA9IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlv
bih4LCB5KTsKICAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5j
b21wdXRlTGVuZ3RoPGludD4oY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7Ci0gICAg
ICAgICAgICBhdXRvIGNvbG9yID0gaXRlbS5jb2xvciA/IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
V2l0aFJlc29sdmVkQ3VycmVudENvbG9yKCppdGVtLmNvbG9yKSA6IG1fc3R5bGUuY29sb3IoKTsK
KyAgICAgICAgICAgIGF1dG8gY29sb3IgPSBpdGVtLmNvbG9yID8gY29sb3JGcm9tUHJpbWl0aXZl
VmFsdWVXaXRoUmVzb2x2ZWRDdXJyZW50Q29sb3IoKml0ZW0uY29sb3IpIDogbV9zdHlsZS5yZXNv
bHZlZENvbG9yKG1fc3R5bGUuY29sb3IoKSk7CiAKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRp
b24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2spKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtMjkxLDcgKzI5
MSw3IEBAIGJvb2wgQnVpbGRlclN0YXRlOjppc0NvbG9yRnJvbVByaW1pdGl2ZVZhbHVlRGVyaXZl
ZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2CiAgICAgfQogfQogCi1Db2xvciBCdWlsZGVy
U3RhdGU6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2
YWx1ZSwgRm9yVmlzaXRlZExpbmsgZm9yVmlzaXRlZExpbmspIGNvbnN0CitTdHlsZUNvbG9yIEJ1
aWxkZXJTdGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFs
dWUmIHZhbHVlLCBGb3JWaXNpdGVkTGluayBmb3JWaXNpdGVkTGluaykgY29uc3QKIHsKICAgICBp
ZiAodmFsdWUuaXNSR0JDb2xvcigpKQogICAgICAgICByZXR1cm4gdmFsdWUuY29sb3IoKTsKQEAg
LTMyMCwxMCArMzIwLDEwIEBAIENvbG9yIEJ1aWxkZXJTdGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZl
VmFsdWVXaXRoUmVzb2x2ZWRDdXJyZW50Q29sb3IoY29uc3QgQ1NTUHJpCiAgICAgICAgIC8vIENv
bG9yIGlzIGFuIGluaGVyaXRlZCBwcm9wZXJ0eSBzbyBkZXBlbmRpbmcgb24gaXQgZWZmZWN0aXZl
bHkgbWFrZXMgdGhlIHByb3BlcnR5IGluaGVyaXRlZC4KICAgICAgICAgbV9zdHlsZS5zZXRIYXNF
eHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwogICAgICAgICBtX3N0eWxlLnNldERpc2Fs
bG93c0Zhc3RQYXRoSW5oZXJpdGFuY2UoKTsKLSAgICAgICAgcmV0dXJuIG1fc3R5bGUuY29sb3Io
KTsKKyAgICAgICAgcmV0dXJuIG1fc3R5bGUucmVzb2x2ZWRDb2xvcihtX3N0eWxlLmNvbG9yKCkp
OwogICAgIH0KIAotICAgIHJldHVybiBjb2xvckZyb21QcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Cisg
ICAgcmV0dXJuIG1fc3R5bGUucmVzb2x2ZWRDb2xvcihjb2xvckZyb21QcmltaXRpdmVWYWx1ZSh2
YWx1ZSkpOwogfQogCiB2b2lkIEJ1aWxkZXJTdGF0ZTo6cmVnaXN0ZXJDb250ZW50QXR0cmlidXRl
KGNvbnN0IEF0b21TdHJpbmcmIGF0dHJpYnV0ZUxvY2FsTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCmluZGV4IDIxNzU3YzA3MDEyYS4uZmMyYmRkZDI2YTljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKQEAgLTk3LDcgKzk3LDcg
QEAgcHVibGljOgogICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1
ZSYsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogCiAgICAgc3RhdGljIGJvb2wg
aXNDb2xvckZyb21QcmltaXRpdmVWYWx1ZURlcml2ZWRGcm9tRWxlbWVudChjb25zdCBDU1NQcmlt
aXRpdmVWYWx1ZSYpOwotICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENT
U1ByaW1pdGl2ZVZhbHVlJiwgRm9yVmlzaXRlZExpbmsgPSBGb3JWaXNpdGVkTGluazo6Tm8pIGNv
bnN0OworICAgIFN0eWxlQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmLCBGb3JWaXNpdGVkTGluayA9IEZvclZpc2l0ZWRMaW5rOjpObykgY29uc3Q7
CiAgICAgLy8gRklYTUU6IFJlbW92ZS4gJ2N1cnJlbnRjb2xvcicgc2hvdWxkIGJlIHJlc29sdmVk
IGF0IHVzZSB0aW1lLiBBbGwgY2FsbCBzaXRlcyBhcmUgYnJva2VuIHdpdGggaW5oZXJpdGFuY2Uu
CiAgICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWVXaXRoUmVzb2x2ZWRDdXJyZW50Q29s
b3IoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCmluZGV4IDFlYTVjYWFlODA1OS4u
YTNjNjI5M2RiMjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuY3BwCkBAIC03MCw2ICs3MCw5IEBAIFJlbmRlclN0eWxlIHJlc29sdmVGb3JE
b2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50U3R5bGUu
c2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50KE5vVGV4dFNpemVBZGp1c3RtZW50
KSk7CiAjZW5kaWYKIAorICAgIC8vIEZJWE1FOiBOZWVkIHRvIHNldCB0aGUgZmxhZ3MgZm9yIHN5
c3RlbSBjb2xvcnMgaGVyZTogdXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNlRWxldmF0ZWRVc2VySW50
ZXJmYWNlTGV2ZWwsIGFuZCB1c2VEYXJrQXBwZWFyYW5jZS4KKyAgICAvLyBGSVhNRTogVGhlIHVz
ZURhcmtBcHBlYXJhbmNlIGZsYWcgaXNuJ3Qgc3VmZmljaWVudCB0byBleHByZXNzIGFsbCB0aGUg
Y29tYmluYXRpb25zIG9mIGNvbG9yLXNjaGVtZTsgc2Vjb25kIGJpdCBsaWtlbHkgaXMgZW5vdWdo
LgorCiAgICAgQWRqdXN0ZXI6OmFkanVzdEV2ZW50TGlzdGVuZXJSZWdpb25UeXBlc0ZvclJvb3RT
dHlsZShkb2N1bWVudFN0eWxlLCBkb2N1bWVudCk7CiAKICAgICBFbGVtZW50KiBkb2NFbGVtZW50
ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDhjNGIyODQyZGYzMy4uODUx
ZjdhNWFiYjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcApAQCAtODYsNyArODYsNyBAQCBib29sIFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCYgZWZmZWN0
LAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7CiAg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAg
ICBBU1NFUlQocmVuZGVyZXIpOwotICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHls
ZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxl
KCkubGlnaHRpbmdDb2xvcigpKTsKKyAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5
bGUoKS5yZXNvbHZlZENvbG9yQXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5z
dmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAgICAgICAgIHJldHVybiBmZURpZmZ1c2VMaWdo
dGluZy5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQpAQCAtMTYxLDcgKzE2MSw3IEBAIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6Y3JlYXRlRmlsdGVyRWZm
ZWN0KGNvbnN0IEZpbHRlCiAKICAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5s
aWdodFNvdXJjZSgpOwogCi0gICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xv
ckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0
aW5nQ29sb3IoKSk7CisgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNvbHZl
ZENvbG9yQXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxp
Z2h0aW5nQ29sb3IoKSk7CiAKICAgICByZXR1cm4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShj
b2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3Ro
WCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggNWZiMDRk
YTE0YzZmLi43MDk3YzQyNzYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURyb3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCBib29sIFNWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QmIGVmZmVjdCwg
Y29ucwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwog
CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmbG9vZF9jb2xvckF0dHIpCi0gICAgICAg
IHJldHVybiBmZURyb3BTaGFkb3cuc2V0U2hhZG93Q29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9v
ZENvbG9yKCkpOworICAgICAgICByZXR1cm4gZmVEcm9wU2hhZG93LnNldFNoYWRvd0NvbG9yKHN0
eWxlLnJlc29sdmVkQ29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpKTsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKQogICAgICAgICByZXR1
cm4gZmVEcm9wU2hhZG93LnNldFNoYWRvd09wYWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9w
YWNpdHkoKSk7CiAKQEAgLTE1OSw3ICsxNTksNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RURyb3BTaGFkb3dFbGVtZW50OjpjcmVhdGVGaWx0ZXJFZmZlY3QoY29uc3QgRmlsdGVyRWZmZQog
CiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gcmVuZGVyZXItPnN0eWxlKCku
c3ZnU3R5bGUoKTsKICAgICAKLSAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNv
bG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7CisgICAgQ29s
b3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNvbHZlZENvbG9yQXBwbHlpbmdDb2xvckZp
bHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHls
ZS5mbG9vZE9wYWNpdHkoKTsKIAogICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGRE
ZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKaW5kZXggMDFiZTI0Yjg4
NGFlLi4wYWMzOTE3MTUxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZs
b29kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmNwcApAQCAtNTEsNyArNTEsNyBAQCBib29sIFNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YQogCiAgICAgYXV0
byYgZmVGbG9vZCA9IGRvd25jYXN0PEZFRmxvb2Q+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpmbG9vZF9jb2xvckF0dHIpCi0gICAgICAgIHJldHVybiBmZUZsb29kLnNl
dEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOworICAgICAgICByZXR1
cm4gZmVGbG9vZC5zZXRGbG9vZENvbG9yKHN0eWxlLnJlc29sdmVkQ29sb3Ioc3R5bGUuc3ZnU3R5
bGUoKS5mbG9vZENvbG9yKCkpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29k
X29wYWNpdHlBdHRyKQogICAgICAgICByZXR1cm4gZmVGbG9vZC5zZXRGbG9vZE9wYWNpdHkoc3R5
bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSk7CiAKQEAgLTY3LDcgKzY3LDcgQEAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmNyZWF0ZUZpbHRlckVmZmVjdChjb25z
dCBGaWx0ZXJFZmZlY3RWZWMKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9
IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAKLSAgICBDb2xvciBjb2xvciA9IHJlbmRl
cmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29s
b3IoKSk7CisgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNvbHZlZENvbG9y
QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9w
YWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAogICAgIHJldHVybiBGRUZsb29kOjpj
cmVhdGUoY29sb3IsIG9wYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDNkNDhjNDk4NTkzYi4uNzY4NWQ0ZTQ1
OGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCYgZWZmZWN0CiAg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgICAgIEFT
U0VSVChyZW5kZXJlcik7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCku
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5s
aWdodGluZ0NvbG9yKCkpOworICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgp
LnJlc29sdmVkQ29sb3JBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0
eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKICAgICAgICAgcmV0dXJuIGZlU3BlY3VsYXJMaWdodGlu
Zy5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQpAQCAtMTcwLDcgKzE3MCw3IEBAIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmNyZWF0ZUZpbHRlckVmZmVj
dChjb25zdCBGaWx0CiAKICAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdo
dFNvdXJjZSgpOwogCi0gICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5n
Q29sb3IoKSk7CisgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNvbHZlZENv
bG9yQXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0
aW5nQ29sb3IoKSk7CiAKICAgICByZXR1cm4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29s
b3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhwb25lbnQo
KSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdo
dFNvdXJjZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKaW5kZXggN2Zm
OWI5NDM0NmU1Li5iN2ExZmYzNGRkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdG9wRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50
LmNwcApAQCAtOTEsNyArOTEsNyBAQCBDb2xvciBTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSgpIGNvbnN0CiAKICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0
eWxlKCk7CiAgICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOwotICAgIGF1dG8g
c3RvcENvbG9yID0gc3R5bGUuY29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3Ioc3ZnU3R5bGUuc3Rv
cENvbG9yKCkpOworICAgIGF1dG8gc3RvcENvbG9yID0gc3R5bGUucmVzb2x2ZWRDb2xvcihzdmdT
dHlsZS5zdG9wQ29sb3IoKSk7CiAKICAgICByZXR1cm4gc3RvcENvbG9yLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KHN2Z1N0eWxlLnN0b3BPcGFjaXR5KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCmluZGV4IDhkMGU3NmUxZmM1Ni4uMDhmY2Q3M2Q1OGU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC02MjYzLDcgKzYyNjMsNyBAQCBTdHJpbmcg
SW50ZXJuYWxzOjpoaWdobGlnaHRQc2V1ZG9FbGVtZW50Q29sb3IoY29uc3QgQXRvbVN0cmluZyYg
aGlnaGxpZ2h0TmFtZSwgRQogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICByZXR1cm4gc2VyaWFsaXphdGlvbkZvckNTUyhzdHlsZS0+Y29sb3IoKSk7CisgICAgcmV0
dXJuIHNlcmlhbGl6YXRpb25Gb3JDU1Moc3R5bGUtPnJlc29sdmVkQ29sb3Ioc3R5bGUtPmNvbG9y
KCkpKTsKIH0KICAgICAKIEludGVybmFsczo6VGV4dEluZGljYXRvckluZm86OlRleHRJbmRpY2F0
b3JJbmZvKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b2xvclRlc3RzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRl
c3RzLmNwcAppbmRleCAxNDdhOTk0NTI1NzUuLmQzMWUyNTgwNWQwMCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcApAQCAtNDgsNyArNDgs
NyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHNsYUNvbG9yLnNhdHVyYXRpb24pOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogICAgIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3Mo
KSAqIDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmRlcHJlY2F0ZWRMaWdodG5lc3MoKSAqIDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAg
CiAgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90
Pj4oaHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsK
QEAgLTY0LDcgKzY0LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5kZXByZWNhdGVkTGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5lc3Mp
OwogCiAgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50
OF90Pj4oaHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9y
KTsKQEAgLTgwLDcgKzgwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogICAgIEVYUEVD
VF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKICAgICBFWFBFQ1RfRkxPQVRf
RVEoNTAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpICogMTAwLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IuZGVwcmVjYXRlZExpZ2h0bmVzcygpICogMTAwLCBoc2xhQ29sb3IubGlnaHRu
ZXNzKTsKIAogICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8
dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRD
b2xvcik7CkBAIC05Niw3ICs5Niw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoNTAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KGNvbG9yLmxpZ2h0bmVzcygpICogMTAwLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoY29sb3IuZGVwcmVjYXRlZExpZ2h0bmVzcygpICogMTAwLCBoc2xhQ29sb3Iu
bGlnaHRuZXNzKTsKIAogICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0Q29sb3I8
U1JHQkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRy
aXBwZWRDb2xvcik7CkBAIC0xMTIsNyArMTEyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1
ZSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoMTAwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CiAgICAg
RVhQRUNUX0ZMT0FUX0VRKDUwLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9G
TE9BVF9FUShjb2xvci5saWdodG5lc3MoKSAqIDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmRlcHJlY2F0ZWRMaWdodG5lc3MoKSAqIDEwMCwgaHNs
YUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVy
dENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xvciwg
cm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0RhcmtHcmF5KQogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDUwLjE5NjA4MywgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7
CiAgICAgCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpICogMTAwLCBoc2xh
Q29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IuZGVwcmVjYXRlZExp
Z2h0bmVzcygpICogMTAwLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAogICAgIGF1dG8gcm91bmRU
cmlwcGVkQ29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAg
ICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CkBAIC0xNDQsNyArMTQ0LDcg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwogICAgIEVYUEVDVF9GTE9BVF9FUSg2Mi43NDUxMDIsIGhzbGFD
b2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygp
ICogMTAwLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
ZGVwcmVjYXRlZExpZ2h0bmVzcygpICogMTAwLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAogICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KGhz
bGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CkBAIC0x
NjAsNyArMTYwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogICAgIEVYUEVD
VF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDc1LjI5NDEyMSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5lc3MpOworICAgIEVYUEVD
VF9GTE9BVF9FUShjb2xvci5kZXByZWNhdGVkTGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5s
aWdodG5lc3MpOwogCiAgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxT
UkdCQTx1aW50OF90Pj4oaHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJp
cHBlZENvbG9yKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>