<?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>111779</bug_id>
          
          <creation_ts>2013-03-07 15:15:11 -0800</creation_ts>
          <short_desc>Rename Mac&apos;s TileCache to TileController, and WebTileCacheLayer to WebTiledBackingLayer</short_desc>
          <delta_ts>2013-03-07 15:56:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>850520</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-07 15:15:11 -0800</bug_when>
    <thetext>Rename Mac&apos;s TileCache to TileController, and WebTileCacheLayer to WebTiledBackingLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850524</commentid>
    <comment_count>1</comment_count>
      <attachid>192091</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-07 15:19:50 -0800</bug_when>
    <thetext>Created attachment 192091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850527</commentid>
    <comment_count>2</comment_count>
      <attachid>192091</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-03-07 15:22:20 -0800</bug_when>
    <thetext>Comment on attachment 192091
Patch

Assuming you&apos;re going to do TheRightThing (TM) when it comes to moving the files w/ SVN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850578</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-03-07 15:56:33 -0800</bug_when>
    <thetext>https://trac.webkit.org/r145148</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192091</attachid>
            <date>2013-03-07 15:19:50 -0800</date>
            <delta_ts>2013-03-07 15:22:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111779-20130307151554.patch</filename>
            <type>text/plain</type>
            <size>133710</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2JiZWRhNzExNTAyYjlm
OTg5Mzc3ZDE1OGJjMDFjNjA5MTNmODcyNC4uMDRlOTMwNGVhMzg1YzFhNGVlN2I1ODIxNzM5ZWFj
N2Y2OTNkNjVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAzLTA3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBNYWMn
cyBUaWxlQ2FjaGUgdG8gVGlsZUNvbnRyb2xsZXIsIGFuZCBXZWJUaWxlQ2FjaGVMYXllciB0byBX
ZWJUaWxlZEJhY2tpbmdMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTExNzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICAiVGlsZUNhY2hlIiB3YXMgYSBuYW1lIGNvbmZsaWN0IGluIGRv
d25zdHJlYW0gY29kZSwgc28gcmVuYW1lIGl0IHRvIFRpbGVDb250cm9sbGVyLgorICAgICAgICBU
aGUgbGF5ZXIgdGhhdCBoYXMgYSBUaWxlQ29udHJvbGxlciBpcyBub3cgYSBXZWJUaWxlZEJhY2tp
bmdMYXllciAod2hpY2ggZml0cyB3aXRoCisgICAgICAgIHRoZSBUaWxlZEJhY2tpbmcgQVBJIHRo
YXQgVGlsZUNvbnRyb2xsZXIgZXhwb3NlcykuCisgICAgICAgIAorICAgICAgICBBbHNvIHJlbmFt
ZWQgdGhlIGZsYWdzIGluIFBsYXRmb3JtQ0FMYXllciB0byBtYXRjaC4KKworICAgICAgICBSZW5h
bWUgb25seSwgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjOjpsb2dFeHBvc2VkVW5maWxsZWRBcmVhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjpHcmFwaGljc0xheWVyQ0EpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlVmlzaWJsZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6dXNlc1RpbGVDYWNoZUxheWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgor
ICAgICAgICAoUGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIpOgorICAgICAgICAoUGxh
dGZvcm1DQUxheWVyOjp+UGxhdGZvcm1DQUxheWVyKToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
cjo6dGlsZWRCYWNraW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGls
ZUNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9UaWxlQ2FjaGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGls
ZUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnNjYWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjphY2NlbGVyYXRlc0RyYXdpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnRpbGVzQXJlT3BhcXVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjp0aWxlQ29udGFpbmVyTGF5ZXIpOgorICAgICAg
ICAoVGlsZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OlRpbGVJbmZv
OjpUaWxlSW5mbyk6CisgICAgICAgIChUaWxlQ29ob3J0SW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlcjo6VGlsZUNvaG9ydEluZm86OlRpbGVDb2hvcnRJbmZvKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW06IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1t
LgorICAgICAgICAoLVtXZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyIGluaXRdKToKKyAg
ICAgICAgKC1bV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciBkcmF3SW5Db250ZXh0Ol0p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGlsZUNvbnRyb2xsZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW06CisgICAgICAgICgtW1dlYlRp
bGVMYXllciBkcmF3SW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtXZWJUaWxlTGF5ZXIgc2V0VGls
ZUNvbnRyb2xsZXI6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1dlYlRpbGVMYXllciBsb2dGaWxs
ZWRGcmVzaFRpbGVdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9XZWJUaWxlQ2FjaGVMYXllci5oLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChUaWxlZEJhY2tpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9XZWJUaWxlZEJhY2tpbmdMYXllci5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlQ2FjaGVMYXllci5tbS4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NM
YXllcik6CisKIDIwMTMtMDMtMDcgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtBQ0VdIHNldCBjb3JyZWN0IGZvbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA3Yzk5M2MyNmU5Njk2ZmEwN2E1NjRjYjAxOWMyY2RmNThlNWE1N2Q2Li45Njc5ZjYyMjk3
MjQ0NWQ2NDEzMGI1MDFlZjBiNmRjNTA0MGM0MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNjEsOCArMjYxLDggQEAKIAkJ
MEY1ODBDRkUwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQTBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCAqLzsgfTsKIAkJMEY1ODBD
RkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRkIwRjEyREU5QjAwNTFENjg5
IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNTgwRDAwMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXll
ckJhY2tpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1ODBDRkMwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5jcHAgKi87
IH07Ci0JCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlQ2FjaGVMYXllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQTExNDk2
OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVDYWNoZUxheWVyLmggKi87IH07Ci0JCTBGNTgwRkE0MTQ5
NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlQ2FjaGVMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwRkEyMTQ5NjkzOTEwMEZCNUJEOCAvKiBX
ZWJUaWxlQ2FjaGVMYXllci5tbSAqLzsgfTsKKwkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8q
IFdlYlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5n
TGF5ZXIuaCAqLzsgfTsKKwkJMEY1ODBGQTQxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFj
a2luZ0xheWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tICov
OyB9OwogCQkwRjU4MEZBRjE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBRTE0
OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QjdBNTQxMEY2NUQ3QTAwMzc2MzAy
IC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI3QTUyMTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAgKi87IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5k
ZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUx
NSw4ICs1MTUsOCBAQAogCQkxQTkyN0ZENDE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDExNDE2
QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxQTk4OTU2QjBBQTc4RjgwMDA1RUY1RUYgLyogS1VSTENGTmV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTg5
NTZBMEFBNzhGODAwMDVFRjVFRiAvKiBLVVJMQ0ZOZXQuY3BwICovOyB9OwogCQkxQUEyMTI1MDE2
M0YwREE4MDAwMEU2M0YgLyogQXRvbWljU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMjEyNEYxNjNGMERBODAwMDBFNjNGIC8qIEF0
b21pY1N0cmluZ0NGLmNwcCAqLzsgfTsKLQkJMUFBNzE2MEExNDlCQzREQjAwMTZFQzE5IC8qIFRp
bGVDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxlQ2FjaGUubW0gKi87IH07Ci0JCTFBQTcx
NjBCMTQ5QkM0REIwMDE2RUMxOSAvKiBUaWxlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTcxNjA5MTQ5QkM0REIwMDE2RUMxOSAvKiBUaWxl
Q2FjaGUuaCAqLzsgfTsKKwkJMUFBNzE2MEExNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9s
bGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFB
NzE2MDgxNDlCQzREQTAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovOyB9OworCQkxQUE3
MTYwQjE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTcxNjA5MTQ5QkM0REIwMDE2RUMxOSAv
KiBUaWxlQ29udHJvbGxlci5oICovOyB9OwogCQkxQUE3MTYxRTE0OUJGMkZBMDAxNkVDMTkgLyog
V2ViVGlsZUxheWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBNzE2MUMxNDlCRjJGQTAwMTZFQzE5IC8qIFdlYlRpbGVMYXllci5tbSAqLzsgfTsK
IAkJMUFBODRGMDQxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRG
MDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1tICovOyB9
OwogCQkxQUE4NEYwNTE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg0
RjAzMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oICovOyB9
OwpAQCAtNzU4MSw4ICs3NTgxLDggQEAKIAkJMEY1ODBDRkEwRjEyREU5QjAwNTFENjg5IC8qIFJl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyQmFja2luZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MENGQzBGMTJERTlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlckxheWVyQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
NTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlQ2FjaGVMYXllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJUaWxlQ2FjaGVMYXllci5oOyBwYXRoID0gY2EvbWFj
L1dlYlRpbGVDYWNoZUxheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTgw
RkEyMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlQ2FjaGVMYXllci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlRpbGVDYWNoZUxheWVyLm1tOyBwYXRoID0g
Y2EvbWFjL1dlYlRpbGVDYWNoZUxheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVGlsZWRCYWNraW5nTGF5ZXIuaDsgcGF0
aCA9IGNhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJUaWxlZEJhY2tp
bmdMYXllci5tbTsgcGF0aCA9IGNhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1h
dGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbmltYXRp
b25VdGlsaXRpZXMuaDsgcGF0aCA9IGFuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjdBNTIxMEY2NUQ3QTAwMzc2MzAyIC8qIFJl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckVtYmVkZGVkT2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODY4LDggKzc4NjgsOCBAQAogCQkxQTkyN0ZE
MTE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBucHR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTg5NTZB
MEFBNzhGODAwMDVFRjVFRiAvKiBLVVJMQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEtVUkxDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBQTIxMjRGMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJpbmdDRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxl
Q2FjaGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlQ2Fj
aGUubW07IHBhdGggPSBjYS9tYWMvVGlsZUNhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxQUE3MTYwOTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNhY2hlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVDYWNoZS5oOyBwYXRoID0gY2EvbWFjL1RpbGVD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUE3MTYwODE0OUJDNERBMDAx
NkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBUaWxlQ29udHJvbGxlci5tbTsgcGF0aCA9IGNhL21hYy9UaWxlQ29udHJvbGxl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFBNzE2MDkxNDlCQzREQjAwMTZF
QzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFRpbGVDb250cm9sbGVyLmg7IHBhdGggPSBjYS9tYWMvVGlsZUNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNzE2MUMxNDlCRjJGQTAwMTZFQzE5IC8qIFdlYlRp
bGVMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlRp
bGVMYXllci5tbTsgcGF0aCA9IGNhL21hYy9XZWJUaWxlTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBQTcxNjI1MTQ5QkZGQjIwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVGlsZUxheWVyLmg7IHBhdGgg
PSBjYS9tYWMvV2ViVGlsZUxheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
QTg0RjAyMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU3Miw4ICs5NTcy
LDggQEAKIAkJN0U5OUFGNTIwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZElu
ZGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaW5kb3dG
b2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
RTk5QUY1NDBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdpbmRvd0ZvY3VzQWxsb3dlZEluZGlj
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RUEzMEY2MjE2REZENjI3MDAy
NTdEMEIgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xD
b21wcmVzc2VkVGV4dHVyZUFUQy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdF
QTMwRjY3MTZERkZFNzUwMDI1N0QwQiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDLmNwcDsgcGF0aCA9IEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdFQTMwRjY4MTZERkZFNzUwMDI1N0QwQiAvKiBK
U1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmg7IHBhdGggPSBKU1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0VBMzBGNjcx
NkRGRkU3NTAwMjU3RDBCIC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3RUEzMEY2ODE2REZGRTc1MDAy
NTdEMEIgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3RUU2ODQ0QzEyRDI2RTM4MDBFNzk0MTUgLyogQXV0aGVudGlj
YXRpb25DRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRoZW50
aWNhdGlvbkNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0VFNjg0NEQxMkQy
NkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0YuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXV0aGVudGljYXRpb25DRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3RUU2ODQ0RTEyRDI2RTM4MDBFNzk0MTUgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1ODg4LDEwICsxNTg4OCwxMCBA
QAogCQkJCTkzRjcyQUYyMTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gKi8sCiAJCQkJ
NDk1ODc4MUYxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0gKi8s
CiAJCQkJNDk1ODc4MjAxMkE1N0RERjAwNzIzOEFDIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5tbSAq
LywKLQkJCQkxQUE3MTYwOTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNhY2hlLmggKi8sCi0JCQkJ
MUFBNzE2MDgxNDlCQzREQTAwMTZFQzE5IC8qIFRpbGVDYWNoZS5tbSAqLywKLQkJCQkwRjU4MEZB
MTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZUNhY2hlTGF5ZXIuaCAqLywKLQkJCQkwRjU4MEZB
MjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZUNhY2hlTGF5ZXIubW0gKi8sCisJCQkJMUFBNzE2
MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi8sCisJCQkJMUFBNzE2MDgx
NDlCQzREQTAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovLAorCQkJCTBGNTgwRkExMTQ5
NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovLAorCQkJCTBGNTgwRkEy
MTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5tbSAqLywKIAkJCQkxQUE3
MTYyNTE0OUJGRkIyMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLmggKi8sCiAJCQkJMUFBNzE2MUMx
NDlCRjJGQTAwMTZFQzE5IC8qIFdlYlRpbGVMYXllci5tbSAqLywKIAkJCSk7CkBAIC0yNjQ1OCw3
ICsyNjQ1OCw3IEBACiAJCQkJNTFERjZEN0UwQjkyQTE2RDAwQzJEQzg1IC8qIFRocmVhZENoZWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUZGNTdBMzBGMDEyNTVCMDA4OTFFQkIgLyogVGhyZWFk
R2xvYmFsRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTg1QkNGMjkwRjMyNzlDRTAwMEVBMjYy
IC8qIFRocmVhZFRpbWVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBNzE2MEIxNDlCQzREQjAw
MTZFQzE5IC8qIFRpbGVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUFBNzE2MEIxNDlCQzRE
QjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUY4OUE0
MjE1MThGREVBMDBFNTQ3QjUgLyogVGlsZWRCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OTg3NzBGMzEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjU1QjNEREMxMjUxRjEyRDAwM0VGMjY5IC8qIFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY1OTgsNyArMjY1OTgsNyBAQAogCQkJCTk3QUFCRDI3MTRGQTA5RDUwMDc0NTdB
RSAvKiBXZWJTb2NrZXRIYW5kc2hha2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QUFCRDI5MTRG
QTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5N0FBQkQyQjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0SGFuZHNoYWtlUmVz
cG9uc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBX
ZWJUaWxlQ2FjaGVMYXllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1ODBGQTMxNDk2OTM5MTAw
RkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNG
MzMyRDBGMkI5QTI1MDA0QjY3OTUgLyogV2ViVGlsZWRMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0Q4MjAzMEExMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEODIwMzBDMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI2
NjkxLDcgKzI2NjkxLDcgQEAKIAkJCQlFMTg3MDU2MzE2RTU0QTBEMDA1ODVFOTcgLyogTWFpblRo
cmVhZFRhc2suaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNjZFMjM0MTZENkVCNkMwMEY3RTdGRiAv
KiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUEzMEY2
QTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggaW4gSGVh
ZGVycyAqLywKLSAJCQkJMkQ4Mjg3RjcxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ4Mjg3RjcxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRl
c3RMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yOTY5MSw3ICsyOTY5MSw3IEBACiAJCQkJ
NTFERjZEODAwQjkyQTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFGRjU3QTYwRjAxMjU2QjAwODkxRUJCIC8qIFRocmVhZEdsb2JhbERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTg1QkNGMjgwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRpbWVy
cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQUE3MTYwQTE0OUJDNERCMDAxNkVDMTkgLyogVGls
ZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUFBNzE2MEExNDlCQzREQjAwMTZFQzE5IC8q
IFRpbGVDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk4NzcwRjIxMjQyQzUzNTAw
MjIyNkJBIC8qIFRpbGluZ0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEREIxMjUx
RjEyRDAwM0VGMjY5IC8qIFRpbWVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzU1
M0NGRTkxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI5ODA5LDcgKzI5ODA5LDcgQEAKIAkJCQk5N0FBQkQyNjE0RkEwOUQ1MDA3
NDU3QUUgLyogV2ViU29ja2V0SGFuZHNoYWtlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFC
RDI4MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3QUFCRDJBMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRIYW5k
c2hha2VSZXNwb25zZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjU4MEZBNDE0OTY5MzkxMDBG
QjVCRDggLyogV2ViVGlsZUNhY2hlTGF5ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRjU4MEZB
NDE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCQkwRkNGMzMyQzBGMkI5QTI1MDA0QjY3OTUgLyogV2ViVGlsZWRMYXllci5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDgyMDMwQjEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLApAQCAtMjk4OTQsNyArMjk4
OTQsNyBAQAogCQkJCUEzMUM0RTUyMTZFMDJCMDgwMDJGNzk1NyAvKiBKU09FU1RleHR1cmVIYWxm
RmxvYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U2NkUyMzMxNkQ2RUI2QzAwRjdFN0ZGIC8q
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VBMzBG
NjkxNkRGRkU3NTAwMjU3RDBCIC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4g
U291cmNlcyAqLywKLSAJCQkJMkQ4Mjg3RjYxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDgyODdGNjE2RTRBMDM4MDA4NkJEMDAgLyog
SGl0VGVzdExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlTWFjLm1tCmluZGV4IGUxN2FiYzZkNjE4MDE5OWNmMjY5NGE3ZjQyMjM3MDUzNjljNDlh
M2MuLjQxMWEwN2ViMjIwZmVhYmJmMGVlZmU4M2ViZDFkMzc5NTMwODA3MzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJT
Y3JvbGxpbmdUcmVlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKKyNpbmNsdWRlICJUaWxlQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlRpbGVMYXllci5oIgogCiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CkBAIC0zODIsNyArMzgyLDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYzo6bG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpCiAgICAgfQogCiAgICAgSW50UG9p
bnQgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOwotICAgIHVuc2lnbmVk
IHVuZmlsbGVkQXJlYSA9IFRpbGVDYWNoZTo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMs
IHZpZXdwb3J0UmVjdCgpLCBJbnRQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9z
aXRpb24ueSgpKSk7CisgICAgdW5zaWduZWQgdW5maWxsZWRBcmVhID0gVGlsZUNvbnRyb2xsZXI6
OmJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKHRpbGVzLCB2aWV3cG9ydFJlY3QoKSwgSW50UG9pbnQo
LXNjcm9sbFBvc2l0aW9uLngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSkpOwogCiAgICAgaWYgKHVu
ZmlsbGVkQXJlYSB8fCBtX2xhc3RTY3JvbGxIYWRVbmZpbGxlZFBpeGVscykKICAgICAgICAgV1RG
TG9nQWx3YXlzKCJTQ1JPTExJTkc6IEV4cG9zZWQgdGlsZWxlc3MgYXJlYS4gVGltZTogJWYgVW5m
aWxsZWQgUGl4ZWxzOiAldVxuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwg
dW5maWxsZWRBcmVhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDhkOTc0OTg5OWYwZjJhNWYxY2NhMGVk
ZTIzOGQ3ZjEwZjM2MzE1ZTAuLmMyYzA3ZGY0MmUxMjlkNGRjOGY3Y2RlYThlMTQ1ZTA4YTUzMTFj
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcApAQCAtMjgwLDcgKzI4MCw3IEBAIEdyYXBoaWNzTGF5ZXJDQTo6
R3JhcGhpY3NMYXllckNBKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICBQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUgPSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZVdlYkxheWVyOwogICAgIGlmIChjbGllbnQgJiYgY2xpZW50LT5zaG91bGRVc2VUaWxlQ2Fj
aGUodGhpcykpIHsKLSAgICAgICAgbGF5ZXJUeXBlID0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVQYWdlVGlsZUNhY2hlTGF5ZXI7CisgICAgICAgIGxheWVyVHlwZSA9IFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyOwogICAgICAgICBtX2lzUGFnZVRpbGVD
YWNoZUxheWVyID0gdHJ1ZTsKICAgICB9CiAKQEAgLTEwMzUsNyArMTAzNSw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IENvbW1pdFN0YXRlJiBj
b21taXRTdGF0ZSwgY29uCiAKICAgICBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygp
OwogCi0gICAgaWYgKGFmZmVjdGVkQnlUcmFuc2Zvcm1BbmltYXRpb24gJiYgY2xpZW50KCkgJiYg
bV9sYXllci0+bGF5ZXJUeXBlKCkgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlQ2Fj
aGVMYXllcikKKyAgICBpZiAoYWZmZWN0ZWRCeVRyYW5zZm9ybUFuaW1hdGlvbiAmJiBjbGllbnQo
KSAmJiBtX2xheWVyLT5sYXllclR5cGUoKSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRp
bGVkQmFja2luZ0xheWVyKQogICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hCZWZvcmVEaXNw
bGF5UmVmcmVzaCh0aGlzKTsKIAogICAgIGlmIChoYWRDaGFuZ2VzICYmIGNsaWVudCgpKQpAQCAt
MTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENo
YW5nZXMoY29uc3QgQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb24KIAogYm9vbCBHcmFwaGlj
c0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihQbGF0Zm9ybUNBTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIpIGNvbnN0CiB7Ci0gICAgLy8gVGhlIHJlcGFpbnQgY291bnRlcnMg
YXJlIHBhaW50ZWQgaW50byB0aGUgVGlsZUNhY2hlIHRpbGVzICh3aGljaCBoYXZlIG5vIGNvcnJl
c3BvbmRpbmcgcGxhdGZvcm0gbGF5ZXIpLAorICAgIC8vIFRoZSByZXBhaW50IGNvdW50ZXJzIGFy
ZSBwYWludGVkIGludG8gdGhlIFRpbGVDb250cm9sbGVyIHRpbGVzICh3aGljaCBoYXZlIG5vIGNv
cnJlc3BvbmRpbmcgcGxhdGZvcm0gbGF5ZXIpLAogICAgIC8vIHNvIHdlIGRvbid0IHdhbnQgdG8g
b3ZlcnBhaW50IHRoZSByZXBhaW50IGNvdW50ZXIgd2hlbiBjYWxsZWQgd2l0aCB0aGUgVGlsZUNh
Y2hlJ3Mgb3duIGxheWVyLgogICAgIGlmIChtX2lzUGFnZVRpbGVDYWNoZUxheWVyICYmIHBsYXRm
b3JtTGF5ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2MTgsNyArMTYxOCw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVWaXNpYmxlUmVjdChjb25zdCBGbG9hdFJlY3QmIG9s
ZFZpc2libGVSZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3QgdGlsZUFyZWEg
PSBtX3Zpc2libGVSZWN0OwotICAgIGlmIChtX2xheWVyLT5sYXllclR5cGUoKSA9PSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVDYWNoZUxheWVyKQorICAgIGlmIChtX2xheWVyLT5sYXll
clR5cGUoKSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyKQog
ICAgICAgICB0aWxlQXJlYSA9IGFkanVzdFRpbGVkTGF5ZXJWaXNpYmxlUmVjdCh0aWxlZEJhY2tp
bmcoKSwgb2xkVmlzaWJsZVJlY3QsIG1fc2l6ZUF0TGFzdFZpc2libGVSZWN0VXBkYXRlKTsKIAog
ICAgIHRpbGVkQmFja2luZygpLT5zZXRWaXNpYmxlUmVjdCh0aWxlQXJlYSk7CkBAIC0yNjQyLDEx
ICsyNjQyLDExIEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpyZXF1aXJlc1RpbGVkTGF5ZXIoZmxv
YXQgcGFnZVNjYWxlRmFjdG9yKSBjb25zdAogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c3dhcEZy
b21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIpCiB7Ci0gICAgQVNTRVJUKG1fbGF5
ZXItPmxheWVyVHlwZSgpICE9IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUGFnZVRpbGVDYWNo
ZUxheWVyKTsKKyAgICBBU1NFUlQobV9sYXllci0+bGF5ZXJUeXBlKCkgIT0gUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXIpOwogICAgIEFTU0VSVCh1c2VUaWxl
ZExheWVyICE9IG1fdXNpbmdUaWxlZExheWVyKTsKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBvbGRMYXllciA9IG1fbGF5ZXI7CiAgICAgCi0gICAgbV9sYXllciA9IFBsYXRmb3JtQ0FMYXll
cjo6Y3JlYXRlKHVzZVRpbGVkTGF5ZXIgPyBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVD
YWNoZUxheWVyIDogUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllciwgdGhpcyk7Cisg
ICAgbV9sYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHVzZVRpbGVkTGF5ZXIgPyBQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyIDogUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVXZWJMYXllciwgdGhpcyk7CiAgICAgbV91c2luZ1RpbGVkTGF5ZXIgPSB1c2VU
aWxlZExheWVyOwogICAgIAogICAgIG1fbGF5ZXItPmFkb3B0U3VibGF5ZXJzKG9sZExheWVyLmdl
dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmgKaW5kZXggZjYzNzA1MTc2ZTkyNmM4Njk1MDRmMzAyNTViYjk4ZWM0NjVm
Y2M2NS4uMGJkM2ZjMTEzMzk1YjNhMWE2MDc0MzI3MzEwMmYzMjZjYWYwYzA3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgICAgICBMYXllclR5cGVXZWJMYXllciwK
ICAgICAgICAgTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVdlYlRp
bGVkTGF5ZXIsCi0gICAgICAgIExheWVyVHlwZVRpbGVDYWNoZUxheWVyLAotICAgICAgICBMYXll
clR5cGVQYWdlVGlsZUNhY2hlTGF5ZXIsCisgICAgICAgIExheWVyVHlwZVRpbGVkQmFja2luZ0xh
eWVyLAorICAgICAgICBMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXIsCiAgICAgICAgIExh
eWVyVHlwZVJvb3RMYXllciwKICAgICAgICAgTGF5ZXJUeXBlQ3VzdG9tCiAgICAgfTsKQEAgLTgz
LDcgKzgzLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICBib29sIHVzZXNUaWxl
Q2FjaGVMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZWxzZQotICAgIGJvb2wgdXNl
c1RpbGVDYWNoZUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGUgPT0gTGF5ZXJUeXBl
UGFnZVRpbGVDYWNoZUxheWVyIHx8IG1fbGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVDYWNoZUxh
eWVyOyB9CisgICAgYm9vbCB1c2VzVGlsZUNhY2hlTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyVHlwZSA9PSBMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXIgfHwgbV9sYXllclR5cGUg
PT0gTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXI7IH0KICNlbmRpZgogCiAgICAgUGxhdGZvcm1D
QUxheWVyKiByb290TGF5ZXIoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4
IDJkMmFkMThiYjk2Yjc1ZGRjMzBkYjVmZDg4MGE1MmNlZWI3N2M2NTIuLjE4OTIwYWFkOWQwZDUz
YTk2MTZlZmZmZWE2NjNkYzFhNWNlZGU1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpA
QCAtMzgsNyArMzgsNyBAQAogI2ltcG9ydCAiVGlsZWRCYWNraW5nLmgiCiAjaW1wb3J0ICJXZWJM
YXllci5oIgogI2ltcG9ydCAiV2ViVGlsZWRMYXllci5oIgotI2ltcG9ydCAiV2ViVGlsZUNhY2hl
TGF5ZXIuaCIKKyNpbXBvcnQgIldlYlRpbGVkQmFja2luZ0xheWVyLmgiCiAjaW1wb3J0IDxvYmpj
L29iamMtYXV0by5oPgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTIyNCw5ICsyMjQsOSBAQCBQbGF0Zm9ybUNBTGF5ZXI6OlBs
YXRmb3JtQ0FMYXllcihMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllciwg
UGxhdAogICAgICAgICAgICAgY2FzZSBMYXllclR5cGVXZWJUaWxlZExheWVyOgogICAgICAgICAg
ICAgICAgIGxheWVyQ2xhc3MgPSBbV2ViVGlsZWRMYXllciBjbGFzc107CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExheWVyVHlwZVRpbGVDYWNoZUxheWVyOgotICAg
ICAgICAgICAgY2FzZSBMYXllclR5cGVQYWdlVGlsZUNhY2hlTGF5ZXI6Ci0gICAgICAgICAgICAg
ICAgbGF5ZXJDbGFzcyA9IFtXZWJUaWxlQ2FjaGVMYXllciBjbGFzc107CisgICAgICAgICAgICBj
YXNlIExheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOgorICAgICAgICAgICAgY2FzZSBMYXllclR5
cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXI6CisgICAgICAgICAgICAgICAgbGF5ZXJDbGFzcyA9IFtX
ZWJUaWxlZEJhY2tpbmdMYXllciBjbGFzc107CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIExheWVyVHlwZUN1c3RvbToKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTI1Myw3ICsyNTMsNyBAQCBQbGF0Zm9ybUNBTGF5ZXI6OlBsYXRmb3JtQ0FMYXllcihMYXllclR5
cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllciwgUGxhdAogICAgIAogICAgIGlmICh1
c2VzVGlsZUNhY2hlTGF5ZXIoKSkgewogICAgICAgICBtX2N1c3RvbVN1YmxheWVycyA9IGFkb3B0
UHRyKG5ldyBQbGF0Zm9ybUNBTGF5ZXJMaXN0KDEpKTsKLSAgICAgICAgQ0FMYXllciogdGlsZUNh
Y2hlVGlsZUNvbnRhaW5lckxheWVyID0gW3N0YXRpY19jYXN0PFdlYlRpbGVDYWNoZUxheWVyICo+
KG1fbGF5ZXIuZ2V0KCkpIHRpbGVDb250YWluZXJMYXllcl07CisgICAgICAgIENBTGF5ZXIqIHRp
bGVDYWNoZVRpbGVDb250YWluZXJMYXllciA9IFtzdGF0aWNfY2FzdDxXZWJUaWxlZEJhY2tpbmdM
YXllciAqPihtX2xheWVyLmdldCgpKSB0aWxlQ29udGFpbmVyTGF5ZXJdOwogICAgICAgICAoKm1f
Y3VzdG9tU3VibGF5ZXJzKVswXSA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHRpbGVDYWNoZVRp
bGVDb250YWluZXJMYXllciwgMCk7CiAgICAgfQogICAgIApAQCAtMjcyLDcgKzI3Miw3IEBAIFBs
YXRmb3JtQ0FMYXllcjo6flBsYXRmb3JtQ0FMYXllcigpCiAgICAgW3N0YXRpY19jYXN0PFdlYkFu
aW1hdGlvbkRlbGVnYXRlKj4obV9kZWxlZ2F0ZS5nZXQoKSkgc2V0T3duZXI6bmlsXTsKIAogICAg
IGlmICh1c2VzVGlsZUNhY2hlTGF5ZXIoKSkKLSAgICAgICAgW3N0YXRpY19jYXN0PFdlYlRpbGVD
YWNoZUxheWVyICo+KG1fbGF5ZXIuZ2V0KCkpIGludmFsaWRhdGVdOworICAgICAgICBbc3RhdGlj
X2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5nZXQoKSkgaW52YWxpZGF0ZV07
CiB9CiAKIFBsYXRmb3JtQ0FMYXllciogUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIo
dm9pZCogcGxhdGZvcm1MYXllcikKQEAgLTEwOTksOCArMTA5OSw4IEBAIFRpbGVkQmFja2luZyog
UGxhdGZvcm1DQUxheWVyOjp0aWxlZEJhY2tpbmcoKQogICAgIGlmICghdXNlc1RpbGVDYWNoZUxh
eWVyKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgV2ViVGlsZUNhY2hlTGF5ZXIgKnRpbGVD
YWNoZUxheWVyID0gc3RhdGljX2Nhc3Q8V2ViVGlsZUNhY2hlTGF5ZXIgKj4obV9sYXllci5nZXQo
KSk7Ci0gICAgcmV0dXJuIFt0aWxlQ2FjaGVMYXllciB0aWxlZEJhY2tpbmddOworICAgIFdlYlRp
bGVkQmFja2luZ0xheWVyICp0aWxlZEJhY2tpbmdMYXllciA9IHN0YXRpY19jYXN0PFdlYlRpbGVk
QmFja2luZ0xheWVyICo+KG1fbGF5ZXIuZ2V0KCkpOworICAgIHJldHVybiBbdGlsZWRCYWNraW5n
TGF5ZXIgdGlsZWRCYWNraW5nXTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg0YWFlZDc4MWE4OGViZjdkNTM5Y2EyNWUzZjFhM2Q5ZjhhNzUxMGEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MjEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRpbGVDYWNoZV9o
Ci0jZGVmaW5lIFRpbGVDYWNoZV9oCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRl
ICJJbnRQb2ludEhhc2guaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVGlsZWRC
YWNraW5nLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1P
QkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYlRpbGVDYWNoZUxheWVyOwotT0JKQ19D
TEFTUyBXZWJUaWxlTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXI7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3Mg
SW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotCi10eXBlZGVmIFZlY3RvcjxSZXRhaW5QdHI8V2Vi
VGlsZUxheWVyPiA+IFdlYlRpbGVMYXllckxpc3Q7Ci0KLWNsYXNzIFRpbGVDYWNoZSA6IHB1Ymxp
YyBUaWxlZEJhY2tpbmcgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVDYWNoZSk7Ci0K
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlQ2FjaGU+IGNyZWF0ZShXZWJUaWxl
Q2FjaGVMYXllciopOwotICAgIH5UaWxlQ2FjaGUoKTsKLQotICAgIHZvaWQgdGlsZUNhY2hlTGF5
ZXJCb3VuZHNDaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZv
aWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGRyYXdM
YXllcihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKLQotICAgIHZvaWQgc2V0U2NhbGUo
Q0dGbG9hdCk7Ci0gICAgQ0dGbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0K
LQotICAgIGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVy
YXRlc0RyYXdpbmc7IH0KLSAgICB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sKTsKLQot
ICAgIHZvaWQgc2V0VGlsZXNPcGFxdWUoYm9vbCk7Ci0gICAgYm9vbCB0aWxlc0FyZU9wYXF1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGlsZXNBcmVPcGFxdWU7IH0KLQotICAgIENBTGF5ZXIgKnRpbGVD
b250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgp
OyB9Ci0KLSAgICB2b2lkIHNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsKLSAgICB2b2lk
IHNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYpOwotCi0gICAgdmlydHVhbCBGbG9h
dFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Zpc2libGVSZWN0
OyB9Ci0KLSAgICB1bnNpZ25lZCBibGFua1BpeGVsQ291bnQoKSBjb25zdDsKLSAgICBzdGF0aWMg
dW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3QgV2ViVGlsZUxheWVyTGlzdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICAvLyBPbmx5IHB1Ymxp
YyBmb3IgdGhlIFdlYlRpbGVDYWNoZU1hcExheWVyLgotICAgIHZvaWQgZHJhd1RpbGVNYXBDb250
ZW50cyhDR0NvbnRleHRSZWYsIENHUmVjdCk7Ci0KLXB1YmxpYzoKLSAgICAvLyBPbmx5IHB1Ymxp
YyBmb3IgaW5saW5lIG1ldGhvZHMgaW4gdGhlIGltcGxlbWVudGF0aW9uIGZpbGUuCi0gICAgdHlw
ZWRlZiBJbnRQb2ludCBUaWxlSW5kZXg7Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBUaWxlQ29ob3J0
OwotICAgIHN0YXRpYyBjb25zdCBUaWxlQ29ob3J0IFZpc2libGVUaWxlQ29ob3J0ID0gVUlOVF9N
QVg7Ci0KLSAgICBzdHJ1Y3QgVGlsZUluZm8gewotICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxh
eWVyPiBsYXllcjsKLSAgICAgICAgVGlsZUNvaG9ydCBjb2hvcnQ7IC8vIFZpc2libGVUaWxlQ29o
b3J0IGlzIHZpc2libGUuCi0gICAgICAgIGJvb2wgaGFzU3RhbGVDb250ZW50OwotICAgICAgICAK
LSAgICAgICAgVGlsZUluZm8oKQotICAgICAgICAgICAgOiBjb2hvcnQoVmlzaWJsZVRpbGVDb2hv
cnQpCi0gICAgICAgICAgICAsIGhhc1N0YWxlQ29udGVudChmYWxzZSkKLSAgICAgICAgeyB9Ci0g
ICAgfTsKLQotcHJpdmF0ZToKLSAgICBUaWxlQ2FjaGUoV2ViVGlsZUNhY2hlTGF5ZXIqKTsKLQot
ICAgIC8vIFRpbGVkQmFja2luZyBtZW1iZXIgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaXNpYmxlUmVjdChjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RXhwb3NlZFJlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHNldENsaXBzVG9FeHBvc2VkUmVjdChib29sKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgcHJlcG9wdWxhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRJc0luV2luZG93KGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRUaWxlQ292ZXJhZ2UoVGlsZUNvdmVyYWdlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFRp
bGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3RpbGVD
b3ZlcmFnZTsgfQotICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIEludFNpemUgdGlsZVNpemUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Rp
bGVTaXplOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IHRpbGVHcmlkRXh0ZW50KCkgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0Vu
YWJsZWQoYm9vbCBmbGFnKSBPVkVSUklERSB7IG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5n
RW5hYmxlZCA9IGZsYWc7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVyZm9y
bWFuY2VMb2dnaW5nRW5hYmxlZDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRBZ2dyZXNzaXZlbHlS
ZXRhaW5zVGlsZXMoYm9vbCBmbGFnKSBPVkVSUklERSB7IG1fYWdncmVzc2l2ZWx5UmV0YWluc1Rp
bGVzID0gZmxhZzsgfQotICAgIHZpcnR1YWwgYm9vbCBhZ2dyZXNzaXZlbHlSZXRhaW5zVGlsZXMo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2FnZ3Jlc3NpdmVseVJldGFpbnNUaWxlczsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRVbnBhcmVudHNPZmZzY3JlZW5UaWxlcyhib29sIGZsYWcpIE9W
RVJSSURFIHsgbV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcyA9IGZsYWc7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X3VucGFyZW50c09mZnNjcmVlblRpbGVzOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IHRpbGVDb3Zl
cmFnZVJlY3QoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIENBTGF5ZXIgKnRpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXIoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsaW5nTW9kZUluZGljYXRpb24oU2Nyb2xsaW5nTW9kZUluZGljYXRpb24pIE9WRVJSSURFOwot
Ci0gICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKLQotICAgIEludFJlY3QgcmVjdEZvclRpbGVJ
bmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKLSAgICB2b2lkIGdldFRpbGVJbmRleFJhbmdl
Rm9yUmVjdChjb25zdCBJbnRSZWN0JiwgVGlsZUluZGV4JiB0b3BMZWZ0LCBUaWxlSW5kZXgmIGJv
dHRvbVJpZ2h0KSBjb25zdDsKLQotICAgIEZsb2F0UmVjdCBjb21wdXRlVGlsZUNvdmVyYWdlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHByZXZpb3VzVmlzaWJsZVJlY3QpIGNvbnN0OwotICAgIEludFNp
emUgdGlsZVNpemVGb3JDb3ZlcmFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0KLSAg
ICB2b2lkIHNjaGVkdWxlVGlsZVJldmFsaWRhdGlvbihkb3VibGUgaW50ZXJ2YWwpOwotICAgIHZv
aWQgdGlsZVJldmFsaWRhdGlvblRpbWVyRmlyZWQoVGltZXI8VGlsZUNhY2hlPiopOwotCi0gICAg
dm9pZCBzY2hlZHVsZUNvaG9ydFJlbW92YWwoKTsKLSAgICB2b2lkIGNvaG9ydFJlbW92YWxUaW1l
ckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKTsKLSAgICAKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFRp
bGVWYWxpZGF0aW9uUG9saWN5RmxhZ3M7Ci0KLSAgICB2b2lkIHJldmFsaWRhdGVUaWxlcyhUaWxl
VmFsaWRhdGlvblBvbGljeUZsYWdzIGZvcmVncm91bmRWYWxpZGF0aW9uUG9saWN5ID0gMCwgVGls
ZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFsaWRhdGlvblBvbGljeSA9IDApOwot
ICAgIHZvaWQgZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQg
dXBkYXRlVGlsZUNvdmVyYWdlTWFwKCk7Ci0KLSAgICB2b2lkIHJlbW92ZUFsbFRpbGVzKCk7Ci0g
ICAgdm9pZCByZW1vdmVBbGxTZWNvbmRhcnlUaWxlcygpOwotICAgIHZvaWQgcmVtb3ZlVGlsZXNJ
bkNvaG9ydChUaWxlQ29ob3J0KTsKLQotICAgIFRpbGVDb2hvcnQgbmV4dFRpbGVDb2hvcnQoKSBj
b25zdDsKLSAgICB2b2lkIHN0YXJ0ZWROZXdDb2hvcnQoVGlsZUNvaG9ydCk7Ci0gICAgCi0gICAg
VGlsZUNvaG9ydCBuZXdlc3RUaWxlQ29ob3J0KCkgY29uc3Q7Ci0gICAgVGlsZUNvaG9ydCBvbGRl
c3RUaWxlQ29ob3J0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFRpbGVOZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgVGlsZUluZGV4JiwgVGlsZUluZm8mLCBjb25zdCBJbnRSZWN0JiByZXBhaW50UmVj
dEluVGlsZUNvb3JkcywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKTsK
LQotICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxlSW5kZXgmKSBj
b25zdDsKLSAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBjcmVhdGVUaWxlTGF5ZXIoY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgYm9vbCBzaG91bGRTaG93UmVwYWludENvdW50ZXJzKCkgY29uc3Q7
Ci0gICAgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVyICosIENHQ29udGV4dFJl
Zik7Ci0KLSAgICBXZWJUaWxlQ2FjaGVMYXllciogbV90aWxlQ2FjaGVMYXllcjsKLSAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gbV90aWxlQ29udGFpbmVyTGF5ZXI7Ci0gICAgUmV0YWluUHRyPFdlYlRp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXI+IG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
cjsgLy8gVXNlZCBmb3IgY292ZXJhZ2UgdmlzdWFsaXphdGlvbi4KLQotICAgIEludFNpemUgbV90
aWxlU2l6ZTsKLSAgICBGbG9hdFJlY3QgbV92aXNpYmxlUmVjdDsKLSAgICBGbG9hdFJlY3QgbV92
aXNpYmxlUmVjdEF0TGFzdFJldmFsaWRhdGU7Ci0gICAgRmxvYXRSZWN0IG1fZXhwb3NlZFJlY3Q7
IC8vIFRoZSBleHBvc2VkIGFyZWEgb2YgY29udGFpbmluZyBwbGF0Zm9ybSB2aWV3cy4KLQotICAg
IHR5cGVkZWYgSGFzaE1hcDxUaWxlSW5kZXgsIFRpbGVJbmZvPiBUaWxlTWFwOwotICAgIFRpbGVN
YXAgbV90aWxlczsKLSAgICBUaW1lcjxUaWxlQ2FjaGU+IG1fdGlsZVJldmFsaWRhdGlvblRpbWVy
OwotICAgIFRpbWVyPFRpbGVDYWNoZT4gbV9jb2hvcnRSZW1vdmFsVGltZXI7Ci0KLSAgICBzdHJ1
Y3QgVGlsZUNvaG9ydEluZm8gewotICAgICAgICBUaWxlQ29ob3J0IGNvaG9ydDsKLSAgICAgICAg
ZG91YmxlIGNyZWF0aW9uVGltZTsgLy8gaW4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCku
Ci0gICAgICAgIFRpbGVDb2hvcnRJbmZvKFRpbGVDb2hvcnQgaW5Db2hvcnQsIGRvdWJsZSBpblRp
bWUpCi0gICAgICAgICAgICA6IGNvaG9ydChpbkNvaG9ydCkKLSAgICAgICAgICAgICwgY3JlYXRp
b25UaW1lKGluVGltZSkKLSAgICAgICAgeyB9Ci0gICAgfTsKLSAgICB0eXBlZGVmIERlcXVlPFRp
bGVDb2hvcnRJbmZvPiBUaWxlQ29ob3J0TGlzdDsKLSAgICBUaWxlQ29ob3J0TGlzdCBtX2NvaG9y
dExpc3Q7Ci0gICAgCi0gICAgSW50UmVjdCBtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0OyAvLyBJ
biB0aWxlIGNvb3Jkcy4KLQotICAgIENHRmxvYXQgbV9zY2FsZTsKLSAgICBDR0Zsb2F0IG1fZGV2
aWNlU2NhbGVGYWN0b3I7Ci0KLSAgICBUaWxlQ292ZXJhZ2UgbV90aWxlQ292ZXJhZ2U7Ci0gICAg
Ym9vbCBtX2lzSW5XaW5kb3c7Ci0gICAgYm9vbCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2lu
Z0VuYWJsZWQ7Ci0gICAgYm9vbCBtX2FnZ3Jlc3NpdmVseVJldGFpbnNUaWxlczsKLSAgICBib29s
IG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXM7Ci0gICAgYm9vbCBtX2FjY2VsZXJhdGVzRHJhd2lu
ZzsKLSAgICBib29sIG1fdGlsZXNBcmVPcGFxdWU7Ci0gICAgYm9vbCBtX2NsaXBzVG9FeHBvc2Vk
UmVjdDsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9y
OwotICAgIGZsb2F0IG1fdGlsZURlYnVnQm9yZGVyV2lkdGg7Ci0gICAgU2Nyb2xsaW5nTW9kZUlu
ZGljYXRpb24gbV9pbmRpY2F0b3JNb2RlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVGlsZUNhY2hlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0NTVhNjM4NDg2ZDA3Njk1ZGRlMTE4YWIyNTU0MjBhZGQyNzhmMDhiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMDUw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRpbGVDYWNoZS5oIgotCi0jaW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKLSNpbXBvcnQgIlJlZ2lvbi5oIgotI2ltcG9ydCAiTGF5ZXJQb29sLmgi
Ci0jaW1wb3J0ICJXZWJMYXllci5oIgotI2ltcG9ydCAiV2ViVGlsZUNhY2hlTGF5ZXIuaCIKLSNp
bXBvcnQgIldlYlRpbGVMYXllci5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+
Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4Y2Vw
dGlvbnMuaD4KLSNpbXBvcnQgPHV0aWxpdHk+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLSNp
ZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA3
MAotQGludGVyZmFjZSBDQUxheWVyIChXZWJDQUxheWVyRGV0YWlscykKLS0gKHZvaWQpc2V0QWNj
ZWxlcmF0ZXNEcmF3aW5nOihCT09MKWZsYWc7Ci1AZW5kCi0jZW5kaWYKLQotQGludGVyZmFjZSBX
ZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyIDogQ0FMYXllciB7Ci0gICAgV2ViQ29yZTo6
VGlsZUNhY2hlKiBfdGlsZUNhY2hlOwotICAgIENBTGF5ZXIgKl92aXNpYmxlUmVjdEZyYW1lTGF5
ZXI7IC8vIE93bmVkIGJ5IGJlaW5nIGEgc3VibGF5ZXIuCi19Ci1AcHJvcGVydHkgKGFzc2lnbikg
V2ViQ29yZTo6VGlsZUNhY2hlKiB0aWxlQ2FjaGU7Ci1AcHJvcGVydHkgKGFzc2lnbikgQ0FMYXll
ciogdmlzaWJsZVJlY3RGcmFtZUxheWVyOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVGls
ZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcgotQHN5bnRoZXNpemUgdGlsZUNhY2hlID0gX3RpbGVD
YWNoZTsKLUBzeW50aGVzaXplIHZpc2libGVSZWN0RnJhbWVMYXllciA9IF92aXNpYmxlUmVjdEZy
YW1lTGF5ZXI7Ci0tIChpZClpbml0Ci17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkg
ewotICAgICAgICBbc2VsZiBzZXRTdHlsZTpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2Jq
ZWN0OltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdWxsIG51
bGxdLCBAImJvdW5kcyIsIFtOU051bGwgbnVsbF0sIEAicG9zaXRpb24iLCBbTlNOdWxsIG51bGxd
LCBAImNvbnRlbnRzIiwgbmlsXSBmb3JLZXk6QCJhY3Rpb25zIl1dOwotCi0gICAgICAgIF92aXNp
YmxlUmVjdEZyYW1lTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07Ci0gICAgICAgIFtfdmlzaWJsZVJl
Y3RGcmFtZUxheWVyIHNldFN0eWxlOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bGwgbnVsbF0s
IEAiYm91bmRzIiwgW05TTnVsbCBudWxsXSwgQCJwb3NpdGlvbiIsIG5pbF0gZm9yS2V5OkAiYWN0
aW9ucyJdXTsKLSAgICAgICAgW3NlbGYgYWRkU3VibGF5ZXI6X3Zpc2libGVSZWN0RnJhbWVMYXll
cl07Ci0gICAgICAgIFtfdmlzaWJsZVJlY3RGcmFtZUxheWVyIHNldEJvcmRlckNvbG9yOldlYkNv
cmU6OmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3IoMjU1LCAwLCAwKSwgV2ViQ29yZTo6Q29s
b3JTcGFjZURldmljZVJHQildOwotICAgICAgICBbX3Zpc2libGVSZWN0RnJhbWVMYXllciBzZXRC
b3JkZXJXaWR0aDoyXTsKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgfQotICAgIHJldHVybiBu
aWw7Ci19Ci0KLS0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKLXsK
LSAgICBpZiAoX3RpbGVDYWNoZSkKLSAgICAgICAgX3RpbGVDYWNoZS0+ZHJhd1RpbGVNYXBDb250
ZW50cyhjb250ZXh0LCBbc2VsZiBib3VuZHNdKTsKLX0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIAotZW51bSBUaWxlVmFsaWRhdGlvblBvbGljeUZsYWcgewotICAgIFBydW5lU2Vj
b25kYXJ5VGlsZXMgPSAxIDw8IDAsCi0gICAgVW5wYXJlbnRBbGxUaWxlcyA9IDEgPDwgMQotfTsK
LQotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZUNhY2hlV2lkdGggPSA1MTI7Ci1zdGF0aWMg
Y29uc3QgaW50IGRlZmF1bHRUaWxlQ2FjaGVIZWlnaHQgPSA1MTI7Ci0KLVBhc3NPd25QdHI8VGls
ZUNhY2hlPiBUaWxlQ2FjaGU6OmNyZWF0ZShXZWJUaWxlQ2FjaGVMYXllciogdGlsZUNhY2hlTGF5
ZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlQ2FjaGUodGlsZUNhY2hlTGF5ZXIp
KTsKLX0KLQotVGlsZUNhY2hlOjpUaWxlQ2FjaGUoV2ViVGlsZUNhY2hlTGF5ZXIqIHRpbGVDYWNo
ZUxheWVyKQotICAgIDogbV90aWxlQ2FjaGVMYXllcih0aWxlQ2FjaGVMYXllcikKLSAgICAsIG1f
dGlsZUNvbnRhaW5lckxheWVyKGFkb3B0Q0YoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCi0gICAg
LCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlQ2FjaGVXaWR0aCwgZGVmYXVsdFRpbGVDYWNoZUhlaWdo
dCkKLSAgICAsIG1fdGlsZVJldmFsaWRhdGlvblRpbWVyKHRoaXMsICZUaWxlQ2FjaGU6OnRpbGVS
ZXZhbGlkYXRpb25UaW1lckZpcmVkKQotICAgICwgbV9jb2hvcnRSZW1vdmFsVGltZXIodGhpcywg
JlRpbGVDYWNoZTo6Y29ob3J0UmVtb3ZhbFRpbWVyRmlyZWQpCi0gICAgLCBtX3NjYWxlKDEpCi0g
ICAgLCBtX2RldmljZVNjYWxlRmFjdG9yKDEpCi0gICAgLCBtX3RpbGVDb3ZlcmFnZShDb3ZlcmFn
ZUZvclZpc2libGVBcmVhKQotICAgICwgbV9pc0luV2luZG93KGZhbHNlKQotICAgICwgbV9zY3Jv
bGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV9hZ2dyZXNzaXZl
bHlSZXRhaW5zVGlsZXMoZmFsc2UpCi0gICAgLCBtX3VucGFyZW50c09mZnNjcmVlblRpbGVzKGZh
bHNlKQotICAgICwgbV9hY2NlbGVyYXRlc0RyYXdpbmcoZmFsc2UpCi0gICAgLCBtX3RpbGVzQXJl
T3BhcXVlKGZhbHNlKQotICAgICwgbV9jbGlwc1RvRXhwb3NlZFJlY3QoZmFsc2UpCi0gICAgLCBt
X3RpbGVEZWJ1Z0JvcmRlcldpZHRoKDApCi0gICAgLCBtX2luZGljYXRvck1vZGUoVGhyZWFkZWRT
Y3JvbGxpbmdJbmRpY2F0aW9uKQotewotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIFttX3RpbGVDYWNoZUxh
eWVyIGFkZFN1YmxheWVyOm1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpXTsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIHNldE5hbWU6QCJUaWxlQ2FjaGUg
Q29udGFpbmVyIExheWVyIl07Ci0jZW5kaWYKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwot
fQotCi1UaWxlQ2FjaGU6On5UaWxlQ2FjaGUoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBl
bmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGls
ZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0
KCkgc2V0VGlsZUNhY2hlOjBdOwotICAgIH0KLSAgICAKLSAgICBpZiAobV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyKQotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
LmdldCgpIHNldFRpbGVDYWNoZTpuaWxdOwotfQotCi12b2lkIFRpbGVDYWNoZTo6dGlsZUNhY2hl
TGF5ZXJCb3VuZHNDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV90aWxlcy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgLy8gV2UgbXVzdCByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgdXNpbmcg
YSB0aW1lciB3aGVuIHRoZXJlIGFyZQotICAgICAgICAvLyBubyB0aWxlcyB0byBhdm9pZCBhIGZs
YXNoIHdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIG9uZSBwYWdlIHRvIGFub3RoZXIuCi0gICAgICAg
IHJldmFsaWRhdGVUaWxlcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2NoZWR1
bGVUaWxlUmV2YWxpZGF0aW9uKDApOwotfQotCi12b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNw
bGF5KCkKLXsKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5i
ZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Y29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBbdGlsZUluZm8u
bGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9Ci19Ci0KLXZvaWQgVGlsZUNhY2hl
OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAo
bV90aWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBzY2Fs
ZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9zY2FsZSk7Ci0gICAgSW50UmVj
dCByZXBhaW50UmVjdEluVGlsZUNvb3JkcyhlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3QpKTsK
LQotICAgIC8vIEZvciBzbWFsbCBpbnZhbGlkYXRpb25zLCBsb29rdXAgdGhlIGNvdmVyZWQgdGls
ZXMuCi0gICAgaWYgKHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLmhlaWdodCgpIDwgMiAqIG1fdGls
ZVNpemUuaGVpZ2h0KCkgJiYgcmVwYWludFJlY3RJblRpbGVDb29yZHMud2lkdGgoKSA8IDIgKiBt
X3RpbGVTaXplLndpZHRoKCkpIHsKLSAgICAgICAgVGlsZUluZGV4IHRvcExlZnQ7Ci0gICAgICAg
IFRpbGVJbmRleCBib3R0b21SaWdodDsKLSAgICAgICAgZ2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0
KHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLCB0b3BMZWZ0LCBib3R0b21SaWdodCk7Ci0KLSAgICAg
ICAgZm9yIChpbnQgeSA9IHRvcExlZnQueSgpOyB5IDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5KSB7
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gdG9wTGVmdC54KCk7IHggPD0gYm90dG9tUmlnaHQu
eCgpOyArK3gpIHsKLSAgICAgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5maW5kKHRpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ICE9IG1fdGls
ZXMuZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgIHNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3Qo
dGlsZUluZGV4LCBpdC0+dmFsdWUsIHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLCBtX3ByaW1hcnlU
aWxlQ292ZXJhZ2VSZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBzZXRU
aWxlTmVlZHNEaXNwbGF5SW5SZWN0KGl0LT5rZXksIGl0LT52YWx1ZSwgcmVwYWludFJlY3RJblRp
bGVDb29yZHMsIG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3QpOwotfQotCi12b2lkIFRpbGVDYWNo
ZTo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCwg
VGlsZUluZm8mIHRpbGVJbmZvLCBjb25zdCBJbnRSZWN0JiByZXBhaW50UmVjdEluVGlsZUNvb3Jk
cywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKQotewotICAgIFdlYlRp
bGVMYXllciogdGlsZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7Ci0KLSAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwotICAgIEludFJlY3QgdGls
ZVJlcGFpbnRSZWN0ID0gdGlsZVJlY3Q7Ci0gICAgdGlsZVJlcGFpbnRSZWN0LmludGVyc2VjdChy
ZXBhaW50UmVjdEluVGlsZUNvb3Jkcyk7Ci0gICAgaWYgKHRpbGVSZXBhaW50UmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRpbGVSZXBhaW50UmVjdC5tb3ZlQnkoLXRpbGVS
ZWN0LmxvY2F0aW9uKCkpOwotICAgIAotICAgIC8vIFdlIGNvdWxkIHRlc3QgZm9yIGludGVyc2Vj
dGlvbiB3aXRoIHRoZSB2aXNpYmxlIHJlY3QuIFRoaXMgd291bGQgcmVkdWNlIHBhaW50aW5nIHll
dCBtb3JlLAotICAgIC8vIGJ1dCBtYXkgbWFrZSBzY3JvbGxpbmcgc3RhbGUgdGlsZXMgaW50byB2
aWV3IG1vcmUgZnJlcXVlbnQuCi0gICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoY292ZXJhZ2VS
ZWN0SW5UaWxlQ29vcmRzKSkgewotICAgICAgICBbdGlsZUxheWVyIHNldE5lZWRzRGlzcGxheUlu
UmVjdDp0aWxlUmVwYWludFJlY3RdOwotCi0gICAgICAgIGlmIChzaG91bGRTaG93UmVwYWludENv
dW50ZXJzKCkpIHsKLSAgICAgICAgICAgIENHUmVjdCBib3VuZHMgPSBbdGlsZUxheWVyIGJvdW5k
c107Ci0gICAgICAgICAgICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9IENHUmVjdE1ha2UoYm91bmRz
Lm9yaWdpbi54LCBib3VuZHMub3JpZ2luLnksIDUyLCAyNyk7Ci0gICAgICAgICAgICBbdGlsZUxh
eWVyIHNldE5lZWRzRGlzcGxheUluUmVjdDppbmRpY2F0b3JSZWN0XTsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICB0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQgPSB0cnVlOwotfQotCi0K
LXZvaWQgVGlsZUNhY2hlOjpkcmF3TGF5ZXIoV2ViVGlsZUxheWVyICpsYXllciwgQ0dDb250ZXh0
UmVmIGNvbnRleHQpCi17Ci0gICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxh
dGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYg
KCFwbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwotCi0gICAgQ0dQb2ludCBsYXllck9yaWdpbiA9IFtsYXllciBmcmFtZV0u
b3JpZ2luOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAtbGF5ZXJPcmlnaW4u
eCwgLWxheWVyT3JpZ2luLnkpOwotICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIG1fc2Nh
bGUsIG1fc2NhbGUpOwotICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRleHQsIGxheWVyLCBwbGF0
Zm9ybUxheWVyKTsKLQotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Ci0KLSAg
ICBkcmF3UmVwYWludENvdW50ZXIobGF5ZXIsIGNvbnRleHQpOwotfQotCi12b2lkIFRpbGVDYWNo
ZTo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKLXsKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxh
eWVyKTsKLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHBsYXRmb3JtTGF5ZXItPm93bmVy
KCktPnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICAvLyBUaGUgc2Nh
bGUgd2UgZ2V0IGlzIHRoZSBwcm9kdWNlIG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQgZGV2
aWNlIHNjYWxlIGZhY3Rvci4KLSAgICAvLyBEaXZpZGUgYnkgdGhlIGRldmljZSBzY2FsZSBmYWN0
b3Igc28gd2UnbGwgZ2V0IHRoZSBwYWdlIHNjYWxlIGZhY3Rvci4KLSAgICBzY2FsZSAvPSBkZXZp
Y2VTY2FsZUZhY3RvcjsKLQotICAgIGlmIChtX3NjYWxlID09IHNjYWxlICYmIG1fZGV2aWNlU2Nh
bGVGYWN0b3IgPT0gZGV2aWNlU2NhbGVGYWN0b3IpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFBM
QVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCi0g
ICAgVmVjdG9yPEZsb2F0UmVjdD4gZGlydHlSZWN0czsKLQotICAgIG1fZGV2aWNlU2NhbGVGYWN0
b3IgPSBkZXZpY2VTY2FsZUZhY3RvcjsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgW21fdGls
ZUNvbnRhaW5lckxheWVyLmdldCgpIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxl
KDEgLyBtX3NjYWxlLCAxIC8gbV9zY2FsZSwgMSldOwotCi0gICAgcmV2YWxpZGF0ZVRpbGVzKFBy
dW5lU2Vjb25kYXJ5VGlsZXMsIFBydW5lU2Vjb25kYXJ5VGlsZXMpOwotCi0gICAgZm9yIChUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5m
byA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldENvbnRlbnRz
U2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3JdOwotCi0gICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBy
ZWN0Rm9yVGlsZUluZGV4KGl0LT5rZXkpOwotICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJl
Y3QgPSB0aWxlUmVjdDsKLQotICAgICAgICBzY2FsZWRUaWxlUmVjdC5zY2FsZSgxIC8gbV9zY2Fs
ZSk7Ci0gICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJEaWRDcmVhdGVUaWxl
cyhkaXJ0eVJlY3RzKTsKLSNlbmRpZgotfQotCi12b2lkIFRpbGVDYWNoZTo6c2V0QWNjZWxlcmF0
ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQotewotI2lmIFBMQVRGT1JNKElPUykg
fHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCi0gICAgaWYgKG1fYWNj
ZWxlcmF0ZXNEcmF3aW5nID09IGFjY2VsZXJhdGVzRHJhd2luZykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPSBhY2NlbGVyYXRlc0RyYXdpbmc7Ci0KLSAgICBm
b3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBt
X3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZm8m
IHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0
QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5nXTsKLSAgICB9Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShhY2NlbGVyYXRlc0RyYXdpbmcpOwotI2VuZGlmCi19Ci0KLXZvaWQg
VGlsZUNhY2hlOjpzZXRUaWxlc09wYXF1ZShib29sIG9wYXF1ZSkKLXsKLSAgICBpZiAob3BhcXVl
ID09IG1fdGlsZXNBcmVPcGFxdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGlsZXNBcmVP
cGFxdWUgPSBvcGFxdWU7Ci0KLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBbdGlsZUlu
Zm8ubGF5ZXIuZ2V0KCkgc2V0T3BhcXVlOm9wYXF1ZV07Ci0gICAgfQotfQotCi12b2lkIFRpbGVD
YWNoZTo6c2V0VmlzaWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKLXsKLSAg
ICBpZiAobV92aXNpYmxlUmVjdCA9PSB2aXNpYmxlUmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV92aXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotICAgIHJldmFsaWRhdGVUaWxlcygpOwot
fQotCi12b2lkIFRpbGVDYWNoZTo6c2V0RXhwb3NlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBleHBv
c2VkUmVjdCkKLXsKLSAgICBpZiAobV9leHBvc2VkUmVjdCA9PSBleHBvc2VkUmVjdCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9leHBvc2VkUmVjdCA9IGV4cG9zZWRSZWN0OwotICAgIHJldmFs
aWRhdGVUaWxlcygpOwotfQotCi12b2lkIFRpbGVDYWNoZTo6c2V0Q2xpcHNUb0V4cG9zZWRSZWN0
KGJvb2wgY2xpcHNUb0V4cG9zZWRSZWN0KQotewotICAgIGlmIChtX2NsaXBzVG9FeHBvc2VkUmVj
dCA9PSBjbGlwc1RvRXhwb3NlZFJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpcHNU
b0V4cG9zZWRSZWN0ID0gY2xpcHNUb0V4cG9zZWRSZWN0OwotCi0gICAgLy8gR29pbmcgZnJvbSBu
b3QgY2xpcHBpbmcgdG8gY2xpcHBpbmcsIHdlIGRvbid0IG5lZWQgdG8gcmV2YWxpZGF0ZSByaWdo
dCBhd2F5LgotICAgIGlmIChjbGlwc1RvRXhwb3NlZFJlY3QpCi0gICAgICAgIHJldmFsaWRhdGVU
aWxlcygpOwotfQotCi12b2lkIFRpbGVDYWNoZTo6cHJlcG9wdWxhdGVSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBlbnN1cmVUaWxlc0ZvclJlY3QocmVjdCk7Ci19Ci0KLXZvaWQg
VGlsZUNhY2hlOjpzZXRJc0luV2luZG93KGJvb2wgaXNJbldpbmRvdykKLXsKLSAgICBpZiAobV9p
c0luV2luZG93ID09IGlzSW5XaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNJbldp
bmRvdyA9IGlzSW5XaW5kb3c7Ci0KLSAgICBpZiAobV9pc0luV2luZG93KQotICAgICAgICByZXZh
bGlkYXRlVGlsZXMoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgZG91YmxlIHRpbGVSZXZh
bGlkYXRpb25UaW1lb3V0ID0gNDsKLSAgICAgICAgc2NoZWR1bGVUaWxlUmV2YWxpZGF0aW9uKHRp
bGVSZXZhbGlkYXRpb25UaW1lb3V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpzZXRU
aWxlQ292ZXJhZ2UoVGlsZUNvdmVyYWdlIGNvdmVyYWdlKQotewotICAgIGlmIChjb3ZlcmFnZSA9
PSBtX3RpbGVDb3ZlcmFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90aWxlQ292ZXJhZ2Ug
PSBjb3ZlcmFnZTsKLSAgICBzY2hlZHVsZVRpbGVSZXZhbGlkYXRpb24oMCk7Ci19Ci0KLXZvaWQg
VGlsZUNhY2hlOjpmb3JjZVJlcGFpbnQoKQotewotICAgIHNldE5lZWRzRGlzcGxheSgpOwotfQot
Ci12b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9yZGVyV2lk
dGgpCi17Ci0gICAgaWYgKG1fdGlsZURlYnVnQm9yZGVyV2lkdGggPT0gYm9yZGVyV2lkdGgpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fdGlsZURlYnVnQm9yZGVyV2lkdGggPSBib3JkZXJXaWR0
aDsKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigp
LCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
VGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5ZXIu
Z2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07Ci0gICAgfQotfQot
Ci12b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ0dDb2xvclJlZiBib3Jk
ZXJDb2xvcikKLXsKLSAgICBpZiAobV90aWxlRGVidWdCb3JkZXJDb2xvciA9PSBib3JkZXJDb2xv
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90aWxlRGVidWdCb3JkZXJDb2xvciA9IGJvcmRl
ckNvbG9yOwotICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJl
Z2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBj
b25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5s
YXllci5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsK
LSAgICB9Ci19Ci0KLUludFJlY3QgVGlsZUNhY2hlOjpib3VuZHMoKSBjb25zdAotewotICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIEludFNpemUoW21fdGlsZUNhY2hlTGF5ZXIgYm91bmRz
XS5zaXplKSk7Ci19Ci0KLUludFJlY3QgVGlsZUNhY2hlOjpyZWN0Rm9yVGlsZUluZGV4KGNvbnN0
IFRpbGVJbmRleCYgdGlsZUluZGV4KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCh0aWxlSW5k
ZXgueCgpICogbV90aWxlU2l6ZS53aWR0aCgpLCB0aWxlSW5kZXgueSgpICogbV90aWxlU2l6ZS5o
ZWlnaHQoKSwgbV90aWxlU2l6ZS53aWR0aCgpLCBtX3RpbGVTaXplLmhlaWdodCgpKTsKLSAgICBJ
bnRSZWN0IHNjYWxlZEJvdW5kcyhib3VuZHMoKSk7Ci0gICAgc2NhbGVkQm91bmRzLnNjYWxlKG1f
c2NhbGUpOwotCi0gICAgcmVjdC5pbnRlcnNlY3Qoc2NhbGVkQm91bmRzKTsKLQotICAgIHJldHVy
biByZWN0OwotfQotCi12b2lkIFRpbGVDYWNoZTo6Z2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QsIFRpbGVJbmRleCYgdG9wTGVmdCwgVGlsZUluZGV4JiBib3R0b21S
aWdodCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGNsYW1wZWRSZWN0ID0gYm91bmRzKCk7Ci0gICAg
Y2xhbXBlZFJlY3Quc2NhbGUobV9zY2FsZSk7Ci0gICAgY2xhbXBlZFJlY3QuaW50ZXJzZWN0KHJl
Y3QpOwotCi0gICAgdG9wTGVmdC5zZXRYKG1heChjbGFtcGVkUmVjdC54KCkgLyBtX3RpbGVTaXpl
LndpZHRoKCksIDApKTsKLSAgICB0b3BMZWZ0LnNldFkobWF4KGNsYW1wZWRSZWN0LnkoKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCksIDApKTsKLQotICAgIGludCBib3R0b21YUmF0aW8gPSBjZWlsKChm
bG9hdCljbGFtcGVkUmVjdC5tYXhYKCkgLyBtX3RpbGVTaXplLndpZHRoKCkpOwotICAgIGJvdHRv
bVJpZ2h0LnNldFgobWF4KGJvdHRvbVhSYXRpbyAtIDEsIDApKTsKLQotICAgIGludCBib3R0b21Z
UmF0aW8gPSBjZWlsKChmbG9hdCljbGFtcGVkUmVjdC5tYXhZKCkgLyBtX3RpbGVTaXplLmhlaWdo
dCgpKTsKLSAgICBib3R0b21SaWdodC5zZXRZKG1heChib3R0b21ZUmF0aW8gLSAxLCAwKSk7Ci19
Ci0KLUZsb2F0UmVjdCBUaWxlQ2FjaGU6OmNvbXB1dGVUaWxlQ292ZXJhZ2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcHJldmlvdXNWaXNpYmxlUmVjdCkgY29uc3QKLXsKLSAgICBGbG9hdFJlY3Qgdmlz
aWJsZVJlY3QgPSBtX3Zpc2libGVSZWN0OwotCi0gICAgaWYgKG1fY2xpcHNUb0V4cG9zZWRSZWN0
KQotICAgICAgICB2aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9leHBvc2VkUmVjdCk7Ci0KLSAgICAv
LyBJZiB0aGUgcGFnZSBpcyBub3QgaW4gYSB3aW5kb3cgKGZvciBleGFtcGxlIGlmIGl0J3MgaW4g
YSBiYWNrZ3JvdW5kIHRhYiksIHdlIGxpbWl0IHRoZSB0aWxlIGNvdmVyYWdlIHJlY3QgdG8gdGhl
IHZpc2libGUgcmVjdC4KLSAgICAvLyBGdXJ0aGVybW9yZSwgaWYgdGhlIHBhZ2UgY2FuJ3QgaGF2
ZSBzY3JvbGxiYXJzIChmb3IgZXhhbXBsZSBpZiBpdHMgYm9keSBlbGVtZW50IGhhcyBvdmVyZmxv
dzpoaWRkZW4pIGl0J3MgdmVyeSB1bmxpa2VseSB0aGF0IHRoZQotICAgIC8vIHBhZ2Ugd2lsbCBl
dmVyIGJlIHNjcm9sbGVkIHNvIHdlIGxpbWl0IHRoZSB0aWxlIGNvdmVyYWdlIHJlY3QgYXMgd2Vs
bC4KLSAgICBpZiAoIW1faXNJbldpbmRvdyB8fCBtX3RpbGVDb3ZlcmFnZSAmIENvdmVyYWdlRm9y
U2xvd1Njcm9sbGluZykKLSAgICAgICAgcmV0dXJuIHZpc2libGVSZWN0OwotCi0gICAgYm9vbCBs
YXJnZVZpc2libGVSZWN0Q2hhbmdlID0gIXByZXZpb3VzVmlzaWJsZVJlY3QuaXNFbXB0eSgpICYm
ICF2aXNpYmxlUmVjdC5pbnRlcnNlY3RzKHByZXZpb3VzVmlzaWJsZVJlY3QpOwotICAgIAotICAg
IC8vIEZJWE1FOiBsb29rIGF0IGhvdyBmYXIgdGhlIGRvY3VtZW50IGNhbiBzY3JvbGwgaW4gZWFj
aCBkaW1lbnNpb24uCi0gICAgZmxvYXQgY292ZXJhZ2VIb3Jpem9udGFsU2l6ZSA9IHZpc2libGVS
ZWN0LndpZHRoKCk7Ci0gICAgZmxvYXQgY292ZXJhZ2VWZXJ0aWNhbFNpemUgPSB2aXNpYmxlUmVj
dC5oZWlnaHQoKTsKLSAgICAKLSAgICAvLyBJbmZsYXRlIHRoZSBjb3ZlcmFnZSByZWN0IHNvIHRo
YXQgaXQgY292ZXJzIDJ4IG9mIHRoZSB2aXNpYmxlIHdpZHRoIGFuZCAzeCBvZiB0aGUgdmlzaWJs
ZSBoZWlnaHQuCi0gICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUgY2hvc2VuIGJlY2F1c2UgaXQncyBt
b3JlIGNvbW1vbiB0byBoYXZlIHRhbGwgcGFnZXMgYW5kIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5LAot
ICAgIC8vIHNvIHdlIGtlZXAgbW9yZSB0aWxlcyBhYm92ZSBhbmQgYmVsb3cgdGhlIGN1cnJlbnQg
YXJlYS4KLSAgICBpZiAobV90aWxlQ292ZXJhZ2UgJiBDb3ZlcmFnZUZvckhvcml6b250YWxTY3Jv
bGxpbmcgJiYgIWxhcmdlVmlzaWJsZVJlY3RDaGFuZ2UpCi0gICAgICAgIGNvdmVyYWdlSG9yaXpv
bnRhbFNpemUgKj0gMjsKLQotICAgIGlmIChtX3RpbGVDb3ZlcmFnZSAmIENvdmVyYWdlRm9yVmVy
dGljYWxTY3JvbGxpbmcgJiYgIWxhcmdlVmlzaWJsZVJlY3RDaGFuZ2UpCi0gICAgICAgIGNvdmVy
YWdlVmVydGljYWxTaXplICo9IDM7Ci0KLSAgICAvLyBEb24ndCBleHRlbmQgY292ZXJhZ2UgYmVm
b3JlIDAgb3IgYWZ0ZXIgdGhlIGVuZC4KLSAgICBGbG9hdFJlY3QgY292ZXJhZ2VCb3VuZHMgPSBi
b3VuZHMoKTsKLSAgICBmbG9hdCBjb3ZlcmFnZUxlZnQgPSB2aXNpYmxlUmVjdC54KCkgLSAoY292
ZXJhZ2VIb3Jpem9udGFsU2l6ZSAtIHZpc2libGVSZWN0LndpZHRoKCkpIC8gMjsKLSAgICBjb3Zl
cmFnZUxlZnQgPSBtaW4oY292ZXJhZ2VMZWZ0LCBjb3ZlcmFnZUJvdW5kcy5tYXhYKCkgLSBjb3Zl
cmFnZUhvcml6b250YWxTaXplKTsKLSAgICBjb3ZlcmFnZUxlZnQgPSBtYXgoY292ZXJhZ2VMZWZ0
LCBjb3ZlcmFnZUJvdW5kcy54KCkpOwotCi0gICAgZmxvYXQgY292ZXJhZ2VUb3AgPSB2aXNpYmxl
UmVjdC55KCkgLSAoY292ZXJhZ2VWZXJ0aWNhbFNpemUgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkg
LyAyOwotICAgIGNvdmVyYWdlVG9wID0gbWluKGNvdmVyYWdlVG9wLCBjb3ZlcmFnZUJvdW5kcy5t
YXhZKCkgLSBjb3ZlcmFnZVZlcnRpY2FsU2l6ZSk7Ci0gICAgY292ZXJhZ2VUb3AgPSBtYXgoY292
ZXJhZ2VUb3AsIGNvdmVyYWdlQm91bmRzLnkoKSk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KGNv
dmVyYWdlTGVmdCwgY292ZXJhZ2VUb3AsIGNvdmVyYWdlSG9yaXpvbnRhbFNpemUsIGNvdmVyYWdl
VmVydGljYWxTaXplKTsKLX0KLQotSW50U2l6ZSBUaWxlQ2FjaGU6OnRpbGVTaXplRm9yQ292ZXJh
Z2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgY292ZXJhZ2VSZWN0KSBjb25zdAotewotICAgIGlmICht
X3RpbGVDb3ZlcmFnZSAmIENvdmVyYWdlRm9yU2xvd1Njcm9sbGluZykgewotICAgICAgICBGbG9h
dFNpemUgdGlsZVNpemUgPSBjb3ZlcmFnZVJlY3Quc2l6ZSgpOwotICAgICAgICB0aWxlU2l6ZS5z
Y2FsZShtX3NjYWxlKTsKLSAgICAgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZSh0aWxlU2l6ZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEludFNpemUoZGVmYXVsdFRpbGVDYWNoZVdpZHRoLCBkZWZh
dWx0VGlsZUNhY2hlSGVpZ2h0KTsKLX0KLQotdm9pZCBUaWxlQ2FjaGU6OnNjaGVkdWxlVGlsZVJl
dmFsaWRhdGlvbihkb3VibGUgaW50ZXJ2YWwpCi17Ci0gICAgaWYgKG1fdGlsZVJldmFsaWRhdGlv
blRpbWVyLmlzQWN0aXZlKCkgJiYgbV90aWxlUmV2YWxpZGF0aW9uVGltZXIubmV4dEZpcmVJbnRl
cnZhbCgpIDwgaW50ZXJ2YWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGlsZVJldmFsaWRh
dGlvblRpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjp0
aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxlQ2FjaGU+KikKLXsKLSAgICBUaWxl
VmFsaWRhdGlvblBvbGljeUZsYWdzIGZvcmVncm91bmRWYWxpZGF0aW9uUG9saWN5ID0gbV9hZ2dy
ZXNzaXZlbHlSZXRhaW5zVGlsZXMgPyAwIDogUHJ1bmVTZWNvbmRhcnlUaWxlczsKLSAgICBUaWxl
VmFsaWRhdGlvblBvbGljeUZsYWdzIGJhY2tncm91bmRWYWxpZGF0aW9uUG9saWN5ID0gZm9yZWdy
b3VuZFZhbGlkYXRpb25Qb2xpY3kgfCBVbnBhcmVudEFsbFRpbGVzOwotCi0gICAgcmV2YWxpZGF0
ZVRpbGVzKGZvcmVncm91bmRWYWxpZGF0aW9uUG9saWN5LCBiYWNrZ3JvdW5kVmFsaWRhdGlvblBv
bGljeSk7Ci19Ci0KLXVuc2lnbmVkIFRpbGVDYWNoZTo6YmxhbmtQaXhlbENvdW50KCkgY29uc3QK
LXsKLSAgICBXZWJUaWxlTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMuc2l6ZSgpKTsKLQotICAgIGZv
ciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1f
dGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdGlsZXMuYXBwZW5kKGl0LT52
YWx1ZS5sYXllcik7Ci0KLSAgICByZXR1cm4gYmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMs
IG1fdmlzaWJsZVJlY3QsIEludFBvaW50KDAsMCkpOwotfQotCi11bnNpZ25lZCBUaWxlQ2FjaGU6
OmJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVMYXllckxpc3QmIHRpbGVzLCBj
b25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQb2ludCYgdGlsZVRyYW5zbGF0
aW9uKQotewotICAgIFJlZ2lvbiBwYWludGVkVmlzaWJsZVRpbGVzOwotCi0gICAgZm9yIChXZWJU
aWxlTGF5ZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbGVzLmJlZ2luKCksIGVuZCA9IHRp
bGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgV2ViVGlsZUxheWVy
KiB0aWxlTGF5ZXIgPSBpdC0+Z2V0KCk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHZpc2libGVQYXJ0
KENHUmVjdE9mZnNldChbdGlsZUxheWVyIGZyYW1lXSwgdGlsZVRyYW5zbGF0aW9uLngoKSwgdGls
ZVRyYW5zbGF0aW9uLnkoKSkpOwotICAgICAgICB2aXNpYmxlUGFydC5pbnRlcnNlY3QodmlzaWJs
ZVJlY3QpOwotCi0gICAgICAgIGlmICghdmlzaWJsZVBhcnQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcGFpbnRlZFZpc2libGVUaWxlcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVQYXJ0
KSk7Ci0gICAgfQotCi0gICAgUmVnaW9uIHVuY292ZXJlZFJlZ2lvbihlbmNsb3NpbmdJbnRSZWN0
KHZpc2libGVSZWN0KSk7Ci0gICAgdW5jb3ZlcmVkUmVnaW9uLnN1YnRyYWN0KHBhaW50ZWRWaXNp
YmxlVGlsZXMpOwotCi0gICAgcmV0dXJuIHVuY292ZXJlZFJlZ2lvbi50b3RhbEFyZWEoKTsKLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlVGlsZUZvclJlbW92YWwoY29uc3QgVGlsZUNhY2hl
OjpUaWxlSW5kZXgmIHRpbGVJbmRleCwgY29uc3QgVGlsZUNhY2hlOjpUaWxlSW5mbyYgdGlsZUlu
Zm8sIFZlY3RvcjxUaWxlQ2FjaGU6OlRpbGVJbmRleD4mIHRpbGVzVG9SZW1vdmUpCi17Ci0gICAg
V2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKLSAgICBbdGls
ZUxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbdGlsZUxheWVyIHNldFRpbGVDYWNo
ZTowXTsKLSAgICB0aWxlc1RvUmVtb3ZlLmFwcGVuZCh0aWxlSW5kZXgpOwotfQotCi12b2lkIFRp
bGVDYWNoZTo6cmVtb3ZlQWxsVGlsZXMoKQotewotICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVz
VG9SZW1vdmU7Ci0KLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHF1ZXVl
VGlsZUZvclJlbW92YWwoaXQtPmtleSwgaXQtPnZhbHVlLCB0aWxlc1RvUmVtb3ZlKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewotICAg
ICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsK
LSAgICAgICAgTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmFkZExheWVyKHRpbGVJbmZvLmxheWVy
KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpyZW1vdmVBbGxTZWNvbmRhcnlUaWxlcygp
Ci17Ci0gICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKLQotICAgIGZvciAoVGls
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBp
dC0+dmFsdWU7Ci0gICAgICAgIGlmICh0aWxlSW5mby5jb2hvcnQgPT0gVmlzaWJsZVRpbGVDb2hv
cnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBxdWV1ZVRpbGVGb3JSZW1vdmFs
KGl0LT5rZXksIGl0LT52YWx1ZSwgdGlsZXNUb1JlbW92ZSk7Ci0gICAgfQotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRp
bGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOwotICAgICAg
ICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIodGlsZUluZm8ubGF5ZXIpOwotICAg
IH0KLX0KLQotdm9pZCBUaWxlQ2FjaGU6OnJlbW92ZVRpbGVzSW5Db2hvcnQoVGlsZUNvaG9ydCBj
b2hvcnQpCi17Ci0gICAgQVNTRVJUKGNvaG9ydCAhPSBWaXNpYmxlVGlsZUNvaG9ydCk7Ci0gICAg
VmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKLQotICAgIGZvciAoVGlsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7
Ci0gICAgICAgIGlmICh0aWxlSW5mby5jb2hvcnQgIT0gY29ob3J0KQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgcXVldWVUaWxlRm9yUmVtb3ZhbChpdC0+a2V5LCBpdC0+dmFsdWUs
IHRpbGVzVG9SZW1vdmUpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGls
ZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewotICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1f
dGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKLSAgICAgICAgTGF5ZXJQb29sOjpzaGFyZWRQ
b29sKCktPmFkZExheWVyKHRpbGVJbmZvLmxheWVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGlsZUNh
Y2hlOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5k
VmFsaWRhdGlvblBvbGljeSwgVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFs
aWRhdGlvblBvbGljeSkKLXsKLSAgICAvLyBJZiB0aGUgdW5kZXJseWluZyBQbGF0Zm9ybUxheWVy
IGhhcyBiZWVuIGRlc3Ryb3llZCwgYnV0IHRoZSBXZWJUaWxlQ2FjaGVMYXllciBoYXNuJ3QKLSAg
ICAvLyBwbGF0Zm9ybUxheWVyIHdpbGwgYmUgbnVsbCBoZXJlLgotICAgIFBsYXRmb3JtQ0FMYXll
ciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGls
ZUNhY2hlTGF5ZXIpOwotICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbV92aXNpYmxlUmVjdDsKLQotICAgIGlmICht
X2NsaXBzVG9FeHBvc2VkUmVjdCkKLSAgICAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fZXhw
b3NlZFJlY3QpOwotCi0gICAgaWYgKHZpc2libGVSZWN0LmlzRW1wdHkoKSB8fCBib3VuZHMoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBUaWxlVmFsaWRhdGlvblBvbGlj
eUZsYWdzIHZhbGlkYXRpb25Qb2xpY3kgPSBtX2lzSW5XaW5kb3cgPyBmb3JlZ3JvdW5kVmFsaWRh
dGlvblBvbGljeSA6IGJhY2tncm91bmRWYWxpZGF0aW9uUG9saWN5OwotICAgIAotICAgIEZsb2F0
UmVjdCB0aWxlQ292ZXJhZ2VSZWN0ID0gY29tcHV0ZVRpbGVDb3ZlcmFnZVJlY3QobV92aXNpYmxl
UmVjdEF0TGFzdFJldmFsaWRhdGUpOwotICAgIEZsb2F0UmVjdCBzY2FsZWRSZWN0KHRpbGVDb3Zl
cmFnZVJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9zY2FsZSk7Ci0gICAgSW50UmVjdCBj
b3ZlcmFnZVJlY3RJblRpbGVDb29yZHMoZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KSk7Ci0K
LSAgICBJbnRTaXplIG9sZFRpbGVTaXplID0gbV90aWxlU2l6ZTsKLSAgICBtX3RpbGVTaXplID0g
dGlsZVNpemVGb3JDb3ZlcmFnZVJlY3QodGlsZUNvdmVyYWdlUmVjdCk7Ci0gICAgYm9vbCB0aWxl
U2l6ZUNoYW5nZWQgPSBtX3RpbGVTaXplICE9IG9sZFRpbGVTaXplOwotCi0gICAgaWYgKHRpbGVT
aXplQ2hhbmdlZCkgewotICAgICAgICByZW1vdmVBbGxUaWxlcygpOwotICAgICAgICBtX2NvaG9y
dExpc3QuY2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBUaWxlQ29ob3J0IGN1cnJDb2hv
cnQgPSBuZXh0VGlsZUNvaG9ydCgpOwotICAgICAgICB1bnNpZ25lZCB0aWxlc0luQ29ob3J0ID0g
MDsKLSAgICAgICAgCi0gICAgICAgIC8vIE1vdmUgdGlsZXMgbmV3bHkgb3V0c2lkZSB0aGUgY292
ZXJhZ2UgcmVjdCBpbnRvIHRoZSBjb2hvcnQgbWFwLgotICAgICAgICBmb3IgKFRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsK
LSAgICAgICAgICAgIFRpbGVJbmRleCB0aWxlSW5kZXggPSBpdC0+a2V5OwotCi0gICAgICAgICAg
ICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwotICAgICAg
ICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKLSAg
ICAgICAgICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGNvdmVyYWdlUmVjdEluVGlsZUNvb3Jk
cykpIHsKLSAgICAgICAgICAgICAgICB0aWxlSW5mby5jb2hvcnQgPSBWaXNpYmxlVGlsZUNvaG9y
dDsKLSAgICAgICAgICAgICAgICBpZiAodGlsZUluZm8uaGFzU3RhbGVDb250ZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzdG9yZSBhIGRpcnR5IHJlZ2lvbiBwZXIgbGF5ZXI/
Ci0gICAgICAgICAgICAgICAgICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICAg
ICAgICAgICAgICAgICAgdGlsZUluZm8uaGFzU3RhbGVDb250ZW50ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBBZGQg
dG8gdGhlIGN1cnJlbnRDb2hvcnQgaWYgbm90IGFscmVhZHkgaW4gb25lLgotICAgICAgICAgICAg
ICAgIGlmICh0aWxlSW5mby5jb2hvcnQgPT0gVmlzaWJsZVRpbGVDb2hvcnQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGlsZUluZm8uY29ob3J0ID0gY3VyckNvaG9ydDsKLSAgICAgICAgICAgICAg
ICAgICAgKyt0aWxlc0luQ29ob3J0OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHRpbGVzSW5Db2hvcnQpCi0gICAgICAgICAgICBzdGFydGVkTmV3Q29ob3J0KGN1cnJD
b2hvcnQpOwotCi0gICAgICAgIGlmICghbV9hZ2dyZXNzaXZlbHlSZXRhaW5zVGlsZXMpCi0gICAg
ICAgICAgICBzY2hlZHVsZUNvaG9ydFJlbW92YWwoKTsKLSAgICB9Ci0KLSAgICBUaWxlSW5kZXgg
dG9wTGVmdDsKLSAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7Ci0gICAgZ2V0VGlsZUluZGV4UmFu
Z2VGb3JSZWN0KGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcywgdG9wTGVmdCwgYm90dG9tUmlnaHQp
OwotCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gZGlydHlSZWN0czsKLSAgICAKLSAgICAvLyBFbnN1
cmUgcHJpbWFyeSB0aWxlIGNvdmVyYWdlIHRpbGVzLgotICAgIG1fcHJpbWFyeVRpbGVDb3ZlcmFn
ZVJlY3QgPSBJbnRSZWN0KCk7Ci0KLSAgICBmb3IgKGludCB5ID0gdG9wTGVmdC55KCk7IHkgPD0g
Ym90dG9tUmlnaHQueSgpOyArK3kpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHRvcExlZnQueCgp
OyB4IDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggdGls
ZUluZGV4KHgsIHkpOwotCi0gICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRp
bGVJbmRleCh0aWxlSW5kZXgpOwotICAgICAgICAgICAgbV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVj
dC51bml0ZSh0aWxlUmVjdCk7Ci0KLSAgICAgICAgICAgIFRpbGVJbmZvJiB0aWxlSW5mbyA9IG1f
dGlsZXMuYWRkKHRpbGVJbmRleCwgVGlsZUluZm8oKSkuaXRlcmF0b3ItPnZhbHVlOwotICAgICAg
ICAgICAgaWYgKCF0aWxlSW5mby5sYXllcikgewotICAgICAgICAgICAgICAgIHRpbGVJbmZvLmxh
eWVyID0gY3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1f
dW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMgfHwgbV9pc0luV2luZG93KQotICAgICAgICAgICAgICAg
ICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUluZm8ubGF5
ZXIuZ2V0KCldOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoKCFt
X3VucGFyZW50c09mZnNjcmVlblRpbGVzIHx8IG1faXNJbldpbmRvdykgJiYgIVt0aWxlSW5mby5s
YXllci5nZXQoKSBzdXBlcmxheWVyXSkKLSAgICAgICAgICAgICAgICAgICAgW21fdGlsZUNvbnRh
aW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVJbmZvLmxheWVyLmdldCgpXTsKLQotICAg
ICAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIGxheWVyIGZvciB0aGlzIHRpbGUuIEVu
c3VyZSB0aGF0IGl0cyBzaXplIGlzIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgRmxvYXRTaXpl
IHRpbGVMYXllclNpemUoW3RpbGVJbmZvLmxheWVyLmdldCgpIGZyYW1lXS5zaXplKTsKLSAgICAg
ICAgICAgICAgICBpZiAodGlsZUxheWVyU2l6ZSA9PSBGbG9hdFNpemUodGlsZVJlY3Quc2l6ZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBbdGls
ZUluZm8ubGF5ZXIuZ2V0KCkgc2V0RnJhbWU6dGlsZVJlY3RdOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJlY3QgPSB0aWxlUmVj
dDsKLSAgICAgICAgICAgIHNjYWxlZFRpbGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsKLSAgICAg
ICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICh2YWxpZGF0aW9uUG9saWN5ICYgUHJ1bmVTZWNvbmRhcnlUaWxlcykgewot
ICAgICAgICByZW1vdmVBbGxTZWNvbmRhcnlUaWxlcygpOwotICAgICAgICBtX2NvaG9ydExpc3Qu
Y2xlYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAobV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcyAmJiAo
dmFsaWRhdGlvblBvbGljeSAmIFVucGFyZW50QWxsVGlsZXMpKSB7Ci0gICAgICAgIGZvciAoVGls
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIFtpdC0+dmFsdWUubGF5ZXIuZ2V0KCkgcmVt
b3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIH0KLSAgICAKLSAgICBpZiAobV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyKQotICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKTsKLQotICAg
IG1fdmlzaWJsZVJlY3RBdExhc3RSZXZhbGlkYXRlID0gdmlzaWJsZVJlY3Q7Ci0KLSAgICBpZiAo
ZGlydHlSZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwbGF0Zm9ybUxheWVy
LT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJEaWRDcmVhdGVUaWxlcyhkaXJ0eVJlY3RzKTsKLX0K
LQotVGlsZUNhY2hlOjpUaWxlQ29ob3J0IFRpbGVDYWNoZTo6bmV4dFRpbGVDb2hvcnQoKSBjb25z
dAotewotICAgIGlmICghbV9jb2hvcnRMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1f
Y29ob3J0TGlzdC5sYXN0KCkuY29ob3J0ICsgMTsKLQotICAgIHJldHVybiAxOwotfQotCi12b2lk
IFRpbGVDYWNoZTo6c3RhcnRlZE5ld0NvaG9ydChUaWxlQ29ob3J0IGNvaG9ydCkKLXsKLSAgICBt
X2NvaG9ydExpc3QuYXBwZW5kKFRpbGVDb2hvcnRJbmZvKGNvaG9ydCwgbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkpKTsKLX0KLQotVGlsZUNhY2hlOjpUaWxlQ29ob3J0IFRpbGVDYWNoZTo6
bmV3ZXN0VGlsZUNvaG9ydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29ob3J0TGlzdC5pc0Vt
cHR5KCkgPyAwIDogbV9jb2hvcnRMaXN0Lmxhc3QoKS5jb2hvcnQ7Ci19Ci0KLVRpbGVDYWNoZTo6
VGlsZUNvaG9ydCBUaWxlQ2FjaGU6Om9sZGVzdFRpbGVDb2hvcnQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2NvaG9ydExpc3QuaXNFbXB0eSgpID8gMCA6IG1fY29ob3J0TGlzdC5maXJzdCgpLmNv
aG9ydDsKLX0KLQotdm9pZCBUaWxlQ2FjaGU6OnNjaGVkdWxlQ29ob3J0UmVtb3ZhbCgpCi17Ci0g
ICAgY29uc3QgZG91YmxlIGNvaG9ydFJlbW92YWxUaW1lclNlY29uZHMgPSAxOwotCi0gICAgLy8g
U3RhcnQgdGhlIHRpbWVyLCBvciByZXNjaGVkdWxlIHRoZSB0aW1lciBmcm9tIG5vdyBpZiBpdCdz
IGFscmVhZHkgYWN0aXZlLgotICAgIGlmICghbV9jb2hvcnRSZW1vdmFsVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgbV9jb2hvcnRSZW1vdmFsVGltZXIuc3RhcnRSZXBlYXRpbmcoY29ob3J0UmVt
b3ZhbFRpbWVyU2Vjb25kcyk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpjb2hvcnRSZW1vdmFsVGlt
ZXJGaXJlZChUaW1lcjxUaWxlQ2FjaGU+KikKLXsKLSAgICBpZiAobV9jb2hvcnRMaXN0LmlzRW1w
dHkoKSkgewotICAgICAgICBtX2NvaG9ydFJlbW92YWxUaW1lci5zdG9wKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBkb3VibGUgY29ob3J0TGlmZVRpbWVTZWNvbmRzID0gMjsKLSAg
ICBkb3VibGUgdGltZVRocmVzaG9sZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0g
Y29ob3J0TGlmZVRpbWVTZWNvbmRzOwotCi0gICAgd2hpbGUgKCFtX2NvaG9ydExpc3QuaXNFbXB0
eSgpICYmIG1fY29ob3J0TGlzdC5maXJzdCgpLmNyZWF0aW9uVGltZSA8IHRpbWVUaHJlc2hvbGQp
IHsKLSAgICAgICAgVGlsZUNvaG9ydEluZm8gZmlyc3RDb2hvcnQgPSBtX2NvaG9ydExpc3QudGFr
ZUZpcnN0KCk7Ci0gICAgICAgIHJlbW92ZVRpbGVzSW5Db2hvcnQoZmlyc3RDb2hvcnQuY29ob3J0
KTsKLSAgICB9Ci0KLSAgICBpZiAobV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKQotICAg
ICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKTsKLX0KLQotdm9pZCBUaWxlQ2FjaGU6OmVuc3Vy
ZVRpbGVzRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKG1fdW5wYXJl
bnRzT2Zmc2NyZWVuVGlsZXMgJiYgIW1faXNJbldpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0
Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBz
Y2FsZWRSZWN0LnNjYWxlKG1fc2NhbGUpOwotICAgIEludFJlY3QgcmVjdEluVGlsZUNvb3Jkcyhl
bmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3QpKTsKLQotICAgIGlmIChtX3ByaW1hcnlUaWxlQ292
ZXJhZ2VSZWN0LmNvbnRhaW5zKHJlY3RJblRpbGVDb29yZHMpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBUaWxlSW5kZXggdG9wTGVmdDsKLSAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7Ci0gICAg
Z2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KHJlY3RJblRpbGVDb29yZHMsIHRvcExlZnQsIGJvdHRv
bVJpZ2h0KTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5UmVjdHM7Ci0gICAgVGlsZUNv
aG9ydCBjdXJyQ29ob3J0ID0gbmV4dFRpbGVDb2hvcnQoKTsKLSAgICB1bnNpZ25lZCB0aWxlc0lu
Q29ob3J0ID0gMDsKLQotICAgIGZvciAoaW50IHkgPSB0b3BMZWZ0LnkoKTsgeSA8PSBib3R0b21S
aWdodC55KCk7ICsreSkgewotICAgICAgICBmb3IgKGludCB4ID0gdG9wTGVmdC54KCk7IHggPD0g
Ym90dG9tUmlnaHQueCgpOyArK3gpIHsKLSAgICAgICAgICAgIFRpbGVJbmRleCB0aWxlSW5kZXgo
eCwgeSk7Ci0KLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4
KHRpbGVJbmRleCk7Ci0gICAgICAgICAgICBUaWxlSW5mbyYgdGlsZUluZm8gPSBtX3RpbGVzLmFk
ZCh0aWxlSW5kZXgsIFRpbGVJbmZvKCkpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgIGlm
ICghdGlsZUluZm8ubGF5ZXIpIHsKLSAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllciA9IGNy
ZWF0ZVRpbGVMYXllcih0aWxlUmVjdCk7Ci0gICAgICAgICAgICAgICAgW21fdGlsZUNvbnRhaW5l
ckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVJbmZvLmxheWVyLmdldCgpXTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFbdGlsZUluZm8ubGF5ZXIuZ2V0KCkg
c3VwZXJsYXllcl0pCi0gICAgICAgICAgICAgICAgICAgIFttX3RpbGVDb250YWluZXJMYXllci5n
ZXQoKSBhZGRTdWJsYXllcjp0aWxlSW5mby5sYXllci5nZXQoKV07Ci0KLSAgICAgICAgICAgICAg
ICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBsYXllciBmb3IgdGhpcyB0aWxlLiBFbnN1cmUgdGhhdCBp
dHMgc2l6ZSBpcyBjb3JyZWN0LgotICAgICAgICAgICAgICAgIENHU2l6ZSB0aWxlTGF5ZXJTaXpl
ID0gW3RpbGVJbmZvLmxheWVyLmdldCgpIGZyYW1lXS5zaXplOwotICAgICAgICAgICAgICAgIGlm
ICh0aWxlTGF5ZXJTaXplLndpZHRoID49IHRpbGVSZWN0LndpZHRoKCkgJiYgdGlsZUxheWVyU2l6
ZS5oZWlnaHQgPj0gdGlsZVJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRGcmFtZTp0aWxl
UmVjdF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdGlsZVJlY3QuaW50ZXJz
ZWN0cyhtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0KSkgewotICAgICAgICAgICAgICAgIHRpbGVJ
bmZvLmNvaG9ydCA9IGN1cnJDb2hvcnQ7Ci0gICAgICAgICAgICAgICAgKyt0aWxlc0luQ29ob3J0
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJlY3Qg
PSB0aWxlUmVjdDsKLSAgICAgICAgICAgIHNjYWxlZFRpbGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxl
KTsKLSAgICAgICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAodGlsZXNJbkNvaG9ydCkKLSAgICAgICAgc3RhcnRl
ZE5ld0NvaG9ydChjdXJyQ29ob3J0KTsKLQotICAgIGlmIChtX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIpCi0gICAgICAgIHVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCgpOwotCi0gICAgaWYgKCFk
aXJ0eVJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcGxhdGZvcm1MYXllci0+b3duZXIoKS0+cGxh
dGZvcm1DQUxheWVyRGlkQ3JlYXRlVGlsZXMoZGlydHlSZWN0cyk7Ci19Ci0KLXZvaWQgVGlsZUNh
Y2hlOjp1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKQotewotICAgIEZsb2F0UmVjdCBjb250YWluZXJC
b3VuZHMgPSBib3VuZHMoKTsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNp
YmxlUmVjdCgpOwotCi0gICAgaWYgKG1fY2xpcHNUb0V4cG9zZWRSZWN0KQotICAgICAgICB2aXNp
YmxlUmVjdC5pbnRlcnNlY3QobV9leHBvc2VkUmVjdCk7Ci0KLSAgICB2aXNpYmxlUmVjdC5jb250
cmFjdCg0LCA0KTsgLy8gTGF5ZXIgaXMgcG9zaXRpb25lZCAycHggZnJvbSB0b3AgYW5kIGxlZnQg
ZWRnZXMuCi0KLSAgICBmbG9hdCB3aWR0aFNjYWxlID0gMTsKLSAgICBmbG9hdCBzY2FsZSA9IDE7
Ci0gICAgaWYgKCFjb250YWluZXJCb3VuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHdpZHRoU2Nh
bGUgPSBzdGQ6Om1pbjxmbG9hdD4odmlzaWJsZVJlY3Qud2lkdGgoKSAvIGNvbnRhaW5lckJvdW5k
cy53aWR0aCgpLCAwLjEpOwotICAgICAgICBzY2FsZSA9IHN0ZDo6bWluKHdpZHRoU2NhbGUsIHZp
c2libGVSZWN0LmhlaWdodCgpIC8gY29udGFpbmVyQm91bmRzLmhlaWdodCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgZmxvYXQgaW5kaWNhdG9yU2NhbGUgPSBzY2FsZSAqIG1fc2NhbGU7Ci0gICAgRmxv
YXRSZWN0IG1hcEJvdW5kcyA9IGNvbnRhaW5lckJvdW5kczsKLSAgICBtYXBCb3VuZHMuc2NhbGUo
aW5kaWNhdG9yU2NhbGUsIGluZGljYXRvclNjYWxlKTsKLSAgICAKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICBpZiAobV9jbGlwc1RvRXhwb3NlZFJlY3QpCi0gICAg
ICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0UG9zaXRpb246bV9l
eHBvc2VkUmVjdC5sb2NhdGlvbigpICsgRmxvYXRQb2ludCgyLCAyKV07Ci0gICAgZWxzZQotICAg
ICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOkNH
UG9pbnRNYWtlKDIsIDIpXTsKLQotICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIu
Z2V0KCkgc2V0Qm91bmRzOm1hcEJvdW5kc107Ci0gICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwotCi0gICAgdmlzaWJsZVJlY3Quc2NhbGUo
aW5kaWNhdG9yU2NhbGUsIGluZGljYXRvclNjYWxlKTsKLSAgICB2aXNpYmxlUmVjdC5leHBhbmQo
MiwgMik7Ci0gICAgW1ttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgdmlzaWJs
ZVJlY3RGcmFtZUxheWVyXSBzZXRGcmFtZTp2aXNpYmxlUmVjdF07Ci0KLSAgICBDb2xvciBiYWNr
Z3JvdW5kQ29sb3I7Ci0gICAgc3dpdGNoIChtX2luZGljYXRvck1vZGUpIHsKLSAgICBjYXNlIE1h
aW5UaHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUluZGljYXRpb246Ci0gICAgICAgIGJhY2tn
cm91bmRDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TWFpblRocmVhZFNjcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJbmRpY2F0aW9uOgotICAg
ICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVGhyZWFkZWRTY3JvbGxpbmdJbmRpY2F0aW9uOgotICAgICAgICBiYWNrZ3Jv
dW5kQ29sb3IgPSBDb2xvcigwLCAyMDAsIDApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBbW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSB2aXNpYmxlUmVjdEZyYW1l
TGF5ZXJdIHNldEJvcmRlckNvbG9yOmNhY2hlZENHQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKV07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi19Ci0K
LUludFJlY3QgVGlsZUNhY2hlOjp0aWxlR3JpZEV4dGVudCgpIGNvbnN0Ci17Ci0gICAgVGlsZUlu
ZGV4IHRvcExlZnQ7Ci0gICAgVGlsZUluZGV4IGJvdHRvbVJpZ2h0OwotICAgIGdldFRpbGVJbmRl
eFJhbmdlRm9yUmVjdChtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0LCB0b3BMZWZ0LCBib3R0b21S
aWdodCk7Ci0KLSAgICAvLyBSZXR1cm4gaW5kZXggb2YgdG9wLCBsZWZ0IHRpbGUgYW5kIHRoZSBu
dW1iZXIgb2YgdGlsZXMgYWNyb3NzIGFuZCBkb3duLgotICAgIHJldHVybiBJbnRSZWN0KHRvcExl
ZnQueCgpLCB0b3BMZWZ0LnkoKSwgYm90dG9tUmlnaHQueCgpIC0gdG9wTGVmdC54KCkgKyAxLCBi
b3R0b21SaWdodC55KCkgLSB0b3BMZWZ0LnkoKSArIDEpOwotfQotCi0vLyBSZXR1cm4gdGhlIHJl
Y3QgaW4gbGF5ZXIgY29vcmRzLCBub3QgdGlsZSBjb29yZHMuCi1JbnRSZWN0IFRpbGVDYWNoZTo6
dGlsZUNvdmVyYWdlUmVjdCgpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBjb3ZlcmFnZVJlY3RJbkxh
eWVyQ29vcmRzKG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3QpOwotICAgIGNvdmVyYWdlUmVjdElu
TGF5ZXJDb29yZHMuc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgIHJldHVybiBjb3ZlcmFnZVJlY3RJ
bkxheWVyQ29vcmRzOwotfQotCi1DQUxheWVyICpUaWxlQ2FjaGU6OnRpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yTGF5ZXIoKQotewotICAgIGlmICghbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
KSB7Ci0gICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciA9IFtXZWJUaWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyIGxheWVyXTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllci5nZXQoKSBzZXRUaWxlQ2FjaGU6dGhpc107Ci0gICAgICAgIFttX3RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eTowLjc1XTsKLSAgICAgICAg
W21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1Bv
aW50WmVyb107Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkg
c2V0Qm9yZGVyQ29sb3I6Y2FjaGVkQ0dDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZp
Y2VSR0IpXTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBz
ZXRCb3JkZXJXaWR0aDoxXTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
ci5nZXQoKSBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgyLCAyKV07Ci0gICAgICAgIHVwZGF0ZVRp
bGVDb3ZlcmFnZU1hcCgpOwotICAgIH0KLQotICAgIHJldHVybiBtX3RpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yTGF5ZXIuZ2V0KCk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpzZXRTY3JvbGxpbmdNb2Rl
SW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbiBzY3JvbGxpbmdNb2RlKQotewotICAg
IGlmIChzY3JvbGxpbmdNb2RlID09IG1faW5kaWNhdG9yTW9kZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbmRpY2F0b3JNb2RlID0gc2Nyb2xsaW5nTW9kZTsKLQotICAgIGlmIChtX3RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIpCi0gICAgICAgIHVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCgp
OwotfQotCi1XZWJUaWxlTGF5ZXIqIFRpbGVDYWNoZTo6dGlsZUxheWVyQXRJbmRleChjb25zdCBU
aWxlSW5kZXgmIGluZGV4KSBjb25zdAotewotICAgIHJldHVybiBtX3RpbGVzLmdldChpbmRleCku
bGF5ZXIuZ2V0KCk7Ci19Ci0KLVJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IFRpbGVDYWNoZTo6Y3Jl
YXRlVGlsZUxheWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQotewotICAgIFJldGFpblB0cjxX
ZWJUaWxlTGF5ZXI+IGxheWVyID0gTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPnRha2VMYXllcldp
dGhTaXplKHRpbGVSZWN0LnNpemUoKSk7Ci0gICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIC8vIElm
IHdlIHdlcmUgYWJsZSB0byByZXN0b3JlIGEgbGF5ZXIgZnJvbSB0aGUgTGF5ZXJQb29sLCB3ZSBz
aG91bGQgY2FsbCBzZXROZWVkc0Rpc3BsYXkgdG8KLSAgICAgICAgLy8gZW5zdXJlIHdlIGF2b2lk
IHN0YWxlIGNvbnRlbnQuCi0gICAgICAgIFtsYXllciByZXNldFBhaW50Q291bnRdOwotICAgICAg
ICBbbGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGF5ZXIgPSBh
ZG9wdE5TKFtbV2ViVGlsZUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2xheWVyLmdldCgpIHNl
dEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0RnJhbWU6dGls
ZVJlY3RdOwotICAgIFtsYXllci5nZXQoKSBzZXRUaWxlQ2FjaGU6dGhpc107Ci0gICAgW2xheWVy
LmdldCgpIHNldEJvcmRlckNvbG9yOm1fdGlsZURlYnVnQm9yZGVyQ29sb3IuZ2V0KCldOwotICAg
IFtsYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsKLSAg
ICBbbGF5ZXIuZ2V0KCkgc2V0RWRnZUFudGlhbGlhc2luZ01hc2s6MF07Ci0gICAgW2xheWVyLmdl
dCgpIHNldE9wYXF1ZTptX3RpbGVzQXJlT3BhcXVlXTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgW2xh
eWVyLmdldCgpIHNldE5hbWU6QCJUaWxlIl07Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykg
fHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCi0gICAgW2xheWVyLmdl
dCgpIHNldENvbnRlbnRzU2NhbGU6bV9kZXZpY2VTY2FsZUZhY3Rvcl07Ci0gICAgW2xheWVyLmdl
dCgpIHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107Ci0jZW5kaWYK
LQotICAgIHJldHVybiBsYXllcjsKLX0KLQotYm9vbCBUaWxlQ2FjaGU6OnNob3VsZFNob3dSZXBh
aW50Q291bnRlcnMoKSBjb25zdAotewotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXll
ciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwot
ICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2Vi
Q29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1MYXll
ci0+b3duZXIoKTsKLSAgICBBU1NFUlQobGF5ZXJDb250ZW50cyk7Ci0gICAgaWYgKCFsYXllckNv
bnRlbnRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbGF5ZXJDb250ZW50
cy0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKDApOwotfQotCi12b2lkIFRpbGVD
YWNoZTo6ZHJhd1JlcGFpbnRDb3VudGVyKFdlYlRpbGVMYXllciAqbGF5ZXIsIENHQ29udGV4dFJl
ZiBjb250ZXh0KQotewotICAgIHVuc2lnbmVkIHBhaW50Q291bnQgPSBbbGF5ZXIgaW5jcmVtZW50
UGFpbnRDb3VudF07Ci0gICAgaWYgKCFzaG91bGRTaG93UmVwYWludENvdW50ZXJzKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTb21lIG9mIHRoaXMgY29kZSBjb3VsZCBiZSBz
aGFyZWQgd2l0aCBXZWJMYXllci4KLSAgICBjaGFyIHRleHRbMTZdOyAvLyB0aGF0J3MgYSBsb3Qg
b2YgcmVwYWludHMKLSAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICIlZCIsIHBhaW50
Q291bnQpOwotCi0gICAgQ0dSZWN0IGluZGljYXRvckJveCA9IFtsYXllciBib3VuZHNdOwotICAg
IGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0cmxlbih0ZXh0KTsKLSAgICBp
bmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNv
bnRleHQpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41Zik7Ci0gICAgQ0dD
b250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJv
eCwgMCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgbV90
aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKSk7Ci0gICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4
dCwgaW5kaWNhdG9yQm94KTsKLQotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9
IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotCi0g
ICAgaWYgKHBsYXRmb3JtTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKQotICAgICAgICBDR0Nv
bnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMSk7Ci0gICAgZWxzZQotICAg
ICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwgMSwgMSk7Ci0KLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICBDR0NvbnRleHRTZXRUZXh0TWF0
cml4KGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7Ci0gICAgQ0dD
b250ZXh0U2VsZWN0Rm9udChjb250ZXh0LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFj
Um9tYW4pOwotICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JC
b3gub3JpZ2luLnggKyA1LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVu
KHRleHQpKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLQotICAgIENHQ29udGV4dEVu
ZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQpOwotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgbGF5ZXJCb3VuZHMpCi17Ci0gICAgQ0dDb250ZXh0U2V0
UkdCRmlsbENvbG9yKGNvbnRleHQsIDAuMywgMC4zLCAwLjMsIDEpOwotICAgIENHQ29udGV4dEZp
bGxSZWN0KGNvbnRleHQsIGxheWVyQm91bmRzKTsKLQotICAgIENHRmxvYXQgc2NhbGVGYWN0b3Ig
PSBsYXllckJvdW5kcy5zaXplLndpZHRoIC8gYm91bmRzKCkud2lkdGgoKTsKLQotICAgIENHRmxv
YXQgY29udGV4dFNjYWxlID0gc2NhbGVGYWN0b3IgLyBzY2FsZSgpOwotICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNvbnRleHQsIGNvbnRleHRTY2FsZSwgY29udGV4dFNjYWxlKTsKLSAgICAKLSAgICBm
b3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBt
X3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZm8m
IHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9
IHRpbGVJbmZvLmxheWVyLmdldCgpOwotCi0gICAgICAgIENHRmxvYXQgcmVkID0gMTsKLSAgICAg
ICAgQ0dGbG9hdCBncmVlbiA9IDE7Ci0gICAgICAgIENHRmxvYXQgYmx1ZSA9IDE7Ci0gICAgICAg
IGlmICh0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQpIHsKLSAgICAgICAgICAgIHJlZCA9IDAuMjU7
Ci0gICAgICAgICAgICBncmVlbiA9IDAuMTI1OwotICAgICAgICAgICAgYmx1ZSA9IDA7Ci0gICAg
ICAgIH0KLQotICAgICAgICBUaWxlQ29ob3J0IG5ld2VzdENvaG9ydCA9IG5ld2VzdFRpbGVDb2hv
cnQoKTsKLSAgICAgICAgVGlsZUNvaG9ydCBvbGRlc3RDb2hvcnQgPSBvbGRlc3RUaWxlQ29ob3J0
KCk7Ci0KLSAgICAgICAgaWYgKCFtX2FnZ3Jlc3NpdmVseVJldGFpbnNUaWxlcyAmJiB0aWxlSW5m
by5jb2hvcnQgIT0gVmlzaWJsZVRpbGVDb2hvcnQgJiYgbmV3ZXN0Q29ob3J0ID4gb2xkZXN0Q29o
b3J0KSB7Ci0gICAgICAgICAgICBmbG9hdCBjb2hvcnRQcm9wb3J0aW9uID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KChuZXdlc3RDb2hvcnQgLSB0aWxlSW5mby5jb2hvcnQpKSAvIChuZXdlc3RDb2hvcnQg
LSBvbGRlc3RDb2hvcnQpOwotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNv
bnRleHQsIHJlZCwgZ3JlZW4sIGJsdWUsIDEgLSBjb2hvcnRQcm9wb3J0aW9uKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgcmVk
LCBncmVlbiwgYmx1ZSwgMSk7Ci0KLSAgICAgICAgaWYgKFt0aWxlTGF5ZXIgc3VwZXJsYXllcl0p
IHsKLSAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCAwLjUgLyBjb250
ZXh0U2NhbGUpOwotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4
dCwgMCwgMCwgMCwgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lV2lkdGgoY29udGV4dCwgMSAvIGNvbnRleHRTY2FsZSk7Ci0gICAgICAgICAgICBDR0Nv
bnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCAwLjIsIDAuMSwgMC45LCAxKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENHUmVjdCBmcmFtZSA9IFt0aWxlTGF5ZXIgZnJhbWVdOwotICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBmcmFtZSk7Ci0gICAgICAgIENHQ29udGV4dFN0
cm9rZVJlY3QoY29udGV4dCwgZnJhbWUpOwotICAgIH0KLX0KLSAgICAKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1RpbGVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGJkZDgzMWJiOTQ5MWJlNzM5
MzMxOTRhZTUxZGM1ZjlkNTAzYTgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLmgKQEAgLTAsMCArMSwyMTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVDb250cm9sbGVyX2gKKyNk
ZWZpbmUgVGlsZUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiSW50UG9pbnRIYXNoLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRpbGVk
QmFja2luZy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
T0JKQ19DTEFTUyBDQUxheWVyOworT0JKQ19DTEFTUyBXZWJUaWxlZEJhY2tpbmdMYXllcjsKK09C
SkNfQ0xBU1MgV2ViVGlsZUxheWVyOworT0JKQ19DTEFTUyBXZWJUaWxlZFNjcm9sbGluZ0luZGlj
YXRvckxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsKK2Ns
YXNzIEludFBvaW50OworY2xhc3MgSW50UmVjdDsKKwordHlwZWRlZiBWZWN0b3I8UmV0YWluUHRy
PFdlYlRpbGVMYXllcj4gPiBXZWJUaWxlTGF5ZXJMaXN0OworCitjbGFzcyBUaWxlQ29udHJvbGxl
ciA6IHB1YmxpYyBUaWxlZEJhY2tpbmcgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGVD
b250cm9sbGVyKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRpbGVDb250cm9s
bGVyPiBjcmVhdGUoV2ViVGlsZWRCYWNraW5nTGF5ZXIqKTsKKyAgICB+VGlsZUNvbnRyb2xsZXIo
KTsKKworICAgIHZvaWQgdGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7CisKKyAgICB2b2lk
IHNldE5lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEludFJlY3QmKTsKKyAgICB2b2lkIGRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250ZXh0
UmVmKTsKKworICAgIHZvaWQgc2V0U2NhbGUoQ0dGbG9hdCk7CisgICAgQ0dGbG9hdCBzY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KKworICAgIGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlc0RyYXdpbmc7IH0KKyAgICB2b2lkIHNldEFj
Y2VsZXJhdGVzRHJhd2luZyhib29sKTsKKworICAgIHZvaWQgc2V0VGlsZXNPcGFxdWUoYm9vbCk7
CisgICAgYm9vbCB0aWxlc0FyZU9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXNBcmVPcGFx
dWU7IH0KKworICAgIENBTGF5ZXIgKnRpbGVDb250YWluZXJMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRpbGVEZWJ1Z0Jv
cmRlcldpZHRoKGZsb2F0KTsKKyAgICB2b2lkIHNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29s
b3JSZWYpOworCisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX3Zpc2libGVSZWN0OyB9CisKKyAgICB1bnNpZ25lZCBibGFua1BpeGVs
Q291bnQoKSBjb25zdDsKKyAgICBzdGF0aWMgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGls
ZXMoY29uc3QgV2ViVGlsZUxheWVyTGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFBv
aW50Jik7CisKKyAgICAvLyBPbmx5IHB1YmxpYyBmb3IgdGhlIFdlYlRpbGVDYWNoZU1hcExheWVy
LgorICAgIHZvaWQgZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYsIENHUmVjdCk7CisK
K3B1YmxpYzoKKyAgICAvLyBPbmx5IHB1YmxpYyBmb3IgaW5saW5lIG1ldGhvZHMgaW4gdGhlIGlt
cGxlbWVudGF0aW9uIGZpbGUuCisgICAgdHlwZWRlZiBJbnRQb2ludCBUaWxlSW5kZXg7CisgICAg
dHlwZWRlZiB1bnNpZ25lZCBUaWxlQ29ob3J0OworICAgIHN0YXRpYyBjb25zdCBUaWxlQ29ob3J0
IFZpc2libGVUaWxlQ29ob3J0ID0gVUlOVF9NQVg7CisKKyAgICBzdHJ1Y3QgVGlsZUluZm8gewor
ICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBsYXllcjsKKyAgICAgICAgVGlsZUNvaG9y
dCBjb2hvcnQ7IC8vIFZpc2libGVUaWxlQ29ob3J0IGlzIHZpc2libGUuCisgICAgICAgIGJvb2wg
aGFzU3RhbGVDb250ZW50OworICAgICAgICAKKyAgICAgICAgVGlsZUluZm8oKQorICAgICAgICAg
ICAgOiBjb2hvcnQoVmlzaWJsZVRpbGVDb2hvcnQpCisgICAgICAgICAgICAsIGhhc1N0YWxlQ29u
dGVudChmYWxzZSkKKyAgICAgICAgeyB9CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBUaWxlQ29u
dHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciopOworCisgICAgLy8gVGlsZWRCYWNraW5nIG1l
bWJlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRFeHBvc2VkUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcHNUb0V4cG9z
ZWRSZWN0KGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwcmVwb3B1bGF0ZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldElzSW5XaW5k
b3coYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFRpbGVDb3ZlcmFnZShUaWxl
Q292ZXJhZ2UpIE9WRVJSSURFOworICAgIHZpcnR1YWwgVGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFn
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdGlsZUNvdmVyYWdlOyB9CisgICAgdmlydHVh
bCB2b2lkIGZvcmNlUmVwYWludCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgSW50U2l6ZSB0aWxl
U2l6ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KKyAgICB2aXJ0dWFs
IEludFJlY3QgdGlsZUdyaWRFeHRlbnQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGZsYWcpIE9WRVJS
SURFIHsgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZmxhZzsgfQorICAg
IHZpcnR1YWwgYm9vbCBzY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldEFnZ3Jlc3NpdmVseVJldGFpbnNUaWxlcyhib29sIGZsYWcp
IE9WRVJSSURFIHsgbV9hZ2dyZXNzaXZlbHlSZXRhaW5zVGlsZXMgPSBmbGFnOyB9CisgICAgdmly
dHVhbCBib29sIGFnZ3Jlc3NpdmVseVJldGFpbnNUaWxlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fYWdncmVzc2l2ZWx5UmV0YWluc1RpbGVzOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFVu
cGFyZW50c09mZnNjcmVlblRpbGVzKGJvb2wgZmxhZykgT1ZFUlJJREUgeyBtX3VucGFyZW50c09m
ZnNjcmVlblRpbGVzID0gZmxhZzsgfQorICAgIHZpcnR1YWwgYm9vbCB1bnBhcmVudHNPZmZzY3Jl
ZW5UaWxlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGls
ZXM7IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZUNvdmVyYWdlUmVjdCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgQ0FMYXllciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbihT
Y3JvbGxpbmdNb2RlSW5kaWNhdGlvbikgT1ZFUlJJREU7CisKKyAgICBJbnRSZWN0IGJvdW5kcygp
IGNvbnN0OworCisgICAgSW50UmVjdCByZWN0Rm9yVGlsZUluZGV4KGNvbnN0IFRpbGVJbmRleCYp
IGNvbnN0OworICAgIHZvaWQgZ2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KGNvbnN0IEludFJlY3Qm
LCBUaWxlSW5kZXgmIHRvcExlZnQsIFRpbGVJbmRleCYgYm90dG9tUmlnaHQpIGNvbnN0OworCisg
ICAgRmxvYXRSZWN0IGNvbXB1dGVUaWxlQ292ZXJhZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcHJl
dmlvdXNWaXNpYmxlUmVjdCkgY29uc3Q7CisgICAgSW50U2l6ZSB0aWxlU2l6ZUZvckNvdmVyYWdl
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIHZvaWQgc2NoZWR1bGVUaWxlUmV2
YWxpZGF0aW9uKGRvdWJsZSBpbnRlcnZhbCk7CisgICAgdm9pZCB0aWxlUmV2YWxpZGF0aW9uVGlt
ZXJGaXJlZChUaW1lcjxUaWxlQ29udHJvbGxlcj4qKTsKKworICAgIHZvaWQgc2NoZWR1bGVDb2hv
cnRSZW1vdmFsKCk7CisgICAgdm9pZCBjb2hvcnRSZW1vdmFsVGltZXJGaXJlZChUaW1lcjxUaWxl
Q29udHJvbGxlcj4qKTsKKyAgICAKKyAgICB0eXBlZGVmIHVuc2lnbmVkIFRpbGVWYWxpZGF0aW9u
UG9saWN5RmxhZ3M7CisKKyAgICB2b2lkIHJldmFsaWRhdGVUaWxlcyhUaWxlVmFsaWRhdGlvblBv
bGljeUZsYWdzIGZvcmVncm91bmRWYWxpZGF0aW9uUG9saWN5ID0gMCwgVGlsZVZhbGlkYXRpb25Q
b2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFsaWRhdGlvblBvbGljeSA9IDApOworICAgIHZvaWQgZW5z
dXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgdXBkYXRlVGlsZUNv
dmVyYWdlTWFwKCk7CisKKyAgICB2b2lkIHJlbW92ZUFsbFRpbGVzKCk7CisgICAgdm9pZCByZW1v
dmVBbGxTZWNvbmRhcnlUaWxlcygpOworICAgIHZvaWQgcmVtb3ZlVGlsZXNJbkNvaG9ydChUaWxl
Q29ob3J0KTsKKworICAgIFRpbGVDb2hvcnQgbmV4dFRpbGVDb2hvcnQoKSBjb25zdDsKKyAgICB2
b2lkIHN0YXJ0ZWROZXdDb2hvcnQoVGlsZUNvaG9ydCk7CisgICAgCisgICAgVGlsZUNvaG9ydCBu
ZXdlc3RUaWxlQ29ob3J0KCkgY29uc3Q7CisgICAgVGlsZUNvaG9ydCBvbGRlc3RUaWxlQ29ob3J0
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgVGls
ZUluZGV4JiwgVGlsZUluZm8mLCBjb25zdCBJbnRSZWN0JiByZXBhaW50UmVjdEluVGlsZUNvb3Jk
cywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKTsKKworICAgIFdlYlRp
bGVMYXllciogdGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKKyAgICBS
ZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBjcmVhdGVUaWxlTGF5ZXIoY29uc3QgSW50UmVjdCYpOwor
CisgICAgYm9vbCBzaG91bGRTaG93UmVwYWludENvdW50ZXJzKCkgY29uc3Q7CisgICAgdm9pZCBk
cmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVyICosIENHQ29udGV4dFJlZik7CisKKyAgICBX
ZWJUaWxlZEJhY2tpbmdMYXllciogbV90aWxlQ2FjaGVMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FM
YXllcj4gbV90aWxlQ29udGFpbmVyTGF5ZXI7CisgICAgUmV0YWluUHRyPFdlYlRpbGVkU2Nyb2xs
aW5nSW5kaWNhdG9yTGF5ZXI+IG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcjsgLy8gVXNl
ZCBmb3IgY292ZXJhZ2UgdmlzdWFsaXphdGlvbi4KKworICAgIEludFNpemUgbV90aWxlU2l6ZTsK
KyAgICBGbG9hdFJlY3QgbV92aXNpYmxlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlUmVj
dEF0TGFzdFJldmFsaWRhdGU7CisgICAgRmxvYXRSZWN0IG1fZXhwb3NlZFJlY3Q7IC8vIFRoZSBl
eHBvc2VkIGFyZWEgb2YgY29udGFpbmluZyBwbGF0Zm9ybSB2aWV3cy4KKworICAgIHR5cGVkZWYg
SGFzaE1hcDxUaWxlSW5kZXgsIFRpbGVJbmZvPiBUaWxlTWFwOworICAgIFRpbGVNYXAgbV90aWxl
czsKKyAgICBUaW1lcjxUaWxlQ29udHJvbGxlcj4gbV90aWxlUmV2YWxpZGF0aW9uVGltZXI7Cisg
ICAgVGltZXI8VGlsZUNvbnRyb2xsZXI+IG1fY29ob3J0UmVtb3ZhbFRpbWVyOworCisgICAgc3Ry
dWN0IFRpbGVDb2hvcnRJbmZvIHsKKyAgICAgICAgVGlsZUNvaG9ydCBjb2hvcnQ7CisgICAgICAg
IGRvdWJsZSBjcmVhdGlvblRpbWU7IC8vIGluIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
LgorICAgICAgICBUaWxlQ29ob3J0SW5mbyhUaWxlQ29ob3J0IGluQ29ob3J0LCBkb3VibGUgaW5U
aW1lKQorICAgICAgICAgICAgOiBjb2hvcnQoaW5Db2hvcnQpCisgICAgICAgICAgICAsIGNyZWF0
aW9uVGltZShpblRpbWUpCisgICAgICAgIHsgfQorICAgIH07CisgICAgdHlwZWRlZiBEZXF1ZTxU
aWxlQ29ob3J0SW5mbz4gVGlsZUNvaG9ydExpc3Q7CisgICAgVGlsZUNvaG9ydExpc3QgbV9jb2hv
cnRMaXN0OworICAgIAorICAgIEludFJlY3QgbV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVjdDsgLy8g
SW4gdGlsZSBjb29yZHMuCisKKyAgICBDR0Zsb2F0IG1fc2NhbGU7CisgICAgQ0dGbG9hdCBtX2Rl
dmljZVNjYWxlRmFjdG9yOworCisgICAgVGlsZUNvdmVyYWdlIG1fdGlsZUNvdmVyYWdlOworICAg
IGJvb2wgbV9pc0luV2luZG93OworICAgIGJvb2wgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dp
bmdFbmFibGVkOworICAgIGJvb2wgbV9hZ2dyZXNzaXZlbHlSZXRhaW5zVGlsZXM7CisgICAgYm9v
bCBtX3VucGFyZW50c09mZnNjcmVlblRpbGVzOworICAgIGJvb2wgbV9hY2NlbGVyYXRlc0RyYXdp
bmc7CisgICAgYm9vbCBtX3RpbGVzQXJlT3BhcXVlOworICAgIGJvb2wgbV9jbGlwc1RvRXhwb3Nl
ZFJlY3Q7CisKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gbV90aWxlRGVidWdCb3JkZXJDb2xv
cjsKKyAgICBmbG9hdCBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoOworICAgIFNjcm9sbGluZ01vZGVJ
bmRpY2F0aW9uIG1faW5kaWNhdG9yTW9kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFRpbGVDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YWY4YTg3MDNjZjhiZDZiODNlNjMzYWU3M2Y5MmYwZmUxNzVlMzAzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tCkBAIC0wLDAgKzEsMTA1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiSW50
UmVjdC5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0ICJSZWdpb24uaCIK
KyNpbXBvcnQgIkxheWVyUG9vbC5oIgorI2ltcG9ydCAiV2ViTGF5ZXIuaCIKKyNpbXBvcnQgIldl
YlRpbGVkQmFja2luZ0xheWVyLmgiCisjaW1wb3J0ICJXZWJUaWxlTGF5ZXIuaCIKKyNpbXBvcnQg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQmxvY2tFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx1dGlsaXR5PgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwNzAKK0BpbnRlcmZhY2UgQ0FMYXllciAoV2ViQ0FMYXll
ckRldGFpbHMpCistICh2b2lkKXNldEFjY2VsZXJhdGVzRHJhd2luZzooQk9PTClmbGFnOworQGVu
ZAorI2VuZGlmCisKK0BpbnRlcmZhY2UgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciA6
IENBTGF5ZXIgeworICAgIFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKiBfdGlsZUNvbnRyb2xsZXI7
CisgICAgQ0FMYXllciAqX3Zpc2libGVSZWN0RnJhbWVMYXllcjsgLy8gT3duZWQgYnkgYmVpbmcg
YSBzdWJsYXllci4KK30KK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpUaWxlQ29udHJvbGxl
ciogdGlsZUNvbnRyb2xsZXI7CitAcHJvcGVydHkgKGFzc2lnbikgQ0FMYXllciogdmlzaWJsZVJl
Y3RGcmFtZUxheWVyOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViVGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcgorQHN5bnRoZXNpemUgdGlsZUNvbnRyb2xsZXIgPSBfdGlsZUNvbnRyb2xs
ZXI7CitAc3ludGhlc2l6ZSB2aXNpYmxlUmVjdEZyYW1lTGF5ZXIgPSBfdmlzaWJsZVJlY3RGcmFt
ZUxheWVyOworLSAoaWQpaW5pdAoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsK
KyAgICAgICAgW3NlbGYgc2V0U3R5bGU6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dDpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVsbCBudWxs
XSwgQCJib3VuZHMiLCBbTlNOdWxsIG51bGxdLCBAInBvc2l0aW9uIiwgW05TTnVsbCBudWxsXSwg
QCJjb250ZW50cyIsIG5pbF0gZm9yS2V5OkAiYWN0aW9ucyJdXTsKKworICAgICAgICBfdmlzaWJs
ZVJlY3RGcmFtZUxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworICAgICAgICBbX3Zpc2libGVSZWN0
RnJhbWVMYXllciBzZXRTdHlsZTpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OltO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdWxsIG51bGxdLCBA
ImJvdW5kcyIsIFtOU051bGwgbnVsbF0sIEAicG9zaXRpb24iLCBuaWxdIGZvcktleTpAImFjdGlv
bnMiXV07CisgICAgICAgIFtzZWxmIGFkZFN1YmxheWVyOl92aXNpYmxlUmVjdEZyYW1lTGF5ZXJd
OworICAgICAgICBbX3Zpc2libGVSZWN0RnJhbWVMYXllciBzZXRCb3JkZXJDb2xvcjpXZWJDb3Jl
OjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yKDI1NSwgMCwgMCksIFdlYkNvcmU6OkNvbG9y
U3BhY2VEZXZpY2VSR0IpXTsKKyAgICAgICAgW192aXNpYmxlUmVjdEZyYW1lTGF5ZXIgc2V0Qm9y
ZGVyV2lkdGg6Ml07CisgICAgICAgIHJldHVybiBzZWxmOworICAgIH0KKyAgICByZXR1cm4gbmls
OworfQorCistICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Cit7Cisg
ICAgaWYgKF90aWxlQ29udHJvbGxlcikKKyAgICAgICAgX3RpbGVDb250cm9sbGVyLT5kcmF3VGls
ZU1hcENvbnRlbnRzKGNvbnRleHQsIFtzZWxmIGJvdW5kc10pOworfQorQGVuZAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCitlbnVtIFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZyB7CisgICAg
UHJ1bmVTZWNvbmRhcnlUaWxlcyA9IDEgPDwgMCwKKyAgICBVbnBhcmVudEFsbFRpbGVzID0gMSA8
PCAxCit9OworCitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lkdGggPSA1MTI7CitzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlSGVpZ2h0ID0gNTEyOworCitQYXNzT3duUHRyPFRpbGVD
b250cm9sbGVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKiB0
aWxlQ2FjaGVMYXllcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVDb250cm9sbGVy
KHRpbGVDYWNoZUxheWVyKSk7Cit9CisKK1RpbGVDb250cm9sbGVyOjpUaWxlQ29udHJvbGxlcihX
ZWJUaWxlZEJhY2tpbmdMYXllciogdGlsZUNhY2hlTGF5ZXIpCisgICAgOiBtX3RpbGVDYWNoZUxh
eWVyKHRpbGVDYWNoZUxheWVyKQorICAgICwgbV90aWxlQ29udGFpbmVyTGF5ZXIoYWRvcHRDRihb
W0NBTGF5ZXIgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRpbGVXaWR0
aCwgZGVmYXVsdFRpbGVIZWlnaHQpCisgICAgLCBtX3RpbGVSZXZhbGlkYXRpb25UaW1lcih0aGlz
LCAmVGlsZUNvbnRyb2xsZXI6OnRpbGVSZXZhbGlkYXRpb25UaW1lckZpcmVkKQorICAgICwgbV9j
b2hvcnRSZW1vdmFsVGltZXIodGhpcywgJlRpbGVDb250cm9sbGVyOjpjb2hvcnRSZW1vdmFsVGlt
ZXJGaXJlZCkKKyAgICAsIG1fc2NhbGUoMSkKKyAgICAsIG1fZGV2aWNlU2NhbGVGYWN0b3IoMSkK
KyAgICAsIG1fdGlsZUNvdmVyYWdlKENvdmVyYWdlRm9yVmlzaWJsZUFyZWEpCisgICAgLCBtX2lz
SW5XaW5kb3coZmFsc2UpCisgICAgLCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJs
ZWQoZmFsc2UpCisgICAgLCBtX2FnZ3Jlc3NpdmVseVJldGFpbnNUaWxlcyhmYWxzZSkKKyAgICAs
IG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMoZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGVzRHJh
d2luZyhmYWxzZSkKKyAgICAsIG1fdGlsZXNBcmVPcGFxdWUoZmFsc2UpCisgICAgLCBtX2NsaXBz
VG9FeHBvc2VkUmVjdChmYWxzZSkKKyAgICAsIG1fdGlsZURlYnVnQm9yZGVyV2lkdGgoMCkKKyAg
ICAsIG1faW5kaWNhdG9yTW9kZShUaHJlYWRlZFNjcm9sbGluZ0luZGljYXRpb24pCit7CisgICAg
W0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rp
b25zOllFU107CisgICAgW21fdGlsZUNhY2hlTGF5ZXIgYWRkU3VibGF5ZXI6bV90aWxlQ29udGFp
bmVyTGF5ZXIuZ2V0KCldOworI2lmbmRlZiBOREVCVUcKKyAgICBbbV90aWxlQ29udGFpbmVyTGF5
ZXIuZ2V0KCkgc2V0TmFtZTpAIlRpbGVDb250cm9sbGVyIENvbnRhaW5lciBMYXllciJdOworI2Vu
ZGlmCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworVGlsZUNvbnRyb2xsZXI6On5U
aWxlQ29udHJvbGxlcigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGZv
ciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUlu
Zm8gPSBpdC0+dmFsdWU7CisgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRUaWxlQ29u
dHJvbGxlcjowXTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllcikKKyAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBz
ZXRUaWxlQ29udHJvbGxlcjpuaWxdOworfQorCit2b2lkIFRpbGVDb250cm9sbGVyOjp0aWxlQ2Fj
aGVMYXllckJvdW5kc0NoYW5nZWQoKQoreworICAgIGlmIChtX3RpbGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICAvLyBXZSBtdXN0IHJldmFsaWRhdGUgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiB1c2lu
ZyBhIHRpbWVyIHdoZW4gdGhlcmUgYXJlCisgICAgICAgIC8vIG5vIHRpbGVzIHRvIGF2b2lkIGEg
Zmxhc2ggd2hlbiB0cmFuc2l0aW9uaW5nIGZyb20gb25lIHBhZ2UgdG8gYW5vdGhlci4KKyAgICAg
ICAgcmV2YWxpZGF0ZVRpbGVzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzY2hl
ZHVsZVRpbGVSZXZhbGlkYXRpb24oMCk7Cit9CisKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldE5l
ZWRzRGlzcGxheSgpCit7CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgW3Rp
bGVJbmZvLmxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorfQorCit2b2lkIFRp
bGVDb250cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAobV90aWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZs
b2F0UmVjdCBzY2FsZWRSZWN0KHJlY3QpOworICAgIHNjYWxlZFJlY3Quc2NhbGUobV9zY2FsZSk7
CisgICAgSW50UmVjdCByZXBhaW50UmVjdEluVGlsZUNvb3JkcyhlbmNsb3NpbmdJbnRSZWN0KHNj
YWxlZFJlY3QpKTsKKworICAgIC8vIEZvciBzbWFsbCBpbnZhbGlkYXRpb25zLCBsb29rdXAgdGhl
IGNvdmVyZWQgdGlsZXMuCisgICAgaWYgKHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLmhlaWdodCgp
IDwgMiAqIG1fdGlsZVNpemUuaGVpZ2h0KCkgJiYgcmVwYWludFJlY3RJblRpbGVDb29yZHMud2lk
dGgoKSA8IDIgKiBtX3RpbGVTaXplLndpZHRoKCkpIHsKKyAgICAgICAgVGlsZUluZGV4IHRvcExl
ZnQ7CisgICAgICAgIFRpbGVJbmRleCBib3R0b21SaWdodDsKKyAgICAgICAgZ2V0VGlsZUluZGV4
UmFuZ2VGb3JSZWN0KHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLCB0b3BMZWZ0LCBib3R0b21SaWdo
dCk7CisKKyAgICAgICAgZm9yIChpbnQgeSA9IHRvcExlZnQueSgpOyB5IDw9IGJvdHRvbVJpZ2h0
LnkoKTsgKyt5KSB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gdG9wTGVmdC54KCk7IHggPD0g
Ym90dG9tUmlnaHQueCgpOyArK3gpIHsKKyAgICAgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUlu
ZGV4KHgsIHkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKHRpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KGl0ICE9IG1fdGlsZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgIHNldFRpbGVOZWVkc0Rp
c3BsYXlJblJlY3QodGlsZUluZGV4LCBpdC0+dmFsdWUsIHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRz
LCBtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICBzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0KGl0LT5rZXksIGl0LT52YWx1ZSwgcmVw
YWludFJlY3RJblRpbGVDb29yZHMsIG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3QpOworfQorCit2
b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFRpbGVJ
bmRleCYgdGlsZUluZGV4LCBUaWxlSW5mbyYgdGlsZUluZm8sIGNvbnN0IEludFJlY3QmIHJlcGFp
bnRSZWN0SW5UaWxlQ29vcmRzLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmFnZVJlY3RJblRpbGVDb29y
ZHMpCit7CisgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQo
KTsKKworICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7
CisgICAgSW50UmVjdCB0aWxlUmVwYWludFJlY3QgPSB0aWxlUmVjdDsKKyAgICB0aWxlUmVwYWlu
dFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzKTsKKyAgICBpZiAodGlsZVJl
cGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGlsZVJlcGFpbnRS
ZWN0Lm1vdmVCeSgtdGlsZVJlY3QubG9jYXRpb24oKSk7CisgICAgCisgICAgLy8gV2UgY291bGQg
dGVzdCBmb3IgaW50ZXJzZWN0aW9uIHdpdGggdGhlIHZpc2libGUgcmVjdC4gVGhpcyB3b3VsZCBy
ZWR1Y2UgcGFpbnRpbmcgeWV0IG1vcmUsCisgICAgLy8gYnV0IG1heSBtYWtlIHNjcm9sbGluZyBz
dGFsZSB0aWxlcyBpbnRvIHZpZXcgbW9yZSBmcmVxdWVudC4KKyAgICBpZiAodGlsZVJlY3QuaW50
ZXJzZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29yZHMpKSB7CisgICAgICAgIFt0aWxlTGF5ZXIg
c2V0TmVlZHNEaXNwbGF5SW5SZWN0OnRpbGVSZXBhaW50UmVjdF07CisKKyAgICAgICAgaWYgKHNo
b3VsZFNob3dSZXBhaW50Q291bnRlcnMoKSkgeworICAgICAgICAgICAgQ0dSZWN0IGJvdW5kcyA9
IFt0aWxlTGF5ZXIgYm91bmRzXTsKKyAgICAgICAgICAgIENHUmVjdCBpbmRpY2F0b3JSZWN0ID0g
Q0dSZWN0TWFrZShib3VuZHMub3JpZ2luLngsIGJvdW5kcy5vcmlnaW4ueSwgNTIsIDI3KTsKKyAg
ICAgICAgICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OmluZGljYXRvclJlY3Rd
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRpbGVJbmZvLmhhc1N0YWxlQ29udGVu
dCA9IHRydWU7Cit9CisKKwordm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd0xheWVyKFdlYlRpbGVM
YXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIFBsYXRmb3JtQ0FMYXll
ciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGls
ZUNhY2hlTGF5ZXIpOworICAgIGlmICghcGxhdGZvcm1MYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENHUG9pbnQgbGF5ZXJP
cmlnaW4gPSBbbGF5ZXIgZnJhbWVdLm9yaWdpbjsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y29udGV4dCwgLWxheWVyT3JpZ2luLngsIC1sYXllck9yaWdpbi55KTsKKyAgICBDR0NvbnRleHRT
Y2FsZUNUTShjb250ZXh0LCBtX3NjYWxlLCBtX3NjYWxlKTsKKyAgICBkcmF3TGF5ZXJDb250ZW50
cyhjb250ZXh0LCBsYXllciwgcGxhdGZvcm1MYXllcik7CisKKyAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKGNvbnRleHQpOworCisgICAgZHJhd1JlcGFpbnRDb3VudGVyKGxheWVyLCBjb250ZXh0
KTsKK30KKwordm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKK3sK
KyAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciA9IHBsYXRmb3JtTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxl
RmFjdG9yKCk7CisKKyAgICAvLyBUaGUgc2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9kdWNlIG9mIHRo
ZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAvLyBEaXZp
ZGUgYnkgdGhlIGRldmljZSBzY2FsZSBmYWN0b3Igc28gd2UnbGwgZ2V0IHRoZSBwYWdlIHNjYWxl
IGZhY3Rvci4KKyAgICBzY2FsZSAvPSBkZXZpY2VTY2FsZUZhY3RvcjsKKworICAgIGlmIChtX3Nj
YWxlID09IHNjYWxlICYmIG1fZGV2aWNlU2NhbGVGYWN0b3IgPT0gZGV2aWNlU2NhbGVGYWN0b3Ip
CisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gZGlydHlSZWN0
czsKKworICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBt
X3NjYWxlID0gc2NhbGU7CisgICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIHNldFRyYW5z
Zm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEgLyBtX3NjYWxlLCAxIC8gbV9zY2FsZSwgMSld
OworCisgICAgcmV2YWxpZGF0ZVRpbGVzKFBydW5lU2Vjb25kYXJ5VGlsZXMsIFBydW5lU2Vjb25k
YXJ5VGlsZXMpOworCisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgW3RpbGVJ
bmZvLmxheWVyLmdldCgpIHNldENvbnRlbnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3JdOworCisg
ICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KGl0LT5rZXkpOworICAg
ICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJlY3QgPSB0aWxlUmVjdDsKKworICAgICAgICBzY2Fs
ZWRUaWxlUmVjdC5zY2FsZSgxIC8gbV9zY2FsZSk7CisgICAgICAgIGRpcnR5UmVjdHMuYXBwZW5k
KHNjYWxlZFRpbGVSZWN0KTsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUxheWVyLT5vd25lcigpLT5w
bGF0Zm9ybUNBTGF5ZXJEaWRDcmVhdGVUaWxlcyhkaXJ0eVJlY3RzKTsKKyNlbmRpZgorfQorCit2
b2lkIFRpbGVDb250cm9sbGVyOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRl
c0RyYXdpbmcpCit7CisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwNzAKKyAgICBpZiAobV9hY2NlbGVyYXRlc0RyYXdpbmcgPT0gYWNjZWxl
cmF0ZXNEcmF3aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FjY2VsZXJhdGVzRHJhd2lu
ZyA9IGFjY2VsZXJhdGVzRHJhd2luZzsKKworICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Cisg
ICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2Nl
bGVyYXRlc0RyYXdpbmddOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFjY2VsZXJh
dGVzRHJhd2luZyk7CisjZW5kaWYKK30KKwordm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZXNP
cGFxdWUoYm9vbCBvcGFxdWUpCit7CisgICAgaWYgKG9wYXF1ZSA9PSBtX3RpbGVzQXJlT3BhcXVl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbGVzQXJlT3BhcXVlID0gb3BhcXVlOworCisg
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90
aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0
aWxlSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldE9w
YXF1ZTpvcGFxdWVdOworICAgIH0KK30KKwordm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VmlzaWJs
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKK3sKKyAgICBpZiAobV92aXNpYmxl
UmVjdCA9PSB2aXNpYmxlUmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92aXNpYmxlUmVj
dCA9IHZpc2libGVSZWN0OworICAgIHJldmFsaWRhdGVUaWxlcygpOworfQorCit2b2lkIFRpbGVD
b250cm9sbGVyOjpzZXRFeHBvc2VkUmVjdChjb25zdCBGbG9hdFJlY3QmIGV4cG9zZWRSZWN0KQor
eworICAgIGlmIChtX2V4cG9zZWRSZWN0ID09IGV4cG9zZWRSZWN0KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2V4cG9zZWRSZWN0ID0gZXhwb3NlZFJlY3Q7CisgICAgcmV2YWxpZGF0ZVRpbGVz
KCk7Cit9CisKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldENsaXBzVG9FeHBvc2VkUmVjdChib29s
IGNsaXBzVG9FeHBvc2VkUmVjdCkKK3sKKyAgICBpZiAobV9jbGlwc1RvRXhwb3NlZFJlY3QgPT0g
Y2xpcHNUb0V4cG9zZWRSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaXBzVG9FeHBv
c2VkUmVjdCA9IGNsaXBzVG9FeHBvc2VkUmVjdDsKKworICAgIC8vIEdvaW5nIGZyb20gbm90IGNs
aXBwaW5nIHRvIGNsaXBwaW5nLCB3ZSBkb24ndCBuZWVkIHRvIHJldmFsaWRhdGUgcmlnaHQgYXdh
eS4KKyAgICBpZiAoY2xpcHNUb0V4cG9zZWRSZWN0KQorICAgICAgICByZXZhbGlkYXRlVGlsZXMo
KTsKK30KKwordm9pZCBUaWxlQ29udHJvbGxlcjo6cHJlcG9wdWxhdGVSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3sKKyAgICBlbnN1cmVUaWxlc0ZvclJlY3QocmVjdCk7Cit9CisKK3ZvaWQg
VGlsZUNvbnRyb2xsZXI6OnNldElzSW5XaW5kb3coYm9vbCBpc0luV2luZG93KQoreworICAgIGlm
IChtX2lzSW5XaW5kb3cgPT0gaXNJbldpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9p
c0luV2luZG93ID0gaXNJbldpbmRvdzsKKworICAgIGlmIChtX2lzSW5XaW5kb3cpCisgICAgICAg
IHJldmFsaWRhdGVUaWxlcygpOworICAgIGVsc2UgeworICAgICAgICBjb25zdCBkb3VibGUgdGls
ZVJldmFsaWRhdGlvblRpbWVvdXQgPSA0OworICAgICAgICBzY2hlZHVsZVRpbGVSZXZhbGlkYXRp
b24odGlsZVJldmFsaWRhdGlvblRpbWVvdXQpOworICAgIH0KK30KKwordm9pZCBUaWxlQ29udHJv
bGxlcjo6c2V0VGlsZUNvdmVyYWdlKFRpbGVDb3ZlcmFnZSBjb3ZlcmFnZSkKK3sKKyAgICBpZiAo
Y292ZXJhZ2UgPT0gbV90aWxlQ292ZXJhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGls
ZUNvdmVyYWdlID0gY292ZXJhZ2U7CisgICAgc2NoZWR1bGVUaWxlUmV2YWxpZGF0aW9uKDApOwor
fQorCit2b2lkIFRpbGVDb250cm9sbGVyOjpmb3JjZVJlcGFpbnQoKQoreworICAgIHNldE5lZWRz
RGlzcGxheSgpOworfQorCit2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJX
aWR0aChmbG9hdCBib3JkZXJXaWR0aCkKK3sKKyAgICBpZiAobV90aWxlRGVidWdCb3JkZXJXaWR0
aCA9PSBib3JkZXJXaWR0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aWxlRGVidWdCb3Jk
ZXJXaWR0aCA9IGJvcmRlcldpZHRoOworICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7CisgICAg
ICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRl
cldpZHRoXTsKKyAgICB9Cit9CisKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFRpbGVEZWJ1Z0Jv
cmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCit7CisgICAgaWYgKG1fdGlsZURlYnVn
Qm9yZGVyQ29sb3IgPT0gYm9yZGVyQ29sb3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGls
ZURlYnVnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjsKKyAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZh
bHVlOworICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxl
RGVidWdCb3JkZXJDb2xvci5nZXQoKV07CisgICAgfQorfQorCitJbnRSZWN0IFRpbGVDb250cm9s
bGVyOjpib3VuZHMoKSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIElu
dFNpemUoW21fdGlsZUNhY2hlTGF5ZXIgYm91bmRzXS5zaXplKSk7Cit9CisKK0ludFJlY3QgVGls
ZUNvbnRyb2xsZXI6OnJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXgp
IGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KHRpbGVJbmRleC54KCkgKiBtX3RpbGVTaXplLndp
ZHRoKCksIHRpbGVJbmRleC55KCkgKiBtX3RpbGVTaXplLmhlaWdodCgpLCBtX3RpbGVTaXplLndp
ZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgIEludFJlY3Qgc2NhbGVkQm91bmRzKGJv
dW5kcygpKTsKKyAgICBzY2FsZWRCb3VuZHMuc2NhbGUobV9zY2FsZSk7CisKKyAgICByZWN0Lmlu
dGVyc2VjdChzY2FsZWRCb3VuZHMpOworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgVGls
ZUNvbnRyb2xsZXI6OmdldFRpbGVJbmRleFJhbmdlRm9yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
LCBUaWxlSW5kZXgmIHRvcExlZnQsIFRpbGVJbmRleCYgYm90dG9tUmlnaHQpIGNvbnN0Cit7Cisg
ICAgSW50UmVjdCBjbGFtcGVkUmVjdCA9IGJvdW5kcygpOworICAgIGNsYW1wZWRSZWN0LnNjYWxl
KG1fc2NhbGUpOworICAgIGNsYW1wZWRSZWN0LmludGVyc2VjdChyZWN0KTsKKworICAgIHRvcExl
ZnQuc2V0WChtYXgoY2xhbXBlZFJlY3QueCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpLCAwKSk7Cisg
ICAgdG9wTGVmdC5zZXRZKG1heChjbGFtcGVkUmVjdC55KCkgLyBtX3RpbGVTaXplLmhlaWdodCgp
LCAwKSk7CisKKyAgICBpbnQgYm90dG9tWFJhdGlvID0gY2VpbCgoZmxvYXQpY2xhbXBlZFJlY3Qu
bWF4WCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpKTsKKyAgICBib3R0b21SaWdodC5zZXRYKG1heChi
b3R0b21YUmF0aW8gLSAxLCAwKSk7CisKKyAgICBpbnQgYm90dG9tWVJhdGlvID0gY2VpbCgoZmxv
YXQpY2xhbXBlZFJlY3QubWF4WSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgYm90dG9t
UmlnaHQuc2V0WShtYXgoYm90dG9tWVJhdGlvIC0gMSwgMCkpOworfQorCitGbG9hdFJlY3QgVGls
ZUNvbnRyb2xsZXI6OmNvbXB1dGVUaWxlQ292ZXJhZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcHJl
dmlvdXNWaXNpYmxlUmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBt
X3Zpc2libGVSZWN0OworCisgICAgaWYgKG1fY2xpcHNUb0V4cG9zZWRSZWN0KQorICAgICAgICB2
aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9leHBvc2VkUmVjdCk7CisKKyAgICAvLyBJZiB0aGUgcGFn
ZSBpcyBub3QgaW4gYSB3aW5kb3cgKGZvciBleGFtcGxlIGlmIGl0J3MgaW4gYSBiYWNrZ3JvdW5k
IHRhYiksIHdlIGxpbWl0IHRoZSB0aWxlIGNvdmVyYWdlIHJlY3QgdG8gdGhlIHZpc2libGUgcmVj
dC4KKyAgICAvLyBGdXJ0aGVybW9yZSwgaWYgdGhlIHBhZ2UgY2FuJ3QgaGF2ZSBzY3JvbGxiYXJz
IChmb3IgZXhhbXBsZSBpZiBpdHMgYm9keSBlbGVtZW50IGhhcyBvdmVyZmxvdzpoaWRkZW4pIGl0
J3MgdmVyeSB1bmxpa2VseSB0aGF0IHRoZQorICAgIC8vIHBhZ2Ugd2lsbCBldmVyIGJlIHNjcm9s
bGVkIHNvIHdlIGxpbWl0IHRoZSB0aWxlIGNvdmVyYWdlIHJlY3QgYXMgd2VsbC4KKyAgICBpZiAo
IW1faXNJbldpbmRvdyB8fCBtX3RpbGVDb3ZlcmFnZSAmIENvdmVyYWdlRm9yU2xvd1Njcm9sbGlu
ZykKKyAgICAgICAgcmV0dXJuIHZpc2libGVSZWN0OworCisgICAgYm9vbCBsYXJnZVZpc2libGVS
ZWN0Q2hhbmdlID0gIXByZXZpb3VzVmlzaWJsZVJlY3QuaXNFbXB0eSgpICYmICF2aXNpYmxlUmVj
dC5pbnRlcnNlY3RzKHByZXZpb3VzVmlzaWJsZVJlY3QpOworICAgIAorICAgIC8vIEZJWE1FOiBs
b29rIGF0IGhvdyBmYXIgdGhlIGRvY3VtZW50IGNhbiBzY3JvbGwgaW4gZWFjaCBkaW1lbnNpb24u
CisgICAgZmxvYXQgY292ZXJhZ2VIb3Jpem9udGFsU2l6ZSA9IHZpc2libGVSZWN0LndpZHRoKCk7
CisgICAgZmxvYXQgY292ZXJhZ2VWZXJ0aWNhbFNpemUgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsK
KyAgICAKKyAgICAvLyBJbmZsYXRlIHRoZSBjb3ZlcmFnZSByZWN0IHNvIHRoYXQgaXQgY292ZXJz
IDJ4IG9mIHRoZSB2aXNpYmxlIHdpZHRoIGFuZCAzeCBvZiB0aGUgdmlzaWJsZSBoZWlnaHQuCisg
ICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUgY2hvc2VuIGJlY2F1c2UgaXQncyBtb3JlIGNvbW1vbiB0
byBoYXZlIHRhbGwgcGFnZXMgYW5kIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5LAorICAgIC8vIHNvIHdl
IGtlZXAgbW9yZSB0aWxlcyBhYm92ZSBhbmQgYmVsb3cgdGhlIGN1cnJlbnQgYXJlYS4KKyAgICBp
ZiAobV90aWxlQ292ZXJhZ2UgJiBDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmcgJiYgIWxh
cmdlVmlzaWJsZVJlY3RDaGFuZ2UpCisgICAgICAgIGNvdmVyYWdlSG9yaXpvbnRhbFNpemUgKj0g
MjsKKworICAgIGlmIChtX3RpbGVDb3ZlcmFnZSAmIENvdmVyYWdlRm9yVmVydGljYWxTY3JvbGxp
bmcgJiYgIWxhcmdlVmlzaWJsZVJlY3RDaGFuZ2UpCisgICAgICAgIGNvdmVyYWdlVmVydGljYWxT
aXplICo9IDM7CisKKyAgICAvLyBEb24ndCBleHRlbmQgY292ZXJhZ2UgYmVmb3JlIDAgb3IgYWZ0
ZXIgdGhlIGVuZC4KKyAgICBGbG9hdFJlY3QgY292ZXJhZ2VCb3VuZHMgPSBib3VuZHMoKTsKKyAg
ICBmbG9hdCBjb3ZlcmFnZUxlZnQgPSB2aXNpYmxlUmVjdC54KCkgLSAoY292ZXJhZ2VIb3Jpem9u
dGFsU2l6ZSAtIHZpc2libGVSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBjb3ZlcmFnZUxlZnQgPSBt
aW4oY292ZXJhZ2VMZWZ0LCBjb3ZlcmFnZUJvdW5kcy5tYXhYKCkgLSBjb3ZlcmFnZUhvcml6b250
YWxTaXplKTsKKyAgICBjb3ZlcmFnZUxlZnQgPSBtYXgoY292ZXJhZ2VMZWZ0LCBjb3ZlcmFnZUJv
dW5kcy54KCkpOworCisgICAgZmxvYXQgY292ZXJhZ2VUb3AgPSB2aXNpYmxlUmVjdC55KCkgLSAo
Y292ZXJhZ2VWZXJ0aWNhbFNpemUgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOworICAgIGNv
dmVyYWdlVG9wID0gbWluKGNvdmVyYWdlVG9wLCBjb3ZlcmFnZUJvdW5kcy5tYXhZKCkgLSBjb3Zl
cmFnZVZlcnRpY2FsU2l6ZSk7CisgICAgY292ZXJhZ2VUb3AgPSBtYXgoY292ZXJhZ2VUb3AsIGNv
dmVyYWdlQm91bmRzLnkoKSk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KGNvdmVyYWdlTGVmdCwg
Y292ZXJhZ2VUb3AsIGNvdmVyYWdlSG9yaXpvbnRhbFNpemUsIGNvdmVyYWdlVmVydGljYWxTaXpl
KTsKK30KKworSW50U2l6ZSBUaWxlQ29udHJvbGxlcjo6dGlsZVNpemVGb3JDb3ZlcmFnZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBjb3ZlcmFnZVJlY3QpIGNvbnN0Cit7CisgICAgaWYgKG1fdGlsZUNv
dmVyYWdlICYgQ292ZXJhZ2VGb3JTbG93U2Nyb2xsaW5nKSB7CisgICAgICAgIEZsb2F0U2l6ZSB0
aWxlU2l6ZSA9IGNvdmVyYWdlUmVjdC5zaXplKCk7CisgICAgICAgIHRpbGVTaXplLnNjYWxlKG1f
c2NhbGUpOworICAgICAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHRpbGVTaXplKTsKKyAgICB9
CisKKyAgICByZXR1cm4gSW50U2l6ZShkZWZhdWx0VGlsZVdpZHRoLCBkZWZhdWx0VGlsZUhlaWdo
dCk7Cit9CisKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnNjaGVkdWxlVGlsZVJldmFsaWRhdGlvbihk
b3VibGUgaW50ZXJ2YWwpCit7CisgICAgaWYgKG1fdGlsZVJldmFsaWRhdGlvblRpbWVyLmlzQWN0
aXZlKCkgJiYgbV90aWxlUmV2YWxpZGF0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZhbCgpIDwgaW50
ZXJ2YWwpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGlsZVJldmFsaWRhdGlvblRpbWVyLnN0
YXJ0T25lU2hvdChpbnRlcnZhbCk7Cit9CisKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnRpbGVSZXZh
bGlkYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDb250cm9sbGVyPiopCit7CisgICAgVGlsZVZh
bGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdGlvblBvbGljeSA9IG1fYWdncmVz
c2l2ZWx5UmV0YWluc1RpbGVzID8gMCA6IFBydW5lU2Vjb25kYXJ5VGlsZXM7CisgICAgVGlsZVZh
bGlkYXRpb25Qb2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFsaWRhdGlvblBvbGljeSA9IGZvcmVncm91
bmRWYWxpZGF0aW9uUG9saWN5IHwgVW5wYXJlbnRBbGxUaWxlczsKKworICAgIHJldmFsaWRhdGVU
aWxlcyhmb3JlZ3JvdW5kVmFsaWRhdGlvblBvbGljeSwgYmFja2dyb3VuZFZhbGlkYXRpb25Qb2xp
Y3kpOworfQorCit1bnNpZ25lZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENvdW50KCkgY29u
c3QKK3sKKyAgICBXZWJUaWxlTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMuc2l6ZSgpKTsKKworICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9
IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdGlsZXMuYXBwZW5kKGl0
LT52YWx1ZS5sYXllcik7CisKKyAgICByZXR1cm4gYmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGls
ZXMsIG1fdmlzaWJsZVJlY3QsIEludFBvaW50KDAsMCkpOworfQorCit1bnNpZ25lZCBUaWxlQ29u
dHJvbGxlcjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3QgV2ViVGlsZUxheWVyTGlzdCYg
dGlsZXMsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFBvaW50JiB0aWxl
VHJhbnNsYXRpb24pCit7CisgICAgUmVnaW9uIHBhaW50ZWRWaXNpYmxlVGlsZXM7CisKKyAgICBm
b3IgKFdlYlRpbGVMYXllckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZXMuYmVnaW4oKSwg
ZW5kID0gdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBXZWJU
aWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT5nZXQoKTsKKworICAgICAgICBGbG9hdFJlY3Qgdmlz
aWJsZVBhcnQoQ0dSZWN0T2Zmc2V0KFt0aWxlTGF5ZXIgZnJhbWVdLCB0aWxlVHJhbnNsYXRpb24u
eCgpLCB0aWxlVHJhbnNsYXRpb24ueSgpKSk7CisgICAgICAgIHZpc2libGVQYXJ0LmludGVyc2Vj
dCh2aXNpYmxlUmVjdCk7CisKKyAgICAgICAgaWYgKCF2aXNpYmxlUGFydC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBwYWludGVkVmlzaWJsZVRpbGVzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3Qodmlz
aWJsZVBhcnQpKTsKKyAgICB9CisKKyAgICBSZWdpb24gdW5jb3ZlcmVkUmVnaW9uKGVuY2xvc2lu
Z0ludFJlY3QodmlzaWJsZVJlY3QpKTsKKyAgICB1bmNvdmVyZWRSZWdpb24uc3VidHJhY3QocGFp
bnRlZFZpc2libGVUaWxlcyk7CisKKyAgICByZXR1cm4gdW5jb3ZlcmVkUmVnaW9uLnRvdGFsQXJl
YSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVUaWxlRm9yUmVtb3ZhbChjb25zdCBU
aWxlQ29udHJvbGxlcjo6VGlsZUluZGV4JiB0aWxlSW5kZXgsIGNvbnN0IFRpbGVDb250cm9sbGVy
OjpUaWxlSW5mbyYgdGlsZUluZm8sIFZlY3RvcjxUaWxlQ29udHJvbGxlcjo6VGlsZUluZGV4PiYg
dGlsZXNUb1JlbW92ZSkKK3sKKyAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZv
LmxheWVyLmdldCgpOworICAgIFt0aWxlTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
IFt0aWxlTGF5ZXIgc2V0VGlsZUNvbnRyb2xsZXI6MF07CisgICAgdGlsZXNUb1JlbW92ZS5hcHBl
bmQodGlsZUluZGV4KTsKK30KKwordm9pZCBUaWxlQ29udHJvbGxlcjo6cmVtb3ZlQWxsVGlsZXMo
KQoreworICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9SZW1vdmU7CisKKyAgICBmb3IgKFRp
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHF1ZXVlVGlsZUZvclJlbW92YWwoaXQtPmtleSwg
aXQtPnZhbHVlLCB0aWxlc1RvUmVtb3ZlKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgeworICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9
IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyAgICAgICAgTGF5ZXJQb29sOjpzaGFy
ZWRQb29sKCktPmFkZExheWVyKHRpbGVJbmZvLmxheWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFNlY29uZGFyeVRpbGVzKCkKK3sKKyAgICBWZWN0b3I8VGls
ZUluZGV4PiB0aWxlc1RvUmVtb3ZlOworCisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAg
aWYgKHRpbGVJbmZvLmNvaG9ydCA9PSBWaXNpYmxlVGlsZUNvaG9ydCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIHF1ZXVlVGlsZUZvclJlbW92YWwoaXQtPmtleSwgaXQtPnZhbHVl
LCB0aWxlc1RvUmVtb3ZlKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRp
bGVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVGlsZUluZm8gdGlsZUluZm8gPSBt
X3RpbGVzLnRha2UodGlsZXNUb1JlbW92ZVtpXSk7CisgICAgICAgIExheWVyUG9vbDo6c2hhcmVk
UG9vbCgpLT5hZGRMYXllcih0aWxlSW5mby5sYXllcik7CisgICAgfQorfQorCit2b2lkIFRpbGVD
b250cm9sbGVyOjpyZW1vdmVUaWxlc0luQ29ob3J0KFRpbGVDb2hvcnQgY29ob3J0KQoreworICAg
IEFTU0VSVChjb2hvcnQgIT0gVmlzaWJsZVRpbGVDb2hvcnQpOworICAgIFZlY3RvcjxUaWxlSW5k
ZXg+IHRpbGVzVG9SZW1vdmU7CisKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOworICAgICAgICBpZiAo
dGlsZUluZm8uY29ob3J0ICE9IGNvaG9ydCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHF1ZXVlVGlsZUZvclJlbW92YWwoaXQtPmtleSwgaXQtPnZhbHVlLCB0aWxlc1RvUmVtb3Zl
KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9SZW1vdmUuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgVGlsZUluZm8gdGlsZUluZm8gPSBtX3RpbGVzLnRha2UodGls
ZXNUb1JlbW92ZVtpXSk7CisgICAgICAgIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXll
cih0aWxlSW5mby5sYXllcik7CisgICAgfQorfQorCit2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZh
bGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdGlv
blBvbGljeSwgVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFsaWRhdGlvblBv
bGljeSkKK3sKKyAgICAvLyBJZiB0aGUgdW5kZXJseWluZyBQbGF0Zm9ybUxheWVyIGhhcyBiZWVu
IGRlc3Ryb3llZCwgYnV0IHRoZSBXZWJUaWxlZEJhY2tpbmdMYXllciBoYXNuJ3QKKyAgICAvLyBw
bGF0Zm9ybUxheWVyIHdpbGwgYmUgbnVsbCBoZXJlLgorICAgIFBsYXRmb3JtQ0FMYXllciogcGxh
dGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hl
TGF5ZXIpOworICAgIGlmICghcGxhdGZvcm1MYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
RmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbV92aXNpYmxlUmVjdDsKKworICAgIGlmIChtX2NsaXBz
VG9FeHBvc2VkUmVjdCkKKyAgICAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fZXhwb3NlZFJl
Y3QpOworCisgICAgaWYgKHZpc2libGVSZWN0LmlzRW1wdHkoKSB8fCBib3VuZHMoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdz
IHZhbGlkYXRpb25Qb2xpY3kgPSBtX2lzSW5XaW5kb3cgPyBmb3JlZ3JvdW5kVmFsaWRhdGlvblBv
bGljeSA6IGJhY2tncm91bmRWYWxpZGF0aW9uUG9saWN5OworICAgIAorICAgIEZsb2F0UmVjdCB0
aWxlQ292ZXJhZ2VSZWN0ID0gY29tcHV0ZVRpbGVDb3ZlcmFnZVJlY3QobV92aXNpYmxlUmVjdEF0
TGFzdFJldmFsaWRhdGUpOworICAgIEZsb2F0UmVjdCBzY2FsZWRSZWN0KHRpbGVDb3ZlcmFnZVJl
Y3QpOworICAgIHNjYWxlZFJlY3Quc2NhbGUobV9zY2FsZSk7CisgICAgSW50UmVjdCBjb3ZlcmFn
ZVJlY3RJblRpbGVDb29yZHMoZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KSk7CisKKyAgICBJ
bnRTaXplIG9sZFRpbGVTaXplID0gbV90aWxlU2l6ZTsKKyAgICBtX3RpbGVTaXplID0gdGlsZVNp
emVGb3JDb3ZlcmFnZVJlY3QodGlsZUNvdmVyYWdlUmVjdCk7CisgICAgYm9vbCB0aWxlU2l6ZUNo
YW5nZWQgPSBtX3RpbGVTaXplICE9IG9sZFRpbGVTaXplOworCisgICAgaWYgKHRpbGVTaXplQ2hh
bmdlZCkgeworICAgICAgICByZW1vdmVBbGxUaWxlcygpOworICAgICAgICBtX2NvaG9ydExpc3Qu
Y2xlYXIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBUaWxlQ29ob3J0IGN1cnJDb2hvcnQgPSBu
ZXh0VGlsZUNvaG9ydCgpOworICAgICAgICB1bnNpZ25lZCB0aWxlc0luQ29ob3J0ID0gMDsKKyAg
ICAgICAgCisgICAgICAgIC8vIE1vdmUgdGlsZXMgbmV3bHkgb3V0c2lkZSB0aGUgY292ZXJhZ2Ug
cmVjdCBpbnRvIHRoZSBjb2hvcnQgbWFwLgorICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAg
ICAgICAgIFRpbGVJbmRleCB0aWxlSW5kZXggPSBpdC0+a2V5OworCisgICAgICAgICAgICBXZWJU
aWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOworICAgICAgICAgICAg
SW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcykpIHsK
KyAgICAgICAgICAgICAgICB0aWxlSW5mby5jb2hvcnQgPSBWaXNpYmxlVGlsZUNvaG9ydDsKKyAg
ICAgICAgICAgICAgICBpZiAodGlsZUluZm8uaGFzU3RhbGVDb250ZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBzdG9yZSBhIGRpcnR5IHJlZ2lvbiBwZXIgbGF5ZXI/CisgICAg
ICAgICAgICAgICAgICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgICAg
ICAgICAgICAgdGlsZUluZm8uaGFzU3RhbGVDb250ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBBZGQgdG8gdGhl
IGN1cnJlbnRDb2hvcnQgaWYgbm90IGFscmVhZHkgaW4gb25lLgorICAgICAgICAgICAgICAgIGlm
ICh0aWxlSW5mby5jb2hvcnQgPT0gVmlzaWJsZVRpbGVDb2hvcnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGlsZUluZm8uY29ob3J0ID0gY3VyckNvaG9ydDsKKyAgICAgICAgICAgICAgICAgICAg
Kyt0aWxlc0luQ29ob3J0OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMpCisgICAgICAgICAgICAgICAgICAgICAg
ICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHRpbGVzSW5Db2hvcnQpCisgICAgICAgICAgICBzdGFydGVkTmV3Q29ob3J0KGN1cnJDb2hvcnQp
OworCisgICAgICAgIGlmICghbV9hZ2dyZXNzaXZlbHlSZXRhaW5zVGlsZXMpCisgICAgICAgICAg
ICBzY2hlZHVsZUNvaG9ydFJlbW92YWwoKTsKKyAgICB9CisKKyAgICBUaWxlSW5kZXggdG9wTGVm
dDsKKyAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7CisgICAgZ2V0VGlsZUluZGV4UmFuZ2VGb3JS
ZWN0KGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcywgdG9wTGVmdCwgYm90dG9tUmlnaHQpOworCisg
ICAgVmVjdG9yPEZsb2F0UmVjdD4gZGlydHlSZWN0czsKKyAgICAKKyAgICAvLyBFbnN1cmUgcHJp
bWFyeSB0aWxlIGNvdmVyYWdlIHRpbGVzLgorICAgIG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3Qg
PSBJbnRSZWN0KCk7CisKKyAgICBmb3IgKGludCB5ID0gdG9wTGVmdC55KCk7IHkgPD0gYm90dG9t
UmlnaHQueSgpOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRvcExlZnQueCgpOyB4IDw9
IGJvdHRvbVJpZ2h0LngoKTsgKyt4KSB7CisgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4
KHgsIHkpOworCisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRl
eCh0aWxlSW5kZXgpOworICAgICAgICAgICAgbV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVjdC51bml0
ZSh0aWxlUmVjdCk7CisKKyAgICAgICAgICAgIFRpbGVJbmZvJiB0aWxlSW5mbyA9IG1fdGlsZXMu
YWRkKHRpbGVJbmRleCwgVGlsZUluZm8oKSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAg
aWYgKCF0aWxlSW5mby5sYXllcikgeworICAgICAgICAgICAgICAgIHRpbGVJbmZvLmxheWVyID0g
Y3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fdW5wYXJl
bnRzT2Zmc2NyZWVuVGlsZXMgfHwgbV9pc0luV2luZG93KQorICAgICAgICAgICAgICAgICAgICBb
bV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUluZm8ubGF5ZXIuZ2V0
KCldOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKCFtX3VucGFy
ZW50c09mZnNjcmVlblRpbGVzIHx8IG1faXNJbldpbmRvdykgJiYgIVt0aWxlSW5mby5sYXllci5n
ZXQoKSBzdXBlcmxheWVyXSkKKyAgICAgICAgICAgICAgICAgICAgW21fdGlsZUNvbnRhaW5lckxh
eWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVJbmZvLmxheWVyLmdldCgpXTsKKworICAgICAgICAg
ICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIGxheWVyIGZvciB0aGlzIHRpbGUuIEVuc3VyZSB0
aGF0IGl0cyBzaXplIGlzIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgRmxvYXRTaXplIHRpbGVM
YXllclNpemUoW3RpbGVJbmZvLmxheWVyLmdldCgpIGZyYW1lXS5zaXplKTsKKyAgICAgICAgICAg
ICAgICBpZiAodGlsZUxheWVyU2l6ZSA9PSBGbG9hdFNpemUodGlsZVJlY3Quc2l6ZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBbdGlsZUluZm8u
bGF5ZXIuZ2V0KCkgc2V0RnJhbWU6dGlsZVJlY3RdOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJlY3QgPSB0aWxlUmVjdDsKKyAg
ICAgICAgICAgIHNjYWxlZFRpbGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsKKyAgICAgICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICh2YWxpZGF0aW9uUG9saWN5ICYgUHJ1bmVTZWNvbmRhcnlUaWxlcykgeworICAgICAg
ICByZW1vdmVBbGxTZWNvbmRhcnlUaWxlcygpOworICAgICAgICBtX2NvaG9ydExpc3QuY2xlYXIo
KTsKKyAgICB9CisKKyAgICBpZiAobV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcyAmJiAodmFsaWRh
dGlvblBvbGljeSAmIFVucGFyZW50QWxsVGlsZXMpKSB7CisgICAgICAgIGZvciAoVGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIFtpdC0+dmFsdWUubGF5ZXIuZ2V0KCkgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOworICAgIH0KKyAgICAKKyAgICBpZiAobV90aWxlZFNjcm9sbGluZ0luZGlj
YXRvckxheWVyKQorICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKTsKKworICAgIG1fdmlz
aWJsZVJlY3RBdExhc3RSZXZhbGlkYXRlID0gdmlzaWJsZVJlY3Q7CisKKyAgICBpZiAoZGlydHlS
ZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBwbGF0Zm9ybUxheWVyLT5vd25l
cigpLT5wbGF0Zm9ybUNBTGF5ZXJEaWRDcmVhdGVUaWxlcyhkaXJ0eVJlY3RzKTsKK30KKworVGls
ZUNvbnRyb2xsZXI6OlRpbGVDb2hvcnQgVGlsZUNvbnRyb2xsZXI6Om5leHRUaWxlQ29ob3J0KCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fY29ob3J0TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBtX2NvaG9ydExpc3QubGFzdCgpLmNvaG9ydCArIDE7CisKKyAgICByZXR1cm4gMTsKK30KKwor
dm9pZCBUaWxlQ29udHJvbGxlcjo6c3RhcnRlZE5ld0NvaG9ydChUaWxlQ29ob3J0IGNvaG9ydCkK
K3sKKyAgICBtX2NvaG9ydExpc3QuYXBwZW5kKFRpbGVDb2hvcnRJbmZvKGNvaG9ydCwgbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCkpKTsKK30KKworVGlsZUNvbnRyb2xsZXI6OlRpbGVDb2hv
cnQgVGlsZUNvbnRyb2xsZXI6Om5ld2VzdFRpbGVDb2hvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvaG9ydExpc3QuaXNFbXB0eSgpID8gMCA6IG1fY29ob3J0TGlzdC5sYXN0KCkuY29ob3J0
OworfQorCitUaWxlQ29udHJvbGxlcjo6VGlsZUNvaG9ydCBUaWxlQ29udHJvbGxlcjo6b2xkZXN0
VGlsZUNvaG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29ob3J0TGlzdC5pc0VtcHR5KCkg
PyAwIDogbV9jb2hvcnRMaXN0LmZpcnN0KCkuY29ob3J0OworfQorCit2b2lkIFRpbGVDb250cm9s
bGVyOjpzY2hlZHVsZUNvaG9ydFJlbW92YWwoKQoreworICAgIGNvbnN0IGRvdWJsZSBjb2hvcnRS
ZW1vdmFsVGltZXJTZWNvbmRzID0gMTsKKworICAgIC8vIFN0YXJ0IHRoZSB0aW1lciwgb3IgcmVz
Y2hlZHVsZSB0aGUgdGltZXIgZnJvbSBub3cgaWYgaXQncyBhbHJlYWR5IGFjdGl2ZS4KKyAgICBp
ZiAoIW1fY29ob3J0UmVtb3ZhbFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fY29ob3J0UmVt
b3ZhbFRpbWVyLnN0YXJ0UmVwZWF0aW5nKGNvaG9ydFJlbW92YWxUaW1lclNlY29uZHMpOworfQor
Cit2b2lkIFRpbGVDb250cm9sbGVyOjpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZChUaW1lcjxUaWxl
Q29udHJvbGxlcj4qKQoreworICAgIGlmIChtX2NvaG9ydExpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIG1fY29ob3J0UmVtb3ZhbFRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRvdWJsZSBjb2hvcnRMaWZlVGltZVNlY29uZHMgPSAyOworICAgIGRvdWJsZSB0aW1l
VGhyZXNob2xkID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBjb2hvcnRMaWZlVGlt
ZVNlY29uZHM7CisKKyAgICB3aGlsZSAoIW1fY29ob3J0TGlzdC5pc0VtcHR5KCkgJiYgbV9jb2hv
cnRMaXN0LmZpcnN0KCkuY3JlYXRpb25UaW1lIDwgdGltZVRocmVzaG9sZCkgeworICAgICAgICBU
aWxlQ29ob3J0SW5mbyBmaXJzdENvaG9ydCA9IG1fY29ob3J0TGlzdC50YWtlRmlyc3QoKTsKKyAg
ICAgICAgcmVtb3ZlVGlsZXNJbkNvaG9ydChmaXJzdENvaG9ydC5jb2hvcnQpOworICAgIH0KKwor
ICAgIGlmIChtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIpCisgICAgICAgIHVwZGF0ZVRp
bGVDb3ZlcmFnZU1hcCgpOworfQorCit2b2lkIFRpbGVDb250cm9sbGVyOjplbnN1cmVUaWxlc0Zv
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChtX3VucGFyZW50c09mZnNj
cmVlblRpbGVzICYmICFtX2lzSW5XaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXRm
b3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxh
eWVyKG1fdGlsZUNhY2hlTGF5ZXIpOworICAgIGlmICghcGxhdGZvcm1MYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QocmVjdCk7CisgICAgc2NhbGVkUmVj
dC5zY2FsZShtX3NjYWxlKTsKKyAgICBJbnRSZWN0IHJlY3RJblRpbGVDb29yZHMoZW5jbG9zaW5n
SW50UmVjdChzY2FsZWRSZWN0KSk7CisKKyAgICBpZiAobV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVj
dC5jb250YWlucyhyZWN0SW5UaWxlQ29vcmRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGls
ZUluZGV4IHRvcExlZnQ7CisgICAgVGlsZUluZGV4IGJvdHRvbVJpZ2h0OworICAgIGdldFRpbGVJ
bmRleFJhbmdlRm9yUmVjdChyZWN0SW5UaWxlQ29vcmRzLCB0b3BMZWZ0LCBib3R0b21SaWdodCk7
CisKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBkaXJ0eVJlY3RzOworICAgIFRpbGVDb2hvcnQgY3Vy
ckNvaG9ydCA9IG5leHRUaWxlQ29ob3J0KCk7CisgICAgdW5zaWduZWQgdGlsZXNJbkNvaG9ydCA9
IDA7CisKKyAgICBmb3IgKGludCB5ID0gdG9wTGVmdC55KCk7IHkgPD0gYm90dG9tUmlnaHQueSgp
OyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRvcExlZnQueCgpOyB4IDw9IGJvdHRvbVJp
Z2h0LngoKTsgKyt4KSB7CisgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4KHgsIHkpOwor
CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5k
ZXgpOworICAgICAgICAgICAgVGlsZUluZm8mIHRpbGVJbmZvID0gbV90aWxlcy5hZGQodGlsZUlu
ZGV4LCBUaWxlSW5mbygpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIXRpbGVJ
bmZvLmxheWVyKSB7CisgICAgICAgICAgICAgICAgdGlsZUluZm8ubGF5ZXIgPSBjcmVhdGVUaWxl
TGF5ZXIodGlsZVJlY3QpOworICAgICAgICAgICAgICAgIFttX3RpbGVDb250YWluZXJMYXllci5n
ZXQoKSBhZGRTdWJsYXllcjp0aWxlSW5mby5sYXllci5nZXQoKV07CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICghW3RpbGVJbmZvLmxheWVyLmdldCgpIHN1cGVybGF5
ZXJdKQorICAgICAgICAgICAgICAgICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRk
U3VibGF5ZXI6dGlsZUluZm8ubGF5ZXIuZ2V0KCldOworCisgICAgICAgICAgICAgICAgLy8gV2Ug
YWxyZWFkeSBoYXZlIGEgbGF5ZXIgZm9yIHRoaXMgdGlsZS4gRW5zdXJlIHRoYXQgaXRzIHNpemUg
aXMgY29ycmVjdC4KKyAgICAgICAgICAgICAgICBDR1NpemUgdGlsZUxheWVyU2l6ZSA9IFt0aWxl
SW5mby5sYXllci5nZXQoKSBmcmFtZV0uc2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAodGlsZUxh
eWVyU2l6ZS53aWR0aCA+PSB0aWxlUmVjdC53aWR0aCgpICYmIHRpbGVMYXllclNpemUuaGVpZ2h0
ID49IHRpbGVSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0RnJhbWU6dGlsZVJlY3RdOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2VjdHMobV9w
cmltYXJ5VGlsZUNvdmVyYWdlUmVjdCkpIHsKKyAgICAgICAgICAgICAgICB0aWxlSW5mby5jb2hv
cnQgPSBjdXJyQ29ob3J0OworICAgICAgICAgICAgICAgICsrdGlsZXNJbkNvaG9ydDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJl
Y3Q7CisgICAgICAgICAgICBzY2FsZWRUaWxlUmVjdC5zY2FsZSgxIC8gbV9zY2FsZSk7CisgICAg
ICAgICAgICBkaXJ0eVJlY3RzLmFwcGVuZChzY2FsZWRUaWxlUmVjdCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgaWYgKHRpbGVzSW5Db2hvcnQpCisgICAgICAgIHN0YXJ0ZWROZXdDb2hv
cnQoY3VyckNvaG9ydCk7CisKKyAgICBpZiAobV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
KQorICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKTsKKworICAgIGlmICghZGlydHlSZWN0
cy5pc0VtcHR5KCkpCisgICAgICAgIHBsYXRmb3JtTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FM
YXllckRpZENyZWF0ZVRpbGVzKGRpcnR5UmVjdHMpOworfQorCit2b2lkIFRpbGVDb250cm9sbGVy
Ojp1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKQoreworICAgIEZsb2F0UmVjdCBjb250YWluZXJCb3Vu
ZHMgPSBib3VuZHMoKTsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxl
UmVjdCgpOworCisgICAgaWYgKG1fY2xpcHNUb0V4cG9zZWRSZWN0KQorICAgICAgICB2aXNpYmxl
UmVjdC5pbnRlcnNlY3QobV9leHBvc2VkUmVjdCk7CisKKyAgICB2aXNpYmxlUmVjdC5jb250cmFj
dCg0LCA0KTsgLy8gTGF5ZXIgaXMgcG9zaXRpb25lZCAycHggZnJvbSB0b3AgYW5kIGxlZnQgZWRn
ZXMuCisKKyAgICBmbG9hdCB3aWR0aFNjYWxlID0gMTsKKyAgICBmbG9hdCBzY2FsZSA9IDE7Cisg
ICAgaWYgKCFjb250YWluZXJCb3VuZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIHdpZHRoU2NhbGUg
PSBzdGQ6Om1pbjxmbG9hdD4odmlzaWJsZVJlY3Qud2lkdGgoKSAvIGNvbnRhaW5lckJvdW5kcy53
aWR0aCgpLCAwLjEpOworICAgICAgICBzY2FsZSA9IHN0ZDo6bWluKHdpZHRoU2NhbGUsIHZpc2li
bGVSZWN0LmhlaWdodCgpIC8gY29udGFpbmVyQm91bmRzLmhlaWdodCgpKTsKKyAgICB9CisgICAg
CisgICAgZmxvYXQgaW5kaWNhdG9yU2NhbGUgPSBzY2FsZSAqIG1fc2NhbGU7CisgICAgRmxvYXRS
ZWN0IG1hcEJvdW5kcyA9IGNvbnRhaW5lckJvdW5kczsKKyAgICBtYXBCb3VuZHMuc2NhbGUoaW5k
aWNhdG9yU2NhbGUsIGluZGljYXRvclNjYWxlKTsKKyAgICAKKyAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKKyAgICAKKyAgICBpZiAobV9jbGlwc1RvRXhwb3NlZFJlY3QpCisgICAgICAg
IFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0UG9zaXRpb246bV9leHBv
c2VkUmVjdC5sb2NhdGlvbigpICsgRmxvYXRQb2ludCgyLCAyKV07CisgICAgZWxzZQorICAgICAg
ICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9p
bnRNYWtlKDIsIDIpXTsKKworICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0
KCkgc2V0Qm91bmRzOm1hcEJvdW5kc107CisgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JM
YXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworCisgICAgdmlzaWJsZVJlY3Quc2NhbGUoaW5k
aWNhdG9yU2NhbGUsIGluZGljYXRvclNjYWxlKTsKKyAgICB2aXNpYmxlUmVjdC5leHBhbmQoMiwg
Mik7CisgICAgW1ttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgdmlzaWJsZVJl
Y3RGcmFtZUxheWVyXSBzZXRGcmFtZTp2aXNpYmxlUmVjdF07CisKKyAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3I7CisgICAgc3dpdGNoIChtX2luZGljYXRvck1vZGUpIHsKKyAgICBjYXNlIE1haW5U
aHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUluZGljYXRpb246CisgICAgICAgIGJhY2tncm91
bmRDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFp
blRocmVhZFNjcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJbmRpY2F0aW9uOgorICAgICAg
ICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGhyZWFkZWRTY3JvbGxpbmdJbmRpY2F0aW9uOgorICAgICAgICBiYWNrZ3JvdW5k
Q29sb3IgPSBDb2xvcigwLCAyMDAsIDApOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBb
W21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSB2aXNpYmxlUmVjdEZyYW1lTGF5
ZXJdIHNldEJvcmRlckNvbG9yOmNhY2hlZENHQ29sb3IoYmFja2dyb3VuZENvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKV07CisKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK0lu
dFJlY3QgVGlsZUNvbnRyb2xsZXI6OnRpbGVHcmlkRXh0ZW50KCkgY29uc3QKK3sKKyAgICBUaWxl
SW5kZXggdG9wTGVmdDsKKyAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7CisgICAgZ2V0VGlsZUlu
ZGV4UmFuZ2VGb3JSZWN0KG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3QsIHRvcExlZnQsIGJvdHRv
bVJpZ2h0KTsKKworICAgIC8vIFJldHVybiBpbmRleCBvZiB0b3AsIGxlZnQgdGlsZSBhbmQgdGhl
IG51bWJlciBvZiB0aWxlcyBhY3Jvc3MgYW5kIGRvd24uCisgICAgcmV0dXJuIEludFJlY3QodG9w
TGVmdC54KCksIHRvcExlZnQueSgpLCBib3R0b21SaWdodC54KCkgLSB0b3BMZWZ0LngoKSArIDEs
IGJvdHRvbVJpZ2h0LnkoKSAtIHRvcExlZnQueSgpICsgMSk7Cit9CisKKy8vIFJldHVybiB0aGUg
cmVjdCBpbiBsYXllciBjb29yZHMsIG5vdCB0aWxlIGNvb3Jkcy4KK0ludFJlY3QgVGlsZUNvbnRy
b2xsZXI6OnRpbGVDb3ZlcmFnZVJlY3QoKSBjb25zdAoreworICAgIEludFJlY3QgY292ZXJhZ2VS
ZWN0SW5MYXllckNvb3JkcyhtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0KTsKKyAgICBjb3ZlcmFn
ZVJlY3RJbkxheWVyQ29vcmRzLnNjYWxlKDEgLyBtX3NjYWxlKTsKKyAgICByZXR1cm4gY292ZXJh
Z2VSZWN0SW5MYXllckNvb3JkczsKK30KKworQ0FMYXllciAqVGlsZUNvbnRyb2xsZXI6OnRpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIoKQoreworICAgIGlmICghbV90aWxlZFNjcm9sbGluZ0lu
ZGljYXRvckxheWVyKSB7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciA9
IFtXZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyIGxheWVyXTsKKyAgICAgICAgW21fdGls
ZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRUaWxlQ29udHJvbGxlcjp0aGlzXTsK
KyAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRPcGFjaXR5
OjAuNzVdOworICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNl
dEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKyAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllci5nZXQoKSBzZXRCb3JkZXJDb2xvcjpjYWNoZWRDR0NvbG9yKENvbG9yOjpibGFj
aywgQ29sb3JTcGFjZURldmljZVJHQildOworICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGlj
YXRvckxheWVyLmdldCgpIHNldEJvcmRlcldpZHRoOjFdOworICAgICAgICBbbV90aWxlZFNjcm9s
bGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDIsIDIpXTsK
KyAgICAgICAgdXBkYXRlVGlsZUNvdmVyYWdlTWFwKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1f
dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKTsKK30KKwordm9pZCBUaWxlQ29udHJv
bGxlcjo6c2V0U2Nyb2xsaW5nTW9kZUluZGljYXRpb24oU2Nyb2xsaW5nTW9kZUluZGljYXRpb24g
c2Nyb2xsaW5nTW9kZSkKK3sKKyAgICBpZiAoc2Nyb2xsaW5nTW9kZSA9PSBtX2luZGljYXRvck1v
ZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5kaWNhdG9yTW9kZSA9IHNjcm9sbGluZ01v
ZGU7CisKKyAgICBpZiAobV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKQorICAgICAgICB1
cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKTsKK30KKworV2ViVGlsZUxheWVyKiBUaWxlQ29udHJvbGxl
cjo6dGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAoreworICAg
IHJldHVybiBtX3RpbGVzLmdldChpbmRleCkubGF5ZXIuZ2V0KCk7Cit9CisKK1JldGFpblB0cjxX
ZWJUaWxlTGF5ZXI+IFRpbGVDb250cm9sbGVyOjpjcmVhdGVUaWxlTGF5ZXIoY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QpCit7CisgICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gbGF5ZXIgPSBMYXll
clBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0aFNpemUodGlsZVJlY3Quc2l6ZSgpKTsK
KyAgICBpZiAobGF5ZXIpIHsKKyAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHJlc3RvcmUg
YSBsYXllciBmcm9tIHRoZSBMYXllclBvb2wsIHdlIHNob3VsZCBjYWxsIHNldE5lZWRzRGlzcGxh
eSB0bworICAgICAgICAvLyBlbnN1cmUgd2UgYXZvaWQgc3RhbGUgY29udGVudC4KKyAgICAgICAg
W2xheWVyIHJlc2V0UGFpbnRDb3VudF07CisgICAgICAgIFtsYXllciBzZXROZWVkc0Rpc3BsYXld
OworICAgIH0gZWxzZQorICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tXZWJUaWxlTGF5ZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBbbGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludFplcm9d
OworICAgIFtsYXllci5nZXQoKSBzZXRGcmFtZTp0aWxlUmVjdF07CisgICAgW2xheWVyLmdldCgp
IHNldFRpbGVDb250cm9sbGVyOnRoaXNdOworICAgIFtsYXllci5nZXQoKSBzZXRCb3JkZXJDb2xv
cjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKKyAgICBbbGF5ZXIuZ2V0KCkgc2V0Qm9y
ZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CisgICAgW2xheWVyLmdldCgpIHNldEVk
Z2VBbnRpYWxpYXNpbmdNYXNrOjBdOworICAgIFtsYXllci5nZXQoKSBzZXRPcGFxdWU6bV90aWxl
c0FyZU9wYXF1ZV07CisjaWZuZGVmIE5ERUJVRworICAgIFtsYXllci5nZXQoKSBzZXROYW1lOkAi
VGlsZSJdOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA3MAorICAgIFtsYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxl
Om1fZGV2aWNlU2NhbGVGYWN0b3JdOworICAgIFtsYXllci5nZXQoKSBzZXRBY2NlbGVyYXRlc0Ry
YXdpbmc6bV9hY2NlbGVyYXRlc0RyYXdpbmddOworI2VuZGlmCisKKyAgICByZXR1cm4gbGF5ZXI7
Cit9CisKK2Jvb2wgVGlsZUNvbnRyb2xsZXI6OnNob3VsZFNob3dSZXBhaW50Q291bnRlcnMoKSBj
b25zdAoreworICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOworICAgIGlmICghcGxhdGZv
cm1MYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1MYXllci0+b3duZXIoKTsKKyAg
ICBBU1NFUlQobGF5ZXJDb250ZW50cyk7CisgICAgaWYgKCFsYXllckNvbnRlbnRzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxh
eWVyU2hvd1JlcGFpbnRDb3VudGVyKDApOworfQorCit2b2lkIFRpbGVDb250cm9sbGVyOjpkcmF3
UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQp
Cit7CisgICAgdW5zaWduZWQgcGFpbnRDb3VudCA9IFtsYXllciBpbmNyZW1lbnRQYWludENvdW50
XTsKKyAgICBpZiAoIXNob3VsZFNob3dSZXBhaW50Q291bnRlcnMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRklYTUU6IFNvbWUgb2YgdGhpcyBjb2RlIGNvdWxkIGJlIHNoYXJlZCB3aXRo
IFdlYkxheWVyLgorICAgIGNoYXIgdGV4dFsxNl07IC8vIHRoYXQncyBhIGxvdCBvZiByZXBhaW50
cworICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiVkIiwgcGFpbnRDb3VudCk7CisK
KyAgICBDR1JlY3QgaW5kaWNhdG9yQm94ID0gW2xheWVyIGJvdW5kc107CisgICAgaW5kaWNhdG9y
Qm94LnNpemUud2lkdGggPSAxMiArIDEwICogc3RybGVuKHRleHQpOworICAgIGluZGljYXRvckJv
eC5zaXplLmhlaWdodCA9IDI3OworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisK
KyAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCAwLjVmKTsKKyAgICBDR0NvbnRleHRCZWdp
blRyYW5zcGFyZW5jeUxheWVyV2l0aFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94LCAwKTsKKwor
ICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBtX3RpbGVEZWJ1Z0Jv
cmRlckNvbG9yLmdldCgpKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBpbmRpY2F0
b3JCb3gpOworCisgICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1D
QUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7CisKKyAgICBpZiAocGxh
dGZvcm1MYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkpCisgICAgICAgIENHQ29udGV4dFNldFJH
QkZpbGxDb2xvcihjb250ZXh0LCAxLCAwLCAwLCAxKTsKKyAgICBlbHNlCisgICAgICAgIENHQ29u
dGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAxLCAxKTsKKworI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY29udGV4
dCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKKyAgICBDR0NvbnRleHRTZWxl
Y3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2RpbmdNYWNSb21hbik7Cisg
ICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJveC5vcmlnaW4u
eCArIDUsIGluZGljYXRvckJveC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4dCkpOwor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorCisgICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJl
bmN5TGF5ZXIoY29udGV4dCk7CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsK
K30KKwordm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRS
ZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmRzKQoreworICAgIENHQ29udGV4dFNldFJHQkZp
bGxDb2xvcihjb250ZXh0LCAwLjMsIDAuMywgMC4zLCAxKTsKKyAgICBDR0NvbnRleHRGaWxsUmVj
dChjb250ZXh0LCBsYXllckJvdW5kcyk7CisKKyAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gbGF5
ZXJCb3VuZHMuc2l6ZS53aWR0aCAvIGJvdW5kcygpLndpZHRoKCk7CisKKyAgICBDR0Zsb2F0IGNv
bnRleHRTY2FsZSA9IHNjYWxlRmFjdG9yIC8gc2NhbGUoKTsKKyAgICBDR0NvbnRleHRTY2FsZUNU
TShjb250ZXh0LCBjb250ZXh0U2NhbGUsIGNvbnRleHRTY2FsZSk7CisgICAgCisgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxl
SW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxl
SW5mby5sYXllci5nZXQoKTsKKworICAgICAgICBDR0Zsb2F0IHJlZCA9IDE7CisgICAgICAgIENH
RmxvYXQgZ3JlZW4gPSAxOworICAgICAgICBDR0Zsb2F0IGJsdWUgPSAxOworICAgICAgICBpZiAo
dGlsZUluZm8uaGFzU3RhbGVDb250ZW50KSB7CisgICAgICAgICAgICByZWQgPSAwLjI1OworICAg
ICAgICAgICAgZ3JlZW4gPSAwLjEyNTsKKyAgICAgICAgICAgIGJsdWUgPSAwOworICAgICAgICB9
CisKKyAgICAgICAgVGlsZUNvaG9ydCBuZXdlc3RDb2hvcnQgPSBuZXdlc3RUaWxlQ29ob3J0KCk7
CisgICAgICAgIFRpbGVDb2hvcnQgb2xkZXN0Q29ob3J0ID0gb2xkZXN0VGlsZUNvaG9ydCgpOwor
CisgICAgICAgIGlmICghbV9hZ2dyZXNzaXZlbHlSZXRhaW5zVGlsZXMgJiYgdGlsZUluZm8uY29o
b3J0ICE9IFZpc2libGVUaWxlQ29ob3J0ICYmIG5ld2VzdENvaG9ydCA+IG9sZGVzdENvaG9ydCkg
eworICAgICAgICAgICAgZmxvYXQgY29ob3J0UHJvcG9ydGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0
PigobmV3ZXN0Q29ob3J0IC0gdGlsZUluZm8uY29ob3J0KSkgLyAobmV3ZXN0Q29ob3J0IC0gb2xk
ZXN0Q29ob3J0KTsKKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0
LCByZWQsIGdyZWVuLCBibHVlLCAxIC0gY29ob3J0UHJvcG9ydGlvbik7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIHJlZCwgZ3Jl
ZW4sIGJsdWUsIDEpOworCisgICAgICAgIGlmIChbdGlsZUxheWVyIHN1cGVybGF5ZXJdKSB7Cisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgMC41IC8gY29udGV4dFNj
YWxlKTsKKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIDAs
IDAsIDAsIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZVdpZHRoKGNvbnRleHQsIDEgLyBjb250ZXh0U2NhbGUpOworICAgICAgICAgICAgQ0dDb250ZXh0
U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgMC4yLCAwLjEsIDAuOSwgMSk7CisgICAgICAgIH0K
KworICAgICAgICBDR1JlY3QgZnJhbWUgPSBbdGlsZUxheWVyIGZyYW1lXTsKKyAgICAgICAgQ0dD
b250ZXh0RmlsbFJlY3QoY29udGV4dCwgZnJhbWUpOworICAgICAgICBDR0NvbnRleHRTdHJva2VS
ZWN0KGNvbnRleHQsIGZyYW1lKTsKKyAgICB9Cit9CisgICAgCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9XZWJUaWxlQ2FjaGVMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1dlYlRpbGVDYWNoZUxheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFlNjNhNTAxZWQ5ZjljZDQ2ZDhmODg5MWFmMjVmMGE5MTcxMGQ5NjQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVDYWNoZUxheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotIAotI2lmbmRlZiBXZWJUaWxlQ2FjaGVMYXllcl9oCi0jZGVmaW5lIFdlYlRpbGVD
YWNoZUxheWVyX2gKLQotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0
IDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0
OwotICAgIGNsYXNzIFRpbGVDYWNoZTsKLSAgICBjbGFzcyBUaWxlZEJhY2tpbmc7Ci19Ci0KLUBp
bnRlcmZhY2UgV2ViVGlsZUNhY2hlTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBPd25QdHI8V2ViQ29y
ZTo6VGlsZUNhY2hlPiBfdGlsZUNhY2hlOwotfQotCi0tIChDQUxheWVyICopdGlsZUNvbnRhaW5l
ckxheWVyOwotLSAoV2ViQ29yZTo6VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmc7Ci0tICh2b2lk
KWludmFsaWRhdGU7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdlYlRpbGVDYWNoZUxheWVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxl
Q2FjaGVMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9X
ZWJUaWxlQ2FjaGVMYXllci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDExOWY1
YmQyMjJiNWM1Njc2NjAyNzA0MGQ2MmQ1Njc1ZjFhZThlMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvV2ViVGlsZUNhY2hlTGF5ZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJUaWxlQ2FjaGVMYXllci5oIgot
Ci0jaW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJUaWxlQ2FjaGUuaCIKLSNpbXBvcnQgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW1wbGVtZW50
YXRpb24gV2ViVGlsZUNhY2hlTGF5ZXIKLQotLSAoaWQpaW5pdAotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX3Rp
bGVDYWNoZSA9IFRpbGVDYWNoZTo6Y3JlYXRlKHNlbGYpOwotI2lmbmRlZiBOREVCVUcKLSAgICBb
c2VsZiBzZXROYW1lOkAiV2ViVGlsZUNhY2hlTGF5ZXIiXTsKLSNlbmRpZgotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBBU1NFUlQoIV90aWxlQ2FjaGUpOwot
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZClpbml0V2l0aExheWVyOihpZClsYXll
cgotewotICAgIFVOVVNFRF9QQVJBTShsYXllcik7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihO
U1N0cmluZyAqKWtleQotewotICAgIFVOVVNFRF9QQVJBTShrZXkpOwotICAgIAotICAgIC8vIERp
c2FibGUgYWxsIGFuaW1hdGlvbnMuCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClzZXRC
b3VuZHM6KENHUmVjdClib3VuZHMKLXsKLSAgICBbc3VwZXIgc2V0Qm91bmRzOmJvdW5kc107Ci0K
LSAgICBfdGlsZUNhY2hlLT50aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKTsKLX0KLQotLSAo
dm9pZClzZXRPcGFxdWU6KEJPT0wpb3BhcXVlCi17Ci0gICAgX3RpbGVDYWNoZS0+c2V0VGlsZXNP
cGFxdWUob3BhcXVlKTsKLX0KLQotLSAoQk9PTClpc09wYXF1ZQotewotICAgIHJldHVybiBfdGls
ZUNhY2hlLT50aWxlc0FyZU9wYXF1ZSgpOwotfQotCi0tICh2b2lkKXNldE5lZWRzRGlzcGxheQot
ewotICAgIF90aWxlQ2FjaGUtPnNldE5lZWRzRGlzcGxheSgpOwotfQotCi0tICh2b2lkKXNldE5l
ZWRzRGlzcGxheUluUmVjdDooQ0dSZWN0KXJlY3QKLXsKLSAgICBfdGlsZUNhY2hlLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Ci19Ci0KLS0gKHZvaWQpc2V0
QWNjZWxlcmF0ZXNEcmF3aW5nOihCT09MKWFjY2VsZXJhdGVzRHJhd2luZwotewotICAgIF90aWxl
Q2FjaGUtPnNldEFjY2VsZXJhdGVzRHJhd2luZyhhY2NlbGVyYXRlc0RyYXdpbmcpOwotfQotCi0t
IChCT09MKWFjY2VsZXJhdGVzRHJhd2luZwotewotICAgIHJldHVybiBfdGlsZUNhY2hlLT5hY2Nl
bGVyYXRlc0RyYXdpbmcoKTsKLX0KLQotLSAodm9pZClzZXRDb250ZW50c1NjYWxlOihDR0Zsb2F0
KWNvbnRlbnRzU2NhbGUKLXsKLSAgICBfdGlsZUNhY2hlLT5zZXRTY2FsZShjb250ZW50c1NjYWxl
KTsKLX0KLQotLSAoQ0FMYXllciAqKXRpbGVDb250YWluZXJMYXllcgotewotICAgIHJldHVybiBf
dGlsZUNhY2hlLT50aWxlQ29udGFpbmVyTGF5ZXIoKTsKLX0KLQotLSAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nKil0aWxlZEJhY2tpbmcKLXsKLSAgICByZXR1cm4gX3RpbGVDYWNoZS5nZXQoKTsKLX0K
LQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBBU1NFUlQoX3RpbGVDYWNoZSk7Ci0gICAgX3RpbGVDYWNoZSA9IG51bGxwdHI7Ci19Ci0KLS0g
KHZvaWQpc2V0Qm9yZGVyQ29sb3I6KENHQ29sb3JSZWYpYm9yZGVyQ29sb3IKLXsKLSAgICBfdGls
ZUNhY2hlLT5zZXRUaWxlRGVidWdCb3JkZXJDb2xvcihib3JkZXJDb2xvcik7Ci19Ci0KLS0gKHZv
aWQpc2V0Qm9yZGVyV2lkdGg6KENHRmxvYXQpYm9yZGVyV2lkdGgKLXsKLSAgICAvLyBUaWxlcyBh
ZGpvaW4sIHNvIGhhbHZlIHRoZSBib3JkZXIgd2lkdGguCi0gICAgX3RpbGVDYWNoZS0+c2V0VGls
ZURlYnVnQm9yZGVyV2lkdGgoYm9yZGVyV2lkdGggLyAyKTsKLX0KLQotQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5o
CmluZGV4IDAyZjZjYzgzNWIzN2E1ZTE3NmIzMTY1MzY0NGYxZGI2YTk5ZGFkZDYuLmUzYTI4YmJl
N2UzMDM4Yjk0ZmU2OWQ5ZjE1MjJkMGEzMGZhNmYxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmgKQEAgLTI3LDE1
ICsyNywxNSBAQAogI2RlZmluZSBXZWJUaWxlTGF5ZXJfaAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgY2xhc3MgVGlsZUNhY2hlOworY2xhc3MgVGlsZUNvbnRyb2xsZXI7CiB9CiAKIEBpbnRl
cmZhY2UgV2ViVGlsZUxheWVyIDogQ0FMYXllciB7Ci0gICAgV2ViQ29yZTo6VGlsZUNhY2hlKiBf
dGlsZUNhY2hlOworICAgIFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKiBfdGlsZUNvbnRyb2xsZXI7
CiAgICAgdW5zaWduZWQgX3BhaW50Q291bnQ7CiB9CiAKLS0gKHZvaWQpc2V0VGlsZUNhY2hlOihX
ZWJDb3JlOjpUaWxlQ2FjaGUqKXRpbGVDYWNoZTsKKy0gKHZvaWQpc2V0VGlsZUNvbnRyb2xsZXI6
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKil0aWxlQ29udHJvbGxlcjsKIC0gKHZvaWQpcmVzZXRQ
YWludENvdW50OwogLSAodW5zaWduZWQpaW5jcmVtZW50UGFpbnRDb3VudDsKIC0gKHVuc2lnbmVk
KXBhaW50Q291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvV2ViVGlsZUxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbQppbmRleCA5NTkzY2I2YWFmZWU4MmQ4MjMxYjAzZGMy
ODlmY2ZkNTZiZTVhYmQ1Li5mNjMxMzRiMGE5YjhjYTgxN2NiNGM2YTMyMTU0MzU5NDA3Yjg4ZmM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2Vi
VGlsZUxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9XZWJUaWxlTGF5ZXIubW0KQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgog
I2ltcG9ydCAiV2ViVGlsZUxheWVyLmgiCiAKLSNpbXBvcnQgIlRpbGVDYWNoZS5oIgorI2ltcG9y
dCAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgogI2ltcG9y
dCA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTQ4LDE3ICs0OCwxNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4
dAogewotICAgIGlmIChfdGlsZUNhY2hlKSB7Ci0gICAgICAgIF90aWxlQ2FjaGUtPmRyYXdMYXll
cihzZWxmLCBjb250ZXh0KTsKKyAgICBpZiAoX3RpbGVDb250cm9sbGVyKSB7CisgICAgICAgIF90
aWxlQ29udHJvbGxlci0+ZHJhd0xheWVyKHNlbGYsIGNvbnRleHQpOwogCi0gICAgICAgIGlmIChz
dGF0aWNfY2FzdDxUaWxlZEJhY2tpbmcqPihfdGlsZUNhY2hlKS0+c2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMb2dnaW5nRW5hYmxlZCgpKQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VGlsZWRCYWNraW5n
Kj4oX3RpbGVDb250cm9sbGVyKS0+c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgp
KQogICAgICAgICAgICAgW3NlbGYgbG9nRmlsbGVkRnJlc2hUaWxlXTsKICAgICB9CiB9CiAKLS0g
KHZvaWQpc2V0VGlsZUNhY2hlOihXZWJDb3JlOjpUaWxlQ2FjaGUqKXRpbGVDYWNoZQorLSAodm9p
ZClzZXRUaWxlQ29udHJvbGxlcjooV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqKXRpbGVDb250cm9s
bGVyCiB7Ci0gICAgX3RpbGVDYWNoZSA9IHRpbGVDYWNoZTsKKyAgICBfdGlsZUNvbnRyb2xsZXIg
PSB0aWxlQ29udHJvbGxlcjsKIH0KIAogLSAodm9pZClyZXNldFBhaW50Q291bnQKQEAgLTc5LDEw
ICs3OSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIC0gKHZvaWQpbG9nRmlsbGVkRnJl
c2hUaWxlCiB7CiAgICAgRmxvYXRSZWN0IHZpc2libGVQYXJ0KFtzZWxmIGZyYW1lXSk7Ci0gICAg
dmlzaWJsZVBhcnQuaW50ZXJzZWN0KF90aWxlQ2FjaGUtPnZpc2libGVSZWN0KCkpOworICAgIHZp
c2libGVQYXJ0LmludGVyc2VjdChfdGlsZUNvbnRyb2xsZXItPnZpc2libGVSZWN0KCkpOwogCiAg
ICAgaWYgKFtzZWxmIHBhaW50Q291bnRdID09IDEgJiYgIXZpc2libGVQYXJ0LmlzRW1wdHkoKSkK
LSAgICAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IEZpbGxlZCB2aXNpYmxlIGZyZXNoIHRp
bGUuIFRpbWU6ICVmIFVuZmlsbGVkIFBpeGVsczogJXVcbiIsIFdURjo6bW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCksIF90aWxlQ2FjaGUtPmJsYW5rUGl4ZWxDb3VudCgpKTsKKyAgICAgICAg
V1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IEZpbGxlZCB2aXNpYmxlIGZyZXNoIHRpbGUuIFRpbWU6
ICVmIFVuZmlsbGVkIFBpeGVsczogJXVcbiIsIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCksIF90aWxlQ29udHJvbGxlci0+YmxhbmtQaXhlbENvdW50KCkpOwogfQogCiBAZW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9XZWJUaWxlZEJhY2tpbmdMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNmQwOGM5NTg2ZGUzNTUwZjYx
ZGJlMWM1NzllMmUxNDE5YTljMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaApAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFdlYlRpbGVkQmFja2luZ0xheWVyX2gKKyNkZWZpbmUgV2ViVGlsZWRC
YWNraW5nTGF5ZXJfaAorCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBv
cnQgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UmVjdDsK
K2NsYXNzIFRpbGVDb250cm9sbGVyOworY2xhc3MgVGlsZWRCYWNraW5nOworfQorCitAaW50ZXJm
YWNlIFdlYlRpbGVkQmFja2luZ0xheWVyIDogQ0FMYXllciB7CisgICAgT3duUHRyPFdlYkNvcmU6
OlRpbGVDb250cm9sbGVyPiBfdGlsZUNvbnRyb2xsZXI7Cit9CisKKy0gKENBTGF5ZXIgKil0aWxl
Q29udGFpbmVyTGF5ZXI7CistIChXZWJDb3JlOjpUaWxlZEJhY2tpbmcqKXRpbGVkQmFja2luZzsK
Ky0gKHZvaWQpaW52YWxpZGF0ZTsKKworQGVuZAorCisjZW5kaWYgLy8gV2ViVGlsZWRCYWNraW5n
TGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1ZTQyYjA4
ZDc1MDI4ZmU5MzlkMWNmYjFiNGU3MmMwMTA5YmM1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIu
bW0KQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaCIKKworI2ltcG9ydCAiSW50UmVjdC5oIgorI2ltcG9ydCAiVGlsZUNv
bnRyb2xsZXIuaCIKKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitAaW1wbGVtZW50YXRpb24gV2ViVGlsZWRCYWNraW5nTGF5ZXIKKworLSAo
aWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgX3RpbGVDb250cm9sbGVyID0gVGlsZUNvbnRyb2xsZXI6
OmNyZWF0ZShzZWxmKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgW3NlbGYgc2V0TmFtZTpAIldlYlRp
bGVkQmFja2luZ0xheWVyIl07CisjZW5kaWYKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClkZWFsbG9jCit7CisgICAgQVNTRVJUKCFfdGlsZUNvbnRyb2xsZXIpOworCisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCistIChpZClpbml0V2l0aExheWVyOihpZClsYXllcgoreworICAgIFVO
VVNFRF9QQVJBTShsYXllcik7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbmlsOworfQorCistIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtl
eQoreworICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIAorICAgIC8vIERpc2FibGUgYWxsIGFu
aW1hdGlvbnMuCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClzZXRCb3VuZHM6KENHUmVj
dClib3VuZHMKK3sKKyAgICBbc3VwZXIgc2V0Qm91bmRzOmJvdW5kc107CisKKyAgICBfdGlsZUNv
bnRyb2xsZXItPnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCgpOworfQorCistICh2b2lkKXNl
dE9wYXF1ZTooQk9PTClvcGFxdWUKK3sKKyAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVzT3Bh
cXVlKG9wYXF1ZSk7Cit9CisKKy0gKEJPT0wpaXNPcGFxdWUKK3sKKyAgICByZXR1cm4gX3RpbGVD
b250cm9sbGVyLT50aWxlc0FyZU9wYXF1ZSgpOworfQorCistICh2b2lkKXNldE5lZWRzRGlzcGxh
eQoreworICAgIF90aWxlQ29udHJvbGxlci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKKy0gKHZv
aWQpc2V0TmVlZHNEaXNwbGF5SW5SZWN0OihDR1JlY3QpcmVjdAoreworICAgIF90aWxlQ29udHJv
bGxlci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOworfQor
CistICh2b2lkKXNldEFjY2VsZXJhdGVzRHJhd2luZzooQk9PTClhY2NlbGVyYXRlc0RyYXdpbmcK
K3sKKyAgICBfdGlsZUNvbnRyb2xsZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyhhY2NlbGVyYXRl
c0RyYXdpbmcpOworfQorCistIChCT09MKWFjY2VsZXJhdGVzRHJhd2luZworeworICAgIHJldHVy
biBfdGlsZUNvbnRyb2xsZXItPmFjY2VsZXJhdGVzRHJhd2luZygpOworfQorCistICh2b2lkKXNl
dENvbnRlbnRzU2NhbGU6KENHRmxvYXQpY29udGVudHNTY2FsZQoreworICAgIF90aWxlQ29udHJv
bGxlci0+c2V0U2NhbGUoY29udGVudHNTY2FsZSk7Cit9CisKKy0gKENBTGF5ZXIgKil0aWxlQ29u
dGFpbmVyTGF5ZXIKK3sKKyAgICByZXR1cm4gX3RpbGVDb250cm9sbGVyLT50aWxlQ29udGFpbmVy
TGF5ZXIoKTsKK30KKworLSAoV2ViQ29yZTo6VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmcKK3sK
KyAgICByZXR1cm4gX3RpbGVDb250cm9sbGVyLmdldCgpOworfQorCistICh2b2lkKWludmFsaWRh
dGUKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChfdGlsZUNvbnRy
b2xsZXIpOworICAgIF90aWxlQ29udHJvbGxlciA9IG51bGxwdHI7Cit9CisKKy0gKHZvaWQpc2V0
Qm9yZGVyQ29sb3I6KENHQ29sb3JSZWYpYm9yZGVyQ29sb3IKK3sKKyAgICBfdGlsZUNvbnRyb2xs
ZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKGJvcmRlckNvbG9yKTsKK30KKworLSAodm9pZClz
ZXRCb3JkZXJXaWR0aDooQ0dGbG9hdClib3JkZXJXaWR0aAoreworICAgIC8vIFRpbGVzIGFkam9p
biwgc28gaGFsdmUgdGhlIGJvcmRlciB3aWR0aC4KKyAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRp
bGVEZWJ1Z0JvcmRlcldpZHRoKGJvcmRlcldpZHRoIC8gMik7Cit9CisKK0BlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggYzI1M2E1
OTYwNzBmODZhMDUzNTI0N2VhM2VkNWQyNTg5YmRlNTIwZC4uOWRmNDA4ZTQ0NWU0ZTJhMjFmNGM4
YmZiNTRhZjNhY2M3YjYzMzBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6Y3JlYXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXIoKQogICAgIG1fY3JlYXRpbmdQcmlt
YXJ5R3JhcGhpY3NMYXllciA9IGZhbHNlOwogCiAgICAgaWYgKG1fdXNpbmdUaWxlZENhY2hlTGF5
ZXIpCi0gICAgICAgIG1fY2hpbGRDb250YWlubWVudExheWVyID0gY3JlYXRlR3JhcGhpY3NMYXll
cigiVGlsZUNhY2hlIEZsYXR0ZW5pbmcgTGF5ZXIiKTsKKyAgICAgICAgbV9jaGlsZENvbnRhaW5t
ZW50TGF5ZXIgPSBjcmVhdGVHcmFwaGljc0xheWVyKCJUaWxlZEJhY2tpbmcgRmxhdHRlbmluZyBM
YXllciIpOwogCiAgICAgaWYgKG1faXNNYWluRnJhbWVSZW5kZXJWaWV3TGF5ZXIpIHsKICAgICAg
ICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c09wYXF1ZSh0cnVlKTsK
</data>
<flag name="review"
          id="213217"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>