<?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>126724</bug_id>
          
          <creation_ts>2014-01-09 15:41:47 -0800</creation_ts>
          <short_desc>[iOS] Upstream WAK</short_desc>
          <delta_ts>2024-01-06 21:25:14 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>267196</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>966099</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-01-09 15:41:47 -0800</bug_when>
    <thetext>[iOS] Upstream WAK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966101</commentid>
    <comment_count>1</comment_count>
      <attachid>220777</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-01-09 15:45:30 -0800</bug_when>
    <thetext>Created attachment 220777
[iOS] Upstream WAK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966111</commentid>
    <comment_count>2</comment_count>
      <attachid>220777</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-09 16:05:48 -0800</bug_when>
    <thetext>Comment on attachment 220777
[iOS] Upstream WAK

View in context: https://bugs.webkit.org/attachment.cgi?id=220777&amp;action=review

rs=me

&gt; Source/WebCore/ChangeLog:3
&gt; +        [iOS] Upstream WAK

WAK = Webkit without AppKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966135</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-01-09 16:42:48 -0800</bug_when>
    <thetext>Committed r161603: &lt;http://trac.webkit.org/changeset/161603&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220777</attachid>
            <date>2014-01-09 15:45:30 -0800</date>
            <delta_ts>2014-01-09 16:05:47 -0800</delta_ts>
            <desc>[iOS] Upstream WAK</desc>
            <filename>bug-126724-20140109154529.patch</filename>
            <type>text/plain</type>
            <size>240325</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzc2MzZiODA3OThjZTk4
YmJlYTA2OWZlOTcwNzE5ZTllOWI0NTRlNi4uODU1ZDMyN2RkZTZjZDM1NDFmMDc3MjMyNjA0Mzhm
NGI5NjNmZjRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTAxLTA5ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBVcHN0cmVhbSBXQUsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjcyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ29uZmln
dXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZzogRXhjbHVkZWQgbmV3IGlPUy1zcGVjaWZpYyBQcml2
YXRlCisgICAgICAgIGhlYWRlcnMgb24gdGhlIE1hYyBidWlsZC4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIG5ldyBmaWxlcyB0byB0aGUgcHJvamVj
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dBS0FwcEtpdFN0dWJzLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV0FLQXBwS2l0U3R1YnMubTogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vaW9zL3dhay9XQUtDbGlwVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3Mvd2FrL1dBS0NsaXBWaWV3Lm06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy93YWsvV0FLUmVzcG9uZGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93
YWsvV0FLUmVzcG9uZGVyLm06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV0FL
U2Nyb2xsVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dBS1Njcm9s
bFZpZXcubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV0FLVmlldy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dBS1ZpZXcubW06IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV0FLVmlld1ByaXZhdGUuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vaW9zL3dhay9XQUtXaW5kb3cubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93
YWsvV0tDb250ZW50T2JzZXJ2YXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3Mvd2FrL1dLQ29udGVudE9ic2VydmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy93YWsvV0tHcmFwaGljcy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2Fr
L1dLR3JhcGhpY3MubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV0tUeXBl
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dLVXRpbGl0aWVzLmM6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV0tVdGlsaXRpZXMuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vaW9zL3dhay9XS1ZpZXcuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL3dhay9XS1ZpZXcubW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93
YWsvV0tWaWV3UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dl
YkNvcmVUaHJlYWQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL3dhay9XZWJDb3Jl
VGhyZWFkLm1tOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJl
YWRJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVU
aHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29y
ZVRocmVhZFJ1bi5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29y
ZVRocmVhZFJ1bi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVU
aHJlYWRTYWZlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRo
cmVhZFN5c3RlbUludGVyZmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93
YWsvV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5oOiBBZGRlZC4KKwogMjAxNC0wMS0wOSAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE5hcnJv
dyB1bmRlcmxpbmVzIGFyZSB0b28gdGFsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29u
ZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZyBiL1NvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRp
b25zL1dlYkNvcmUueGNjb25maWcKaW5kZXggMTAwOTU3MDg0Njg0MzJlNGFmOTNmZGFjMTdiYWJh
MDA0MjNhYTRhZC4uZGZiMjNjMWNmNDA3ZWQ2YjViNzRkNGQ2ZDM0N2JhMjc2NzkwY2FkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCkBAIC0x
MDgsNCArMTA4LDQgQEAgSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX2VuZ2luZWVyaW5n
ID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL0phdmFTY3JpcHRDb3IKIEVYQ0xVREVEX1NPVVJDRV9G
SUxFX05BTUVTID0gJChFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU18kKFBMQVRGT1JNX05BTUUp
KTsKIEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTX2lwaG9uZW9zID0gKi50aWZmICpDdXJzb3Iu
cG5nIEN1cnNvci5jcHAgQ3Vyc29yTWFjLm1tIEV2ZW50SGFuZGxlck1hYy5tbSBIVE1MQ29udmVy
dGVyLm1tIEtpbGxSaW5nTWFjLm1tIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tIFNTTEtleUdl
bmVyYXRvck1hYy5jcHAgU2VhcmNoUG9wdXBNZW51TWFjLm1tIFNoYXJlZFRpbWVyTWFjLm1tIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlci5tbSBXZWJXaW5kb3dBbmltYXRpb24ubW07CiBFWENMVURFRF9TT1VSQ0VfRklM
RV9OQU1FU19pcGhvbmVzaW11bGF0b3IgPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTX2lw
aG9uZW9zKTsKLUVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTX21hY29zeCA9ICpJT1MuaCAqSU9T
LmNwcCAqSU9TLm1tIEtpbGxSaW5nTm9uZS5jcHA7CitFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1F
U19tYWNvc3ggPSAqSU9TLmggKklPUy5jcHAgKklPUy5tbSBLaWxsUmluZ05vbmUuY3BwIFdBS0Fw
cEtpdFN0dWJzLmggV0FLQ2xpcFZpZXcuaCBXQUtSZXNwb25kZXIuaCBXQUtTY3JvbGxWaWV3Lmgg
V0FLVmlldy5oIFdBS1ZpZXdQcml2YXRlLmggV0FLV2luZG93LmggV0tDb250ZW50T2JzZXJ2YXRp
b24uaCBXS0dyYXBoaWNzLmggV0tUeXBlcy5oIFdLVXRpbGl0aWVzLmggV0tWaWV3LmggV0tWaWV3
UHJpdmF0ZS5oIFdlYkNvcmVUaHJlYWQuaCBXZWJDb3JlVGhyZWFkTWVzc2FnZS5oIFdlYkNvcmVU
aHJlYWRSdW4uaCBXZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmg7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzQ0NzY3ZDIw
MTBjMjYzNmViMzVmMzAwNDY2MzJiYWE2M2YzZmNjZi4uNjcyYTNjYjRlZTUxYmY2YjVmNmIwMGEy
MTA5Nzc4M2ViMzRjYzgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ4OSw2ICszNDg5LDM4IEBACiAJCUExMkExMDUwMTY2
NDQ0RkQwMDhGQTMxMSAvKiBHcmlkVHJhY2tTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTJBMTA0RTE2NjQ0NERDMDA4RkEzMTEgLyogR3JpZFRy
YWNrU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMTM2QTAwQTExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGUuY3BwICovOyB9OwogCQlBMTM2QTAwRDExMzREQkQyMDBDQzhENTAgLyogWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMzZBMDBCMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oICovOyB9OworCQlBMTQ4MzJCMDE4N0Y2
MThEMDBEQTYzQTYgLyogV0FLQXBwS2l0U3R1YnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNDgzMjhDMTg3RjUwODcwMERBNjNBNiAvKiBXQUtBcHBL
aXRTdHVicy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUExNDgzMkIxMTg3RjYxRTEwMERBNjNBNiAvKiBXQUtBcHBLaXRTdHVicy5tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMyOEQxODdGNTA4NzAw
REE2M0E2IC8qIFdBS0FwcEtpdFN0dWJzLm0gKi87IH07CisJCUExNDgzMkIyMTg3RjYxRUQwMERB
NjNBNiAvKiBXQUtDbGlwVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTE0ODMyOEUxODdGNTA4NzAwREE2M0E2IC8qIFdBS0NsaXBWaWV3LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE0ODMyQjMx
ODdGNjI5MTAwREE2M0E2IC8qIFdBS0NsaXBWaWV3Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4MzI4RjE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLQ2xp
cFZpZXcubSAqLzsgfTsKKwkJQTE0ODMyQjQxODdGNjI5QTAwREE2M0E2IC8qIFdBS1Jlc3BvbmRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMy
OTAxODdGNTA4NzAwREE2M0E2IC8qIFdBS1Jlc3BvbmRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUExNDgzMkI1MTg3RjYyRkMwMERBNjNBNiAv
KiBXQUtSZXNwb25kZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEExNDgzMjkxMTg3RjUwODcwMERBNjNBNiAvKiBXQUtSZXNwb25kZXIubSAqLzsgfTsK
KwkJQTE0ODMyQjYxODdGNjMxRjAwREE2M0E2IC8qIFdBS1Njcm9sbFZpZXcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNDgzMjkyMTg3RjUwODcwMERB
NjNBNiAvKiBXQUtTY3JvbGxWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQTE0ODMyQjcxODdGNjM2QzAwREE2M0E2IC8qIFdBS1Njcm9sbFZp
ZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4
MzI5MzE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLU2Nyb2xsVmlldy5tbSAqLzsgfTsKKwkJQTE0ODMy
QjgxODdGNjM4NjAwREE2M0E2IC8qIFdBS1ZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNDgzMjk0MTg3RjUwODcwMERBNjNBNiAvKiBXQUtWaWV3
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE0
ODMyQjkxODdGNjNENTAwREE2M0E2IC8qIFdBS1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4MzI5NTE4N0Y1MDg3MDBEQTYzQTYgLyogV0FL
Vmlldy5tbSAqLzsgfTsKKwkJQTE0ODMyQkExODdGNjNFOTAwREE2M0E2IC8qIFdBS1ZpZXdQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4
MzI5NjE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLVmlld1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBMTQ4MzJCQjE4N0Y2NDMyMDBEQTYz
QTYgLyogV0FLV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMTQ4MzI5NzE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLV2luZG93LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE0ODMyQkMxODdGNjQ4
RTAwREE2M0E2IC8qIFdBS1dpbmRvdy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEExNDgzMjk4MTg3RjUwODcwMERBNjNBNiAvKiBXQUtXaW5kb3cubW0g
Ki87IH07CisJCUExNDgzMkJEMTg3RjY0QjQwMERBNjNBNiAvKiBXS0NvbnRlbnRPYnNlcnZhdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4
MzJBMjE4N0Y1MDg3MDBEQTYzQTYgLyogV0tDb250ZW50T2JzZXJ2YXRpb24uY3BwICovOyB9Owor
CQlBMTQ4MzJCRTE4N0Y2NENDMDBEQTYzQTYgLyogV0tDb250ZW50T2JzZXJ2YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNDgzMkEzMTg3RjUw
ODcwMERBNjNBNiAvKiBXS0NvbnRlbnRPYnNlcnZhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUExNDgzMkJGMTg3RjY1MkMwMERBNjNBNiAv
KiBXS0dyYXBoaWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMTQ4MzJBNDE4N0Y1MDg3MDBEQTYzQTYgLyogV0tHcmFwaGljcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUExNDgzMkMwMTg3RjY1NjYw
MERBNjNBNiAvKiBXS0dyYXBoaWNzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTE0ODMyQTUxODdGNTA4NzAwREE2M0E2IC8qIFdLR3JhcGhpY3MubW0g
Ki87IH07CisJCUExNDgzMkMxMTg3RjY1N0EwMERBNjNBNiAvKiBXS1R5cGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4MzJBNjE4N0Y1MDg3MDBE
QTYzQTYgLyogV0tUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUExNDgzMkMyMTg3RjY1QzcwMERBNjNBNiAvKiBXS1V0aWxpdGllcy5jIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMyQTcxODdG
NTA4NzAwREE2M0E2IC8qIFdLVXRpbGl0aWVzLmMgKi87IH07CisJCUExNDgzMkMzMTg3RjY1REYw
MERBNjNBNiAvKiBXS1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTE0ODMyQTgxODdGNTA4NzAwREE2M0E2IC8qIFdLVXRpbGl0aWVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE0ODMy
QzQxODdGNjYzQzAwREE2M0E2IC8qIFdLVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMyQTkxODdGNTA4NzAwREE2M0E2IC8qIFdLVmlldy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUExNDgz
MkM1MTg3RjY2ODMwMERBNjNBNiAvKiBXS1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4MzJBQTE4N0Y1MDg3MDBEQTYzQTYgLyogV0tWaWV3
Lm1tICovOyB9OworCQlBMTQ4MzJDNjE4N0Y2NjhGMDBEQTYzQTYgLyogV0tWaWV3UHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMyQUIx
ODdGNTA4NzAwREE2M0E2IC8qIFdLVmlld1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBMTQ4MzJDNzE4N0Y2NkM4MDBEQTYzQTYgLyog
V2ViQ29yZVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTE0ODMyOTkxODdGNTA4NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBMTQ4MzJDODE4N0Y2
NzNGMDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNDgzMjlBMTg3RjUwODcwMERBNjNBNiAvKiBXZWJDb3Jl
VGhyZWFkLm1tICovOyB9OworCQlBMTQ4MzJDOTE4N0Y2NzZCMDBEQTYzQTYgLyogV2ViQ29yZVRo
cmVhZEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMTQ4MzI5QjE4N0Y1MDg3MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZEludGVybmFsLmgg
Ki87IH07CisJCUExNDgzMkNBMTg3RjY3ODAwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkTWVzc2Fn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMy
OUMxODdGNTA4NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRNZXNzYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE0ODMyQ0IxODdGNjdCNDAw
REE2M0E2IC8qIFdlYkNvcmVUaHJlYWRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTE0ODMyOUQxODdGNTA4NzAwREE2M0E2IC8qIFdlYkNvcmVU
aHJlYWRSdW4uY3BwICovOyB9OworCQlBMTQ4MzJDQzE4N0Y2N0M0MDBEQTYzQTYgLyogV2ViQ29y
ZVRocmVhZFJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTE0ODMyOUUxODdGNTA4NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRSdW4uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBMTQ4MzJDRDE4N0Y2
ODJFMDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZFNhZmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNDgzMjlGMTg3RjUwODcwMERBNjNBNiAvKiBXZWJD
b3JlVGhyZWFkU2FmZS5oICovOyB9OworCQlBMTQ4MzJDRTE4N0Y2ODM0MDBEQTYzQTYgLyogV2Vi
Q29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4MzJBMDE4N0Y1MDg3MDBEQTYzQTYgLyogV2ViQ29yZVRo
cmVhZFN5c3RlbUludGVyZmFjZS5jcHAgKi87IH07CisJCUExNDgzMkNGMTg3RjY4NDcwMERBNjNB
NiAvKiBXZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTQ4MzJBMTE4N0Y1MDg3MDBEQTYzQTYgLyogV2Vi
Q29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxl
bWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAg
Ki87IH07CiAJCUExN0M4MTIzMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3Rvcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExN0M4MTIx
MEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJQTFDN0ZB
QTIxMzNBNUQzNTAwRDY3MzJEIC8qIEpTWFBhdGhSZXN1bHRDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFDN0ZBQTExMzNBNUQzNTAwRDY3
MzJEIC8qIEpTWFBhdGhSZXN1bHRDdXN0b20uY3BwICovOyB9OwpAQCAtMTAzMzYsNiArMTAzNjgs
MzggQEAKIAkJQTEyQTEwNEUxNjY0NDREQzAwOEZBMzExIC8qIEdyaWRUcmFja1NpemUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR3JpZFRyYWNrU2l6ZS5oOyBwYXRoID0gc3R5
bGUvR3JpZFRyYWNrU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTM2QTAw
QTExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTM2QTAwQjExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhy
b3R0bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE0
ODMyOEMxODdGNTA4NzAwREE2M0E2IC8qIFdBS0FwcEtpdFN0dWJzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdBS0FwcEtpdFN0dWJzLmg7IHBhdGggPSBpb3Mvd2FrL1dBS0Fw
cEtpdFN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNDgzMjhEMTg3RjUw
ODcwMERBNjNBNiAvKiBXQUtBcHBLaXRTdHVicy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9i
amM7IG5hbWUgPSBXQUtBcHBLaXRTdHVicy5tOyBwYXRoID0gaW9zL3dhay9XQUtBcHBLaXRTdHVi
cy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTQ4MzI4RTE4N0Y1MDg3MDBEQTYz
QTYgLyogV0FLQ2xpcFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0FL
Q2xpcFZpZXcuaDsgcGF0aCA9IGlvcy93YWsvV0FLQ2xpcFZpZXcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTE0ODMyOEYxODdGNTA4NzAwREE2M0E2IC8qIFdBS0NsaXBWaWV3Lm0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFdBS0NsaXBWaWV3Lm07IHBhdGgg
PSBpb3Mvd2FrL1dBS0NsaXBWaWV3Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEx
NDgzMjkwMTg3RjUwODcwMERBNjNBNiAvKiBXQUtSZXNwb25kZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV0FLUmVzcG9uZGVyLmg7IHBhdGggPSBpb3Mvd2FrL1dBS1Jlc3Bv
bmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTQ4MzI5MTE4N0Y1MDg3MDBE
QTYzQTYgLyogV0FLUmVzcG9uZGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFt
ZSA9IFdBS1Jlc3BvbmRlci5tOyBwYXRoID0gaW9zL3dhay9XQUtSZXNwb25kZXIubTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE0ODMyOTIxODdGNTA4NzAwREE2M0E2IC8qIFdBS1Nj
cm9sbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0FLU2Nyb2xsVmll
dy5oOyBwYXRoID0gaW9zL3dhay9XQUtTY3JvbGxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUExNDgzMjkzMTg3RjUwODcwMERBNjNBNiAvKiBXQUtTY3JvbGxWaWV3Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0FLU2Nyb2xsVmlldy5tbTsg
cGF0aCA9IGlvcy93YWsvV0FLU2Nyb2xsVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTE0ODMyOTQxODdGNTA4NzAwREE2M0E2IC8qIFdBS1ZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV0FLVmlldy5oOyBwYXRoID0gaW9zL3dhay9XQUtWaWV3Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNDgzMjk1MTg3RjUwODcwMERBNjNBNiAv
KiBXQUtWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0FL
Vmlldy5tbTsgcGF0aCA9IGlvcy93YWsvV0FLVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTE0ODMyOTYxODdGNTA4NzAwREE2M0E2IC8qIFdBS1ZpZXdQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdBS1ZpZXdQcml2YXRlLmg7IHBhdGggPSBp
b3Mvd2FrL1dBS1ZpZXdQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEx
NDgzMjk3MTg3RjUwODcwMERBNjNBNiAvKiBXQUtXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV0FLV2luZG93Lmg7IHBhdGggPSBpb3Mvd2FrL1dBS1dpbmRvdy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTQ4MzI5ODE4N0Y1MDg3MDBEQTYzQTYgLyog
V0FLV2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0FL
V2luZG93Lm1tOyBwYXRoID0gaW9zL3dhay9XQUtXaW5kb3cubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUExNDgzMjk5MTg3RjUwODcwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkNvcmVUaHJlYWQuaDsgcGF0aCA9
IGlvcy93YWsvV2ViQ29yZVRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
MTQ4MzI5QTE4N0Y1MDg3MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkNvcmVUaHJlYWQubW07IHBhdGggPSBpb3Mv
d2FrL1dlYkNvcmVUaHJlYWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNDgz
MjlCMTg3RjUwODcwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkSW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZVRocmVhZEludGVybmFsLmg7IHBhdGggPSBp
b3Mvd2FrL1dlYkNvcmVUaHJlYWRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBMTQ4MzI5QzE4N0Y1MDg3MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZE1lc3NhZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZVRocmVhZE1lc3NhZ2UuaDsg
cGF0aCA9IGlvcy93YWsvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTE0ODMyOUQxODdGNTA4NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRSdW4u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQ29yZVRocmVhZFJ1
bi5jcHA7IHBhdGggPSBpb3Mvd2FrL1dlYkNvcmVUaHJlYWRSdW4uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMTQ4MzI5RTE4N0Y1MDg3MDBEQTYzQTYgLyogV2ViQ29yZVRocmVh
ZFJ1bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJDb3JlVGhyZWFkUnVu
Lmg7IHBhdGggPSBpb3Mvd2FrL1dlYkNvcmVUaHJlYWRSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTE0ODMyOUYxODdGNTA4NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRTYWZl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkNvcmVUaHJlYWRTYWZlLmg7
IHBhdGggPSBpb3Mvd2FrL1dlYkNvcmVUaHJlYWRTYWZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUExNDgzMkEwMTg3RjUwODcwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkU3lzdGVt
SW50ZXJmYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkNv
cmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuY3BwOyBwYXRoID0gaW9zL3dhay9XZWJDb3JlVGhyZWFk
U3lzdGVtSW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE0ODMy
QTExODdGNTA4NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFj
ZS5oOyBwYXRoID0gaW9zL3dhay9XZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNDgzMkEyMTg3RjUwODcwMERBNjNBNiAvKiBXS0Nv
bnRlbnRPYnNlcnZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBXS0NvbnRlbnRPYnNlcnZhdGlvbi5jcHA7IHBhdGggPSBpb3Mvd2FrL1dLQ29udGVudE9ic2Vy
dmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE0ODMyQTMxODdGNTA4
NzAwREE2M0E2IC8qIFdLQ29udGVudE9ic2VydmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdLQ29udGVudE9ic2VydmF0aW9uLmg7IHBhdGggPSBpb3Mvd2FrL1dLQ29u
dGVudE9ic2VydmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNDgzMkE0
MTg3RjUwODcwMERBNjNBNiAvKiBXS0dyYXBoaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLR3JhcGhpY3MuaDsgcGF0aCA9IGlvcy93YWsvV0tHcmFwaGljcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTQ4MzJBNTE4N0Y1MDg3MDBEQTYzQTYgLyogV0tH
cmFwaGljcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLR3Jh
cGhpY3MubW07IHBhdGggPSBpb3Mvd2FrL1dLR3JhcGhpY3MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUExNDgzMkE2MTg3RjUwODcwMERBNjNBNiAvKiBXS1R5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVHlwZXMuaDsgcGF0aCA9IGlvcy93YWsvV0tU
eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTQ4MzJBNzE4N0Y1MDg3MDBE
QTYzQTYgLyogV0tVdGlsaXRpZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0g
V0tVdGlsaXRpZXMuYzsgcGF0aCA9IGlvcy93YWsvV0tVdGlsaXRpZXMuYzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTE0ODMyQTgxODdGNTA4NzAwREE2M0E2IC8qIFdLVXRpbGl0aWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVXRpbGl0aWVzLmg7IHBhdGgg
PSBpb3Mvd2FrL1dLVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEx
NDgzMkE5MTg3RjUwODcwMERBNjNBNiAvKiBXS1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV0tWaWV3Lmg7IHBhdGggPSBpb3Mvd2FrL1dLVmlldy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMTQ4MzJBQTE4N0Y1MDg3MDBEQTYzQTYgLyogV0tWaWV3Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tWaWV3Lm1tOyBwYXRo
ID0gaW9zL3dhay9XS1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNDgz
MkFCMTg3RjUwODcwMERBNjNBNiAvKiBXS1ZpZXdQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdLVmlld1ByaXZhdGUuaDsgcGF0aCA9IGlvcy93YWsvV0tWaWV3UHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMDBGMkE1Q0Y3MDA1
REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExN0M4MTIxMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3Rvcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnRGYWN0b3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExQzdGQUExMTMzQTVEMzUwMEQ2NzMyRCAv
KiBKU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTWFBhdGhSZXN1bHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTc1MzQsOSArMTc1OTgsNDkgQEAKIAkJCW5hbWUgPSBwYXJzZXI7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwogCQl9OworCQlBMTQ4MzI4QjE4N0Y1MDY4MDBEQTYzQTYgLyogd2Fr
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMTQ4MzI4
QzE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLQXBwS2l0U3R1YnMuaCAqLywKKwkJCQlBMTQ4MzI4RDE4
N0Y1MDg3MDBEQTYzQTYgLyogV0FLQXBwS2l0U3R1YnMubSAqLywKKwkJCQlBMTQ4MzI4RTE4N0Y1
MDg3MDBEQTYzQTYgLyogV0FLQ2xpcFZpZXcuaCAqLywKKwkJCQlBMTQ4MzI4RjE4N0Y1MDg3MDBE
QTYzQTYgLyogV0FLQ2xpcFZpZXcubSAqLywKKwkJCQlBMTQ4MzI5MDE4N0Y1MDg3MDBEQTYzQTYg
LyogV0FLUmVzcG9uZGVyLmggKi8sCisJCQkJQTE0ODMyOTExODdGNTA4NzAwREE2M0E2IC8qIFdB
S1Jlc3BvbmRlci5tICovLAorCQkJCUExNDgzMjkyMTg3RjUwODcwMERBNjNBNiAvKiBXQUtTY3Jv
bGxWaWV3LmggKi8sCisJCQkJQTE0ODMyOTMxODdGNTA4NzAwREE2M0E2IC8qIFdBS1Njcm9sbFZp
ZXcubW0gKi8sCisJCQkJQTE0ODMyOTQxODdGNTA4NzAwREE2M0E2IC8qIFdBS1ZpZXcuaCAqLywK
KwkJCQlBMTQ4MzI5NTE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLVmlldy5tbSAqLywKKwkJCQlBMTQ4
MzI5NjE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLVmlld1ByaXZhdGUuaCAqLywKKwkJCQlBMTQ4MzI5
NzE4N0Y1MDg3MDBEQTYzQTYgLyogV0FLV2luZG93LmggKi8sCisJCQkJQTE0ODMyOTgxODdGNTA4
NzAwREE2M0E2IC8qIFdBS1dpbmRvdy5tbSAqLywKKwkJCQlBMTQ4MzJBMjE4N0Y1MDg3MDBEQTYz
QTYgLyogV0tDb250ZW50T2JzZXJ2YXRpb24uY3BwICovLAorCQkJCUExNDgzMkEzMTg3RjUwODcw
MERBNjNBNiAvKiBXS0NvbnRlbnRPYnNlcnZhdGlvbi5oICovLAorCQkJCUExNDgzMkE0MTg3RjUw
ODcwMERBNjNBNiAvKiBXS0dyYXBoaWNzLmggKi8sCisJCQkJQTE0ODMyQTUxODdGNTA4NzAwREE2
M0E2IC8qIFdLR3JhcGhpY3MubW0gKi8sCisJCQkJQTE0ODMyQTYxODdGNTA4NzAwREE2M0E2IC8q
IFdLVHlwZXMuaCAqLywKKwkJCQlBMTQ4MzJBNzE4N0Y1MDg3MDBEQTYzQTYgLyogV0tVdGlsaXRp
ZXMuYyAqLywKKwkJCQlBMTQ4MzJBODE4N0Y1MDg3MDBEQTYzQTYgLyogV0tVdGlsaXRpZXMuaCAq
LywKKwkJCQlBMTQ4MzJBOTE4N0Y1MDg3MDBEQTYzQTYgLyogV0tWaWV3LmggKi8sCisJCQkJQTE0
ODMyQUExODdGNTA4NzAwREE2M0E2IC8qIFdLVmlldy5tbSAqLywKKwkJCQlBMTQ4MzJBQjE4N0Y1
MDg3MDBEQTYzQTYgLyogV0tWaWV3UHJpdmF0ZS5oICovLAorCQkJCUExNDgzMjk5MTg3RjUwODcw
MERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkLmggKi8sCisJCQkJQTE0ODMyOUExODdGNTA4NzAwREE2
M0E2IC8qIFdlYkNvcmVUaHJlYWQubW0gKi8sCisJCQkJQTE0ODMyOUIxODdGNTA4NzAwREE2M0E2
IC8qIFdlYkNvcmVUaHJlYWRJbnRlcm5hbC5oICovLAorCQkJCUExNDgzMjlDMTg3RjUwODcwMERB
NjNBNiAvKiBXZWJDb3JlVGhyZWFkTWVzc2FnZS5oICovLAorCQkJCUExNDgzMjlEMTg3RjUwODcw
MERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkUnVuLmNwcCAqLywKKwkJCQlBMTQ4MzI5RTE4N0Y1MDg3
MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZFJ1bi5oICovLAorCQkJCUExNDgzMjlGMTg3RjUwODcw
MERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkU2FmZS5oICovLAorCQkJCUExNDgzMkEwMTg3RjUwODcw
MERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmNwcCAqLywKKwkJCQlBMTQ4
MzJBMTE4N0Y1MDg3MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5oICov
LAorCQkJKTsKKwkJCW5hbWUgPSB3YWs7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQlBNTlFM0MxQjExNTgwRjM0MDA3MjkyOEUgLyogaW9zICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMTQ4MzI4QjE4N0Y1MDY4MDBEQTYzQTYgLyog
d2FrICovLAogCQkJCTI2NTU0MTRCMTQ4OUFBMkIwMDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwICov
LAogCQkJCTI2RjQwRDQ5MTQ5MDRBNjMwMENBNjdDNCAvKiBFdmVudExvb3BJT1MubW0gKi8sCiAJ
CQkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLywKQEAgLTIy
MzA0LDYgKzIyNDA4LDcgQEAKIAkJCQlGREUyRDU1QjE1OUU2NkVCMDBEQ0NDRjggLyogQXVkaW9J
T0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAxMDEyQjAyNjc2MDBDMUEzNTkg
LyogQXVkaW9MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwNTg1MjQxN0ZEQzE0MDAw
NUYyQkNCIC8qIE1lZGlhVHJhY2tDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTE0
ODMyQ0ExODdGNjc4MDAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRNZXNzYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRDMxNjAxMzEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9Ob2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDMxNjAxNjEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9Ob2RlSW5wdXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDE4MTJCMDI2NzYwMEMxQTM1OSAvKiBBdWRpb05v
ZGVPdXRwdXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjI2NTEsNiArMjI3NTYsNyBAQAogCQkJCTA3
MDU4NTMyMTdGREU2RDkwMDVGMkJDQiAvKiBKU01lZGlhVHJhY2tDb25zdHJhaW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQzRDOEYwMjBBRDg1RDg3MDA5NDc1Q0UgLyogRGVsZXRlQnV0dG9uQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlEREYwOTlFNjQ5MjAwNTZFNTgxIC8q
IERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUExNDgzMkIy
MTg3RjYxRUQwMERBNjNBNiAvKiBXQUtDbGlwVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdD
NTlCNjQxN0Y0RDFDNDAwMEZCQ0JCIC8qIE1vY2tNZWRpYVN0cmVhbUNlbnRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTFGRTEzNkIxODNGRTFBQjAwODkyRjEzIC8qIENyeXB0b0FsZ29yaXRobVJT
QV9PQUVQLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURFMTA5OUU2NDkyMDA1NkU1ODEgLyog
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjY2NSw5ICsyMjc3
MSwxMSBAQAogCQkJCTA3OEUwOTM0MTdEMTZCMEIwMDQyMEFBMSAvKiBNZWRpYVN0cmVhbUNlbnRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFGQjFBNUIxMjBBNUQwNjAwREMwMkEwIC8qIERldmlj
ZU1vdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRkIxQTVEMTIwQTVEMDYwMERDMDJB
MCAvKiBEZXZpY2VNb3Rpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTE0ODMyQzMxODdG
NjVERjAwREE2M0E2IC8qIFdLVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUM2NTcx
RjE4MTZFNTAzMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTlBOEYxRDgxMUE2OTUyMDAwMUFDMzRBIC8qIERldmljZU9yaWVudGF0aW9u
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTMwOUExMzExRjRBRTZBMDAyNTA2MDMgLyog
RGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJC
NjE4N0Y2MzFGMDBEQTYzQTYgLyogV0FLU2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTFENzE5Q0MxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTlBOEYxRDYxMUE2OTUxMzAwMUFDMzRBIC8qIERldmljZU9yaWVu
dGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTkwRTFCNDkxMUU0RUY0QjAw
NjlGNzg0IC8qIERldmljZU9yaWVudGF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjc5
Niw2ICsyMjkwNCw3IEBACiAJCQkJODU0MDc1MjAwQUQ2QzVGQjAwNjIwQzU3IC8qIERPTUV2ZW50
VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUM3OEE2ODBBQkRFMUI0MDA0NEZDMTYgLyog
RE9NRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFBMzdCNTA5N0M3MTVGMDAxOUYz
RDggLyogRE9NRXh0ZW5zaW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTE0ODMyQkYxODdGNjUy
QzAwREE2M0E2IC8qIFdLR3JhcGhpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDBGMDA0MEUw
QTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTNCQzEwODEx
N0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTNC
QzEwQjExN0Q0N0M4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9ySW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjI4NjgsNiArMjI5NzcsNyBAQAogCQkJCTg1REY4MTk5MEFBNzdFNEIwMDQ4NkFE
NyAvKiBET01IVE1MSUZyYW1lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQjEw
QUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxJRnJhbWVFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1REY4MTI5MEFBNzc4NzIwMDQ4NkFENyAvKiBET01IVE1MSW1hZ2VFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJCMDE4N0Y2MThEMDBEQTYzQTYgLyogV0FL
QXBwS2l0U3R1YnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUIyMEFDNUQ1MzUwMDUzMjcw
RiAvKiBET01IVE1MSW1hZ2VFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
RjMyQUVDMEFBNjNCODcwMEZGMzE4NCAvKiBET01IVE1MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NUU3MTFCMzBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTElucHV0RWxlbWVu
dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTIyODk5LDYgKzIzMDA5LDcgQEAKIAkJCQk4
NUU3MTFCRTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE9MaXN0RWxlbWVudEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NUYzMkFFRTBBQTYzQjg3MDBGRjMxODQgLyogRE9NSFRNTE9w
dEdyb3VwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q5REUxODIxN0FBRDZBNDAwRUEz
ODZEIC8qIERPTVVSTE1lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJCODE4
N0Y2Mzg2MDBEQTYzQTYgLyogV0FLVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVFNzExQkYw
QUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxPcHRHcm91cEVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTEyNUY4NUUxODJDMkRGNjAwRDg0Q0Q5IC8qIENyeXB0b0tleURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDA3NTZCMEFENkNCRjkwMDYyMEM1NyAvKiBET01IVE1M
T3B0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzAxOSw2ICsyMzEzMCw3IEBACiAJ
CQkJNzZGQzJCMEMxMjM3MERBMDAwNkE5OTFBIC8qIERPTVRva2VuTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTE0NTM0OTcxNkE5QkI2QTAwMEY2RkQyIC8qIERPTVRyYW5zaXRpb25FdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTE0NTM0OTkxNkE5QkI2QTAwMEY2RkQyIC8qIERPTVRyYW5z
aXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJCQjE4N0Y2NDMy
MDBEQTYzQTYgLyogV0FLV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFBMzdCRTA5N0M3
MTVGMDAxOUYzRDggLyogRE9NVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTUyNkNE
MjBBQjBCN0Q5MDAwMzAyRUEgLyogRE9NVHJlZVdhbGtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODUwQjQxQzMwQUQ5RTdFNzAwQTZFRDRGIC8qIERPTVRyZWVXYWxrZXJJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMzMwOCw2ICsyMzQyMCw3IEBACiAJCQkJMkQ4Mjg3RjcxNkU0QTAzODAw
ODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwOTA4OTEw
QUY3RURFNDAwODFERjAxIC8qIEhpdFRlc3RSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzA3RjFEODBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTE0ODMyQ0YxODdGNjg0NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRl
cmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0JDMjlDMEU5MUFCMEYwMDgzNTU4OCAvKiBI
b3N0V2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA5OTEyQjAyNkY3MDBDMUEzNTkg
LyogSFJURkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjA5QjEyQjAyNkY3MDBD
MUEzNTkgLyogSFJURkRhdGFiYXNlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNTAwLDYg
KzIzNjEzLDcgQEAKIAkJCQkzN0UzNTI0RDEyNDUwQzY2MDBCQUY1RDkgLyogSW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMzQ4NjEyNDE1RkRFMjFFMDA3QTFDQzkgLyogSW5wdXRUeXBl
TmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REVBMDk5RTY0OTIwMDU2RTU4MSAvKiBJ
bnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJDNzE4
N0Y2NkM4MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdD
RjQ5NzUxNEVFMzZENzAwRUNGRjE0IC8qIEluc2VydGlvblBvaW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOURFQzA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRDA3REVBQkEwQTM2NTU0QTAwQ0EzMEY4IC8qIEluc2VydExp
c3RDb21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNTkzLDYgKzIzNzA3LDcgQEAKIAkJCQlG
REExNUVBNDEyQjAzRUUxMDAzQTU4M0EgLyogSlNDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NURGMzFGNDA5RDFDQzYwMDAwQkUzMjUgLyogSlNDaGFyYWN0ZXJEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0MwNjU4ODBGM0NFMkE3MDBDRDJEODcgLyogSlNDbGll
bnRSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJDNDE4N0Y2NjNDMDBEQTYzQTYgLyog
V0tWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0MwNjU4QTBGM0NFMkE3MDBDRDJEODcgLyog
SlNDbGllbnRSZWN0TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBODNFNTAwRDdDRTFFOTAw
MzQyMUE4IC8qIEpTQ2xpcGJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUZCNTUwNDExM0Uz
RTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzNjE5LDYg
KzIzNzM0LDcgQEAKIAkJCQlCQzQ2QzIwNzBDMEREQ0ExMDAyMENGQzMgLyogSlNDU1NTdHlsZVJ1
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQzVCRTAxMEMwRTkzMTEwMDExQzJEQiAvKiBKU0NT
U1N0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZDNTREMDU4MTZBNzY3NkUwMDU3NUU0
RCAvKiBKU0NTU1N1cHBvcnRzUnVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTE0ODMyQ0MxODdG
NjdDNDAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
Q0Y3OEE2MDlGNThDRDgwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEQwNUZBQzBBMjNCMzBGMDA1RTcyMDMgLyogSlNDU1NWYWx1ZUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0Nzc4QjgwMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTIzNzg0LDYgKzIzOTAwLDcgQEAKIAkJCQlFNDQ2MTQxNzBDRDY4MjY5
MDBGQURBNzUgLyogSlNIVE1MVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1
QTY3RDExRDRGQjA4MDA0QzNFNEIgLyogSlNJREJBbnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTgx
QkUyMEQzMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTE0ODMyQzExODdGNjU3QTAwREE2M0E2IC8qIFdLVHlwZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1ODVBNjgzMTFENEZCMDgwMDRDM0U0QiAvKiBKU0lEQkRhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDNTg1QTY5NzExRDRGQjEzMDA0QzNFNEIgLyogSlNJREJGYWN0b3J5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlDNTcyRUUxRjEyMDFDOUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMzkyMCw2ICsyNDAzNyw3IEBACiAJCQkJQjJGQTNENjEwQUI3
NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ3Vyc29yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJGQTNENjMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRGVmc0VsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyRkEzRDY1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0Rlc2NFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJDOTE4N0Y2NzZCMDBEQTYzQTYgLyogV2ViQ29yZVRo
cmVhZEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q2NzBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMkY2OUQwQUI3NzFC
ODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDQjkyNDQw
QjVCRDk3MDAwOUJBQTc4IC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlLmggaW4gSGVhZGVycyAqLywK
QEAgLTI0MzI4LDYgKzI0NDQ2LDcgQEAKIAkJCQlFMUJEMzMxQzE4MkQ4RUU5MDBDMDVEOUYgLyog
Q3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzc0QUJB
NTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2NUEyMTQ2ODA5N0EzMjkxMDBCOTA1MEEgLyogUGFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTE0ODMyQjQxODdGNjI5QTAwREE2M0E2IC8qIFdBS1Jlc3BvbmRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOUI1MEIxREUxN0NENEMwRjAwODdGNjNDIC8qIEZvcm1OYW1lZEl0ZW0u
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzdFNzc3MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCURBRUQyMDMxMTZGMjQ0NDgwMDcwRUMwRiAvKiBQYWdl
Q29uc29sZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDQyMCw2ICsyNDUzOSw3IEBACiAJCQkJQUJD
MTI4NzcwQjMzQUE2RDAwQzY5M0Q1IC8qIFBvcHVwTWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMzQkUxMkIwRTk4MDkyRjAwODM1NTg4IC8qIFBvcHVwTWVudVN0eWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzN0Y1NjdDRTE2NTM1OEY0MDBEREU5MkIgLyogUG9wdXBPcGVuaW5nT2Jz
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUExNDgzMkM2MTg3RjY2OEYwMERBNjNBNiAvKiBX
S1ZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlERTA4MjQ1RTU5MDAxRTlB
QkMgLyogUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NDZBRjJDMTRGNERERTYwMDNF
N0E3MCAvKiBQb3NpdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzQ2QUYyRTE0
RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25FcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDYz
OCw2ICsyNDc1OCw3IEBACiAJCQkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNl
UmVxdWVzdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OTY5REI4MTdEMTQxNTEwMDdGRjg0
MiAvKiBKU1JUQ0ljZUNhbmRpZGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2
RjEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUExNDgzMkNEMTg3RjY4MkUwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkU2FmZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NzAxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVz
cG9uc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjdGMENFOTIzQTEwMDdFRjNDRCAvKiBS
ZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTUxMkIwMjZG
NzAwQzFBMzU5IC8qIFJldmVyYi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDY5OSw2ICsyNDgyMCw3
IEBACiAJCQkJMEZFNzE0MDYxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ5MjVCNjgwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEJl
aGF2aW9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE4NEYwNTE0M0JBN0JEMDA1MUQxNTMgLyog
U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUExNDgzMkJB
MTg3RjYzRTkwMERBNjNBNiAvKiBXQUtWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2MDVBRUQxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUY2MkVFODE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5NzMzMCAvKiBT
Y3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTI0OCw2ICsyNTM3
MCw3IEBACiAJCQkJMTQxOUQyQzUwQ0VBNkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1NEZFNzM5MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMzc1RDdGRTE2NjM5NTE5MDA2MTg0QUIgLyogVHlwZUFoZWFk
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTQ4MzJCRTE4N0Y2NENDMDBEQTYzQTYgLyogV0tDb250
ZW50T2JzZXJ2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzI4QTY4MTBGNjU5Q0MwMDhD
NzgxMyAvKiBUeXBlc2V0dGluZ0ZlYXR1cmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUx
QTA5OUU2NDkyMDA1NkU1ODEgLyogVHlwaW5nQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODUwMzFCNEUwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjU5MjIsNiArMjYwNDUsNyBAQAogCQkJCUJDRTc4OThCMTEyMEU4MDIwMDYwRUNFNSAvKiBCaWRp
UnVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDhDMTJCMDI2RjcwMEMxQTM1OSAvKiBC
aXF1YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjQxMkIwMjY3NjAwQzFBMzU5IC8q
IEJpcXVhZERTUEtlcm5lbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMTQ4MzJCMzE4N0Y2Mjkx
MDBEQTYzQTYgLyogV0FLQ2xpcFZpZXcubSBpbiBTb3VyY2VzICovLAogCQkJCUZEQzU0RjA0MTM5
OUIwREEwMDhEOTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDcwNTg0RkYxN0Y5RjA1RTAwNUYyQkNCIC8qIENhcGFiaWxpdHlSYW5nZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI1OTkwLDYgKzI2MTE0LDcgQEAKIAkJCQlBQkFGMjIwODBD
MDNCMUM3MDBCMEJDRjAgLyogQ2hyb21lTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q5REUx
NzQxN0FBQzc0QzAwRUEzODZEIC8qIEpTTWVkaWFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNEFDQkMwQkUxMjcxM0NCRDAwOTRGOUIyIC8qIENsYXNzTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMTQ4MzJDNTE4N0Y2NjgzMDBEQTYzQTYgLyogV0tWaWV3Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM5MDRCNzYwRDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNDMDY1N0QwRjNDRTFCNzAwQ0QyRDg3IC8qIENsaWVudFJlY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4NEZFMzQxODY0RDVBRjAwODQzQjEwIC8qIENvbW1h
bmRMaW5lQVBJSG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2Mjk1LDYgKzI2NDIwLDcgQEAK
IAkJCQk4NUVDQkVGMjBBQTc2MjY5MDA1NDRGMEIgLyogRE9NSFRNTEhSRWxlbWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTg1OTkyRUJEMEFBNTA2OTUwMEFDMDc4NSAvKiBET01IVE1MSHRtbEVs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NURGODE5QTBBQTc3RTRCMDA0ODZBRDcgLyog
RE9NSFRNTElGcmFtZUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlBMTQ4MzJCOTE4N0Y2
M0Q1MDBEQTYzQTYgLyogV0FLVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1REY4MTJBMEFB
Nzc4NzIwMDQ4NkFENyAvKiBET01IVE1MSW1hZ2VFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODVGMzJBRUQwQUE2M0I4NzAwRkYzMTg0IC8qIERPTUhUTUxJbnB1dEVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBNjE0OEE2ODEyRTQxRDk0MDA0NEE3ODQgLyogRE9NSFRNTEtleWdl
bkVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKQEAgLTI2NzM2LDYgKzI2ODYyLDcgQEAKIAkJCQk1
MTRDNzY3MjBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzcxQTY3Q0IxMUM2QzdEQjAwMDQ3QjhCIC8qIEh5cGhlbmF0aW9uQ0YuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTdFNDAyOEYxM0E2OTZFRDAwOTEzRDY3IC8qIEljb25Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExNDgzMkJDMTg3RjY0OEUwMERBNjNBNiAvKiBXQUtX
aW5kb3cubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTI2RTZCQjBBMkUzQjEyMDA1QzI5RkEgLyog
SWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjk1Mzk3MTMyOUEzQzgwMEI5
MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxM0YxNDUz
MEFCNjM0QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcx
MjEsNiArMjcyNDgsNyBAQAogCQkJCUU0NDYxNDE4MENENjgyNjkwMEZBREE3NSAvKiBKU01lZGlh
RXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE5QUMzRjQxODI0REM3OTAwMzQ5NDI2IC8q
IENyeXB0b0FsZ29yaXRobVNIQTUxMi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBCN0RCNzE4
MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUExNDgzMkNCMTg3RjY3QjQwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkUnVuLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNEQTk4REEzMTYwMTQ2NDEwMEZFQTNCMSAvKiBKU01lZGlhS2V5
RXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RCODU5RkExNjBENDk0OTAwRTVCMDdGIC8q
IEpTTWVkaWFLZXlFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREE5OERERjE2MDI2QTM3
MDBGRUEzQjEgLyogSlNNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI3NDA2LDYgKzI3NTM0LDcgQEAKIAkJCQlFNDQ2MTQxQTBDRDY4MjY5MDBGQURBNzUgLyogSlNU
aW1lUmFuZ2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDMzNEU5MTQ1QTFGMzYwMDhEOEQ0
NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3ODQ2MzQyMTQ1QjE1
MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTE0ODMy
QzAxODdGNjU2NjAwREE2M0E2IC8qIFdLR3JhcGhpY3MubW0gaW4gU291cmNlcyAqLywKIAkJCQkw
N0JERDZFQzE0NjlCNEMyMDA5QzlGODUgLyogSlNUcmFja0V2ZW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUUxN0I0OTIyMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25FdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzhFMDkxMzE3RDE0Q0VFMDA0MjBBQTEgLyogVXNl
ck1lZGlhUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NjAwLDYgKzI3NzI5LDcgQEAK
IAkJCQk4NTAzMUI0OTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDNkYwOTAwRTE0MzI3QjYxMDA2ODU4NDkgLyogTXV0YXRpb25PYnNlcnZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlENkU1MjhBMzE0OUE5MjZEMDBFRkUxRjMgLyogTXV0
YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTE0ODMy
QjExODdGNjFFMTAwREE2M0E2IC8qIFdBS0FwcEtpdFN0dWJzLm0gaW4gU291cmNlcyAqLywKIAkJ
CQlFMTlBQzNGOTE4MjU2NkY3MDAzNDk0MjYgLyogQ3J5cHRvS2V5TWFjLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUQ2RTI3NkFGMTQ2Mzc0NTUwMDFEMjgwQSAvKiBNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RjA4RkJDMTQzMEZFOEYwMDY4NTg0
OSAvKiBNdXRhdGlvblJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NjY2LDYgKzI3Nzk2
LDcgQEAKIAkJCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUU0ODk0NEEyMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5
b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBNjc0QkRCMEY5RUJGNEUwMDZDRjA5OSAvKiBQ
YWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTE0ODMyQjUxODdG
NjJGQzAwREE2M0E2IC8qIFdBS1Jlc3BvbmRlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMyNjQ5
N0MwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkJE
QjYxOUQxNkQ2MDM0NjAwQkIzMzk0IC8qIFBhZ2VSdWxlQ29sbGVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUYzODIwODk0MTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdlUnVudGltZUFnZW50LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjc5MTIsNiArMjgwNDMsNyBAQAogCQkJCTFBNTY5RDI0MEQ3
RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkz
RUFFMjExMzU2QjMyRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4QzZFQTYxOTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMTQ4MzJDRTE4N0Y2ODM0MDBEQTYz
QTYgLyogV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNURGRThGNTYwRDE2NDc3QjAwNzZFOTM3IC8qIFNjaGVkdWxl
ZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTYyQzdGNDExRjc3RUZCMDA2MTJFRkUg
LyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODI0Nyw2ICsyODM3OSw3
IEBACiAJCQkJNzEzNDQ5NkQxNDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMDdDQTEyMEUxODJENjdEODAwRDEyMTk3IC8qIEpTUlRDUGVl
ckNvbm5lY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMzUwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0xlbmd0aExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTE0ODMy
QkQxODdGNjRCNDAwREE2M0E2IC8qIFdLQ29udGVudE9ic2VydmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA3Mjc3RTUwMTdEMDE4Q0MwMDE1NTM0RCAvKiBKU01lZGlhU3RyZWFtRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMzgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0EzQjBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHTGluZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODI4
OSw2ICsyODQyMiw3IEBACiAJCQkJQkMyMjc0NzgwRTgzNjZFMjAwRTdGOTc1IC8qIFNWR1JlbmRl
clN0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjI3NDdBMEU4MzY2RTIwMEU3Rjk3NSAv
KiBTVkdSZW5kZXJTdHlsZURlZnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBQTIwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1NjcmlwdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTE0ODMyQjcxODdGNjM2QzAwREE2M0E2IC8qIFdBS1Njcm9sbFZpZXcubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyN0FBNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU2V0RWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFNEFGRDAwRjBEQUYzMzU1MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBQTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R1N0b3BFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjgyOTgsNyArMjg0MzIsOSBAQAog
CQkJCUIyMjI3QUJEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTd2l0Y2hFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMjI3QUMwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTeW1ib2xFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDcxOUQyMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExNDgzMkMyMTg3RjY1QzcwMERBNjNB
NiAvKiBXS1V0aWxpdGllcy5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4RTA5MEExN0QxNENFRTAw
NDIwQUExIC8qIFJUQ0ljZUNhbmRpZGF0ZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEx
NDgzMkM4MTg3RjY3M0YwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjdBQzQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1Rlc3RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3QUM3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0Q29udGVudEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc5NjlEQkIxN0QxNDE1MTAwN0ZGODQyIC8qIEpT
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtBcHBLaXRTdHVicy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtBcHBLaXRTdHVicy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4NWQz
N2Q1MWE1Nzk4N2MxMzAwOGU2ODNhNjhjYjM3NTE2YjhlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS0FwcEtpdFN0dWJzLmgKQEAgLTAsMCAr
MSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBVbmljb2Rl
cyB3ZSByZXNlcnZlIGZvciBmdW5jdGlvbiBrZXlzIG9uIHRoZSBrZXlib2FyZCwgIE9wZW5TdGVw
IHJlc2VydmVzIHRoZSByYW5nZSAweEY3MDAtMHhGOEZGIGZvciB0aGlzIHB1cnBvc2UuICBUaGUg
YXZhaWxhYmlsaXR5IG9mIHZhcmlvdXMga2V5cyB3aWxsIGJlIHN5c3RlbSBkZXBlbmRlbnQuICov
CisKKyNpZm5kZWYgV0FLQXBwS2l0U3R1YnNfaAorI2RlZmluZSBXQUtBcHBLaXRTdHVic19oCisK
KyNpZiBUQVJHRVRfT1NfSVBIT05FCisKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorLy8gRklYTUU6IDxyZGFy
Oi8vcHJvYmxlbS82NjY5NDM0PiBTd2l0Y2ggZnJvbSB1c2luZyBOU0dlb21ldHJ5IG1ldGhvZHMg
dG8gQ0dHZW9tZXRyeSBtZXRob2RzCisjaW1wb3J0IDxGb3VuZGF0aW9uL05TR2VvbWV0cnkuaD4K
KworI2lmbmRlZiBOU0NsaXBWaWV3CisjZGVmaW5lIE5TQ2xpcFZpZXcgV0FLQ2xpcFZpZXcKKyNl
bmRpZgorI2lmbmRlZiBOU1ZpZXcKKyNkZWZpbmUgTlNWaWV3IFdBS1ZpZXcKKyNlbmRpZgorI2lm
bmRlZiBOU1Njcm9sbFZpZXcKKyNkZWZpbmUgTlNTY3JvbGxWaWV3IFdBS1Njcm9sbFZpZXcKKyNl
bmRpZgorI2lmbmRlZiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcKKyNkZWZpbmUgV2ViRHluYW1p
Y1Njcm9sbEJhcnNWaWV3IFdBS1Njcm9sbFZpZXcKKyNlbmRpZgorI2lmbmRlZiBOU1dpbmRvdwor
I2RlZmluZSBOU1dpbmRvdyBXQUtXaW5kb3cKKyNlbmRpZgorI2lmbmRlZiBOU1Jlc3BvbmRlcgor
I2RlZmluZSBOU1Jlc3BvbmRlciBXQUtSZXNwb25kZXIKKyNlbmRpZgorCisjaWZkZWYgX19PQkpD
X18KK0BjbGFzcyBXQUtDbGlwVmlldzsKK0BjbGFzcyBXQUtSZXNwb25kZXI7CitAY2xhc3MgV0FL
U2Nyb2xsVmlldzsKK0BjbGFzcyBXQUtWaWV3OworQGNsYXNzIFdBS1dpbmRvdzsKKyNlbmRpZgor
CisvKiBEZXZpY2UtaW5kZXBlbmRlbnQgYml0cyBmb3VuZCBpbiBldmVudCBtb2RpZmllciBmbGFn
cyAqLworZW51bSB7CisJTlNBbHBoYVNoaWZ0S2V5TWFzayA9CQkxIDw8IDE2LAorCU5TU2hpZnRL
ZXlNYXNrID0JCTEgPDwgMTcsCisJTlNDb250cm9sS2V5TWFzayA9CQkxIDw8IDE4LAorCU5TQWx0
ZXJuYXRlS2V5TWFzayA9CQkxIDw8IDE5LAorCU5TQ29tbWFuZEtleU1hc2sgPQkJMSA8PCAyMCwK
KwlOU051bWVyaWNQYWRLZXlNYXNrID0JCTEgPDwgMjEsCisJTlNIZWxwS2V5TWFzayA9CQkJMSA8
PCAyMiwKKwlOU0Z1bmN0aW9uS2V5TWFzayA9CQkxIDw8IDIzLAorI2lmIE1BQ19PU19YX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gTUFDX09TX1hfVkVSU0lPTl8xMF80CisJTlNEZXZpY2VJbmRlcGVu
ZGVudE1vZGlmaWVyRmxhZ3NNYXNrID0gMHhmZmZmMDAwMFUKKyNlbmRpZgorfTsKKwordHlwZWRl
ZiBlbnVtIF9XS1dyaXRpbmdEaXJlY3Rpb24geworI2lmIE1BQ19PU19YX1ZFUlNJT05fTUFYX0FM
TE9XRUQgPj0gTUFDX09TX1hfVkVSU0lPTl8xMF80CisgICAgV0tXcml0aW5nRGlyZWN0aW9uTmF0
dXJhbCA9IC0xLCAvKiBEZXRlcm1pbmVzIGRpcmVjdGlvbiB1c2luZyB0aGUgVW5pY29kZSBCaWRp
IEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMgKi8KKyNlbmRpZiAvKiBNQUNfT1NfWF9WRVJTSU9O
X01BWF9BTExPV0VEID49IE1BQ19PU19YX1ZFUlNJT05fMTBfNCAqLworICAgIFdLV3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0ID0gMCwJLyogTGVmdCB0byByaWdodCB3cml0aW5nIGRpcmVjdGlv
biAqLworICAgIFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0CS8qIFJpZ2h0IHRvIGxlZnQg
d3JpdGluZyBkaXJlY3Rpb24gKi8KK30gV0tXcml0aW5nRGlyZWN0aW9uOworCit0eXBlZGVmIGVu
dW0gX05TU2VsZWN0aW9uQWZmaW5pdHkgeworICAgIE5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVh
bSA9IDAsCisgICAgTlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gPSAxCit9IE5TU2VsZWN0
aW9uQWZmaW5pdHk7CisKK3R5cGVkZWYgZW51bSBfTlNDZWxsU3RhdGUgeworICAgIE5TTWl4ZWRT
dGF0ZSA9IC0xLAorICAgIE5TT2ZmU3RhdGUgICA9ICAwLAorICAgIE5TT25TdGF0ZSAgICA9ICAx
ICAgIAorfSBOU0NlbGxTdGF0ZVZhbHVlOworCit0eXBlZGVmIGVudW0gX05TQ29tcG9zaXRpbmdP
cGVyYXRpb24geworICAgIE5TQ29tcG9zaXRlQ2xlYXIJCT0gMCwKKyAgICBOU0NvbXBvc2l0ZUNv
cHkJCT0gMSwKKyAgICBOU0NvbXBvc2l0ZVNvdXJjZU92ZXIJPSAyLAorICAgIE5TQ29tcG9zaXRl
U291cmNlSW4JCT0gMywKKyAgICBOU0NvbXBvc2l0ZVNvdXJjZU91dAk9IDQsCisgICAgTlNDb21w
b3NpdGVTb3VyY2VBdG9wCT0gNSwKKyAgICBOU0NvbXBvc2l0ZURlc3RpbmF0aW9uT3Zlcgk9IDYs
CisgICAgTlNDb21wb3NpdGVEZXN0aW5hdGlvbkluCT0gNywKKyAgICBOU0NvbXBvc2l0ZURlc3Rp
bmF0aW9uT3V0CT0gOCwKKyAgICBOU0NvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcAk9IDksCisgICAg
TlNDb21wb3NpdGVYT1IJCT0gMTAsCisgICAgTlNDb21wb3NpdGVQbHVzRGFya2VyCT0gMTEsCisg
ICAgTlNDb21wb3NpdGVIaWdobGlnaHQJPSAxMiwKKyAgICBOU0NvbXBvc2l0ZVBsdXNMaWdodGVy
CT0gMTMKK30gTlNDb21wb3NpdGluZ09wZXJhdGlvbjsKKwordHlwZWRlZiBlbnVtIF9OU1NlbGVj
dGlvbkRpcmVjdGlvbiB7CisgICAgTlNEaXJlY3RTZWxlY3Rpb24gPSAwLAorICAgIE5TU2VsZWN0
aW5nTmV4dCwKKyAgICBOU1NlbGVjdGluZ1ByZXZpb3VzCit9IE5TU2VsZWN0aW9uRGlyZWN0aW9u
OworCitAaW50ZXJmYWNlIE5TQ3Vyc29yIDogTlNPYmplY3QKKysgKHZvaWQpc2V0SGlkZGVuVW50
aWxNb3VzZU1vdmVzOihCT09MKWZsYWc7CitAZW5kCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworQk9PTCBXS01vdXNlSW5SZWN0KENHUG9pbnQgYVBvaW50LCBD
R1JlY3QgYVJlY3QpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYg
Ly8gVEFSR0VUX09TX0lQSE9ORQorCisjZW5kaWYgLy8gV0FLQXBwS2l0U3R1YnNfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtBcHBLaXRTdHVicy5tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtBcHBLaXRTdHVicy5tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlkZjZkM2UyODQ1MjZhYjU2YjE5ZWQzYmY2Y2Y2YTFiZjcwN2RjZmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS0FwcEtpdFN0dWJzLm0K
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiV0FLQXBwS2l0U3R1YnMuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKwor
aWQgTlNBcHAgPSBuaWw7CisKK0JPT0wgV0tNb3VzZUluUmVjdChDR1BvaW50IGFQb2ludCwgQ0dS
ZWN0IGFSZWN0KSAKK3sKKyAgICByZXR1cm4gYVBvaW50LnggPj0gYVJlY3Qub3JpZ2luLnggJiYK
KwkgICBhUG9pbnQueCA8IChhUmVjdC5vcmlnaW4ueCArIGFSZWN0LnNpemUud2lkdGgpICYmCisJ
ICAgYVBvaW50LnkgPj0gYVJlY3Qub3JpZ2luLnkgJiYgYVBvaW50LnkgPCAoYVJlY3Qub3JpZ2lu
LnkgKyBhUmVjdC5zaXplLmhlaWdodCk7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBOU0N1cnNvcgor
KyAodm9pZClzZXRIaWRkZW5VbnRpbE1vdXNlTW92ZXM6KEJPT0wpZmxhZworeworICAgIFVOVVNF
RF9QQVJBTShmbGFnKTsKK30KK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLQ2xpcFZpZXcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLQ2xpcFZpZXcuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZmJmOGFmNjNlOGJlYTNlZjc5Y2JiZDAzMmFlZWQyNjEzMWRhY2JjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtDbGlwVmlldy5oCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdBS0NsaXBWaWV3X2gKKyNkZWZp
bmUgV0FLQ2xpcFZpZXdfaAorCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCisjaW1wb3J0ICJXQUtW
aWV3LmgiCisKK0BpbnRlcmZhY2UgV0FLQ2xpcFZpZXcgOiBXQUtWaWV3CisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgV0FLVmlldyAqZG9jdW1lbnRWaWV3OworQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgQk9PTCBjb3BpZXNPblNjcm9sbDsKKworLSAoQ0dSZWN0KWRvY3Vt
ZW50VmlzaWJsZVJlY3Q7CisKK0BlbmQKKworI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKKwor
I2VuZGlmIC8vIFdBS0NsaXBWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy93YWsvV0FLQ2xpcFZpZXcubSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93
YWsvV0FLQ2xpcFZpZXcubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmI0MzczYjlmOWQ0ODc2YzIwZjVmMDk5NWJi
NjE4Y2Q2NDJiODkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XQUtDbGlwVmlldy5tCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldBS0NsaXBWaWV3LmgiCisKKyNpZiBQTEFURk9STShJ
T1MpCisKKyNpbXBvcnQgIldBS1ZpZXdQcml2YXRlLmgiCisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgorCitAaW1wbGVtZW50YXRpb24gV0FLQ2xpcFZpZXcKKworQHN5bnRoZXNpemUgZG9jdW1l
bnRWaWV3ID0gX2RvY3VtZW50VmlldzsKK0BzeW50aGVzaXplIGNvcGllc09uU2Nyb2xsID0gX2Nv
cGllc09uU2Nyb2xsOworCistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpcmVjdAoreworICAg
IFdLVmlld1JlZiB2aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZyYW1lKHJlY3QsICZ2aWV3Q29udGV4
dCk7CisgICAgc2VsZiA9IFtzZWxmIF9pbml0V2l0aFZpZXdSZWY6dmlld107CisgICAgV0tSZWxl
YXNlKHZpZXcpOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbX2RvY3VtZW50VmlldyByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy8v
IFdBSyBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgV0FLU2Nyb2xsVmlldy4KKy0gKHZvaWQpX3NldERv
Y3VtZW50VmlldzooV0FLVmlldyAqKWFWaWV3Cit7CisgICAgaWYgKF9kb2N1bWVudFZpZXcgPT0g
YVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9jdW1lbnRWaWV3IHJlbW92ZUZyb21T
dXBlcnZpZXddOworICAgIFtfZG9jdW1lbnRWaWV3IHJlbGVhc2VdOworICAgIF9kb2N1bWVudFZp
ZXcgPSBbYVZpZXcgcmV0YWluXTsKKyAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9kb2N1bWVudFZpZXdd
OworfQorCistIChDR1JlY3QpZG9jdW1lbnRWaXNpYmxlUmVjdCAKK3sgICAgIAorICAgIGlmIChf
ZG9jdW1lbnRWaWV3KQorICAgICAgICByZXR1cm4gV0tWaWV3Q29udmVydFJlY3RGcm9tU3VwZXJ2
aWV3KFtfZG9jdW1lbnRWaWV3IF92aWV3UmVmXSwgW3NlbGYgYm91bmRzXSk7CisgICAgcmV0dXJu
IENHUmVjdFplcm87Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLUmVzcG9uZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS1Jlc3BvbmRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJjNThlYjRjNzBmMTMyZDMzYzk0MjM5YjBkY2UwNGIxZGY2YjE4MDUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS1Jlc3BvbmRlci5oCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdBS1Jlc3BvbmRlcl9oCisjZGVmaW5lIFdBS1Jlc3BvbmRlcl9oCisKKyNpZiBUQVJHRVRfT1Nf
SVBIT05FCisKKyNpbXBvcnQgIldLVHlwZXMuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCitAY2xhc3MgV2ViRXZlbnQ7CisKK0BpbnRlcmZhY2UgV0FLUmVzcG9uZGVyIDog
TlNPYmplY3QKK3sKKworfQorCistICh2b2lkKWhhbmRsZUV2ZW50OihXZWJFdmVudCAqKWV2ZW50
OworCistICh2b2lkKXNjcm9sbFdoZWVsOihXZWJFdmVudCAqKXRoZUV2ZW50OworLSAoQk9PTCl0
cnlUb1BlcmZvcm06KFNFTClhbkFjdGlvbiB3aXRoOihpZClhbk9iamVjdDsKKy0gKHZvaWQpbW91
c2VFbnRlcmVkOihXZWJFdmVudCAqKXRoZUV2ZW50OworLSAodm9pZCltb3VzZUV4aXRlZDooV2Vi
RXZlbnQgKil0aGVFdmVudDsKKy0gKHZvaWQpa2V5RG93bjooV2ViRXZlbnQgKilldmVudDsKKy0g
KHZvaWQpa2V5VXA6KFdlYkV2ZW50ICopZXZlbnQ7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
Ky0gKHZvaWQpdG91Y2g6KFdlYkV2ZW50ICopZXZlbnQ7CisjZW5kaWYKKworLSAodm9pZClpbnNl
cnRUZXh0OihOU1N0cmluZyAqKXRleHQ7CisKKy0gKHZvaWQpZGVsZXRlQmFja3dhcmQ6KGlkKXNl
bmRlcjsKKy0gKHZvaWQpZGVsZXRlRm9yd2FyZDooaWQpc2VuZGVyOworLSAodm9pZClpbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3I6KGlkKXNlbmRlcjsKKworLSAodm9pZCltb3ZlRG93bjooaWQpc2Vu
ZGVyOworLSAodm9pZCltb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbjooaWQpc2VuZGVyOworLSAo
dm9pZCltb3ZlTGVmdDooaWQpc2VuZGVyOworLSAodm9pZCltb3ZlTGVmdEFuZE1vZGlmeVNlbGVj
dGlvbjooaWQpc2VuZGVyOworLSAodm9pZCltb3ZlUmlnaHQ6KGlkKXNlbmRlcjsKKy0gKHZvaWQp
bW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uOihpZClzZW5kZXI7CistICh2b2lkKW1vdmVVcDoo
aWQpc2VuZGVyOworLSAodm9pZCltb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb246KGlkKXNlbmRlcjsK
KworLSAoV0FLUmVzcG9uZGVyICopbmV4dFJlc3BvbmRlcjsKKy0gKEJPT0wpYWNjZXB0c0ZpcnN0
UmVzcG9uZGVyOworLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcjsKKy0gKEJPT0wpcmVzaWdu
Rmlyc3RSZXNwb25kZXI7CisKKy0gKHZvaWQpbW91c2VVcDooV2ViRXZlbnQgKil0aGVFdmVudDsK
Ky0gKHZvaWQpbW91c2VEb3duOihXZWJFdmVudCAqKXRoZUV2ZW50OworLSAodm9pZCltb3VzZU1v
dmVkOihXZWJFdmVudCAqKXRoZUV2ZW50OworCitAZW5kCisKKyNlbmRpZiAvLyBUQVJHRVRfT1Nf
SVBIT05FCisKKyNlbmRpZiAvLyBXQUtSZXNwb25kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtSZXNwb25kZXIubSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy93YWsvV0FLUmVzcG9uZGVyLm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc3YzM1ZGY0MjM0ODc2
NjdkMDMzN2RjZTQ5ZDU3NGQxYjZmNDVjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLUmVzcG9uZGVyLm0KQEAgLTAsMCArMSwxNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldBS1Jlc3BvbmRlci5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJX
QUtWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgorCitAaW1wbGVtZW50
YXRpb24gV0FLUmVzcG9uZGVyCisKKy8vIEZJWE1FOiB0aGUgZnVuY3Rpb25zIG5hbWVkIGhhbmRs
ZUV2ZW50IGdlbmVyYWxseSBkbyBub3QgZm9yd2FyZCBldmVudCB0byB0aGUgcGFyZW50IGNoYWlu
LgorLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGlkZWFsbHkgYmUgcmVtb3ZlZCwgb3IgcmVuYW1lZCAi
c2VuZEV2ZW50Ii4KKy0gKHZvaWQpaGFuZGxlRXZlbnQ6KFdlYkV2ZW50ICopZXZlbnQKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZXZlbnQpOworfQorCistICh2b2lkKV9mb3J3YXJkRXZlbnQ6KFdlYkV2
ZW50ICopZXZlbnQKK3sKKyAgICBbW3NlbGYgbmV4dFJlc3BvbmRlcl0gaGFuZGxlRXZlbnQ6ZXZl
bnRdOworfQorCistICh2b2lkKXNjcm9sbFdoZWVsOihXZWJFdmVudCAqKWV2ZW50IAoreyAKKyAg
ICBbc2VsZiBfZm9yd2FyZEV2ZW50OmV2ZW50XTsKK30KKworLSAodm9pZCltb3VzZUVudGVyZWQ6
KFdlYkV2ZW50ICopZXZlbnQKK3sgCisgICAgW3NlbGYgX2ZvcndhcmRFdmVudDpldmVudF07Cit9
CisKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KFdlYkV2ZW50ICopZXZlbnQgCit7IAorICAgIFtzZWxm
IF9mb3J3YXJkRXZlbnQ6ZXZlbnRdOworfQorCistICh2b2lkKW1vdXNlTW92ZWQ6KFdlYkV2ZW50
ICopdGhlRXZlbnQKK3sKKyAgICBbc2VsZiBfZm9yd2FyZEV2ZW50OnRoZUV2ZW50XTsKK30KKwor
LSAodm9pZClrZXlEb3duOihXZWJFdmVudCAqKWV2ZW50Cit7IAorICAgIFtzZWxmIF9mb3J3YXJk
RXZlbnQ6ZXZlbnRdOworfQorLSAodm9pZClrZXlVcDooV2ViRXZlbnQgKilldmVudAoreyAKKyAg
ICBbc2VsZiBfZm9yd2FyZEV2ZW50OmV2ZW50XTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCistICh2b2lkKXRvdWNoOihXZWJFdmVudCAqKWV2ZW50Cit7CisgICAgW3NlbGYgX2Zvcndh
cmRFdmVudDpldmVudF07Cit9CisjZW5kaWYKKworLSAoV0FLUmVzcG9uZGVyICopbmV4dFJlc3Bv
bmRlciB7IHJldHVybiBuaWw7IH0KKworLSAodm9pZClpbnNlcnRUZXh0OihOU1N0cmluZyAqKXRl
eHQKK3sKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7Cit9CisKKy0gKHZvaWQpZGVsZXRlQmFja3dh
cmQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworfQorCistICh2b2lk
KWRlbGV0ZUZvcndhcmQ6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOwor
fQorCistICh2b2lkKWluc2VydFBhcmFncmFwaFNlcGFyYXRvcjooaWQpc2VuZGVyCit7CisgICAg
VU5VU0VEX1BBUkFNKHNlbmRlcik7Cit9CisKKy0gKHZvaWQpbW92ZURvd246KGlkKXNlbmRlcgor
eworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworfQorCistICh2b2lkKW1vdmVEb3duQW5kTW9k
aWZ5U2VsZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKK30K
KworLSAodm9pZCltb3ZlTGVmdDooaWQpc2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRl
cik7Cit9CisKKy0gKHZvaWQpbW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb246KGlkKXNlbmRlcgor
eworICAgIFVOVVNFRF9QQVJBTShzZW5kZXIpOworfQorCistICh2b2lkKW1vdmVSaWdodDooaWQp
c2VuZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7Cit9CisKKy0gKHZvaWQpbW92ZVJp
Z2h0QW5kTW9kaWZ5U2VsZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Vu
ZGVyKTsKK30KKworLSAodm9pZCltb3ZlVXA6KGlkKXNlbmRlcgoreworICAgIFVOVVNFRF9QQVJB
TShzZW5kZXIpOworfQorCistICh2b2lkKW1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbjooaWQpc2Vu
ZGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlbmRlcik7Cit9CisKKy0gKHZvaWQpbW91c2VVcDoo
V2ViRXZlbnQgKilldmVudCAKK3sKKyAgICBbc2VsZiBfZm9yd2FyZEV2ZW50OmV2ZW50XTsKK30K
KworLSAodm9pZCltb3VzZURvd246KFdlYkV2ZW50ICopZXZlbnQgCit7CisgICAgW3NlbGYgX2Zv
cndhcmRFdmVudDpldmVudF07Cit9CisKKy0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyIHsg
cmV0dXJuIHRydWU7IH0KKy0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIgeyByZXR1cm4gdHJ1
ZTsgfQorLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlciB7IHJldHVybiB0cnVlOyB9CisKKy0g
KEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwpYW5BY3Rpb24gd2l0aDooaWQpYW5PYmplY3QgCit7IAor
ICAgIGlmIChbc2VsZiByZXNwb25kc1RvU2VsZWN0b3I6YW5BY3Rpb25dKSB7CisgICAgICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjphbkFjdGlvbiB3aXRoT2JqZWN0OmFuT2JqZWN0XTsKKyAgICAg
ICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgcmV0dXJuIE5POyAKK30KKworQGVuZAorCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XQUtTY3JvbGxWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2Fr
L1dBS1Njcm9sbFZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjQwNjk3MzVjY2EyYjJjYTg4MGNhYzRhN2Uz
ZjQ3NzM1YTI5ZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XQUtTY3JvbGxWaWV3LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0FLU2Nyb2xsVmlld19oCisjZGVmaW5lIFdB
S1Njcm9sbFZpZXdfaAorCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCisjaW1wb3J0ICJXQUtWaWV3
LmgiCisjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3LmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKworQGNsYXNzIFdBS0NsaXBWaWV3OworCitAaW50ZXJmYWNlIFdBS1Njcm9s
bFZpZXcgOiBXQUtWaWV3IDxXZWJDb3JlRnJhbWVTY3JvbGxWaWV3PgoreworICAgIFdBS1ZpZXcg
Kl9kb2N1bWVudFZpZXc7ICAvLyBPbmx5IGhlcmUgc28gdGhlIE9iakMgaW5zdGFuY2Ugc3RheXMg
YXJvdW5kLgorICAgIFdBS0NsaXBWaWV3ICpfY29udGVudFZpZXc7CisgICAgaWQgX2RlbGVnYXRl
OworICAgIE5TUG9pbnQgX3Njcm9sbE9yaWdpbjsKK30KKworLSAoQ0dSZWN0KWRvY3VtZW50Vmlz
aWJsZVJlY3Q7CistIChXQUtDbGlwVmlldyAqKWNvbnRlbnRWaWV3OworLSAoaWQpZG9jdW1lbnRW
aWV3OworLSAodm9pZClzZXREb2N1bWVudFZpZXc6KFdBS1ZpZXcgKilhVmlldzsKKy0gKHZvaWQp
c2V0SGFzVmVydGljYWxTY3JvbGxlcjooQk9PTClmbGFnOworLSAoQk9PTCloYXNWZXJ0aWNhbFNj
cm9sbGVyOworLSAodm9pZClzZXRIYXNIb3Jpem9udGFsU2Nyb2xsZXI6KEJPT0wpZmxhZzsKKy0g
KEJPT0wpaGFzSG9yaXpvbnRhbFNjcm9sbGVyOworLSAodm9pZClyZWZsZWN0U2Nyb2xsZWRDbGlw
VmlldzooV0FLQ2xpcFZpZXcgKilhQ2xpcFZpZXc7CistICh2b2lkKXNldERyYXdzQmFja2dyb3Vu
ZDooQk9PTClmbGFnOworLSAoZmxvYXQpdmVydGljYWxMaW5lU2Nyb2xsOworLSAodm9pZClzZXRM
aW5lU2Nyb2xsOihmbG9hdClhRmxvYXQ7CistIChCT09MKWRyYXdzQmFja2dyb3VuZDsKKy0gKGZs
b2F0KWhvcml6b250YWxMaW5lU2Nyb2xsOworCistICh2b2lkKXNldERlbGVnYXRlOihpZClkZWxl
Z2F0ZTsKKy0gKGlkKWRlbGVnYXRlOworCistIChDR1JlY3QpYWN0dWFsRG9jdW1lbnRWaXNpYmxl
UmVjdDsKKy0gKHZvaWQpc2V0QWN0dWFsU2Nyb2xsUG9zaXRpb246KENHUG9pbnQpcG9pbnQ7CisK
Ky0gKENHUmVjdClkb2N1bWVudFZpc2libGVFeHRlbnQ7IC8vIExpa2UgYWN0dWFsRG9jdW1lbnRW
aXNpYmxlUmVjdCwgYnV0IGluY2x1ZGVzIGFyZWFzIHBvc3NpYmx5IGNvdmVyZWQgYnkgdHJhbnNs
dWNlbnQgVUkuCisKKy0gKEJPT0wpaW5Qcm9ncmFtbWF0aWNTY3JvbGw7CitAZW5kCisKK0BpbnRl
cmZhY2UgTlNPYmplY3QgKFdBS1Njcm9sbFZpZXdEZWxlZ2F0ZSkKKy0gKEJPT0wpc2Nyb2xsVmll
dzooV0FLU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgc2hvdWxkU2Nyb2xsVG9Qb2ludDooQ0dQb2lu
dClwb2ludDsKK0BlbmQKKworI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKKworI2VuZGlmIC8v
IFdBS1Njcm9sbFZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XQUtTY3JvbGxWaWV3Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9X
QUtTY3JvbGxWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkMTJiNWQwNzA3ZTg3Y2NkMTg0MmZhYTMzMTZm
MmM0MDE4NDRjMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3Mvd2FrL1dBS1Njcm9sbFZpZXcubW0KQEAgLTAsMCArMSw0NDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldBS1Nj
cm9sbFZpZXcuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiV0FLQXBwS2l0U3R1
YnMuaCIKKyNpbXBvcnQgIldBS0NsaXBWaWV3LmgiCisjaW1wb3J0ICJXQUtWaWV3UHJpdmF0ZS5o
IgorI2ltcG9ydCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXZWJFdmVudC5oIgorCitAaW50ZXJm
YWNlIFdBS0NsaXBWaWV3KFByaXZhdGVBUEkpCistICh2b2lkKV9zZXREb2N1bWVudFZpZXc6KFdB
S1ZpZXcgKilhVmlldzsKK0BlbmQKKworLy8gRklYTUU6IGdldCByaWQgb2YgdGhpcyBhbmQgdXNl
IHBvbHltb3JwaGljIHJlc3BvbnNlIHRvIG5vdGlmaWNhdGlvbnMuCitAaW50ZXJmYWNlIFdBS1Nj
cm9sbFZpZXcoKQorLSAodm9pZClfYWRqdXN0U2Nyb2xsZXJzOworQGVuZAorCitzdGF0aWMgdm9p
ZCBfbm90aWZpY2F0aW9uQ2FsbGJhY2soV0tWaWV3UmVmIHYsIFdLVmlld05vdGlmaWNhdGlvblR5
cGUgdHlwZSwgdm9pZCAqdXNlckluZm8pCit7CisgICAgVU5VU0VEX1BBUkFNKHYpOworICAgIHN3
aXRjaCAodHlwZSl7CisgICAgICAgIGNhc2UgV0tWaWV3Tm90aWZpY2F0aW9uVmlld0ZyYW1lU2l6
ZUNoYW5nZWQ6IHsKKyAgICAgICAgICAgIFdBS1Njcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoV0FL
U2Nyb2xsVmlldyAqKXVzZXJJbmZvOworICAgICAgICAgICAgQVNTRVJUKHNjcm9sbFZpZXcpOwor
ICAgICAgICAgICAgQVNTRVJUKFtzY3JvbGxWaWV3IGlzS2luZE9mQ2xhc3M6W1dBS1Njcm9sbFZp
ZXcgY2xhc3NdXSk7CisgICAgICAgICAgICBbc2Nyb2xsVmlldyBfYWRqdXN0U2Nyb2xsZXJzXTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitAaW1wbGVtZW50YXRpb24gV0FL
U2Nyb2xsVmlldworCistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpcmVjdAoreworICAgIFdL
Vmlld1JlZiB2aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZyYW1lKHJlY3QsICZ2aWV3Q29udGV4dCk7
CisgICAgdmlld0NvbnRleHQubm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBfbm90aWZpY2F0aW9uQ2Fs
bGJhY2s7CisgICAgdmlld0NvbnRleHQubm90aWZpY2F0aW9uVXNlckluZm8gPSBzZWxmOworICAg
IHNlbGYgPSBbc3VwZXIgX2luaXRXaXRoVmlld1JlZjooV0tWaWV3UmVmKXZpZXddOworICAgIFdL
UmVsZWFzZSh2aWV3KTsKKworICAgIF9jb250ZW50VmlldyA9IFtbV0FLQ2xpcFZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6cmVjdF07CisgICAgW3NlbGYgYWRkU3VidmlldzpfY29udGVudFZpZXdd
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9j
dW1lbnRWaWV3IGF1dG9yZWxlYXNlXTsKKyAgICBbX2NvbnRlbnRWaWV3IHJlbGVhc2VdOworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoQk9PTClfc2VsZkhhbmRsZUV2ZW50OihXZWJFdmVu
dCAqKWV2ZW50Cit7CisgICAgc3dpdGNoIChldmVudC50eXBlKSB7CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRTY3JvbGxXaGVlbDoKKyAgICAgICAgICAgIFtzZWxmIHNjcm9sbFdoZWVsOmV2ZW50XTsK
KyAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gTk87CisgICAgfQorfQorCistICh2b2lkKXNldEhhc1ZlcnRpY2FsU2Nyb2xsZXI6KEJP
T0wpZmxhZworeworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKK30KKworLSAoQk9PTCloYXNWZXJ0
aWNhbFNjcm9sbGVyCit7CisgICAgcmV0dXJuIE5POworfQorCistICh2b2lkKXNldEhhc0hvcml6
b250YWxTY3JvbGxlcjooQk9PTClmbGFnCit7CisgICAgVU5VU0VEX1BBUkFNKGZsYWcpOworfQor
CistIChCT09MKWhhc0hvcml6b250YWxTY3JvbGxlcgoreworICAgIHJldHVybiBOTzsKK30KKwor
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQpZGVsZWdhdGUKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsKK30KKworLSAoaWQpZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlOworfQor
CistIChDR1JlY3QpZG9jdW1lbnRWaXNpYmxlUmVjdCAKK3sKKyAgICByZXR1cm4gW19jb250ZW50
VmlldyBkb2N1bWVudFZpc2libGVSZWN0XTsKK30KKworLSAodm9pZClzZXREb2N1bWVudFZpZXc6
KFdBS1ZpZXcgKil2aWV3Cit7CisgICAgaWYgKHZpZXcgIT0gX2RvY3VtZW50VmlldykgeworICAg
ICAgICBbX2RvY3VtZW50VmlldyByZWxlYXNlXTsKKyAgICAgICAgX2RvY3VtZW50VmlldyA9IFt2
aWV3IHJldGFpbl07CisgICAgICAgIFtfY29udGVudFZpZXcgX3NldERvY3VtZW50Vmlldzp2aWV3
XTsKKyAgICB9Cit9CisKKy0gKGlkKWRvY3VtZW50VmlldyAKK3sKKyAgICByZXR1cm4gX2RvY3Vt
ZW50VmlldzsKK30KKworLSAoV0FLQ2xpcFZpZXcgKiljb250ZW50VmlldyAKK3sgCisgICAgcmV0
dXJuIF9jb250ZW50VmlldzsKK30KKworLSAodm9pZClzZXREcmF3c0JhY2tncm91bmQ6KEJPT0wp
ZmxhZworeworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKK30KKworLSAoQk9PTClkcmF3c0JhY2tn
cm91bmQgCit7CisgICAgcmV0dXJuIE5POyAKK30KKworLSAodm9pZClzZXRMaW5lU2Nyb2xsOihm
bG9hdCl2YWx1ZQoreworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cit9CisKKy0gKGZsb2F0KXZl
cnRpY2FsTGluZVNjcm9sbAoreworICAgIHJldHVybiAwOworfQorCistIChmbG9hdClob3Jpem9u
dGFsTGluZVNjcm9sbCAKK3sgCisgICAgcmV0dXJuIDA7Cit9CisKKy0gKHZvaWQpcmVmbGVjdFNj
cm9sbGVkQ2xpcFZpZXc6KFdBS0NsaXBWaWV3ICopYUNsaXBWaWV3Cit7CisgICAgVU5VU0VEX1BB
UkFNKGFDbGlwVmlldyk7Cit9CisKKy0gKHZvaWQpZHJhd1JlY3Q6KENHUmVjdClyZWN0Cit7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlY3QpOworfQorCisvLyBXZWJDb3JlRnJhbWVWaWV3IG1ldGhvZHMK
KworLSAodm9pZClzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9kZTooV2ViQ29yZTo6U2Nyb2xsYmFy
TW9kZSltb2RlCit7CisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworfQorCistICh2b2lkKXNldFZl
cnRpY2FsU2Nyb2xsaW5nTW9kZTooV2ViQ29yZTo6U2Nyb2xsYmFyTW9kZSltb2RlCit7CisgICAg
VU5VU0VEX1BBUkFNKG1vZGUpOworfQorCistICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFdlYkNv
cmU6OlNjcm9sbGJhck1vZGUpbW9kZQoreworICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKK30KKwor
LSAoV2ViQ29yZTo6U2Nyb2xsYmFyTW9kZSlob3Jpem9udGFsU2Nyb2xsaW5nTW9kZQoreworICAg
IHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJBdXRvOworfQorCistIChXZWJDb3JlOjpTY3JvbGxi
YXJNb2RlKXZlcnRpY2FsU2Nyb2xsaW5nTW9kZQoreworICAgIHJldHVybiBXZWJDb3JlOjpTY3Jv
bGxiYXJBdXRvOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFdlYkNvcmVGcmFt
ZVNjcm9sbFZpZXcgcHJvdG9jb2wKKworLSAodm9pZClzZXRTY3JvbGxpbmdNb2RlczooV2ViQ29y
ZTo6U2Nyb2xsYmFyTW9kZSloTW9kZSB2ZXJ0aWNhbDooV2ViQ29yZTo6U2Nyb2xsYmFyTW9kZSl2
TW9kZSBhbmRMb2NrOihCT09MKWxvY2sKK3sKKyAgICBVTlVTRURfUEFSQU0oaE1vZGUpOworICAg
IFVOVVNFRF9QQVJBTSh2TW9kZSk7CisgICAgVU5VU0VEX1BBUkFNKGxvY2spOworfQorCistICh2
b2lkKXNjcm9sbGluZ01vZGVzOihXZWJDb3JlOjpTY3JvbGxiYXJNb2RlKiloTW9kZSB2ZXJ0aWNh
bDooV2ViQ29yZTo6U2Nyb2xsYmFyTW9kZSopdk1vZGUKK3sKKyAgICBVTlVTRURfUEFSQU0oaE1v
ZGUpOworICAgIFVOVVNFRF9QQVJBTSh2TW9kZSk7Cit9CisKKy0gKHZvaWQpc2V0U2Nyb2xsQmFy
c1N1cHByZXNzZWQ6KEJPT0wpc3VwcHJlc3NlZCByZXBhaW50T25VbnN1cHByZXNzOihCT09MKXJl
cGFpbnQKK3sKKyAgICBVTlVTRURfUEFSQU0oc3VwcHJlc3NlZCk7CisgICAgVU5VU0VEX1BBUkFN
KHJlcGFpbnQpOworfQorCistICh2b2lkKXNldFNjcm9sbE9yaWdpbjooTlNQb2ludClzY3JvbGxP
cmlnaW4gdXBkYXRlUG9zaXRpb25BdEFsbDooQk9PTCl1cGRhdGVQb3NpdGlvbkF0QWxsIGltbWVk
aWF0ZWx5OihCT09MKXVwZGF0ZVBvc2l0aW9uSW1tZWRpYXRlbHkKK3sKKyAgICBVTlVTRURfUEFS
QU0odXBkYXRlUG9zaXRpb25BdEFsbCk7CisgICAgVU5VU0VEX1BBUkFNKHVwZGF0ZVBvc2l0aW9u
SW1tZWRpYXRlbHkpOworCisgICAgLy8gVGhlIGNyb3NzLXBsYXRmb3JtIFNjcm9sbFZpZXcgY2Fs
bCBhbHJlYWR5IGNoZWNrZWQgdG8gc2VlIGlmIHRoZSBvbGQvbmV3IHNjcm9sbCBvcmlnaW5zIHdl
cmUgdGhlIHNhbWUgb3Igbm90CisgICAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBmb3Ig
ZXF1aXZhbGVuY2UgaGVyZS4KKyAgICBfc2Nyb2xsT3JpZ2luID0gc2Nyb2xsT3JpZ2luOworCisg
ICAgW19kb2N1bWVudFZpZXcgc2V0Qm91bmRzT3JpZ2luOk5TTWFrZVBvaW50KC1zY3JvbGxPcmln
aW4ueCwgLXNjcm9sbE9yaWdpbi55KV07Cit9CisKKy0gKE5TUG9pbnQpc2Nyb2xsT3JpZ2luCit7
CisgICAgcmV0dXJuIF9zY3JvbGxPcmlnaW47Cit9CisKKyNwcmFnbWEgbWFyayAtCisKK3N0YXRp
YyBib29sIHNob3VsZFNjcm9sbChXQUtTY3JvbGxWaWV3ICpzY3JvbGxWaWV3LCBDR1BvaW50IHNj
cm9sbFBvaW50KQoreworICAgIC8vIFdlIGNhbiBzY3JvbGwgYXMgbG9uZyBhcyB3ZSBhcmUgbm90
IHRoZSBsYXN0IHNjcm9sbCB2aWV3LgorICAgIFdBS1ZpZXcgKnZpZXcgPSBzY3JvbGxWaWV3Owor
ICAgIHdoaWxlICgodmlldyA9IFt2aWV3IHN1cGVydmlld10pKQorICAgICAgICBpZiAoW3ZpZXcg
aXNLaW5kT2ZDbGFzczpbV0FLU2Nyb2xsVmlldyBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJu
IFlFUzsKKworICAgIGlkIGRlbGVnYXRlID0gW3Njcm9sbFZpZXcgZGVsZWdhdGVdOworICAgIFNF
TCBzZWxlY3RvciA9IEBzZWxlY3RvcihzY3JvbGxWaWV3OnNob3VsZFNjcm9sbFRvUG9pbnQ6KTsK
KyAgICByZXR1cm4gZGVsZWdhdGUgPT0gbmlsIHx8ICFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOnNlbGVjdG9yXSB8fCBbZGVsZWdhdGUgc2Nyb2xsVmlldzpzY3JvbGxWaWV3IHNob3VsZFNj
cm9sbFRvUG9pbnQ6c2Nyb2xsUG9pbnRdOworfQorCitzdGF0aWMgZmxvYXQgdmlld0RvY3VtZW50
U2Nyb2xsYWJsZUxlbmd0aChXQUtTY3JvbGxWaWV3ICpzY3JvbGxWaWV3LCBib29sIGhvcml6b250
YWxPcmllbnRhdGlvbikKK3sKKyAgICBmbG9hdCBzY3JvbGxhYmxlQW1vdW50ID0gMCwgZG9jdW1l
bnRMZW5ndGggPSAwLCBjbGlwTGVuZ3RoID0gMDsKKyAgICBXQUtWaWV3ICpkb2N1bWVudFZpZXcg
PSBbc2Nyb2xsVmlldyBkb2N1bWVudFZpZXddOworICAgIEFTU0VSVChkb2N1bWVudFZpZXcpOwor
CisgICAgQ0dSZWN0IGZyYW1lID0gW2RvY3VtZW50VmlldyBmcmFtZV07CisgICAgaWYgKGhvcml6
b250YWxPcmllbnRhdGlvbikKKyAgICAgICAgZG9jdW1lbnRMZW5ndGggPSBmcmFtZS5zaXplLndp
ZHRoOworICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnRMZW5ndGggPSBmcmFtZS5zaXplLmhlaWdo
dDsKKworICAgIFdBS0NsaXBWaWV3ICpjbGlwVmlldyA9IFtzY3JvbGxWaWV3IGNvbnRlbnRWaWV3
XTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNsaXBWaWV3LCAiVGhlIFdBS0NsaXBWaWV3IGlz
IHN1cHBvc2VkIHRvIGJlIGNyZWF0ZWQgYnkgdGhlIFdBS1Njcm9sbFZpZXcgYXQgaW5pdGlhbGl6
YXRpb24uIik7CisgICAgaWYgKGNsaXBWaWV3KSB7CisgICAgICAgIENHUmVjdCBmcmFtZSA9IFtj
bGlwVmlldyBmcmFtZV07CisgICAgICAgIGlmIChob3Jpem9udGFsT3JpZW50YXRpb24pCisgICAg
ICAgICAgICBjbGlwTGVuZ3RoID0gZnJhbWUuc2l6ZS53aWR0aDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2xpcExlbmd0aCA9IGZyYW1lLnNpemUuaGVpZ2h0OworICAgIH0KKworICAgIHNj
cm9sbGFibGVBbW91bnQgPSBkb2N1bWVudExlbmd0aCAtIGNsaXBMZW5ndGg7CisgICAgaWYgKHNj
cm9sbGFibGVBbW91bnQgPD0gMCkKKyAgICAgICAgc2Nyb2xsYWJsZUFtb3VudCA9IDA7CisKKyAg
ICByZXR1cm4gc2Nyb2xsYWJsZUFtb3VudDsKK30KKworc3RhdGljIGZsb2F0IHVwZGF0ZVNjcm9s
bGVyV2l0aERvY3VtZW50UG9zaXRpb24oV0FLU2Nyb2xsVmlldyAqc2Nyb2xsVmlldywgYm9vbCBo
b3Jpem9udGFsT3JpZW50YXRpb24sIGZsb2F0IGRvY3VtZW50UG9zaXRpb24pCit7CisgICAgZmxv
YXQgZG9jdW1lbnRPcmlnaW5Qb3NpdGlvbiA9IDAuOworICAgIGlmIChkb2N1bWVudFBvc2l0aW9u
ID4gMCkgeworICAgICAgICBmbG9hdCBzY3JvbGxhYmxlTGVuZ3RoID0gdmlld0RvY3VtZW50U2Ny
b2xsYWJsZUxlbmd0aChzY3JvbGxWaWV3LCBob3Jpem9udGFsT3JpZW50YXRpb24pOworICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGZsb2F0IHNjcm9sbGVk
TGVuZ3RoID0gTUlOKGRvY3VtZW50UG9zaXRpb24sIHNjcm9sbGFibGVMZW5ndGgpOworICAgICAg
ICAgICAgZG9jdW1lbnRPcmlnaW5Qb3NpdGlvbiA9IC1zY3JvbGxlZExlbmd0aDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBkb2N1bWVudE9yaWdpblBvc2l0aW9uOworfQorCitzdGF0
aWMgYm9vbCBzZXREb2N1bWVudFZpZXdPcmlnaW4oV0FLU2Nyb2xsVmlldyAqc2Nyb2xsVmlldywg
V0FLVmlldyAqZG9jdW1lbnRWaWV3LCBDR1BvaW50IG5ld0RvY3VtZW50T3JpZ2luKQoreworICAg
IEFTU0VSVChkb2N1bWVudFZpZXcpOworICAgIEFTU0VSVChkb2N1bWVudFZpZXcgPT0gW3Njcm9s
bFZpZXcgZG9jdW1lbnRWaWV3XSk7CisKKyAgICBDR1BvaW50IG9sZERvY3VtZW50T3JpZ2luID0g
W2RvY3VtZW50VmlldyBmcmFtZV0ub3JpZ2luOworICAgIGlmICghQ0dQb2ludEVxdWFsVG9Qb2lu
dChvbGREb2N1bWVudE9yaWdpbiwgbmV3RG9jdW1lbnRPcmlnaW4pKSB7CisgICAgICAgIFtkb2N1
bWVudFZpZXcgc2V0RnJhbWVPcmlnaW46bmV3RG9jdW1lbnRPcmlnaW5dOworICAgICAgICBbc2Ny
b2xsVmlldyBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKKyAgICAgICAgV0tWaWV3UmVmIGRvY3VtZW50
Vmlld1JlZiA9IFtkb2N1bWVudFZpZXcgX3ZpZXdSZWZdOworICAgICAgICBpZiAoZG9jdW1lbnRW
aWV3UmVmLT5jb250ZXh0ICYmIGRvY3VtZW50Vmlld1JlZi0+Y29udGV4dC0+bm90aWZpY2F0aW9u
Q2FsbGJhY2spCisgICAgICAgICAgICBkb2N1bWVudFZpZXdSZWYtPmNvbnRleHQtPm5vdGlmaWNh
dGlvbkNhbGxiYWNrKGRvY3VtZW50Vmlld1JlZiwgV0tWaWV3Tm90aWZpY2F0aW9uVmlld0RpZFNj
cm9sbCwgZG9jdW1lbnRWaWV3UmVmLT5jb250ZXh0LT5ub3RpZmljYXRpb25Vc2VySW5mbyk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworc3Rh
dGljIEJPT0wgc2Nyb2xsVmlld1RvUG9pbnQoV0FLU2Nyb2xsVmlldyAqc2Nyb2xsVmlldywgQ0dQ
b2ludCBwb2ludCkKK3sKKyAgICBXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbc2Nyb2xsVmlldyBk
b2N1bWVudFZpZXddOworICAgIGlmICghZG9jdW1lbnRWaWV3KQorICAgICAgICByZXR1cm4gTk87
CisKKyAgICBpZiAoIXNob3VsZFNjcm9sbChzY3JvbGxWaWV3LCBwb2ludCkpCisgICAgICAgIHJl
dHVybiBOTzsKKworICAgIENHUG9pbnQgbmV3RG9jdW1lbnRPcmlnaW47CisgICAgbmV3RG9jdW1l
bnRPcmlnaW4ueCA9IHVwZGF0ZVNjcm9sbGVyV2l0aERvY3VtZW50UG9zaXRpb24oc2Nyb2xsVmll
dywgLyogaG9yaXpvbnRhbD8gPSAqLyB0cnVlLCBwb2ludC54KTsKKyAgICBuZXdEb2N1bWVudE9y
aWdpbi55ID0gdXBkYXRlU2Nyb2xsZXJXaXRoRG9jdW1lbnRQb3NpdGlvbihzY3JvbGxWaWV3LCAv
KiBob3Jpem9udGFsPyA9ICovIGZhbHNlLCBwb2ludC55KTsKKyAgICByZXR1cm4gc2V0RG9jdW1l
bnRWaWV3T3JpZ2luKHNjcm9sbFZpZXcsIGRvY3VtZW50VmlldywgbmV3RG9jdW1lbnRPcmlnaW4p
OworfQorCistICh2b2lkKXNjcm9sbFBvaW50OihOU1BvaW50KXBvaW50Cit7CisgICAgc2Nyb2xs
Vmlld1RvUG9pbnQoc2VsZiwgcG9pbnQpOworfQorCistICh2b2lkKXNjcm9sbFdoZWVsOihXZWJF
dmVudCAqKWFuRXZlbnQKK3sKKyAgICBpZiAoIV9kb2N1bWVudFZpZXcpCisgICAgICAgIHJldHVy
biBbW3NlbGYgbmV4dFJlc3BvbmRlcl0gc2Nyb2xsV2hlZWw6YW5FdmVudF07CisgICAgCisgICAg
Q0dQb2ludCBvcmlnaW4gPSBbX2RvY3VtZW50VmlldyBmcmFtZV0ub3JpZ2luOworICAgIG9yaWdp
bi54ID0gcm91bmRmKC1vcmlnaW4ueCAtIGFuRXZlbnQuZGVsdGFYKTsKKyAgICBvcmlnaW4ueSA9
IHJvdW5kZigtb3JpZ2luLnkgLSBhbkV2ZW50LmRlbHRhWSk7CisKKyAgICBpZiAoIXNjcm9sbFZp
ZXdUb1BvaW50KHNlbGYsIG9yaWdpbikpCisgICAgICAgIHJldHVybiBbW3NlbGYgbmV4dFJlc3Bv
bmRlcl0gc2Nyb2xsV2hlZWw6YW5FdmVudF07Cit9CisKKy0gKENHUmVjdClhY3R1YWxEb2N1bWVu
dFZpc2libGVSZWN0Cit7CisgICAgLy8gT25seSBjYWxsZWQgYnkgV2ViQ29yZTo6U2Nyb2xsVmll
dzo6YWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0CisgICAgV0FLVmlldyogdmlldyA9IHNlbGY7Cisg
ICAgd2hpbGUgKCh2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XSkpIHsKKyAgICAgICAgaWYgKFt2aWV3
IGlzS2luZE9mQ2xhc3M6W1dBS1Njcm9sbFZpZXcgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVy
biBbc2VsZiBkb2N1bWVudFZpc2libGVSZWN0XTsKKyAgICB9CisKKyAgICBXQUtXaW5kb3cqIHdp
bmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIFdBS1dpbmRv
dywgd2UgbXVzdCBiZSBpbiBhIG9mZnNjcmVlbiBXZWJWaWV3LgorICAgIGlmICghd2luZG93KQor
ICAgICAgICByZXR1cm4gW3NlbGYgZG9jdW1lbnRWaXNpYmxlUmVjdF07CisKKyAgICBDR1JlY3Qg
d2luZG93VmlzaWJsZVJlY3QgPSBDR1JlY3RJbnRlZ3JhbChbd2luZG93IGV4cG9zZWRTY3JvbGxW
aWV3UmVjdF0pOworICAgIHJldHVybiBbX2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDp3aW5kb3dW
aXNpYmxlUmVjdCBmcm9tVmlldzpuaWxdOworfQorCistIChDR1JlY3QpZG9jdW1lbnRWaXNpYmxl
RXh0ZW50Cit7CisgICAgLy8gT25seSBjYWxsZWQgYnkgV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlz
aWJsZUV4dGVudENvbnRlbnRSZWN0CisgICAgV0FLVmlldyogdmlldyA9IHNlbGY7CisgICAgd2hp
bGUgKCh2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XSkpIHsKKyAgICAgICAgaWYgKFt2aWV3IGlzS2lu
ZE9mQ2xhc3M6W1dBS1Njcm9sbFZpZXcgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiBbc2Vs
ZiBkb2N1bWVudFZpc2libGVSZWN0XTsKKyAgICB9CisKKyAgICBXQUtXaW5kb3cqIHdpbmRvdyA9
IFtzZWxmIHdpbmRvd107CisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIFdBS1dpbmRvdywgd2Ug
bXVzdCBiZSBpbiBhIG9mZnNjcmVlbiBXZWJWaWV3LgorICAgIGlmICghd2luZG93KQorICAgICAg
ICByZXR1cm4gW3NlbGYgZG9jdW1lbnRWaXNpYmxlUmVjdF07CisKKyAgICBDR1JlY3Qgd2luZG93
VmlzaWJsZVJlY3QgPSBDR1JlY3RJbnRlZ3JhbChbd2luZG93IGV4dGVuZGVkVmlzaWJsZVJlY3Rd
KTsKKyAgICByZXR1cm4gW19kb2N1bWVudFZpZXcgY29udmVydFJlY3Q6d2luZG93VmlzaWJsZVJl
Y3QgZnJvbVZpZXc6bmlsXTsKK30KKworLSAodm9pZClzZXRBY3R1YWxTY3JvbGxQb3NpdGlvbjoo
Q0dQb2ludClwb2ludAoreworICAgIFdBS1ZpZXcqIHZpZXcgPSBzZWxmOworICAgIHdoaWxlICgo
dmlldyA9IFt2aWV3IHN1cGVydmlld10pKSB7CisgICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNs
YXNzOltXQUtTY3JvbGxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgZm9y
IGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gaWYgd2hhdCBpcyBiZWluZyBzY3JvbGxlZCBpcyBh
IHN1YmZyYW1lCisgICAgICAgICAgICBbc2VsZiBzY3JvbGxQb2ludDpwb2ludF07CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIV9kb2N1bWVudFZpZXcp
CisgICAgICAgIHJldHVybjsKKyAgICBDR1BvaW50IHdpbmRvd1BvaW50ID0gW19kb2N1bWVudFZp
ZXcgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdOworICAgIFtzZWxmIHNjcm9sbFBvaW50
OndpbmRvd1BvaW50XTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgoreworICAgIE5T
TXV0YWJsZVN0cmluZyAqZGVzY3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCI8JUA6IDsgIiwgW3N1cGVyIGRlc2NyaXB0aW9uXV07CisKKyAgICBbZGVzY3JpcHRp
b24gYXBwZW5kRm9ybWF0OkAiZG9jdW1lbnRWaWV3OiBXQUs6ICVwOyAiLCBfZG9jdW1lbnRWaWV3
XTsKKworICAgIENHUmVjdCBmcmFtZSA9IFtzZWxmIGRvY3VtZW50VmlzaWJsZVJlY3RdOworICAg
IFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCJkb2N1bWVudFZpc2libGUgPSAoJWcgJWc7ICVn
ICVnKTsgIiwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRo
LCBmcmFtZS5zaXplLmhlaWdodF07CisKKyAgICBmcmFtZSA9IFtzZWxmIGFjdHVhbERvY3VtZW50
VmlzaWJsZVJlY3RdOworICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCJhY3R1YWxEb2N1
bWVudFZpc2libGUgPSAoJWcgJWc7ICVnICVnKT4iLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3Jp
Z2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0XTsKKworICAgIHJldHVy
biBkZXNjcmlwdGlvbjsKK30KKworLSAoQk9PTClpblByb2dyYW1tYXRpY1Njcm9sbAoreworICAg
IHJldHVybiBOTzsKK30KKworLSAodm9pZClfYWRqdXN0U2Nyb2xsZXJzCit7CisgICAgLy8gU2V0
IHRoZSBjbGlwIHZpZXcncyBzaXplIHRvIHRoZSBzY3JvbGwgdmlldydzIHNpemUgc28gdGhlIGRv
Y3VtZW50IHZpZXcgY2FuIHVzZSB0aGUgY29ycmVjdCBjbGlwIHZpZXcgc2l6ZSB3aGVuIGxheWlu
ZyBvdXQuCisgICAgW19jb250ZW50VmlldyBzZXRGcmFtZVNpemU6W3NlbGYgYm91bmRzXS5zaXpl
XTsKKworICAgIGlmIChfZG9jdW1lbnRWaWV3KSB7CisgICAgICAgIENHUG9pbnQgbmV3RG9jdW1l
bnRPcmlnaW4gPSBbX2RvY3VtZW50VmlldyBmcmFtZV0ub3JpZ2luOworICAgICAgICBzZXREb2N1
bWVudFZpZXdPcmlnaW4oc2VsZiwgX2RvY3VtZW50VmlldywgbmV3RG9jdW1lbnRPcmlnaW4pOwor
ICAgIH0KK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS1ZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzhiNTcxMGEzNzVlYWFm
Y2M0MjVkN2UwMmRiMzEyNWZhY2JlMDgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL3dhay9XQUtWaWV3LmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdBS1ZpZXdfaAorI2RlZmluZSBX
QUtWaWV3X2gKKworI2lmIFRBUkdFVF9PU19JUEhPTkUKKworI2ltcG9ydCAiV0FLUmVzcG9uZGVy
LmgiCisjaW1wb3J0ICJXS1ZpZXcuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorCisjaWZuZGVmIE5TUmVj
dAorI2RlZmluZSBOU1JlY3QgQ0dSZWN0CisjZW5kaWYKKyNkZWZpbmUgTlNQb2ludCBDR1BvaW50
CisjZGVmaW5lIE5TU2l6ZSBDR1NpemUKKworZXh0ZXJuIE5TU3RyaW5nICpXQUtWaWV3RnJhbWVT
aXplRGlkQ2hhbmdlTm90aWZpY2F0aW9uOworZXh0ZXJuIE5TU3RyaW5nICpXQUtWaWV3RGlkU2Ny
b2xsTm90aWZpY2F0aW9uOworCitAY2xhc3MgV0FLV2luZG93OworCitAaW50ZXJmYWNlIFdBS1Zp
ZXcgOiBXQUtSZXNwb25kZXIKK3sKKyAgICBXS1ZpZXdDb250ZXh0IHZpZXdDb250ZXh0OworICAg
IFdLVmlld1JlZiB2aWV3UmVmOworICAgIAorICAgIE5TTXV0YWJsZVNldCAqc3Vidmlld1JlZmVy
ZW5jZXM7ICAgIC8vIFRoaXMgYXJyYXkgaXMgb25seSB1c2VkIHRvIGtlZXAgV0FLVmlld3MgYWxp
dmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFjdHVh
bCBzdWJ2aWV3cyBhcmUgbWFpbnRhaW5lZCBieSB0aGUgV0tWaWV3LgorCisgICAgQk9PTCBfaXNI
aWRkZW47CisgICAgQk9PTCBfZHJhd3NPd25EZXNjZW5kYW50czsKK30KKworKyAoV0FLVmlldyAq
KWZvY3VzVmlldzsKKworLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KXJlY3Q7CisKKy0gKFdB
S1dpbmRvdyAqKXdpbmRvdzsKKworLSAoTlNSZWN0KWJvdW5kczsKKy0gKE5TUmVjdClmcmFtZTsK
KworLSAodm9pZClzZXRGcmFtZTooTlNSZWN0KWZyYW1lUmVjdDsKKy0gKHZvaWQpc2V0RnJhbWVP
cmlnaW46KE5TUG9pbnQpbmV3T3JpZ2luOworLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlu
ZXdTaXplOworLSAodm9pZClzZXRCb3VuZHNPcmlnaW46KE5TUG9pbnQpbmV3T3JpZ2luOworLSAo
dm9pZClzZXRCb3VuZHNTaXplOihOU1NpemUpc2l6ZTsKKy0gKHZvaWQpZnJhbWVTaXplQ2hhbmdl
ZDsKKworLSAoTlNBcnJheSAqKXN1YnZpZXdzOworLSAoV0FLVmlldyAqKXN1cGVydmlldzsKKy0g
KHZvaWQpYWRkU3VidmlldzooV0FLVmlldyAqKXN1YnZpZXc7CistICh2b2lkKXdpbGxSZW1vdmVT
dWJ2aWV3OihXQUtWaWV3ICopc3VidmlldzsKKy0gKHZvaWQpcmVtb3ZlRnJvbVN1cGVydmlldzsK
Ky0gKEJPT0wpaXNEZXNjZW5kYW50T2Y6KFdBS1ZpZXcgKilhVmlldzsKKy0gKEJPT0wpaXNIaWRk
ZW5Pckhhc0hpZGRlbkFuY2VzdG9yOworLSAoV0FLVmlldyAqKWxhc3RTY3JvbGxhYmxlQW5jZXN0
b3I7CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdzsKKworLSAodm9pZClsb2NrRm9jdXM7
CistICh2b2lkKXVubG9ja0ZvY3VzOworCistICh2b2lkKXNldE5lZWRzRGlzcGxheTooQk9PTClm
bGFnOworLSAodm9pZClzZXROZWVkc0Rpc3BsYXlJblJlY3Q6KENHUmVjdClpbnZhbGlkUmVjdDsK
Ky0gKEJPT0wpbmVlZHNEaXNwbGF5OworLSAodm9pZClkaXNwbGF5OworLSAodm9pZClkaXNwbGF5
SWZOZWVkZWQ7CistICh2b2lkKWRpc3BsYXlSZWN0OihOU1JlY3QpcmVjdDsKKy0gKHZvaWQpZGlz
cGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0OworLSAodm9pZClkaXNwbGF5UmVj
dElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KXJlY3QgaW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dDsKKy0gKHZvaWQpZHJhd1JlY3Q6KENHUmVjdClyZWN0OworLSAodm9pZCl2aWV3V2lsbERy
YXc7CisKKy0gKFdBS1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50OworLSAoTlNQb2ludClj
b252ZXJ0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgZnJvbVZpZXc6KFdBS1ZpZXcgKilhVmlldzsKKy0g
KE5TUG9pbnQpY29udmVydFBvaW50OihOU1BvaW50KXBvaW50IHRvVmlldzooV0FLVmlldyAqKWFW
aWV3OworLSAoTlNTaXplKWNvbnZlcnRTaXplOihOU1NpemUpc2l6ZSB0b1ZpZXc6KFdBS1ZpZXcg
KilhVmlldzsKKy0gKE5TUmVjdCljb252ZXJ0UmVjdDooTlNSZWN0KXJlY3QgZnJvbVZpZXc6KFdB
S1ZpZXcgKilhVmlldzsKKy0gKE5TUmVjdCljb252ZXJ0UmVjdDooTlNSZWN0KXJlY3QgdG9WaWV3
OihXQUtWaWV3ICopYVZpZXc7CisKKy0gKEJPT0wpbmVlZHNQYW5lbFRvQmVjb21lS2V5OworCist
IChCT09MKXNjcm9sbFJlY3RUb1Zpc2libGU6KE5TUmVjdClhUmVjdDsKKy0gKHZvaWQpc2Nyb2xs
UG9pbnQ6KE5TUG9pbnQpYVBvaW50OworLSAoTlNSZWN0KXZpc2libGVSZWN0OworCistICh2b2lk
KXNldEhpZGRlbjooQk9PTClmbGFnOworCistICh2b2lkKXNldE5leHRLZXlWaWV3OihXQUtWaWV3
ICopYVZpZXc7CistIChXQUtWaWV3ICopbmV4dEtleVZpZXc7CistIChXQUtWaWV3ICopbmV4dFZh
bGlkS2V5VmlldzsKKy0gKFdBS1ZpZXcgKilwcmV2aW91c0tleVZpZXc7CistIChXQUtWaWV3ICop
cHJldmlvdXNWYWxpZEtleVZpZXc7CisKKy0gKHZvaWQpaW52YWxpZGF0ZUdTdGF0ZTsKKy0gKHZv
aWQpcmVsZWFzZUdTdGF0ZTsKKworLSAodm9pZClzZXRBdXRvcmVzaXppbmdNYXNrOih1bnNpZ25l
ZCBpbnQpbWFzazsKKy0gKHVuc2lnbmVkIGludClhdXRvcmVzaXppbmdNYXNrOworLSAoQk9PTClp
bkxpdmVSZXNpemU7CisKKy0gKEJPT0wpbW91c2U6KE5TUG9pbnQpYVBvaW50IGluUmVjdDooTlNS
ZWN0KWFSZWN0OworCistICh2b2lkKXNldE5lZWRzTGF5b3V0OihCT09MKWZsYWc7CistICh2b2lk
KWxheW91dDsKKy0gKHZvaWQpbGF5b3V0SWZOZWVkZWQ7CisKKy0gKHZvaWQpc2V0U2NhbGU6KGZs
b2F0KXNjYWxlOworLSAoZmxvYXQpc2NhbGU7CisKKy0gKHZvaWQpX3NldERyYXdzT3duRGVzY2Vu
ZGFudHM6KEJPT0wpZHJhdzsKKworLSAodm9pZClfYXBwZW5kRGVzY3JpcHRpb25Ub1N0cmluZzoo
TlNNdXRhYmxlU3RyaW5nICopaW5mbyBhdExldmVsOihpbnQpbGV2ZWw7CisKKysgKHZvaWQpX3Nl
dEludGVycG9sYXRpb25RdWFsaXR5OihpbnQpcXVhbGl0eTsKKworQGVuZAorCisjZW5kaWYgLy8g
VEFSR0VUX09TX0lQSE9ORQorCisjZW5kaWYgLy8gV0FLVmlld19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS1ZpZXcubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3Mvd2FrL1dBS1ZpZXcubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjUzNjg3Yzk5YTU1MDExZDQ2
ZDkzNjM3NGY4MzU5MDA0NDMwMjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy93YWsvV0FLVmlldy5tbQpAQCAtMCwwICsxLDc4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
V0FLVmlld1ByaXZhdGUuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW1wb3J0ICJXQUtDbGlwVmlldy5oIgorI2ltcG9ydCAiV0FLU2Nyb2xs
Vmlldy5oIgorI2ltcG9ydCAiV0FLVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldBS1dpbmRvdy5o
IgorI2ltcG9ydCAiV0tHcmFwaGljcy5oIgorI2ltcG9ydCAiV0tVdGlsaXRpZXMuaCIKKyNpbXBv
cnQgIldLVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRNZXNzYWdlLmgiCisj
aW1wb3J0ICJXZWJFdmVudC5oIgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKworTlNTdHJp
bmcgKldBS1ZpZXdGcmFtZVNpemVEaWRDaGFuZ2VOb3RpZmljYXRpb24gPSAgIEAiV0FLVmlld0Zy
YW1lU2l6ZURpZENoYW5nZU5vdGlmaWNhdGlvbiI7CitOU1N0cmluZyAqV0FLVmlld0RpZFNjcm9s
bE5vdGlmaWNhdGlvbiA9ICAgICAgICAgICAgQCJXQUtWaWV3RGlkU2Nyb2xsTm90aWZpY2F0aW9u
IjsKKworc3RhdGljIFdBS1ZpZXcgKmdsb2JhbEZvY3VzVmlldyA9IG5pbDsKK3N0YXRpYyBDR0lu
dGVycG9sYXRpb25RdWFsaXR5IHNJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKworc3RhdGljIHZvaWQg
c2V0R2xvYmFsRm9jdXNWaWV3KFdBS1ZpZXcgKnZpZXcpCit7CisgICAgaWYgKHZpZXcgPT0gZ2xv
YmFsRm9jdXNWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBbdmlldyByZXRhaW5dOworICAg
IFtnbG9iYWxGb2N1c1ZpZXcgcmVsZWFzZV07CisgICAgZ2xvYmFsRm9jdXNWaWV3ID0gdmlldzsK
K30KKworc3RhdGljIFdBS1Njcm9sbFZpZXcgKmVuY2xvc2luZ1Njcm9sbFZpZXcoV0FLVmlldyAq
dmlldykKK3sKKyAgICB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKKyAgICB3aGlsZSAodmlldyAm
JiAhW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV0FLU2Nyb2xsVmlldyBjbGFzc11dKQorICAgICAgICB2
aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKKyAgICByZXR1cm4gKFdBS1Njcm9sbFZpZXcgKil2aWV3
OworfQorCitAaW50ZXJmYWNlIFdBS1Njcm9sbFZpZXcoKQorLSAodm9pZClfYWRqdXN0U2Nyb2xs
ZXJzOworQGVuZAorCitAaW50ZXJmYWNlIFdBS1ZpZXcgKFdBS0ludGVybmFsKQorLSAoaWQpX2lu
aXRXaXRoVmlld1JlZjooV0tWaWV3UmVmKXZpZXdSZWY7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXQUtWaWV3CisKK3N0YXRpYyBOU0ludm9jYXRpb24qIGludm9jYXRpb25Gb3JQb3N0Tm90aWZp
Y2F0aW9uKE5TU3RyaW5nICpuYW1lLCBpZCBvYmplY3QsIGlkIHVzZXJJbmZvKQoreworICAgIE5T
Tm90aWZpY2F0aW9uQ2VudGVyICp0YXJnZXQgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl07CisgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gV2ViVGhyZWFkTWFrZU5T
SW52b2NhdGlvbih0YXJnZXQsIEBzZWxlY3Rvcihwb3N0Tm90aWZpY2F0aW9uTmFtZTpvYmplY3Q6
dXNlckluZm86KSk7CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6Jm5hbWUgYXRJbmRleDoy
XTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomb2JqZWN0IGF0SW5kZXg6M107CisgICAg
W2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnVzZXJJbmZvIGF0SW5kZXg6NF07CisgICAgcmV0dXJu
IGludm9jYXRpb247Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmaWNhdGlvbkNhbGxiYWNrIChXS1Zp
ZXdSZWYgdiwgV0tWaWV3Tm90aWZpY2F0aW9uVHlwZSB0eXBlLCB2b2lkICp1c2VySW5mbykKK3sK
KyAgICBVTlVTRURfUEFSQU0odik7CisgICAgV0FLVmlldyAqdmlldyA9IChXQUtWaWV3ICopdXNl
ckluZm87CisgICAgc3dpdGNoICh0eXBlKXsKKyAgICAgICAgY2FzZSBXS1ZpZXdOb3RpZmljYXRp
b25WaWV3RGlkTW92ZVRvV2luZG93OiB7CisgICAgICAgICAgICBbdmlldyB2aWV3RGlkTW92ZVRv
V2luZG93XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV0tW
aWV3Tm90aWZpY2F0aW9uVmlld0ZyYW1lU2l6ZUNoYW5nZWQ6IHsKKyAgICAgICAgICAgIFt2aWV3
IGZyYW1lU2l6ZUNoYW5nZWRdOworICAgICAgICAgICAgaWYgKFdBS1Njcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSBlbmNsb3NpbmdTY3JvbGxWaWV3KHZpZXcpKQorICAgICAgICAgICAgICAgIFtzY3Jv
bGxWaWV3IF9hZGp1c3RTY3JvbGxlcnNdOworCisgICAgICAgICAgICAvLyBQb3N0aW5nIGEgbm90
aWZpY2F0aW9uIHRvIHRoZSBtYWluIHRocmVhZCBjYW4gY2F1c2UgdGhlIFdlYlRocmVhZExvY2sg
dG8gYmUKKyAgICAgICAgICAgIC8vIHJlbGlucXVpc2hlZCwgd2hpY2ggZ2l2ZXMgdGhlIG1haW4g
dGhyZWFkIGEgY2hhbmdlIHRvIHJ1biAoYW5kIHBvc3NpYmxlIHRyeQorICAgICAgICAgICAgLy8g
dG8gcGFpbnQpLiBXZSBkb24ndCB3YW50IHRoaXMgdG8gaGFwcGVuIGlmIHdlJ3ZlIHVwZGF0aW5n
IHZpZXcgc2l6ZXMgaW4gdGhlIG1pZGRsZQorICAgICAgICAgICAgLy8gb2YgbGF5b3V0LCBzbyB1
c2UgYW4gYXN5bmMgbm90aWZpY2F0aW9uLiA8cmRhcjovL3Byb2JsZW0vNjc0NTk3ND4KKyAgICAg
ICAgICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IGludm9jYXRpb25Gb3JQb3N0Tm90aWZp
Y2F0aW9uKFdBS1ZpZXdGcmFtZVNpemVEaWRDaGFuZ2VOb3RpZmljYXRpb24sIHZpZXcsIG5pbCk7
CisgICAgICAgICAgICBXZWJUaHJlYWRDYWxsRGVsZWdhdGVBc3luYyhpbnZvY2F0aW9uKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV0tWaWV3Tm90aWZpY2F0
aW9uVmlld0RpZFNjcm9sbDogeworICAgICAgICAgICAgV2ViVGhyZWFkUnVuT25NYWluVGhyZWFk
KF4geworICAgICAgICAgICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOldBS1ZpZXdEaWRTY3JvbGxOb3RpZmljYXRpb24gb2Jq
ZWN0OnZpZXcgdXNlckluZm86bmlsXTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZvaWQpaGFuZGxlRXZlbnQ6KFdl
YkV2ZW50ICopZXZlbnQKK3sKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIFdBS1ZpZXcgKnZpZXcg
PSBzZWxmOworICAgIHdoaWxlICh2aWV3KSB7CisgICAgICAgIGlmIChbdmlldyBfc2VsZkhhbmRs
ZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB2aWV3ID0gW3ZpZXcg
c3VwZXJ2aWV3XTsKKyAgICB9Cit9CisKKy0gKEJPT0wpX3NlbGZIYW5kbGVFdmVudDooV2ViRXZl
bnQgKilldmVudAoreworICAgIFdlYkV2ZW50VHlwZSB0eXBlID0gZXZlbnQudHlwZTsKKyAgICAK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlRG93bjogewor
ICAgICAgICAgICAgW3NlbGYgbW91c2VEb3duOmV2ZW50XTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViRXZlbnRNb3VzZVVwOiB7CisgICAgICAgICAgICBb
c2VsZiBtb3VzZVVwOmV2ZW50XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgV2ViRXZlbnRNb3VzZU1vdmVkOiB7CisgICAgICAgICAgICBbc2VsZiBtb3VzZU1v
dmVkOmV2ZW50XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
V2ViRXZlbnRLZXlEb3duOiB7CisgICAgICAgICAgICBbc2VsZiBrZXlEb3duOmV2ZW50XTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViRXZlbnRLZXlVcDog
eworICAgICAgICAgICAgW3NlbGYga2V5VXA6ZXZlbnRdOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJFdmVudFNjcm9sbFdoZWVsOiB7CisgICAgICAgICAg
ICBbc2VsZiBzY3JvbGxXaGVlbDpldmVudF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJl
Z2luOgorICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hDaGFuZ2U6CisgICAgICAgIGNhc2UgV2Vi
RXZlbnRUb3VjaEVuZDoKKyAgICAgICAgY2FzZSBXZWJFdmVudFRvdWNoQ2FuY2VsOiB7CisgICAg
ICAgICAgICBbc2VsZiB0b3VjaDpldmVudF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gWUVTOworfQorCist
IChOU1Jlc3BvbmRlciAqKW5leHRSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gW3NlbGYgc3VwZXJ2
aWV3XTsKK30KKworc3RhdGljIGJvb2wgcmVzcG9uZGVyQ2FsbGJhY2soV0tWaWV3UmVmLCBXS1Zp
ZXdSZXNwb25kZXJDYWxsYmFja1R5cGUgdHlwZSwgdm9pZCAqdXNlckluZm8pCit7CisgICAgcmV0
dXJuIFsoV0FLVmlldyAqKXVzZXJJbmZvIF9oYW5kbGVSZXNwb25kZXJDYWxsOnR5cGVdOworfQor
CistIChCT09MKV9oYW5kbGVSZXNwb25kZXJDYWxsOihXS1ZpZXdSZXNwb25kZXJDYWxsYmFja1R5
cGUpdHlwZQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFdLVmlld1Jlc3Bv
bmRlckFjY2VwdHNGaXJzdFJlc3BvbmRlcjoKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBhY2Nl
cHRzRmlyc3RSZXNwb25kZXJdOworICAgICAgICBjYXNlIFdLVmlld1Jlc3BvbmRlckJlY29tZUZp
cnN0UmVzcG9uZGVyOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGJlY29tZUZpcnN0UmVzcG9u
ZGVyXTsKKyAgICAgICAgY2FzZSBXS1ZpZXdSZXNwb25kZXJSZXNpZ25GaXJzdFJlc3BvbmRlcjoK
KyAgICAgICAgICAgIHJldHVybiBbc2VsZiByZXNpZ25GaXJzdFJlc3BvbmRlcl07CisgICAgfQor
ICAgIHJldHVybiBOTzsKK30KKworc3RhdGljIHZvaWQgd2lsbFJlbW92ZVN1YnZpZXdDYWxsYmFj
ayhXS1ZpZXdSZWYgdmlldywgV0tWaWV3UmVmIHN1YnZpZXcpCit7CisgICAgW1dBS1ZpZXdGb3JX
S1ZpZXdSZWYodmlldykgd2lsbFJlbW92ZVN1YnZpZXc6V0FLVmlld0ZvcldLVmlld1JlZihzdWJ2
aWV3KV07Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVHU3RhdGVDYWxsYmFjayhXS1ZpZXdS
ZWYgdmlldykKK3sKKyAgICBbV0FLVmlld0ZvcldLVmlld1JlZih2aWV3KSBpbnZhbGlkYXRlR1N0
YXRlXTsKK30KKworKyAoV0FLVmlldyAqKV93cmFwcGVyRm9yVmlld1JlZjooV0tWaWV3UmVmKV92
aWV3UmVmCit7CisgICAgQVNTRVJUKF92aWV3UmVmKTsKKyAgICBpZiAoX3ZpZXdSZWYtPmlzYS5j
bGFzc0luZm8gPT0gJldLVmlld0NsYXNzSW5mbykKKyAgICAgICAgcmV0dXJuIFtbW1dBS1ZpZXcg
YWxsb2NdIF9pbml0V2l0aFZpZXdSZWY6X3ZpZXdSZWZdIGF1dG9yZWxlYXNlXTsKKyAgICBXS0Vy
cm9yICgidW5hYmxlIHRvIGNyZWF0ZSB3cmFwcGVyIGZvciAlc1xuIiwgX3ZpZXdSZWYtPmlzYS5j
bGFzc0luZm8tPm5hbWUpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKGlkKV9pbml0V2l0aFZp
ZXdSZWY6KFdLVmlld1JlZil2aWV3UgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgdmlld1JlZiA9IChXS1ZpZXdS
ZWYpV0tSZXRhaW4gKHZpZXdSKTsKKyAgICB2aWV3UmVmLT53cmFwcGVyID0gKHZvaWQgKilzZWxm
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICByZXR1cm4gW3Nl
bGYgaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvXTsKK30KKworLSAoaWQpaW5pdFdpdGhGcmFtZToo
Q0dSZWN0KXJlY3QKK3sKKyAgICBXS1ZpZXdSZWYgdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGcmFt
ZShyZWN0LCAmdmlld0NvbnRleHQpOworICAgIHNlbGYgPSBbc2VsZiBfaW5pdFdpdGhWaWV3UmVm
OnZpZXddOworICAgIGlmIChzZWxmKSB7CisgICAgICAgIHZpZXdDb250ZXh0Lm5vdGlmaWNhdGlv
bkNhbGxiYWNrID0gbm90aWZpY2F0aW9uQ2FsbGJhY2s7CisgICAgICAgIHZpZXdDb250ZXh0Lm5v
dGlmaWNhdGlvblVzZXJJbmZvID0gc2VsZjsKKyAgICAgICAgdmlld0NvbnRleHQucmVzcG9uZGVy
Q2FsbGJhY2sgPSByZXNwb25kZXJDYWxsYmFjazsKKyAgICAgICAgdmlld0NvbnRleHQucmVzcG9u
ZGVyVXNlckluZm8gPSBzZWxmOworICAgICAgICB2aWV3Q29udGV4dC53aWxsUmVtb3ZlU3Vidmll
d0NhbGxiYWNrID0gd2lsbFJlbW92ZVN1YnZpZXdDYWxsYmFjazsKKyAgICAgICAgdmlld0NvbnRl
eHQuaW52YWxpZGF0ZUdTdGF0ZUNhbGxiYWNrID0gaW52YWxpZGF0ZUdTdGF0ZUNhbGxiYWNrOwor
ICAgIH0KKyAgICBXS1JlbGVhc2Uodmlldyk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtbW3N1YnZpZXdSZWZlcmVuY2VzIGNvcHldIGF1dG9yZWxlYXNl
XSBtYWtlT2JqZWN0c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocmVtb3ZlRnJvbVN1cGVydmll
dyldOworCisgICAgaWYgKHZpZXdSZWYpIHsKKyAgICAgICAgX1dLVmlld1NldFZpZXdDb250ZXh0
ICh2aWV3UmVmLCAwKTsKKyAgICAgICAgdmlld1JlZi0+d3JhcHBlciA9IE5VTEw7CisgICAgICAg
IFdLUmVsZWFzZSAodmlld1JlZik7CisgICAgfQorICAgIAorICAgIFtzdWJ2aWV3UmVmZXJlbmNl
cyByZWxlYXNlXTsKKyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKFdBS1dpbmRv
dyAqKXdpbmRvdworeworICAgIHJldHVybiBXS1ZpZXdHZXRXaW5kb3codmlld1JlZik7Cit9CisK
Ky0gKFdLVmlld1JlZilfdmlld1JlZgoreworICAgIHJldHVybiB2aWV3UmVmOworfQorCistIChO
U011dGFibGVTZXQgKilfc3Vidmlld1JlZmVyZW5jZXMKK3sKKyAgICBpZiAoIXN1YnZpZXdSZWZl
cmVuY2VzKQorICAgICAgICBzdWJ2aWV3UmVmZXJlbmNlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9j
XSBpbml0XTsKKyAgICByZXR1cm4gc3Vidmlld1JlZmVyZW5jZXM7Cit9CisKK3N0YXRpYyB2b2lk
IF9XQUtDb3B5V3JhcHBlcihjb25zdCB2b2lkICp2YWx1ZSwgdm9pZCAqY29udGV4dCkKK3sKKyAg
ICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gKE5TTXV0YWJsZUFy
cmF5ICopY29udGV4dDsKKyAgICBXQUtWaWV3ICp2aWV3ID0gV0FLVmlld0ZvcldLVmlld1JlZigo
V0tWaWV3UmVmKXZhbHVlKTsKKyAgICBpZiAodmlldykKKyAgICAgICAgW2FycmF5IGFkZE9iamVj
dDp2aWV3XTsKK30KKworLSAoTlNBcnJheSAqKXN1YnZpZXdzCit7CisgICAgQ0ZBcnJheVJlZiBz
dWJ2aWV3cyA9IFdLVmlld0dldFN1YnZpZXdzKFtzZWxmIF92aWV3UmVmXSk7CisgICAgaWYgKCFz
dWJ2aWV3cykKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKyAgICAKKyAgICBDRklu
ZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHN1YnZpZXdzKTsKKyAgICBpZiAoY291bnQgPT0g
MCkKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKyAgICAKKyAgICBOU011dGFibGVB
cnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvdW50XTsK
KyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKyAgICAK
KyAgICBDRkFycmF5QXBwbHlGdW5jdGlvbihzdWJ2aWV3cywgQ0ZSYW5nZU1ha2UoMCwgY291bnQp
LCBfV0FLQ29weVdyYXBwZXIsICh2b2lkKilyZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKy0gKFdBS1ZpZXcgKilzdXBlcnZpZXcKK3sKKyAgICByZXR1cm4gV0FLVmlld0Zv
cldLVmlld1JlZih2aWV3UmVmLT5zdXBlcnZpZXcpOworfQorCistIChXQUtWaWV3ICopbGFzdFNj
cm9sbGFibGVBbmNlc3RvcgoreworICAgIFdBS1ZpZXcgKnZpZXcgPSBuaWw7CisgICAgV0FLU2Ny
b2xsVmlldyAqc2Nyb2xsVmlldyA9IGVuY2xvc2luZ1Njcm9sbFZpZXcoc2VsZik7CisgICAgCisg
ICAgd2hpbGUgKHNjcm9sbFZpZXcpIHsKKyAgICAgICAgCisgICAgICAgIENHU2l6ZSBzY3JvbGxW
aWV3U2l6ZSA9IFdLVmlld0dldEZyYW1lKChXS1ZpZXdSZWYpc2Nyb2xsVmlldykuc2l6ZTsKKwor
ICAgICAgICBXQUtWaWV3ICpkb2N1bWVudFZpZXcgPSBbc2Nyb2xsVmlldyBkb2N1bWVudFZpZXdd
OworICAgICAgICBzY3JvbGxWaWV3ID0gZW5jbG9zaW5nU2Nyb2xsVmlldyhzY3JvbGxWaWV3KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIElm
IHRoaXMgZG9jdW1lbnQgdmlldyBjYW4gYmUgc2Nyb2xsZWQsIGFuZCB0aGlzIGlzIE5PVCB0aGUg
bGFzdCBzY3JvbGwgdmlldy4KKyAgICAgICAgLy8gT3VyIGxhc3Qgc2Nyb2xsIHZpZXcgaXMgbm9u
LWV4aXN0ZW50IGFzIGZhciBhcyB3ZSdyZSBjb25jZXJuZWQuCisKKyAgICAgICAgaWYgKHNjcm9s
bFZpZXcgJiYgIUNHU2l6ZUVxdWFsVG9TaXplKHNjcm9sbFZpZXdTaXplLCBbZG9jdW1lbnRWaWV3
IGZyYW1lXS5zaXplKSkKKyAgICAgICAgICAgIHZpZXcgPSBkb2N1bWVudFZpZXc7CisgICAgfQor
ICAgIAorICAgIHJldHVybiB2aWV3OworfQorCistICh2b2lkKWFkZFN1YnZpZXc6KFdBS1ZpZXcg
KilzdWJ2aWV3Cit7CisgICAgW3N1YnZpZXcgcmV0YWluXTsKKyAgICBbc3VidmlldyByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKKyAgICBXS1ZpZXdBZGRTdWJ2aWV3ICh2aWV3UmVmLCBbc3VidmlldyBf
dmlld1JlZl0pOworICAgIAorICAgIC8vIEtlZXAgYSByZWZlcmVuY2UgdG8gc3VidmlldyBzbyBp
dCBzdGlja3MgYXJvdW5kLgorICAgIFtbc2VsZiBfc3Vidmlld1JlZmVyZW5jZXNdIGFkZE9iamVj
dDpzdWJ2aWV3XTsKKyAgICBbc3VidmlldyByZWxlYXNlXTsKK30KKworLSAodm9pZCl3aWxsUmVt
b3ZlU3VidmlldzooV0FLVmlldyAqKXN1YnZpZXcKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Vidmll
dyk7Cit9CisKKy0gKHZvaWQpcmVtb3ZlRnJvbVN1cGVydmlldworeworICAgIFdBS1ZpZXcgKm9s
ZFN1cGVydmlldyA9IFtbc2VsZiBzdXBlcnZpZXddIHJldGFpbl07CisgICAgV0tWaWV3UmVtb3Zl
RnJvbVN1cGVydmlldyAodmlld1JlZik7CisgICAgW1tvbGRTdXBlcnZpZXcgX3N1YnZpZXdSZWZl
cmVuY2VzXSByZW1vdmVPYmplY3Q6c2VsZl07CisgICAgW29sZFN1cGVydmlldyByZWxlYXNlXTsK
K30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Cit7Cit9CisKKy0gKHZvaWQpZnJhbWVT
aXplQ2hhbmdlZAoreworfQorCistICh2b2lkKXNldE5lZWRzRGlzcGxheTooQk9PTClmbGFnCit7
CisgICAgaWYgKCFmbGFnKQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgc2V0TmVlZHNEaXNw
bGF5SW5SZWN0OldLVmlld0dldEJvdW5kcyh2aWV3UmVmKV07Cit9CisKKy0gKHZvaWQpc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0OihDR1JlY3QpaW52YWxpZFJlY3QKK3sKKyAgICBpZiAoX2lzSGlkZGVu
KQorICAgICAgICByZXR1cm47CisKKyAgICBXQUtXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRv
d107CisgICAgaWYgKCF3aW5kb3cgfHwgQ0dSZWN0SXNFbXB0eShpbnZhbGlkUmVjdCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0SW50ZXJzZWN0aW9uKGludmFs
aWRSZWN0LCBbc2VsZiBib3VuZHNdKTsKKyAgICBpZiAoQ0dSZWN0SXNFbXB0eShyZWN0KSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ0dSZWN0IGJhc2VSZWN0ID0gV0tWaWV3Q29udmVydFJlY3RU
b0Jhc2Uodmlld1JlZiwgcmVjdCk7CisgICAgW3dpbmRvdyBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6
YmFzZVJlY3RdOworfQorCistIChCT09MKW5lZWRzRGlzcGxheSAKK3sKKyAgICByZXR1cm4gTk87
Cit9CisKKy0gKHZvaWQpZGlzcGxheQoreworICAgIFtzZWxmIGRpc3BsYXlSZWN0OldLVmlld0dl
dEJvdW5kcyh2aWV3UmVmKV07Cit9CisKKy0gKHZvaWQpZGlzcGxheUlmTmVlZGVkCit7Cit9CisK
Ky0gKHZvaWQpZHJhd1JlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgLy8gRG8gbm90aGluZy4gIE92
ZXJyaWRlIGluIHN1YmNsYXNzLgorICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKK30KKworLSAodm9p
ZCl2aWV3V2lsbERyYXcKK3sKKyAgICBbW3NlbGYgc3Vidmlld3NdIG1ha2VPYmplY3RzUGVyZm9y
bVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3V2lsbERyYXcpXTsKK30KKworKyAoV0FLVmlldyAqKWZv
Y3VzVmlldworeworICAgIHJldHVybiBnbG9iYWxGb2N1c1ZpZXc7Cit9CisKKy0gKE5TUmVjdCli
b3VuZHMKK3sgCisgICAgcmV0dXJuIFdLVmlld0dldEJvdW5kcyAodmlld1JlZik7Cit9CisKKy0g
KE5TUmVjdClmcmFtZSAKK3sgCisgICAgcmV0dXJuIFdLVmlld0dldEZyYW1lICh2aWV3UmVmKTsK
K30KKworLSAodm9pZClzZXRGcmFtZTooTlNSZWN0KWZyYW1lUmVjdAoreworICAgIFdLVmlld1Nl
dEZyYW1lT3JpZ2luICh2aWV3UmVmLCBmcmFtZVJlY3Qub3JpZ2luKTsKKyAgICBXS1ZpZXdTZXRG
cmFtZVNpemUgKHZpZXdSZWYsIGZyYW1lUmVjdC5zaXplKTsKK30KKworLSAodm9pZClzZXRGcmFt
ZU9yaWdpbjooTlNQb2ludCluZXdPcmlnaW4KK3sKKyAgICBXS1ZpZXdTZXRGcmFtZU9yaWdpbiAo
dmlld1JlZiwgbmV3T3JpZ2luKTsKK30KKworLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlu
ZXdTaXplCit7CisgICAgV0tWaWV3U2V0RnJhbWVTaXplICh2aWV3UmVmLCBuZXdTaXplKTsKK30K
KworLSAodm9pZClzZXRCb3VuZHNTaXplOihOU1NpemUpc2l6ZQoreworICAgIFdLVmlld1NldEJv
dW5kc1NpemUgKHZpZXdSZWYsIHNpemUpOworfQorCistICh2b2lkKXNldEJvdW5kc09yaWdpbjoo
TlNQb2ludCluZXdPcmlnaW4KK3sKKyAgICBXS1ZpZXdTZXRCb3VuZHNPcmlnaW4odmlld1JlZiwg
bmV3T3JpZ2luKTsKK30KKworLSAodm9pZClfbG9ja0ZvY3VzVmlld0luQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgc2V0R2xvYmFsRm9j
dXNWaWV3KHNlbGYpOworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBX
QUtWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBlcnZpZXddOworICAgIGlmIChzdXBlcnZpZXcp
CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgW3N1cGVydmlldyBib3VuZHNd
KTsKKworICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBfV0tWaWV3R2V0VHJhbnNmb3Jt
KHZpZXdSZWYpKTsKK30KKworLSAodm9pZClfdW5sb2NrRm9jdXNWaWV3SW5Db250ZXh0OihDR0Nv
bnRleHRSZWYpY29udGV4dAoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHQpOworICAgIHNldEdsb2JhbEZvY3VzVmlldyhuaWwpOworfQor
CitzdGF0aWMgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSB0b0NHSW50ZXJwb2xhdGlvblF1YWxpdHko
V2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1
YWxpdHkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OkludGVycG9sYXRpb25EZWZhdWx0OgorICAgICAg
ICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CisgICAgY2FzZSBXZWJDb3JlOjpJbnRl
cnBvbGF0aW9uTm9uZToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Ob25lOworICAg
IGNhc2UgV2ViQ29yZTo6SW50ZXJwb2xhdGlvbkxvdzoKKyAgICAgICAgcmV0dXJuIGtDR0ludGVy
cG9sYXRpb25Mb3c7CisgICAgY2FzZSBXZWJDb3JlOjpJbnRlcnBvbGF0aW9uTWVkaXVtOgorICAg
ICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIFdlYkNvcmU6Oklu
dGVycG9sYXRpb25IaWdoOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBrQ0dJbnRlcnBvbGF0aW9uTG93OworICAgIH0KK30KKworKyAodm9pZClfc2V0SW50ZXJwb2xh
dGlvblF1YWxpdHk6KGludClxdWFsaXR5Cit7CisgICAgc0ludGVycG9sYXRpb25RdWFsaXR5ID0g
dG9DR0ludGVycG9sYXRpb25RdWFsaXR5KChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eSlx
dWFsaXR5KTsKK30KKworLSAodm9pZClfZHJhd1JlY3Q6KE5TUmVjdClkaXJ0eVJlY3QgY29udGV4
dDooQ0dDb250ZXh0UmVmKWNvbnRleHQgbG9ja0ZvY3VzOihib29sKWxvY2tGb2N1cworeworICAg
IGlmIChfaXNIaWRkZW4pCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh2aWV3UmVmKTsK
KyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgQ0dSZWN0IGxvY2FsUmVjdCA9IFdLVmlld0dldEJv
dW5kcyh2aWV3UmVmKTsKKyAgICBkaXJ0eVJlY3QgPSBDR1JlY3RJbnRlcnNlY3Rpb24obG9jYWxS
ZWN0LCBkaXJ0eVJlY3QpOworICAgIGlmIChDR1JlY3RJc0VtcHR5KGRpcnR5UmVjdCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChsb2NrRm9jdXMpCisgICAgICAgIFtzZWxmIF9sb2NrRm9j
dXNWaWV3SW5Db250ZXh0OmNvbnRleHRdOworCisgICAgaWYgKHZpZXdSZWYtPnNjYWxlICE9IDEp
CisgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIHNJbnRl
cnBvbGF0aW9uUXVhbGl0eSk7CisKKyAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRp
cnR5UmVjdCk7CisgICAgW3NlbGYgZHJhd1JlY3Q6ZGlydHlSZWN0XTsKKworICAgIGlmICghX2Ry
YXdzT3duRGVzY2VuZGFudHMpIHsKKyAgICAgICAgTlNBcnJheSAqc3ViVmlld3MgPSBbc2VsZiBz
dWJ2aWV3c107CisgICAgICAgIGZvciAoV0FLVmlldyAqc3ViVmlldyBpbiBzdWJWaWV3cykgewor
ICAgICAgICAgICAgTlNSZWN0IGNoaWxkRGlydHlSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6ZGly
dHlSZWN0IHRvVmlldzpzdWJWaWV3XTsKKyAgICAgICAgICAgIFtzdWJWaWV3IF9kcmF3UmVjdDpD
R1JlY3RJbnRlZ3JhbChjaGlsZERpcnR5UmVjdCkgY29udGV4dDpjb250ZXh0IGxvY2tGb2N1czpZ
RVNdOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxvY2tGb2N1cykKKyAgICAgICAgW3Nl
bGYgX3VubG9ja0ZvY3VzVmlld0luQ29udGV4dDpjb250ZXh0XTsKK30KKworLSAodm9pZClkaXNw
bGF5UmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IFdLR2V0
Q3VycmVudEdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBX
S0Vycm9yICgidW5hYmxlIHRvIGdldCBjb250ZXh0IGZvciB2aWV3Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBbc2VsZiBfZHJhd1JlY3Q6cmVjdCBjb250ZXh0OmNvbnRleHQgbG9j
a0ZvY3VzOllFU107Cit9CisKKy0gKHZvaWQpZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5T
UmVjdClyZWN0Cit7CisgICAgW3NlbGYgZGlzcGxheVJlY3Q6cmVjdF07Cit9CisKKy0gKHZvaWQp
ZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0IGluQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgV0tFcnJvciAo
ImludmFsaWQgcGFyYW1ldGVyOiBjb250ZXh0IG11c3Qgbm90IGJlIE5VTEwiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIENHQ29udGV4dFJlZiBwcmV2aW91c0NvbnRleHQgPSBXS0dl
dEN1cnJlbnRHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dCAhPSBwcmV2aW91c0Nv
bnRleHQpCisgICAgICAgIFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKwor
ICAgIFtzZWxmIF9kcmF3UmVjdDpyZWN0IGNvbnRleHQ6Y29udGV4dCBsb2NrRm9jdXM6Tk9dOwor
CisgICAgaWYgKGNvbnRleHQgIT0gcHJldmlvdXNDb250ZXh0KQorICAgICAgICBXS1NldEN1cnJl
bnRHcmFwaGljc0NvbnRleHQgKHByZXZpb3VzQ29udGV4dCk7Cit9CisKKy0gKE5TUmVjdCl2aXNp
YmxlUmVjdAoreworICAgIHJldHVybiBXS1ZpZXdHZXRWaXNpYmxlUmVjdCAodmlld1JlZik7Cit9
CisKKy0gKE5TUG9pbnQpY29udmVydFBvaW50OihOU1BvaW50KWFQb2ludCB0b1ZpZXc6KFdBS1Zp
ZXcgKilhVmlldyAKK3sKKyAgICBDR1BvaW50IHAgPSBXS1ZpZXdDb252ZXJ0UG9pbnRUb0Jhc2Ug
KHZpZXdSZWYsIGFQb2ludCk7CisgICAgaWYgKGFWaWV3KQorICAgICAgICByZXR1cm4gV0tWaWV3
Q29udmVydFBvaW50RnJvbUJhc2UgKFthVmlldyBfdmlld1JlZl0sIHApOworICAgIHJldHVybiBw
OworfQorCistIChOU1BvaW50KWNvbnZlcnRQb2ludDooTlNQb2ludClhUG9pbnQgZnJvbVZpZXc6
KFdBS1ZpZXcgKilhVmlldworeworICAgIGlmIChhVmlldykKKyAgICAgICAgYVBvaW50ID0gV0tW
aWV3Q29udmVydFBvaW50VG9CYXNlIChbYVZpZXcgX3ZpZXdSZWZdLCBhUG9pbnQpOworICAgIHJl
dHVybiBXS1ZpZXdDb252ZXJ0UG9pbnRGcm9tQmFzZSAodmlld1JlZiwgYVBvaW50KTsKK30KKwor
LSAoTlNTaXplKWNvbnZlcnRTaXplOihOU1NpemUpc2l6ZSB0b1ZpZXc6KFdBS1ZpZXcgKilhVmll
dworeworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdDpOU01ha2VSZWN0KDAuMGYsIDAuMGYs
IHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KSB0b1ZpZXc6YVZpZXddLnNpemU7Cit9CisKKy0gKE5T
UmVjdCljb252ZXJ0UmVjdDooTlNSZWN0KWFSZWN0IGZyb21WaWV3OihXQUtWaWV3ICopYVZpZXcK
K3sKKyAgICBpZiAoYVZpZXcpCisgICAgICAgIGFSZWN0ID0gV0tWaWV3Q29udmVydFJlY3RUb0Jh
c2UgKFthVmlldyBfdmlld1JlZl0sIGFSZWN0KTsKKyAgICByZXR1cm4gV0tWaWV3Q29udmVydFJl
Y3RGcm9tQmFzZSAodmlld1JlZiwgYVJlY3QpOworfQorCistIChOU1JlY3QpY29udmVydFJlY3Q6
KE5TUmVjdClhUmVjdCB0b1ZpZXc6KFdBS1ZpZXcgKilhVmlldworeworICAgIENHUmVjdCByID0g
V0tWaWV3Q29udmVydFJlY3RUb0Jhc2UgKHZpZXdSZWYsIGFSZWN0KTsKKyAgICBpZiAoYVZpZXcp
CisgICAgICAgIHJldHVybiBXS1ZpZXdDb252ZXJ0UmVjdEZyb21CYXNlIChbYVZpZXcgX3ZpZXdS
ZWZdLCByKTsKKyAgICByZXR1cm4gcjsKK30KKworLSAodm9pZClsb2NrRm9jdXMKK3sKKyAgICBb
c2VsZiBfbG9ja0ZvY3VzVmlld0luQ29udGV4dDpXS0dldEN1cnJlbnRHcmFwaGljc0NvbnRleHQo
KV07Cit9CisKKy0gKHZvaWQpdW5sb2NrRm9jdXMKK3sKKyAgICBbc2VsZiBfdW5sb2NrRm9jdXNW
aWV3SW5Db250ZXh0OldLR2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dCgpXTsKK30KKworLSAoV0FL
VmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBpZiAoIUNHUmVjdENvbnRhaW5z
UG9pbnQoW3NlbGYgZnJhbWVdLCBwb2ludCkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBD
R1BvaW50IHN1YnZpZXdQb2ludCA9IFdLVmlld0NvbnZlcnRQb2ludEZyb21TdXBlcnZpZXcodmll
d1JlZiwgcG9pbnQpOworICAgIGZvciAoV0FLVmlldyAqc3VidmlldyBpbiBbc2VsZiBzdWJ2aWV3
c10pIHsKKyAgICAgICAgaWYgKFdBS1ZpZXcgKmhpdFZpZXcgPSBbc3VidmlldyBoaXRUZXN0OiBz
dWJ2aWV3UG9pbnRdKQorICAgICAgICAgICAgcmV0dXJuIGhpdFZpZXc7CisgICAgfQorCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0SGlkZGVuOihCT09MKWZsYWcgCit7CisgICAg
QVNTRVJUKHZpZXdSZWYpOworICAgIGlmIChfaXNIaWRkZW4gIT0gZmxhZykgeworICAgICAgICAv
LyBzZXROZWVkc0Rpc3BsYXkgZG9lcyBub3RoaW5nIGlmIHRoZSB2aWV3IGlzIGhpZGRlbiBzbyBj
YWxsIGl0IGF0IHRoZSByaWdodCB0aW1lLgorICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAg
ICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5OllFU107CisgICAgICAgICAgICBfaXNIaWRkZW4gPSBm
bGFnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX2lzSGlkZGVuID0gZmxhZzsKKyAg
ICAgICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpZRVNdOworICAgICAgICB9CisgICAgfQor
fQorCistIChCT09MKWlzRGVzY2VuZGFudE9mOihOU1ZpZXcgKilhVmlldworeworICAgIGlmIChh
VmlldyA9PSBzZWxmKQorICAgICAgICByZXR1cm4gWUVTOworICAgIGVsc2UgaWYgKCFbc2VsZiBz
dXBlcnZpZXddKQorICAgICAgICByZXR1cm4gTk87CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
W1tzZWxmIHN1cGVydmlld10gaXNEZXNjZW5kYW50T2Y6YVZpZXddOworfQorCistIChCT09MKWlz
SGlkZGVuT3JIYXNIaWRkZW5BbmNlc3RvcgoreworICAgIGlmIChfaXNIaWRkZW4pCisgICAgICAg
IHJldHVybiBZRVM7CisKKyAgICBpZiAoIVtzZWxmIHN1cGVydmlld10pCisgICAgICAgIHJldHVy
biBOTzsKKworICAgIHJldHVybiBbW3NlbGYgc3VwZXJ2aWV3XSBpc0hpZGRlbk9ySGFzSGlkZGVu
QW5jZXN0b3JdOworfQorCistIChCT09MKW1vdXNlOihOU1BvaW50KWFQb2ludCBpblJlY3Q6KE5T
UmVjdClhUmVjdCAKK3sgCisgICAgcmV0dXJuIFdLTW91c2VJblJlY3QgKGFQb2ludCwgYVJlY3Qp
OworfQorCistIChCT09MKW5lZWRzUGFuZWxUb0JlY29tZUtleQoreworICAgIHJldHVybiB0cnVl
OworfQorCistICh2b2lkKXNldE5leHRLZXlWaWV3OihOU1ZpZXcgKilhVmlldworeworICAgIFVO
VVNFRF9QQVJBTShhVmlldyk7Cit9CisKKy0gKFdBS1ZpZXcgKilwcmV2aW91c1ZhbGlkS2V5Vmll
dyB7IHJldHVybiBuaWw7IH0KKy0gKFdBS1ZpZXcgKiluZXh0S2V5VmlldyB7IHJldHVybiBuaWw7
IH0KKy0gKFdBS1ZpZXcgKiluZXh0VmFsaWRLZXlWaWV3IHsgcmV0dXJuIG5pbDsgfQorLSAoV0FL
VmlldyAqKXByZXZpb3VzS2V5VmlldyB7IHJldHVybiBuaWw7IH0KKworLSAodm9pZClpbnZhbGlk
YXRlR1N0YXRlIHsgfQorLSAodm9pZClyZWxlYXNlR1N0YXRlIHsgfQorLSAoQk9PTClpbkxpdmVS
ZXNpemUgeyByZXR1cm4gTk87IH0KKworLSAodm9pZClzZXRBdXRvcmVzaXppbmdNYXNrOih1bnNp
Z25lZCBpbnQpbWFzaworeworICAgIFdLVmlld1NldEF1dG9yZXNpemluZ01hc2sodmlld1JlZiwg
bWFzayk7Cit9CisKKy0gKHVuc2lnbmVkIGludClhdXRvcmVzaXppbmdNYXNrCit7CisgICAgcmV0
dXJuIFdLVmlld0dldEF1dG9yZXNpemluZ01hc2sodmlld1JlZik7Cit9CisKKy0gKHZvaWQpc2Ny
b2xsUG9pbnQ6KE5TUG9pbnQpcG9pbnQgCit7CisgICAgaWYgKFdBS1Njcm9sbFZpZXcgKnNjcm9s
bFZpZXcgPSBlbmNsb3NpbmdTY3JvbGxWaWV3KHNlbGYpKSB7CisgICAgICAgIENHUG9pbnQgc2Ny
b2xsVmlld1BvaW50ID0gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpzY3JvbGxWaWV3
XTsKKyAgICAgICAgW3Njcm9sbFZpZXcgc2Nyb2xsUG9pbnQ6c2Nyb2xsVmlld1BvaW50XTsKKyAg
ICB9Cit9CisKKy0gKEJPT0wpc2Nyb2xsUmVjdFRvVmlzaWJsZTooTlNSZWN0KXJlY3QKK3sKKyAg
ICAvLyBTY3JvbGwgaWYgdGhlIHJlY3QgaXMgbm90IGFscmVhZHkgdmlzaWJsZS4KKyAgICBDR1Jl
Y3QgdmlzaWJsZVJlY3QgPSBbc2VsZiB2aXNpYmxlUmVjdF07CisgICAgaWYgKCFDR1JlY3RDb250
YWluc1JlY3QodmlzaWJsZVJlY3QsIHJlY3QpICYmICFDR1JlY3RDb250YWluc1JlY3QocmVjdCwg
dmlzaWJsZVJlY3QpKQorICAgICAgICBbc2VsZiBzY3JvbGxQb2ludDpyZWN0Lm9yaWdpbl07CisK
KyAgICAvLyBSZXR1cm4gdmFsdWUgaWdub3JlZCBieSBXZWJDb3JlLgorCisgICAgcmV0dXJuIE5P
OworfQorCisvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgKG9ubHkgV2ViSFRNTFZpZXcgZm9y
IG5vdykuCistICh2b2lkKXNldE5lZWRzTGF5b3V0OihCT09MKWZsYWcKK3sKKyAgICBVTlVTRURf
UEFSQU0oZmxhZyk7Cit9CisKKy0gKHZvaWQpbGF5b3V0IHsgfQorLSAodm9pZClsYXlvdXRJZk5l
ZWRlZCB7IH0KKworLSAodm9pZClzZXRTY2FsZTooZmxvYXQpc2NhbGUKK3sKKyAgICBXS1ZpZXdT
ZXRTY2FsZSh2aWV3UmVmLCBzY2FsZSk7Cit9CisKKy0gKGZsb2F0KXNjYWxlCit7CisgICAgcmV0
dXJuIFdLVmlld0dldFNjYWxlKHZpZXdSZWYpOworfQorCistICh2b2lkKV9zZXREcmF3c093bkRl
c2NlbmRhbnRzOihCT09MKWRyYXcKK3sKKyAgICBfZHJhd3NPd25EZXNjZW5kYW50cyA9IGRyYXc7
Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KK3sKKyAgICBOU011dGFibGVTdHJpbmcg
KmRlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPCVAOiBX
QUs6ICVwIChXSzogJXApOyAiLCBbc2VsZiBjbGFzc10sIHNlbGYsIHZpZXdSZWZdOworCisgICAg
Q0dSZWN0IGZyYW1lID0gW3NlbGYgZnJhbWVdOworICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3Jt
YXQ6QCJmcmFtZSA9ICglZyAlZzsgJWcgJWcpPiIsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmln
aW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHRdOworCisgICAgcmV0dXJu
IGRlc2NyaXB0aW9uOworfQorCistICh2b2lkKV9hcHBlbmREZXNjcmlwdGlvblRvU3RyaW5nOihO
U011dGFibGVTdHJpbmcgKilpbmZvIGF0TGV2ZWw6KGludClsZXZlbAoreworICAgIE5TQXV0b3Jl
bGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisKKyAg
ICBpZiAoW2luZm8gbGVuZ3RoXSAhPSAwKQorICAgICAgICBbaW5mbyBhcHBlbmRTdHJpbmc6QCJc
biJdOworCisgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbGV2ZWw7IGkrKykKKyAgICAgICAgW2lu
Zm8gYXBwZW5kU3RyaW5nOkAiICAgfCAiXTsKKworICAgIFtpbmZvIGFwcGVuZFN0cmluZzpbc2Vs
ZiBkZXNjcmlwdGlvbl1dOworCisgICAgZm9yIChXQUtWaWV3ICpzdWJ2aWV3IGluIFtzZWxmIHN1
YnZpZXdzXSkKKyAgICAgICAgW3N1YnZpZXcgX2FwcGVuZERlc2NyaXB0aW9uVG9TdHJpbmc6aW5m
byBhdExldmVsOmxldmVsICsgMV07CisKKyAgICBbcG9vbCByZWxlYXNlXTsKK30KKworQGVuZAor
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL3dhay9XQUtWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XQUtWaWV3UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiZTNmMmE0MzJmZTY4MWQxMWM0
MjVkMTdlMTU2ODk5ZDUyOWNiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3Mvd2FrL1dBS1ZpZXdQcml2YXRlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0FLVmlld1ByaXZhdGVfaAorI2RlZmlu
ZSBXQUtWaWV3UHJpdmF0ZV9oCisKKyNpZiBUQVJHRVRfT1NfSVBIT05FCisKKyNpbXBvcnQgIldB
S1ZpZXcuaCIKKworQGludGVyZmFjZSBXQUtWaWV3IChXQUtQcml2YXRlKQorLSAoV0tWaWV3UmVm
KV92aWV3UmVmOworKyAoV0FLVmlldyAqKV93cmFwcGVyRm9yVmlld1JlZjooV0tWaWV3UmVmKV92
aWV3UmVmOworLSAoaWQpX2luaXRXaXRoVmlld1JlZjooV0tWaWV3UmVmKXZpZXc7CistIChCT09M
KV9oYW5kbGVSZXNwb25kZXJDYWxsOihXS1ZpZXdSZXNwb25kZXJDYWxsYmFja1R5cGUpdHlwZTsK
Ky0gKE5TTXV0YWJsZVNldCAqKV9zdWJ2aWV3UmVmZXJlbmNlczsKKy0gKEJPT0wpX3NlbGZIYW5k
bGVFdmVudDooV2ViRXZlbnQgKilldmVudDsKK0BlbmQKKworc3RhdGljIGlubGluZSBXQUtWaWV3
ICpXQUtWaWV3Rm9yV0tWaWV3UmVmKFdLVmlld1JlZiB2aWV3KQoreworICAgIGlmICghdmlldykK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBXQUtWaWV3ICp3cmFwcGVyID0gKFdBS1ZpZXcgKil2
aWV3LT53cmFwcGVyOworICAgIGlmICh3cmFwcGVyKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsK
KyAgICByZXR1cm4gW1dBS1ZpZXcgX3dyYXBwZXJGb3JWaWV3UmVmOnZpZXddOworfQorCisjZW5k
aWYgLy8gVEFSR0VUX09TX0lQSE9ORQorCisjZW5kaWYgLy8gV0FLVmlld1ByaXZhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLV2luZG93LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDEy
OWQyMWE1NDI0ZTViODQ5NGFhOWQ0M2QwYjRmN2FmYTE1NmU5MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLV2luZG93LmgKQEAgLTAsMCArMSwx
ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdBS1dpbmRvd19oCisjZGVmaW5lIFdBS1dpbmRvd19oCisKKyNpZiBUQVJH
RVRfT1NfSVBIT05FCisKKyNpbXBvcnQgIldBS0FwcEtpdFN0dWJzLmgiCisjaW1wb3J0ICJXQUtS
ZXNwb25kZXIuaCIKKyNpbXBvcnQgIldBS1ZpZXcuaCIKKyNpbXBvcnQgIldLQ29udGVudE9ic2Vy
dmF0aW9uLmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNzIENBTGF5ZXI7CitAY2xhc3MgV2Vi
RXZlbnQ7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNs
YXNzIFRpbGVDYWNoZTsKK30KK3R5cGVkZWYgV2ViQ29yZTo6VGlsZUNhY2hlIFRpbGVDYWNoZTsK
KyNlbHNlCit0eXBlZGVmIHN0cnVjdCBUaWxlQ2FjaGUgVGlsZUNhY2hlOworI2VuZGlmCisKK3R5
cGVkZWYgZW51bSB7CisgICAga1dBS1dpbmRvd1RpbGluZ01vZGVOb3JtYWwsCisgICAga1dBS1dp
bmRvd1RpbGluZ01vZGVNaW5pbWFsLAorICAgIGtXQUtXaW5kb3dUaWxpbmdNb2RlUGFubmluZywK
KyAgICBrV0FLV2luZG93VGlsaW5nTW9kZVpvb21pbmcsCisgICAga1dBS1dpbmRvd1RpbGluZ01v
ZGVEaXNhYmxlZCwKKyAgICBrV0FLV2luZG93VGlsaW5nTW9kZVNjcm9sbFRvVG9wLAorfSBXQUtX
aW5kb3dUaWxpbmdNb2RlOworCit0eXBlZGVmIGVudW0geworICAgIGtXQUtUaWxpbmdEaXJlY3Rp
b25VcCwKKyAgICBrV0FLVGlsaW5nRGlyZWN0aW9uRG93biwKKyAgICBrV0FLVGlsaW5nRGlyZWN0
aW9uTGVmdCwKKyAgICBrV0FLVGlsaW5nRGlyZWN0aW9uUmlnaHQsCit9IFdBS1RpbGluZ0RpcmVj
dGlvbjsKKworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93U2NyZWVuU2NhbGVEaWRD
aGFuZ2VOb3RpZmljYXRpb247CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXQUtXaW5kb3dWaXNp
YmlsaXR5RGlkQ2hhbmdlTm90aWZpY2F0aW9uOworCitAaW50ZXJmYWNlIFdBS1dpbmRvdyA6IFdB
S1Jlc3BvbmRlcgoreworICAgIENBTGF5ZXIqIF9ob3N0TGF5ZXI7CisgICAgVGlsZUNhY2hlKiBf
dGlsZUNhY2hlOworICAgIENHUmVjdCBfZnJvemVuVmlzaWJsZVJlY3Q7CisgICAgQ0FMYXllciAq
X3Jvb3RMYXllcjsKKworICAgIENHU2l6ZSBfc2NyZWVuU2l6ZTsKKyAgICBDR1NpemUgX2F2YWls
YWJsZVNjcmVlblNpemU7CisgICAgQ0dGbG9hdCBfc2NyZWVuU2NhbGU7CisKKyAgICBDR1JlY3Qg
X2ZyYW1lOworCisgICAgV0FLVmlldyAqX2NvbnRlbnRWaWV3OworICAgIFdBS1ZpZXcgKl9yZXNw
b25kZXJWaWV3OworICAgIFdBS1ZpZXcgKl9uZXh0UmVzcG9uZGVyOworCisgICAgQk9PTCBfdmlz
aWJsZTsKKyAgICBCT09MIF91c2VPcmllbnRhdGlvbkRlcGVuZGVudEZvbnRBbnRpYWxpYXNpbmc7
Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgdXNlT3JpZW50YXRpb25E
ZXBlbmRlbnRGb250QW50aWFsaWFzaW5nOworCisvLyBJZiBub24tTlVMTCwgY29udGVudFJlcGxh
Y2VtZW50SW1hZ2Ugd2lsbCBkcmF3IGludG8gdGlsZXMgaW5zdGVhZCBvZiB3ZWIgY29udGVudC4K
K0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR0ltYWdlUmVmIGNvbnRlbnRSZXBsYWNlbWVudEltYWdl
OworCisvLyBDcmVhdGUgbGF5ZXIgaG9zdGVkIHdpbmRvdworLSAoaWQpaW5pdFdpdGhMYXllcjoo
Q0FMYXllciAqKWhvc3RMYXllcjsKKy8vIENyZWF0ZSB1bmhvc3RlZCB3aW5kb3cgZm9yIG1hbnVh
bCBwYWludGluZworLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lOworCistIChDQUxh
eWVyKilob3N0TGF5ZXI7CisKKy0gKHZvaWQpc2V0Q29udGVudFZpZXc6KFdBS1ZpZXcgKilhVmll
dzsKKy0gKFdBS1ZpZXcgKiljb250ZW50VmlldzsKKy0gKHZvaWQpY2xvc2U7CistIChXQUtWaWV3
ICopZmlyc3RSZXNwb25kZXI7CisKKy0gKE5TUG9pbnQpY29udmVydEJhc2VUb1NjcmVlbjooTlNQ
b2ludClhUG9pbnQ7CistIChOU1BvaW50KWNvbnZlcnRTY3JlZW5Ub0Jhc2U6KE5TUG9pbnQpYVBv
aW50OworLSAoQk9PTClpc0tleVdpbmRvdzsKKy0gKHZvaWQpbWFrZUtleVdpbmRvdzsKKy0gKEJP
T0wpaXNWaXNpYmxlOworLSAodm9pZClzZXRWaXNpYmxlOihCT09MKXZpc2libGU7CistIChOU1Nl
bGVjdGlvbkRpcmVjdGlvbilrZXlWaWV3U2VsZWN0aW9uRGlyZWN0aW9uOworLSAoQk9PTCltYWtl
Rmlyc3RSZXNwb25kZXI6KE5TUmVzcG9uZGVyICopYVJlc3BvbmRlcjsKKy0gKFdBS1ZpZXcgKilf
bmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKKy0gKHZvaWQpc2V0RnJhbWU6KE5TUmVj
dClmcmFtZVJlY3QgZGlzcGxheTooQk9PTClmbGFnOworLSAoQ0dSZWN0KWZyYW1lOworLSAodm9p
ZClzZXRDb250ZW50UmVjdDooQ0dSZWN0KXJlY3Q7CistICh2b2lkKXNldFNjcmVlblNpemU6KENH
U2l6ZSlzaXplOworLSAoQ0dTaXplKXNjcmVlblNpemU7CistICh2b2lkKXNldEF2YWlsYWJsZVNj
cmVlblNpemU6KENHU2l6ZSlzaXplOworLSAoQ0dTaXplKWF2YWlsYWJsZVNjcmVlblNpemU7Cist
ICh2b2lkKXNldFNjcmVlblNjYWxlOihDR0Zsb2F0KXNjYWxlOworLSAoQ0dGbG9hdClzY3JlZW5T
Y2FsZTsKKy0gKHZvaWQpc2V0Um9vdExheWVyOihDQUxheWVyICopbGF5ZXI7CistIChDQUxheWVy
ICopcm9vdExheWVyOworLSAodm9pZClzZW5kRXZlbnQ6KFdlYkV2ZW50ICopYW5FdmVudDsKKy0g
KHZvaWQpc2VuZEV2ZW50U3luY2hyb25vdXNseTooV2ViRXZlbnQgKilhbkV2ZW50OworLSAodm9p
ZClzZW5kTW91c2VNb3ZlRXZlbnQ6KFdlYkV2ZW50ICopYW5FdmVudCBjb250ZW50Q2hhbmdlOihX
S0NvbnRlbnRDaGFuZ2UgKilhQ29udGVudENoYW5nZTsKKworLy8gVGhyZWFkIHNhZmUgd2F5IG9m
IHByb3ZpZGluZyB0aGUgInVzYWJsZSIgcmVjdCBvZiB0aGUgV0FLV2luZG93IGluIHRoZSB2aWV3
cG9ydC9zY3JvbGx2aWV3LgorLSAoQ0dSZWN0KWV4cG9zZWRTY3JvbGxWaWV3UmVjdDsKKy8vIHNl
dEV4cG9zZWRTY3JvbGxWaWV3UmVjdCBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBmcm9tIFVJ
S2l0LgorLSAodm9pZClzZXRFeHBvc2VkU2Nyb2xsVmlld1JlY3Q6KENHUmVjdClleHBvc2VkU2Ny
b2xsVmlld1JlY3Q7CisKKy8vIFRpbGluZyBzdXBwb3J0CistICh2b2lkKWxheW91dFRpbGVzOwor
LSAodm9pZClsYXlvdXRUaWxlc05vdzsKKy0gKHZvaWQpbGF5b3V0VGlsZXNOb3dGb3JSZWN0OihD
R1JlY3QpcmVjdDsKKy0gKHZvaWQpc2V0TmVlZHNEaXNwbGF5OworLSAodm9pZClzZXROZWVkc0Rp
c3BsYXlJblJlY3Q6KENHUmVjdClyZWN0OworLSAoQk9PTCl0aWxlc09wYXF1ZTsKKy0gKHZvaWQp
c2V0VGlsZXNPcGFxdWU6KEJPT0wpb3BhcXVlOworLSAoQ0dSZWN0KXZpc2libGVSZWN0OworLy8g
VGhlIGV4dGVuZGVkIHZpc2libGUgcmVjdCBpbmNsdWRlcyB0aGUgYXJlYSBvdXRzaWRlIHN1cGVy
dmlld3Mgd2l0aAorLy8gbWFza3NUb0JvdW5kcyBzZXQgdG8gTk8uCistIChDR1JlY3QpZXh0ZW5k
ZWRWaXNpYmxlUmVjdDsKKy0gKHZvaWQpcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzOworLSAodm9p
ZClyZW1vdmVBbGxUaWxlczsKKy0gKHZvaWQpcmVtb3ZlRm9yZWdyb3VuZFRpbGVzOworLSAodm9p
ZClzZXRUaWxpbmdNb2RlOihXQUtXaW5kb3dUaWxpbmdNb2RlKW1vZGU7CistIChXQUtXaW5kb3dU
aWxpbmdNb2RlKXRpbGluZ01vZGU7CistICh2b2lkKXNldFRpbGluZ0RpcmVjdGlvbjooV0FLVGls
aW5nRGlyZWN0aW9uKXRpbGluZ0RpcmVjdGlvbjsKKy0gKFdBS1RpbGluZ0RpcmVjdGlvbil0aWxp
bmdEaXJlY3Rpb247CistIChCT09MKWhhc1BlbmRpbmdEcmF3OworLSAodm9pZClkaXNwbGF5UmVj
dDooTlNSZWN0KXJlY3Q7CistICh2b2lkKXNldFpvb21lZE91dFRpbGVTY2FsZTooZmxvYXQpc2Nh
bGU7CistIChmbG9hdCl6b29tZWRPdXRUaWxlU2NhbGU7CistICh2b2lkKXNldEN1cnJlbnRUaWxl
U2NhbGU6KGZsb2F0KXNjYWxlOworLSAoZmxvYXQpY3VycmVudFRpbGVTY2FsZTsKKy0gKHZvaWQp
c2V0S2VlcHNab29tZWRPdXRUaWxlczooQk9PTClrZWVwc1pvb21lZE91dFRpbGVzOworLSAoQk9P
TClrZWVwc1pvb21lZE91dFRpbGVzOworLSAoVGlsZUNhY2hlICopdGlsZUNhY2hlOworCistICh2
b2lkKWR1bXBUaWxlczsKKworLSAodm9pZClzZXRUaWxlQm9yZGVyc1Zpc2libGU6KEJPT0wpdmlz
aWJsZTsKKy0gKHZvaWQpc2V0VGlsZVBhaW50Q291bnRzVmlzaWJsZTooQk9PTCl2aXNpYmxlOwor
LSAodm9pZClzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOihCT09MKWVuYWJsZWQ7CisKKy0g
KHZvaWQpZnJlZXplVmlzaWJsZVJlY3Q7CistICh2b2lkKXVuZnJlZXplVmlzaWJsZVJlY3Q7Cist
ICh2b2lkKXdpbGxSb3RhdGU7CistICh2b2lkKWRpZFJvdGF0ZTsKKworLSAoQk9PTCl1c2VPcmll
bnRhdGlvbkRlcGVuZGVudEZvbnRBbnRpYWxpYXNpbmc7CistICh2b2lkKXNldFVzZU9yaWVudGF0
aW9uRGVwZW5kZW50Rm9udEFudGlhbGlhc2luZzooQk9PTClhYTsKKysgKEJPT0wpaGFzTGFuZHNj
YXBlT3JpZW50YXRpb247CisrICh2b2lkKXNldE9yaWVudGF0aW9uUHJvdmlkZXI6KGlkKXByb3Zp
ZGVyOworCisrIChXZWJFdmVudCAqKWN1cnJlbnRFdmVudDsKKworLSAoTlNTdHJpbmcgKilyZWN1
cnNpdmVEZXNjcmlwdGlvbjsKK0BlbmQKKworI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKKwor
I2VuZGlmIC8vIFdBS1dpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3Mvd2FrL1dBS1dpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsv
V0FLV2luZG93Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1YzlkN2VkNTRkNjc2OGZlMmU1YTZlYjIzZDM3YmYy
NGFiYjNjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
d2FrL1dBS1dpbmRvdy5tbQpAQCAtMCwwICsxLDY5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiV0FLV2luZG93LmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIlRpbGVD
YWNoZS5oIgorI2ltcG9ydCAiV0FLVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKKyNpbXBvcnQgIldl
YkV2ZW50LmgiCisjaW1wb3J0ICJXS0NvbnRlbnRPYnNlcnZhdGlvbi5oIgorI2ltcG9ydCAiV0tW
aWV3UHJpdmF0ZS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0
IDx3dGYvVENTcGluTG9jay5oPgorCitOU1N0cmluZyAqIGNvbnN0IFdBS1dpbmRvd1NjcmVlblNj
YWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uID0gQCJXQUtXaW5kb3dTY3JlZW5TY2FsZURpZENoYW5n
ZU5vdGlmaWNhdGlvbiI7CitOU1N0cmluZyAqIGNvbnN0IFdBS1dpbmRvd1Zpc2liaWxpdHlEaWRD
aGFuZ2VOb3RpZmljYXRpb24gPSBAIldBS1dpbmRvd1Zpc2liaWxpdHlEaWRDaGFuZ2VOb3RpZmlj
YXRpb24iOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQHByb3RvY29sIE9yaWVudGF0
aW9uUHJvdmlkZXIKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSA2MDAw
MAorLSAoQk9PTCloYXNMYW5kc2NhcGVPcmllbnRhdGlvbjsKKyNlbHNlCistIChpbnQpb3JpZW50
YXRpb247CisjZW5kaWYKK0BlbmQKKworc3RhdGljIFdBS1dpbmRvdyAqX1dBS0tleVdpbmRvdyA9
IG5pbDsgICAgICAgIC8vIHdlYWsKK3N0YXRpYyBXZWJFdmVudCAqY3VycmVudEV2ZW50ID0gbmls
Oworc3RhdGljIGlkPE9yaWVudGF0aW9uUHJvdmlkZXI+IGdPcmllbnRhdGlvblByb3ZpZGVyOwor
CitAaW1wbGVtZW50YXRpb24gV0FLV2luZG93IHsKKyAgICBTcGluTG9jayBfZXhwb3NlZFNjcm9s
bFZpZXdSZWN0TG9jazsKKyAgICBDR1JlY3QgX2V4cG9zZWRTY3JvbGxWaWV3UmVjdDsKK30KKwor
QHN5bnRoZXNpemUgdXNlT3JpZW50YXRpb25EZXBlbmRlbnRGb250QW50aWFsaWFzaW5nID0gX3Vz
ZU9yaWVudGF0aW9uRGVwZW5kZW50Rm9udEFudGlhbGlhc2luZzsKKworLSAoaWQpaW5pdFdpdGhM
YXllcjooQ0FMYXllciAqKWxheWVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfaG9zdExheWVyID0gW2xheWVy
IHJldGFpbl07CisKKyAgICBfZnJhbWUgPSBbX2hvc3RMYXllciBmcmFtZV07CisgICAgX3NjcmVl
blNjYWxlID0gd2tHZXRTY3JlZW5TY2FsZUZhY3RvcigpOworICAgIAorICAgIF90aWxlQ2FjaGUg
PSBuZXcgVGlsZUNhY2hlKHNlbGYpOworCisgICAgX2Zyb3plblZpc2libGVSZWN0ID0gQ0dSZWN0
TnVsbDsKKworICAgIF9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrID0gU1BJTkxPQ0tfSU5JVElB
TElaRVI7CisgICAgX2V4cG9zZWRTY3JvbGxWaWV3UmVjdCA9IENHUmVjdE51bGw7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLy8gVGhpcyBpcyB1c2VkIGZvciBXZWJWaWV3cyB0aGF0IGFyZSBu
b3QgYmFja2VkIGJ5IHRoZSB0aWxlIGNhY2hlLiBUaGVpciBjb250ZW50IG11c3QgYmUgcGFpbnRl
ZCBtYW51YWxseS4KKy0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZQoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgX2ZyYW1lID0gZnJhbWU7CisgICAgX3NjcmVlblNjYWxlID0gd2tHZXRTY3JlZW5TY2Fs
ZUZhY3RvcigpOworCisgICAgX2V4cG9zZWRTY3JvbGxWaWV3UmVjdExvY2sgPSBTUElOTE9DS19J
TklUSUFMSVpFUjsKKyAgICBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0ID0gQ0dSZWN0TnVsbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBkZWxldGUgX3Rp
bGVDYWNoZTsKKyAgICBbX2hvc3RMYXllciByZWxlYXNlXTsKKyAgICAKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKHZvaWQpc2V0Q29udGVudFZpZXc6KFdBS1ZpZXcgKilhVmlldworewor
ICAgIFthVmlldyByZXRhaW5dOworICAgIFtfY29udGVudFZpZXcgcmVsZWFzZV07CisKKyAgICBp
ZiAoYVZpZXcpCisgICAgICAgIF9XS1ZpZXdTZXRXaW5kb3coW2FWaWV3IF92aWV3UmVmXSwgc2Vs
Zik7CisgICAgX2NvbnRlbnRWaWV3ID0gYVZpZXc7Cit9CisKKy0gKFdBS1ZpZXcgKiljb250ZW50
VmlldworeworICAgIHJldHVybiBfY29udGVudFZpZXc7Cit9CisKKy0gKHZvaWQpY2xvc2UKK3sK
KyAgICBpZiAoX2NvbnRlbnRWaWV3KSB7CisgICAgICAgIF9XS1ZpZXdTZXRXaW5kb3coW19jb250
ZW50VmlldyBfdmlld1JlZl0sIG5pbCk7CisgICAgICAgIFtfY29udGVudFZpZXcgcmVsZWFzZV07
CisgICAgICAgIF9jb250ZW50VmlldyA9IG5pbDsKKyAgICB9CisKKyAgICBbX3Jlc3BvbmRlclZp
ZXcgcmVsZWFzZV07CisgICAgX3Jlc3BvbmRlclZpZXcgPSBuaWw7Cit9CisKKy0gKFdBS1ZpZXcg
KilmaXJzdFJlc3BvbmRlcgoreworICAgIHJldHVybiBfcmVzcG9uZGVyVmlldzsKK30KKworLSAo
V0FLVmlldyAqKV9uZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nCit7CisgICAgcmV0dXJu
IF9uZXh0UmVzcG9uZGVyOworfQorCistIChOU1BvaW50KWNvbnZlcnRCYXNlVG9TY3JlZW46KE5T
UG9pbnQpYVBvaW50Cit7CisgICAgVU5VU0VEX1BBUkFNKGFQb2ludCk7CisgICAgTlNQb2ludCBw
ID0geyAwLCAwIH07CisgICAgcmV0dXJuIHA7Cit9CisKKy0gKE5TUG9pbnQpY29udmVydFNjcmVl
blRvQmFzZTooTlNQb2ludClhUG9pbnQKK3sKKyAgICBVTlVTRURfUEFSQU0oYVBvaW50KTsKKyAg
ICBOU1BvaW50IHAgPSB7IDAsIDAgfTsKKyAgICByZXR1cm4gcDsKK30KKworLSAoQk9PTClpc0tl
eVdpbmRvdworeworICAgIHJldHVybiBZRVMgfHwgc2VsZiA9PSBfV0FLS2V5V2luZG93OyAKK30K
KworLSAodm9pZCltYWtlS2V5V2luZG93Cit7CisgICAgaWYgKFtzZWxmIGlzS2V5V2luZG93XSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIF9XQUtLZXlXaW5kb3cgPSBzZWxmOworfQorCist
IChCT09MKWlzVmlzaWJsZQoreworICAgIHJldHVybiBfdmlzaWJsZTsKK30KKworLSAodm9pZClz
ZXRWaXNpYmxlOihCT09MKXZpc2libGUKK3sKKyAgICBpZiAoX3Zpc2libGUgPT0gdmlzaWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgX3Zpc2libGUgPSB2aXNpYmxlOworCisgICAgV2ViVGhy
ZWFkUnVuKF57CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cG9zdE5vdGlmaWNhdGlvbk5hbWU6V0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNh
dGlvbiBvYmplY3Q6c2VsZiB1c2VySW5mbzpuaWxdOworICAgIH0pOworfQorCistIChOU1NlbGVj
dGlvbkRpcmVjdGlvbilrZXlWaWV3U2VsZWN0aW9uRGlyZWN0aW9uCit7CisgICAgcmV0dXJuIChO
U1NlbGVjdGlvbkRpcmVjdGlvbikwOworfQorCistIChCT09MKW1ha2VGaXJzdFJlc3BvbmRlcjoo
TlNSZXNwb25kZXIgKilhUmVzcG9uZGVyCit7CisgICAgaWYgKCFbYVJlc3BvbmRlciBpc0tpbmRP
ZkNsYXNzOltXQUtWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybiBOTzsKKworICAgIFdBS1Zp
ZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxXQUtWaWV3Kj4oYVJlc3BvbmRlcik7CisgICAgQk9PTCBy
ZXN1bHQgPSBZRVM7CisgICAgaWYgKHZpZXcgIT0gX3Jlc3BvbmRlclZpZXcpIHsKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugb2YgdGhlIHZpZXcgbm90IGFjY2VwdGluZyB0
byBiZSBhIGZpcnN0IHJlc3BvbmRlciwKKyAgICAgICAgLy8gd2hlcmUgd2UgZG9uJ3QgbmVlZCB0
byByZXNpZ24gYXMgZmlyc3QgcmVzcG9uZGVyLgorICAgICAgICBCT09MIGFjY2VwdHNGaXJzdFJl
c3BvbmRlciA9IHZpZXcgPyBXS1ZpZXdBY2NlcHRzRmlyc3RSZXNwb25kZXIoW3ZpZXcgX3ZpZXdS
ZWZdKSA6IFlFUzsKKyAgICAgICAgaWYgKGFjY2VwdHNGaXJzdFJlc3BvbmRlciAmJiBfcmVzcG9u
ZGVyVmlldykgeworICAgICAgICAgICAgX25leHRSZXNwb25kZXIgPSB2aWV3OworICAgICAgICAg
ICAgaWYgKFdLVmlld1Jlc2lnbkZpcnN0UmVzcG9uZGVyKFtfcmVzcG9uZGVyVmlldyBfdmlld1Jl
Zl0pKSB7CisgICAgICAgICAgICAgICAgX25leHRSZXNwb25kZXIgPSBuaWw7CisgICAgICAgICAg
ICAgICAgW19yZXNwb25kZXJWaWV3IHJlbGVhc2VdOworICAgICAgICAgICAgICAgIF9yZXNwb25k
ZXJWaWV3ID0gbmlsOworICAgICAgICAgICAgfSAgZWxzZSB7CisgICAgICAgICAgICAgICAgX25l
eHRSZXNwb25kZXIgPSBuaWw7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTk87CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ICYmIHZpZXcpIHsKKyAgICAg
ICAgICAgIGlmIChhY2NlcHRzRmlyc3RSZXNwb25kZXIgJiYgV0tWaWV3QmVjb21lRmlyc3RSZXNw
b25kZXIoW3ZpZXcgX3ZpZXdSZWZdKSkKKyAgICAgICAgICAgICAgICBfcmVzcG9uZGVyVmlldyA9
IFt2aWV3IHJldGFpbl07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gTk87CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBG
SVhNRTogVGhpcyBtZXRob2QgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlLiBSZW1vdmUgaWYg
cG9zc2libGUuCistICh2b2lkKXNldEZyYW1lOihOU1JlY3QpZnJhbWVSZWN0IGRpc3BsYXk6KEJP
T0wpZmxhZworeworICAgIFVOVVNFRF9QQVJBTShmbGFnKTsKKyAgICBfZnJhbWUgPSBmcmFtZVJl
Y3Q7Cit9CisKKy8vIEZJWE1FOiB0aGUgY29ycmVjdCB2YWx1ZSBpZiB0aGVyZSBpcyBhIGhvc3Qg
bGF5ZXIgaXMgbGlrZWx5IHRvIHJldHVybiBbX2hvc3RMYXllciBmcmFtZV0uCistIChDR1JlY3Qp
ZnJhbWUKK3sKKyAgICByZXR1cm4gX2ZyYW1lOworfQorCistICh2b2lkKXNldENvbnRlbnRSZWN0
OihDR1JlY3QpcmVjdAoreworICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChyZWN0LCBfZnJhbWUp
KQorICAgICAgICByZXR1cm47CisgICAgX2ZyYW1lID0gcmVjdDsKKworICAgIC8vIEZJWE1FOiBT
aXplIG9mIHRoZSBob3N0IGxheWVyIGlzIGRpcmVjdGx5IGF2YWlsYWJsZSBzbyB0aGVyZSBpcyBu
byByZWFsIHJlYXNvbiB0byBzYXZlIGl0IGhlcmUuCisgICAgLy8gSG93ZXZlciB3ZSBjdXJyZW50
bHkgdXNlIHRoaXMgY2FsbCB0byBjYXRjaCBjaGFuZ2VzIHRvIHRoZSBob3N0IGxheWVyIHNpemUu
CisgICAgaWYgKF90aWxlQ2FjaGUpCisgICAgICAgIF90aWxlQ2FjaGUtPmhvc3RMYXllclNpemVD
aGFuZ2VkKCk7Cit9CisKKy0gKHZvaWQpc2V0U2NyZWVuU2l6ZTooQ0dTaXplKXNpemUKK3sKKyAg
ICBfc2NyZWVuU2l6ZSA9IHNpemU7Cit9CisKKy0gKENHU2l6ZSlzY3JlZW5TaXplCit7CisgICAg
cmV0dXJuIF9zY3JlZW5TaXplOworfQorCistICh2b2lkKXNldEF2YWlsYWJsZVNjcmVlblNpemU6
KENHU2l6ZSlzaXplCit7CisgICAgX2F2YWlsYWJsZVNjcmVlblNpemUgPSBzaXplOworfQorCist
IChDR1NpemUpYXZhaWxhYmxlU2NyZWVuU2l6ZQoreworICAgIHJldHVybiBfYXZhaWxhYmxlU2Ny
ZWVuU2l6ZTsKK30KKworLSAodm9pZClzZXRTY3JlZW5TY2FsZTooQ0dGbG9hdClzY2FsZQorewor
ICAgIF9zY3JlZW5TY2FsZSA9IHNjYWxlOworCisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5h
bWU6V0FLV2luZG93U2NyZWVuU2NhbGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnNlbGYg
dXNlckluZm86bmlsXTsKKyAgICB9KTsKK30KKworLSAoQ0dGbG9hdClzY3JlZW5TY2FsZQorewor
ICAgIHJldHVybiBfc2NyZWVuU2NhbGU7Cit9CisKKy0gKHZvaWQpc2V0Um9vdExheWVyOihDQUxh
eWVyICopbGF5ZXIKK3sKKyAgICBfcm9vdExheWVyID0gbGF5ZXI7Cit9CisKKy0gKENBTGF5ZXIg
Kilyb290TGF5ZXIKK3sKKyAgICByZXR1cm4gX3Jvb3RMYXllcjsKK30KKworLSAodm9pZClzZW5k
RXZlbnQ6KFdlYkV2ZW50ICopYW5FdmVudAoreworICAgIEFTU0VSVChhbkV2ZW50KTsKKyAgICBX
ZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgW3NlbGYgc2VuZEV2ZW50U3luY2hyb25vdXNseTphbkV2
ZW50XTsKKyAgICB9KTsKK30KKworLSAodm9pZClzZW5kRXZlbnRTeW5jaHJvbm91c2x5OihXZWJF
dmVudCAqKWFuRXZlbnQKK3sKKyAgICBBU1NFUlQoYW5FdmVudCk7CisgICAgQVNTRVJUKFdlYlRo
cmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKyAgICBXZWJFdmVudCAqbGFzdEV2ZW50ID0gY3Vy
cmVudEV2ZW50OworICAgIGN1cnJlbnRFdmVudCA9IFthbkV2ZW50IHJldGFpbl07CisKKyAgICBz
d2l0Y2ggKGFuRXZlbnQudHlwZSkgeworICAgICAgICBjYXNlIFdlYkV2ZW50TW91c2VNb3ZlZDoK
KyAgICAgICAgY2FzZSBXZWJFdmVudFNjcm9sbFdoZWVsOgorICAgICAgICAgICAgaWYgKFdBS1Zp
ZXcgKmhpdFZpZXcgPSBbX2NvbnRlbnRWaWV3IGhpdFRlc3Q6KGFuRXZlbnQubG9jYXRpb25Jbldp
bmRvdyldKQorICAgICAgICAgICAgICAgIFtoaXRWaWV3IGhhbmRsZUV2ZW50OmFuRXZlbnRdOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBXZWJFdmVudE1vdXNlVXA6CisgICAg
ICAgIGNhc2UgV2ViRXZlbnRLZXlEb3duOgorICAgICAgICBjYXNlIFdlYkV2ZW50S2V5VXA6Cisg
ICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaENoYW5nZToKKyAgICAgICAgICAgIFtfcmVzcG9uZGVy
VmlldyBoYW5kbGVFdmVudDphbkV2ZW50XTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgV2ViRXZlbnRNb3VzZURvd246CisgICAgICAgIGNhc2UgV2ViRXZlbnRUb3VjaEJlZ2lu
OgorICAgICAgICBjYXNlIFdlYkV2ZW50VG91Y2hFbmQ6CisgICAgICAgIGNhc2UgV2ViRXZlbnRU
b3VjaENhbmNlbDoKKyAgICAgICAgICAgIGlmIChXQUtWaWV3ICpoaXRWaWV3ID0gW19jb250ZW50
VmlldyBoaXRUZXN0OihhbkV2ZW50LmxvY2F0aW9uSW5XaW5kb3cpXSkgeworICAgICAgICAgICAg
ICAgIFtzZWxmIG1ha2VGaXJzdFJlc3BvbmRlcjpoaXRWaWV3XTsKKyAgICAgICAgICAgICAgICBb
aGl0VmlldyBoYW5kbGVFdmVudDphbkV2ZW50XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFtjdXJyZW50RXZlbnQgcmVs
ZWFzZV07CisgICAgY3VycmVudEV2ZW50ID0gbGFzdEV2ZW50OworfQorCistICh2b2lkKXNlbmRN
b3VzZU1vdmVFdmVudDooV2ViRXZlbnQgKilhbkV2ZW50IGNvbnRlbnRDaGFuZ2U6KFdLQ29udGVu
dENoYW5nZSAqKWFDb250ZW50Q2hhbmdlCit7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAg
IFtzZWxmIHNlbmRFdmVudDphbkV2ZW50XTsKKworICAgICAgICBpZiAoYUNvbnRlbnRDaGFuZ2Up
CisgICAgICAgICAgICAqYUNvbnRlbnRDaGFuZ2UgPSBXS09ic2VydmVkQ29udGVudENoYW5nZSgp
OworICAgIH0pOworfQorCistICh2b2lkKXNldEV4cG9zZWRTY3JvbGxWaWV3UmVjdDooQ0dSZWN0
KWV4cG9zZWRTY3JvbGxWaWV3UmVjdAoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmX2V4
cG9zZWRTY3JvbGxWaWV3UmVjdExvY2spOworICAgIF9leHBvc2VkU2Nyb2xsVmlld1JlY3QgPSBl
eHBvc2VkU2Nyb2xsVmlld1JlY3Q7Cit9CisKKy0gKENHUmVjdClleHBvc2VkU2Nyb2xsVmlld1Jl
Y3QKK3sKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmX2V4cG9zZWRTY3Jv
bGxWaWV3UmVjdExvY2spOworICAgICAgICBpZiAoIUNHUmVjdElzTnVsbChfZXhwb3NlZFNjcm9s
bFZpZXdSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0Owor
ICAgIH0KKyAgICByZXR1cm4gW3NlbGYgdmlzaWJsZVJlY3RdOworfQorCisvLyBUaWxpbmcKKwor
LSAodm9pZClsYXlvdXRUaWxlcworeworICAgIGlmICghX3RpbGVDYWNoZSkKKyAgICAgICAgcmV0
dXJuOyAgICAKKyAgICBfdGlsZUNhY2hlLT5sYXlvdXRUaWxlcygpOworfQorCistICh2b2lkKWxh
eW91dFRpbGVzTm93Cit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAgICByZXR1cm47Cisg
ICAgX3RpbGVDYWNoZS0+bGF5b3V0VGlsZXNOb3coKTsKK30KKworLSAodm9pZClsYXlvdXRUaWxl
c05vd0ZvclJlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAg
ICByZXR1cm47CisgICAgX3RpbGVDYWNoZS0+bGF5b3V0VGlsZXNOb3dGb3JSZWN0KGVuY2xvc2lu
Z0ludFJlY3QocmVjdCkpOworfQorCistICh2b2lkKXNldE5lZWRzRGlzcGxheQoreworICAgIGlm
ICghX3RpbGVDYWNoZSkKKyAgICAgICAgcmV0dXJuOworICAgIF90aWxlQ2FjaGUtPnNldE5lZWRz
RGlzcGxheSgpOworfQorCistICh2b2lkKXNldE5lZWRzRGlzcGxheUluUmVjdDooQ0dSZWN0KXJl
Y3QKK3sKKyAgICBpZiAoIV90aWxlQ2FjaGUpCisgICAgICAgIHJldHVybjsKKyAgICBfdGlsZUNh
Y2hlLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Cit9CisK
Ky0gKEJPT0wpdGlsZXNPcGFxdWUKK3sKKyAgICBpZiAoIV90aWxlQ2FjaGUpCisgICAgICAgIHJl
dHVybiBOTzsKKyAgICByZXR1cm4gX3RpbGVDYWNoZS0+dGlsZXNPcGFxdWUoKTsKK30KKworLSAo
dm9pZClzZXRUaWxlc09wYXF1ZTooQk9PTClvcGFxdWUKK3sKKyAgICBpZiAoIV90aWxlQ2FjaGUp
CisgICAgICAgIHJldHVybjsKKyAgICBfdGlsZUNhY2hlLT5zZXRUaWxlc09wYXF1ZShvcGFxdWUp
OworfQorCistIChDR1JlY3QpX3Zpc2libGVSZWN0UmVzcGVjdGluZ01hc2tzVG9Cb3VuZHM6KEJP
T0wpcmVzcGVjdHNNYXNrc1RvQm91bmRzCit7CisgICAgaWYgKCFDR1JlY3RJc051bGwoX2Zyb3pl
blZpc2libGVSZWN0KSkKKyAgICAgICAgcmV0dXJuIF9mcm96ZW5WaXNpYmxlUmVjdDsKKworICAg
IENBTGF5ZXIqIGxheWVyID0gX2hvc3RMYXllcjsKKyAgICBDR1JlY3QgYm91bmRzID0gW2xheWVy
IGJvdW5kc107CisgICAgQ0dSZWN0IHJlY3QgPSBib3VuZHM7CisgICAgQ0FMYXllciogc3VwZXJs
YXllciA9IFtsYXllciBzdXBlcmxheWVyXTsKKworICAgIHdoaWxlIChzdXBlcmxheWVyICYmIGxh
eWVyICE9IF9yb290TGF5ZXIpIHsKKyAgICAgICAgQ0dSZWN0IHJlY3RJblN1cGVyID0gW3N1cGVy
bGF5ZXIgY29udmVydFJlY3Q6cmVjdCBmcm9tTGF5ZXI6bGF5ZXJdOworICAgICAgICBpZiAoW3N1
cGVybGF5ZXIgbWFza3NUb0JvdW5kc10gfHwgIXJlc3BlY3RzTWFza3NUb0JvdW5kcykKKyAgICAg
ICAgICAgIHJlY3QgPSBDR1JlY3RJbnRlcnNlY3Rpb24oW3N1cGVybGF5ZXIgYm91bmRzXSwgcmVj
dEluU3VwZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN0ID0gcmVjdEluU3VwZXI7
CisgICAgICAgIGxheWVyID0gc3VwZXJsYXllcjsKKyAgICAgICAgc3VwZXJsYXllciA9IFtsYXll
ciBzdXBlcmxheWVyXTsKKyAgICB9CisgICAgCisgICAgaWYgKGxheWVyICE9IF9ob3N0TGF5ZXIp
IHsKKyAgICAgICAgcmVjdCA9IENHUmVjdEludGVyc2VjdGlvbihbbGF5ZXIgYm91bmRzXSwgcmVj
dCk7CisgICAgICAgIHJlY3QgPSBbX2hvc3RMYXllciBjb252ZXJ0UmVjdDpyZWN0IGZyb21MYXll
cjpsYXllcl07CisgICAgfQorICAgIAorICAgIHJldHVybiBDR1JlY3RJbnRlcnNlY3Rpb24oYm91
bmRzLCByZWN0KTsKK30KKworLSAoQ0dSZWN0KXZpc2libGVSZWN0Cit7CisgICAgcmV0dXJuIFtz
ZWxmIF92aXNpYmxlUmVjdFJlc3BlY3RpbmdNYXNrc1RvQm91bmRzOk5PXTsKK30KKworLSAoQ0dS
ZWN0KWV4dGVuZGVkVmlzaWJsZVJlY3QKK3sKKyAgICByZXR1cm4gW3NlbGYgX3Zpc2libGVSZWN0
UmVzcGVjdGluZ01hc2tzVG9Cb3VuZHM6WUVTXTsKK30KKworLSAodm9pZClyZW1vdmVBbGxOb25W
aXNpYmxlVGlsZXMKK3sKKyAgICBpZiAoIV90aWxlQ2FjaGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBfdGlsZUNhY2hlLT5yZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKTsKK30KKworLSAodm9pZCly
ZW1vdmVBbGxUaWxlcworeworICAgIGlmICghX3RpbGVDYWNoZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIF90aWxlQ2FjaGUtPnJlbW92ZUFsbFRpbGVzKCk7Cit9CisKKy0gKHZvaWQpcmVtb3ZlRm9y
ZWdyb3VuZFRpbGVzCit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAgICByZXR1cm47Cisg
ICAgX3RpbGVDYWNoZS0+cmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCk7Cit9CisKKy0gKHZvaWQpc2V0
VGlsaW5nTW9kZTooV0FLV2luZG93VGlsaW5nTW9kZSltb2RlCit7CisgICAgaWYgKCFfdGlsZUNh
Y2hlKQorICAgICAgICByZXR1cm47CisgICAgX3RpbGVDYWNoZS0+c2V0VGlsaW5nTW9kZSgoVGls
ZUNhY2hlOjpUaWxpbmdNb2RlKW1vZGUpOworfQorCistIChXQUtXaW5kb3dUaWxpbmdNb2RlKXRp
bGluZ01vZGUKK3sKKyAgICBpZiAoIV90aWxlQ2FjaGUpCisgICAgICAgIHJldHVybiBrV0FLV2lu
ZG93VGlsaW5nTW9kZURpc2FibGVkOworICAgIHJldHVybiAoV0FLV2luZG93VGlsaW5nTW9kZSlf
dGlsZUNhY2hlLT50aWxpbmdNb2RlKCk7Cit9CisKKy0gKHZvaWQpc2V0VGlsaW5nRGlyZWN0aW9u
OihXQUtUaWxpbmdEaXJlY3Rpb24pdGlsaW5nRGlyZWN0aW9uCit7CisgICAgaWYgKCFfdGlsZUNh
Y2hlKQorICAgICAgICByZXR1cm47CisgICAgX3RpbGVDYWNoZS0+c2V0VGlsaW5nRGlyZWN0aW9u
KChUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvbil0aWxpbmdEaXJlY3Rpb24pOworfQorCistIChX
QUtUaWxpbmdEaXJlY3Rpb24pdGlsaW5nRGlyZWN0aW9uCit7CisgICAgaWYgKCFfdGlsZUNhY2hl
KQorICAgICAgICByZXR1cm4ga1dBS1RpbGluZ0RpcmVjdGlvbkRvd247CisgICAgcmV0dXJuIChX
QUtUaWxpbmdEaXJlY3Rpb24pX3RpbGVDYWNoZS0+dGlsaW5nRGlyZWN0aW9uKCk7Cit9CisKKy0g
KHZvaWQpc2V0Wm9vbWVkT3V0VGlsZVNjYWxlOihmbG9hdClzY2FsZQoreworICAgIGlmICghX3Rp
bGVDYWNoZSkKKyAgICAgICAgcmV0dXJuOworICAgIF90aWxlQ2FjaGUtPnNldFpvb21lZE91dFNj
YWxlKHNjYWxlKTsKK30KKworLSAoZmxvYXQpem9vbWVkT3V0VGlsZVNjYWxlCit7CisgICAgaWYg
KCFfdGlsZUNhY2hlKQorICAgICAgICByZXR1cm4gMS4wZjsKKyAgICByZXR1cm4gX3RpbGVDYWNo
ZS0+em9vbWVkT3V0U2NhbGUoKTsKK30KKworLSAodm9pZClzZXRDdXJyZW50VGlsZVNjYWxlOihm
bG9hdClzY2FsZQoreworICAgIGlmICghX3RpbGVDYWNoZSkKKyAgICAgICAgcmV0dXJuOworICAg
IF90aWxlQ2FjaGUtPnNldEN1cnJlbnRTY2FsZShzY2FsZSk7Cit9CisKKy0gKGZsb2F0KWN1cnJl
bnRUaWxlU2NhbGUKK3sKKyAgICBpZiAoIV90aWxlQ2FjaGUpCisgICAgICAgIHJldHVybiAxLjBm
OworICAgIHJldHVybiBfdGlsZUNhY2hlLT5jdXJyZW50U2NhbGUoKTsKK30KKworLSAodm9pZClz
ZXRLZWVwc1pvb21lZE91dFRpbGVzOihCT09MKWtlZXBzWm9vbWVkT3V0VGlsZXMKK3sKKyAgICBp
ZiAoIV90aWxlQ2FjaGUpCisgICAgICAgIHJldHVybjsKKyAgICBfdGlsZUNhY2hlLT5zZXRLZWVw
c1pvb21lZE91dFRpbGVzKGtlZXBzWm9vbWVkT3V0VGlsZXMpOworfQorCistIChCT09MKWtlZXBz
Wm9vbWVkT3V0VGlsZXMKK3sKKyAgICBpZiAoIV90aWxlQ2FjaGUpCisgICAgICAgIHJldHVybiBO
TzsKKyAgICByZXR1cm4gX3RpbGVDYWNoZS0+a2VlcHNab29tZWRPdXRUaWxlcygpOworfQorCist
IChUaWxlQ2FjaGUqKXRpbGVDYWNoZQoreworICAgIHJldHVybiBfdGlsZUNhY2hlOworfQorCist
IChCT09MKWhhc1BlbmRpbmdEcmF3Cit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAgICBy
ZXR1cm4gTk87CisgICAgIHJldHVybiBfdGlsZUNhY2hlLT5oYXNQZW5kaW5nRHJhdygpOworfQor
CistICh2b2lkKXNldENvbnRlbnRSZXBsYWNlbWVudEltYWdlOihDR0ltYWdlUmVmKWNvbnRlbnRS
ZXBsYWNlbWVudEltYWdlCit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAgICByZXR1cm47
CisgICAgX3RpbGVDYWNoZS0+c2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2UoY29udGVudFJlcGxh
Y2VtZW50SW1hZ2UpOworfQorCistIChDR0ltYWdlUmVmKWNvbnRlbnRSZXBsYWNlbWVudEltYWdl
Cit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1
cm4gX3RpbGVDYWNoZS0+Y29udGVudFJlcGxhY2VtZW50SW1hZ2UoKS5nZXQoKTsKK30KKworLSAo
dm9pZClkaXNwbGF5UmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBbW3NlbGYgY29udGVudFZpZXdd
IGRpc3BsYXlSZWN0OnJlY3RdOworfQorCistICh2b2lkKXdpbGxSb3RhdGUKK3sKKyAgICBbc2Vs
ZiBmcmVlemVWaXNpYmxlUmVjdF07Cit9CisKKy0gKHZvaWQpZGlkUm90YXRlCit7CisgICAgW3Nl
bGYgdW5mcmVlemVWaXNpYmxlUmVjdF07Cit9CisKKy0gKHZvaWQpZnJlZXplVmlzaWJsZVJlY3QK
K3sKKyAgICBfZnJvemVuVmlzaWJsZVJlY3QgPSBbc2VsZiB2aXNpYmxlUmVjdF07Cit9CisKKy0g
KHZvaWQpdW5mcmVlemVWaXNpYmxlUmVjdAoreworICAgIF9mcm96ZW5WaXNpYmxlUmVjdCA9IENH
UmVjdE51bGw7Cit9CisKKysgKHZvaWQpc2V0T3JpZW50YXRpb25Qcm92aWRlcjooaWQpcHJvdmlk
ZXIKK3sKKyAgICAvLyBUaGlzIGlzIHJlYWxseSB0aGUgVUlXZWJEb2N1bWVudFZpZXcgY2xhc3Mg
dGhhdCBjYWxscyBpbnRvIFVJQXBwbGljYXRpb24gdG8gZ2V0IHRoZSBvcmllbnRhdGlvbi4KKyAg
ICBnT3JpZW50YXRpb25Qcm92aWRlciA9IHByb3ZpZGVyOworfQorCisrIChCT09MKWhhc0xhbmRz
Y2FwZU9yaWVudGF0aW9uCit7CisgICAgLy8gdGhpcyBzaG91bGQgYmUgcGVyZmVjdGx5IHRocmVh
ZCBzYWZlCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gNjAwMDAKKyAg
ICByZXR1cm4gW2dPcmllbnRhdGlvblByb3ZpZGVyIGhhc0xhbmRzY2FwZU9yaWVudGF0aW9uXTsK
KyNlbHNlCisgICAgaW50IG9yaWVudGF0aW9uID0gW2dPcmllbnRhdGlvblByb3ZpZGVyIG9yaWVu
dGF0aW9uXTsKKyAgICByZXR1cm4gb3JpZW50YXRpb24gPT0gOTAgfHwgb3JpZW50YXRpb24gPT0g
LTkwOworI2VuZGlmCit9CisKKy0gKENBTGF5ZXIqKWhvc3RMYXllcgoreworICAgIHJldHVybiBf
aG9zdExheWVyOworfQorCistICh2b2lkKXNldFRpbGVCb3JkZXJzVmlzaWJsZTooQk9PTCl2aXNp
YmxlCit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBfdGls
ZUNhY2hlLT5zZXRUaWxlQm9yZGVyc1Zpc2libGUodmlzaWJsZSk7Cit9CisKKy0gKHZvaWQpc2V0
VGlsZVBhaW50Q291bnRzVmlzaWJsZTooQk9PTCl2aXNpYmxlCit7CisgICAgaWYgKCFfdGlsZUNh
Y2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBfdGlsZUNhY2hlLT5zZXRUaWxlUGFpbnRDb3Vu
dGVyc1Zpc2libGUodmlzaWJsZSk7Cit9CisKKy0gKHZvaWQpc2V0QWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZDooQk9PTCllbmFibGVkCit7CisgICAgaWYgKCFfdGlsZUNhY2hlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBfdGlsZUNhY2hlLT5zZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGVu
YWJsZWQpOworfQorCistICh2b2lkKWR1bXBUaWxlcworeworICAgIENHUmVjdCBzYXZlZEZyb3pl
blZpc2libGVSZWN0ID0gX2Zyb3plblZpc2libGVSZWN0OworICAgIE5TTG9nKEAiPT09PT09PT09
PT09PT09PT0iKTsKKyAgICBpZiAoIUNHUmVjdElzTnVsbChfZnJvemVuVmlzaWJsZVJlY3QpKSB7
CisgICAgICAgIE5TTG9nKEAiVklTSUJMRSBSRUNUIElTIENBQ0hFRDogWyU2LjFmICU2LjFmICU2
LjFmICU2LjFmXSIsIF9mcm96ZW5WaXNpYmxlUmVjdC5vcmlnaW4ueCwgX2Zyb3plblZpc2libGVS
ZWN0Lm9yaWdpbi55LCBfZnJvemVuVmlzaWJsZVJlY3Quc2l6ZS53aWR0aCwgX2Zyb3plblZpc2li
bGVSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICAgICAgX2Zyb3plblZpc2libGVSZWN0ID0gQ0dSZWN0
TnVsbDsKKyAgICB9CisgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gW3NlbGYgdmlzaWJsZVJlY3Rd
OworICAgIE5TTG9nKEAidmlzaWJsZVJlY3QgPSBbJTYuMWYgJTYuMWYgJTYuMWYgJTYuMWZdIiwg
dmlzaWJsZVJlY3Qub3JpZ2luLngsIHZpc2libGVSZWN0Lm9yaWdpbi55LCB2aXNpYmxlUmVjdC5z
aXplLndpZHRoLCB2aXNpYmxlUmVjdC5zaXplLmhlaWdodCk7CisgICAgX2Zyb3plblZpc2libGVS
ZWN0ID0gc2F2ZWRGcm96ZW5WaXNpYmxlUmVjdDsKKyAgICBfdGlsZUNhY2hlLT5kdW1wVGlsZXMo
KTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgoreworICAgIE5TTXV0YWJsZVN0cmlu
ZyAqZGVzY3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUA6
IFdBSzogJXA7ICIsIFtzZWxmIGNsYXNzXSwgc2VsZl07CisKKyAgICBDR1JlY3QgZnJhbWUgPSBb
c2VsZiBmcmFtZV07CisgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAImZyYW1lID0gKCVn
ICVnOyAlZyAlZyk7ICIsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6
ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHRdOworCisgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZv
cm1hdDpAImZpcnN0IHJlc3BvbmRlciA9IFdLICVwOyAiLCBfcmVzcG9uZGVyVmlld107CisgICAg
W2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAIm5leHQgcmVzcG9uZGVyID0gV0sgJXA7ICIsIF9u
ZXh0UmVzcG9uZGVyXTsKKworICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCJsYXllciA9
ICVAPiIsIFtfaG9zdExheWVyIGRlc2NyaXB0aW9uXV07CisKKyAgICByZXR1cm4gZGVzY3JpcHRp
b247Cit9CisKKysgKFdlYkV2ZW50ICopY3VycmVudEV2ZW50Cit7CisgICAgcmV0dXJuIGN1cnJl
bnRFdmVudDsKK30KKworLSAoTlNTdHJpbmcgKilyZWN1cnNpdmVEZXNjcmlwdGlvbgoreworICAg
IE5TTXV0YWJsZVN0cmluZyAqaW5mbyA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKKworICAg
IFtpbmZvIGFwcGVuZFN0cmluZzpbc2VsZiBkZXNjcmlwdGlvbl1dOworCisgICAgW1tzZWxmIGNv
bnRlbnRWaWV3XSBfYXBwZW5kRGVzY3JpcHRpb25Ub1N0cmluZzppbmZvIGF0TGV2ZWw6MV07CisK
KyAgICByZXR1cm4gaW5mbzsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0NvbnRlbnRPYnNl
cnZhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLQ29udGVudE9i
c2VydmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTU4MTlhYjRjYjliYzY5OTgzNzA3YjVjMzgxMTQz
ZjNjMGQ4ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XS0NvbnRlbnRPYnNlcnZhdGlvbi5jcHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tDb250ZW50T2JzZXJ2
YXRpb24uaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CitXS0NvbnRlbnRDaGFuZ2UgX1dLQ29udGVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgPSBX
S0NvbnRlbnROb0NoYW5nZTsKK2Jvb2wgICAgICAgICAgICBfV0tPYnNlcnZpbmdDb250ZW50Q2hh
bmdlcyAgICAgICAgICA9IGZhbHNlOworYm9vbCAgICAgICAgICAgIF9XS09ic2VydmluZ0luZGV0
ZXJtaW5hdGVDaGFuZ2VzICAgID0gZmFsc2U7CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK2Jv
b2wgV0tPYnNlcnZpbmdDb250ZW50Q2hhbmdlcyh2b2lkKQoreworICAgIHJldHVybiBfV0tPYnNl
cnZpbmdDb250ZW50Q2hhbmdlczsKK30KKwordm9pZCBXS1N0b3BPYnNlcnZpbmdDb250ZW50Q2hh
bmdlcyh2b2lkKQoreworICAgIF9XS09ic2VydmluZ0NvbnRlbnRDaGFuZ2VzID0gZmFsc2U7Cisg
ICAgX1dLT2JzZXJ2aW5nSW5kZXRlcm1pbmF0ZUNoYW5nZXMgPSBmYWxzZTsKK30KKwordm9pZCBX
S0JlZ2luT2JzZXJ2aW5nQ29udGVudENoYW5nZXMoYm9vbCBhbGxvd3NJbnRlZGV0ZXJtaW5hdGVD
aGFuZ2VzKQoreworICAgIF9XS0NvbnRlbnRDaGFuZ2UgPSBXS0NvbnRlbnROb0NoYW5nZTsKKyAg
ICBfV0tPYnNlcnZpbmdDb250ZW50Q2hhbmdlcyA9IHRydWU7CisgICAgCisgICAgX1dLT2JzZXJ2
aW5nSW5kZXRlcm1pbmF0ZUNoYW5nZXMgPSBhbGxvd3NJbnRlZGV0ZXJtaW5hdGVDaGFuZ2VzOwor
ICAgIGlmIChfV0tPYnNlcnZpbmdJbmRldGVybWluYXRlQ2hhbmdlcykKKyAgICAgICAgV2ViVGhy
ZWFkQ2xlYXJPYnNlcnZlZENvbnRlbnRNb2RpZmllcnMoKTsKK30KKworV0tDb250ZW50Q2hhbmdl
IFdLT2JzZXJ2ZWRDb250ZW50Q2hhbmdlKHZvaWQpCit7CisgICAgcmV0dXJuIF9XS0NvbnRlbnRD
aGFuZ2U7Cit9CisKK3ZvaWQgV0tTZXRPYnNlcnZlZENvbnRlbnRDaGFuZ2UoV0tDb250ZW50Q2hh
bmdlIGFDaGFuZ2UpCit7CisgICAgaWYgKGFDaGFuZ2UgPiBfV0tDb250ZW50Q2hhbmdlICYmIChf
V0tPYnNlcnZpbmdJbmRldGVybWluYXRlQ2hhbmdlcyB8fCBhQ2hhbmdlICE9IFdLQ29udGVudElu
ZGV0ZXJtaW5hdGVDaGFuZ2UpKSB7CisgICAgICAgIF9XS0NvbnRlbnRDaGFuZ2UgPSBhQ2hhbmdl
OworICAgICAgICBpZiAoX1dLQ29udGVudENoYW5nZSA9PSBXS0NvbnRlbnRWaXNpYmlsaXR5Q2hh
bmdlKQorICAgICAgICAgICAgV2ViVGhyZWFkQ2xlYXJPYnNlcnZlZENvbnRlbnRNb2RpZmllcnMo
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBIYXNoTWFwPHZvaWQgKiwgdm9pZCAqPiAqIFdlYlRocmVh
ZEdldE9ic2VydmVkQ29udGVudE1vZGlmaWVycygpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElz
TG9ja2VkT3JEaXNhYmxlZCgpKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dm9pZCAqLCB2b2lkICo+
IFZvaWRWb2lkTWFwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVm9pZFZvaWRNYXAsIG9ic2Vy
dmVkQ29udGVudE1vZGlmaWVycywgKCkpOworICAgIHJldHVybiAmb2JzZXJ2ZWRDb250ZW50TW9k
aWZpZXJzOworfQorCitpbnQgV2ViVGhyZWFkQ291bnRPZk9ic2VydmVkQ29udGVudE1vZGlmaWVy
cyh2b2lkKQoreworICAgIHJldHVybiBXZWJUaHJlYWRHZXRPYnNlcnZlZENvbnRlbnRNb2RpZmll
cnMoKS0+c2l6ZSgpOworfQorCit2b2lkIFdlYlRocmVhZENsZWFyT2JzZXJ2ZWRDb250ZW50TW9k
aWZpZXJzKCkKK3sKKyAgICBXZWJUaHJlYWRHZXRPYnNlcnZlZENvbnRlbnRNb2RpZmllcnMoKS0+
Y2xlYXIoKTsKK30KKworYm9vbCBXZWJUaHJlYWRDb250YWluc09ic2VydmVkQ29udGVudE1vZGlm
aWVyKHZvaWQgKiBhQ29udGVudE1vZGlmaWVyKQoreworICAgIHJldHVybiBXZWJUaHJlYWRHZXRP
YnNlcnZlZENvbnRlbnRNb2RpZmllcnMoKS0+Y29udGFpbnMoYUNvbnRlbnRNb2RpZmllcik7Cit9
CisKK3ZvaWQgV2ViVGhyZWFkQWRkT2JzZXJ2ZWRDb250ZW50TW9kaWZpZXIodm9pZCAqIGFDb250
ZW50TW9kaWZpZXIpCit7CisgICAgaWYgKF9XS0NvbnRlbnRDaGFuZ2UgIT0gV0tDb250ZW50Vmlz
aWJpbGl0eUNoYW5nZSAmJiBfV0tPYnNlcnZpbmdJbmRldGVybWluYXRlQ2hhbmdlcykKKyAgICAg
ICAgV2ViVGhyZWFkR2V0T2JzZXJ2ZWRDb250ZW50TW9kaWZpZXJzKCktPnNldChhQ29udGVudE1v
ZGlmaWVyLCBhQ29udGVudE1vZGlmaWVyKTsKK30KKwordm9pZCBXZWJUaHJlYWRSZW1vdmVPYnNl
cnZlZENvbnRlbnRNb2RpZmllcih2b2lkICogYUNvbnRlbnRNb2RpZmllcikKK3sKKyAgICBXZWJU
aHJlYWRHZXRPYnNlcnZlZENvbnRlbnRNb2RpZmllcnMoKS0+cmVtb3ZlKGFDb250ZW50TW9kaWZp
ZXIpOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0NvbnRlbnRPYnNlcnZhdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0NvbnRlbnRPYnNlcnZhdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc4ZmNlM2FkZjIzM2Q5ZWRhMzIwYjMzODc0ZmEwM2VjZWRmODE2YjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLQ29udGVudE9ic2VydmF0aW9u
LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tD
b250ZW50T2JzZXJ2YXRpb25faAorI2RlZmluZSBXS0NvbnRlbnRPYnNlcnZhdGlvbl9oCisKKyNp
ZiBUQVJHRVRfT1NfSVBIT05FCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7Cisj
ZW5kaWYKKwordHlwZWRlZiBlbnVtCit7CisgICAgV0tDb250ZW50Tm9DaGFuZ2UgICAgICAgICAg
ICAgICA9IDAsCisgICAgV0tDb250ZW50VmlzaWJpbGl0eUNoYW5nZSAgICAgICA9IDIsCisgICAg
V0tDb250ZW50SW5kZXRlcm1pbmF0ZUNoYW5nZSAgICA9IDEKK30gICBXS0NvbnRlbnRDaGFuZ2U7
CisKK2Jvb2wgV0tPYnNlcnZpbmdDb250ZW50Q2hhbmdlcyh2b2lkKTsKKwordm9pZCBXS1N0b3BP
YnNlcnZpbmdDb250ZW50Q2hhbmdlcyh2b2lkKTsKK3ZvaWQgV0tCZWdpbk9ic2VydmluZ0NvbnRl
bnRDaGFuZ2VzKGJvb2wgYWxsb3dzSW50ZWRldGVybWluYXRlQ2hhbmdlcyk7CisKK1dLQ29udGVu
dENoYW5nZSBXS09ic2VydmVkQ29udGVudENoYW5nZSh2b2lkKTsKK3ZvaWQgV0tTZXRPYnNlcnZl
ZENvbnRlbnRDaGFuZ2UoV0tDb250ZW50Q2hhbmdlIGFDaGFuZ2UpOworCitpbnQgV2ViVGhyZWFk
Q291bnRPZk9ic2VydmVkQ29udGVudE1vZGlmaWVycyh2b2lkKTsKK3ZvaWQgV2ViVGhyZWFkQ2xl
YXJPYnNlcnZlZENvbnRlbnRNb2RpZmllcnModm9pZCk7CisKK2Jvb2wgV2ViVGhyZWFkQ29udGFp
bnNPYnNlcnZlZENvbnRlbnRNb2RpZmllcih2b2lkICogYUNvbnRlbnRNb2RpZmllcik7Cit2b2lk
IFdlYlRocmVhZEFkZE9ic2VydmVkQ29udGVudE1vZGlmaWVyKHZvaWQgKiBhQ29udGVudE1vZGlm
aWVyKTsKK3ZvaWQgV2ViVGhyZWFkUmVtb3ZlT2JzZXJ2ZWRDb250ZW50TW9kaWZpZXIodm9pZCAq
IGFDb250ZW50TW9kaWZpZXIpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisj
ZW5kaWYgLy8gVEFSR0VUX09TX0lQSE9ORQorCisjZW5kaWYgLy8gV0tDb250ZW50T2JzZXJ2YXRp
b25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0dyYXBo
aWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLR3JhcGhpY3MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jM2YzMDE3YWVhN2EzYTkzM2E2OGNhY2Y1MzY0YTJmNzhhZmVmZjI3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0dyYXBoaWNzLmgK
QEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V0tHcmFwaGljc19oCisjZGVmaW5lIFdLR3JhcGhpY3NfaAorCisjaWYgVEFSR0VUX09TX0lQSE9O
RQorCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxDb3Jl
R3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4
dGVybiAiQyIgeworI2VuZGlmCisKK0NHQ29udGV4dFJlZiBXS0dldEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQodm9pZCk7Cit2b2lkIFdLU2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRS
ZWYgY29udGV4dCk7CisKK3ZvaWQgV0tSZWN0RmlsbChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dS
ZWN0IGFSZWN0KTsKK3ZvaWQgV0tSZWN0RmlsbFVzaW5nT3BlcmF0aW9uKENHQ29udGV4dFJlZiBj
b250ZXh0LCBDR1JlY3QgYVJlY3QsIENHQ29tcG9zaXRlT3BlcmF0aW9uIG9wKTsKKworQ0dJbWFn
ZVJlZiBXS0dyYXBoaWNzQ3JlYXRlSW1hZ2VGcm9tQnVuZGxlV2l0aE5hbWUoY29uc3QgY2hhciAq
aW1hZ2VfZmlsZSk7CitDR1BhdHRlcm5SZWYgV0tDcmVhdGVQYXR0ZXJuRnJvbUNHSW1hZ2UoQ0dJ
bWFnZVJlZiBpbWFnZVJlZik7Cit2b2lkIFdLU2V0UGF0dGVybihDR0NvbnRleHRSZWYgY29udGV4
dCwgQ0dQYXR0ZXJuUmVmIHBhdHRlcm4sIGJvb2wgZmlsbCwgYm9vbCBzdHJva2UpOworCisjaWZk
ZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2NsYXNzIFdL
Rm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIKK3sKK3B1YmxpYzoKKworICAgIFdLRm9udEFudGlh
bGlhc2luZ1N0YXRlU2F2ZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgdXNlT3JpZW50YXRp
b25EZXBlbmRlbnRGb250QW50aWFsaWFzaW5nKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0
KQorICAgICAgICAsIG1fdXNlT3JpZW50YXRpb25EZXBlbmRlbnRGb250QW50aWFsaWFzaW5nKHVz
ZU9yaWVudGF0aW9uRGVwZW5kZW50Rm9udEFudGlhbGlhc2luZykKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBzZXR1cChib29sIGlzTGFuZHNjYXBlT3JpZW50YXRpb24pOworICAgIHZvaWQgcmVz
dG9yZSgpOworCitwcml2YXRlOgorCisjaWYgUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKKyNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjaWYgZGVmaW5lZChfX2hhc193YXJuaW5nKSAmJiBf
X2hhc193YXJuaW5nKCItV3VudXNlZC1wcml2YXRlLWZpZWxkIikKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wcml2YXRlLWZpZWxkIgorI2VuZGlmCisjZW5kaWYK
KyAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0OworICAgIGJvb2wgbV91c2VPcmllbnRhdGlvbkRl
cGVuZGVudEZvbnRBbnRpYWxpYXNpbmc7CisgICAgQ0dGb250QW50aWFsaWFzaW5nU3R5bGUgbV9v
bGRBbnRpYWxpYXNpbmdTdHlsZTsKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCit9OworI2VuZGlmCisKKyNlbmRpZiAvLyBU
QVJHRVRfT1NfSVBIT05FCisKKyNlbmRpZiAvLyBXS0dyYXBoaWNzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tHcmFwaGljcy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy93YWsvV0tHcmFwaGljcy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTdlNjhhMzU5
NjQxMDVjNjE0ODBhYWYxODVkN2Q0OTQyZDJhMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS0dyYXBoaWNzLm1tCkBAIC0wLDAgKzEsMTk3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJXS0dyYXBoaWNzLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIldlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIldlYkNvcmVU
aHJlYWQuaCIKKyNpbXBvcnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2ltcG9ydCA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIGlubGluZSB2
b2lkIF9GaWxsUmVjdHNVc2luZ09wZXJhdGlvbihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3Qg
Q0dSZWN0KiByZWN0cywgaW50IGNvdW50LCBDR0NvbXBvc2l0ZU9wZXJhdGlvbiBvcCkKK3sKKyAg
ICBpbnQgaTsKKyAgICBDR1JlY3QgKmludGVncmFsUmVjdHMgPSByZWludGVycHJldF9jYXN0PENH
UmVjdCAqPihhbGxvY2Eoc2l6ZW9mKENHUmVjdCkgKiBjb3VudCkpOworICAgIAorICAgIGFzc2Vy
dCAoaW50ZWdyYWxSZWN0cyk7CisgICAgCisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKKyAgICAgICAgaW50ZWdyYWxSZWN0c1tpXSA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3Jt
IChyZWN0c1tpXSwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKTsKKyAgICAgICAgaW50ZWdyYWxS
ZWN0c1tpXSA9IENHUmVjdEludGVncmFsIChpbnRlZ3JhbFJlY3RzW2ldKTsKKyAgICAgICAgaW50
ZWdyYWxSZWN0c1tpXSA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtIChpbnRlZ3JhbFJlY3Rz
W2ldLCBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsK
KyAgICB9CisgICAgQ0dDb21wb3NpdGVPcGVyYXRpb24gb2xkT3AgPSBDR0NvbnRleHRHZXRDb21w
b3NpdGVPcGVyYXRpb24oY29udGV4dCk7CisgICAgQ0dDb250ZXh0U2V0Q29tcG9zaXRlT3BlcmF0
aW9uKGNvbnRleHQsIG9wKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgaW50ZWdy
YWxSZWN0cywgY291bnQpOworICAgIENHQ29udGV4dFNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250
ZXh0LCBvbGRPcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfRmlsbFJlY3RVc2luZ09wZXJh
dGlvbihDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IHJlY3QsIENHQ29tcG9zaXRlT3BlcmF0
aW9uIG9wKQoreworICAgIGlmIChyZWN0LnNpemUud2lkdGggPiAwICYmIHJlY3Quc2l6ZS5oZWln
aHQgPiAwKSB7CisgICAgICAgIF9GaWxsUmVjdHNVc2luZ09wZXJhdGlvbiAoY29udGV4dCwgJnJl
Y3QsIDEsIG9wKTsKKyAgICB9Cit9CisKK3ZvaWQgV0tSZWN0RmlsbChDR0NvbnRleHRSZWYgY29u
dGV4dCwgQ0dSZWN0IGFSZWN0KQoreworICAgIGlmIChhUmVjdC5zaXplLndpZHRoID4gMCAmJiBh
UmVjdC5zaXplLmhlaWdodCA+IDApIHsKKyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250
ZXh0KTsKKyAgICAgICAgX0ZpbGxSZWN0VXNpbmdPcGVyYXRpb24oY29udGV4dCwgYVJlY3QsIGtD
R0NvbXBvc2l0ZUNvcHkpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OworICAgIH0KK30KKwordm9pZCBXS1JlY3RGaWxsVXNpbmdPcGVyYXRpb24oQ0dDb250ZXh0UmVm
IGNvbnRleHQsIENHUmVjdCBhUmVjdCwgQ0dDb21wb3NpdGVPcGVyYXRpb24gb3ApCit7CisgICAg
aWYgKGFSZWN0LnNpemUud2lkdGggPiAwICYmIGFSZWN0LnNpemUuaGVpZ2h0ID4gMC4wKSB7Cisg
ICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgICAgIF9GaWxsUmVjdFVz
aW5nT3BlcmF0aW9uKGNvbnRleHQsIGFSZWN0LCBvcCk7CisgICAgICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CisgICAgfQorfQorCit2b2lkIFdLU2V0Q3VycmVudEdyYXBoaWNz
Q29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBXZWJUaHJlYWRDb250ZXh0KiB0
aHJlYWRDb250ZXh0ID0gIFdlYlRocmVhZEN1cnJlbnRDb250ZXh0KCk7CisgICAgdGhyZWFkQ29u
dGV4dC0+Y3VycmVudENHQ29udGV4dCA9IGNvbnRleHQ7Cit9CisKK0NHQ29udGV4dFJlZiBXS0dl
dEN1cnJlbnRHcmFwaGljc0NvbnRleHQodm9pZCkKK3sKKyAgICBXZWJUaHJlYWRDb250ZXh0KiB0
aHJlYWRDb250ZXh0ID0gIFdlYlRocmVhZEN1cnJlbnRDb250ZXh0KCk7CisgICAgcmV0dXJuIHRo
cmVhZENvbnRleHQtPmN1cnJlbnRDR0NvbnRleHQ7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqaW1h
Z2VSZXNvdXJjZVBhdGgoY29uc3QgY2hhciogaW1hZ2VGaWxlLCBib29sIGlzMngpCit7CisgICAg
TlNTdHJpbmcgKmZpbGVOYW1lID0gaXMyeCA/IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JXNAMngiLCBpbWFnZUZpbGVdIDogW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmltYWdl
RmlsZV07CisjaWYgUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKKyAgICBOU0J1bmRsZSAqYnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkNvcmUiXTsK
KyAgICByZXR1cm4gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6ZmlsZU5hbWUgb2ZUeXBlOkAicG5n
Il07CisjZWxzZQorICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS83NzgwNjY1
PiBDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTCB0YWtlcyBhIGxvbmcgdGltZSBvbiBpUGhvbmUgM0cu
CisgICAgTlNTdHJpbmcgKmltYWdlRGlyZWN0b3J5ID0gQCIvU3lzdGVtL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3MvV2ViQ29yZS5mcmFtZXdvcmsiOworICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIiVALyVALnBuZyIsIGltYWdlRGlyZWN0b3J5LCBmaWxlTmFtZV07Cisj
ZW5kaWYKK30KKworQ0dJbWFnZVJlZiBXS0dyYXBoaWNzQ3JlYXRlSW1hZ2VGcm9tQnVuZGxlV2l0
aE5hbWUgKGNvbnN0IGNoYXIgKmltYWdlX2ZpbGUpCit7CisgICAgaWYgKCFpbWFnZV9maWxlKQor
ICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBudWxscHRyOwor
ICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gbmlsOworCisgICAgaWYgKHdrR2V0U2NyZWVuU2NhbGVG
YWN0b3IoKSA9PSAyKSB7CisgICAgICAgIE5TU3RyaW5nKiBmdWxsMnhQYXRoID0gaW1hZ2VSZXNv
dXJjZVBhdGgoaW1hZ2VfZmlsZSwgdHJ1ZSk7CisgICAgICAgIGltYWdlRGF0YSA9IFtOU0RhdGEg
ZGF0YVdpdGhDb250ZW50c09mRmlsZTpmdWxsMnhQYXRoXTsKKyAgICB9CisgICAgaWYgKCFpbWFn
ZURhdGEpIHsKKyAgICAgICAgLy8gV2UgZ290IGhlcmUgZWl0aGVyIGJlY2F1c2Ugd2UgZGlkbid0
IHJlcXVlc3QgaGktZHBpIG9yIHRoZSBAMnggZmlsZSBkb2Vzbid0IGV4aXN0LgorICAgICAgICBO
U1N0cmluZyogZnVsbDF4UGF0aCA9IGltYWdlUmVzb3VyY2VQYXRoKGltYWdlX2ZpbGUsIGZhbHNl
KTsKKyAgICAgICAgaW1hZ2VEYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOmZ1
bGwxeFBhdGhdOworICAgIH0KKyAgICAKKyAgICBpZiAoaW1hZ2VEYXRhKSB7CisgICAgICAgIFJl
dGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhDRkRhdGEocmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KGltYWdl
RGF0YSkpKTsKKyAgICAgICAgaW1hZ2UgPSBDR0ltYWdlQ3JlYXRlV2l0aFBOR0RhdGFQcm92aWRl
cihkYXRhUHJvdmlkZXIuZ2V0KCksIG51bGxwdHIsIE5PLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyB2b2lkIFdLRHJh
d1BhdHRlcm5CaXRtYXAodm9pZCAqaW5mbywgQ0dDb250ZXh0UmVmIGMpIAoreworICAgIENHSW1h
Z2VSZWYgaW1hZ2UgPSAoQ0dJbWFnZVJlZilpbmZvOworICAgIENHRmxvYXQgc2NhbGUgPSB3a0dl
dFNjcmVlblNjYWxlRmFjdG9yKCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGMsIENHUmVjdE1h
a2UoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAvIHNjYWxlLCBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlKSAvIHNjYWxlKSwgaW1hZ2UpOyAgICAKK30KKworc3RhdGljIHZvaWQgV0tSZWxlYXNl
UGF0dGVybkJpdG1hcCh2b2lkICppbmZvKSAKK3sKKyAgICBDR0ltYWdlUmVsZWFzZShyZWludGVy
cHJldF9jYXN0PENHSW1hZ2VSZWY+KGluZm8pKTsKK30KKworc3RhdGljIGNvbnN0IENHUGF0dGVy
bkNhbGxiYWNrcyBXS1BhdHRlcm5CaXRtYXBDYWxsYmFja3MgPSAKK3sKKyAgICAwLCBXS0RyYXdQ
YXR0ZXJuQml0bWFwLCBXS1JlbGVhc2VQYXR0ZXJuQml0bWFwCit9OworCitDR1BhdHRlcm5SZWYg
V0tDcmVhdGVQYXR0ZXJuRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZVJlZikKK3sKKyAgICAv
LyByZXRhaW4gaW1hZ2Ugc2luY2UgaXQncyBmcmVlZCBieSBvdXIgY2FsbGJhY2sKKyAgICBDR0lt
YWdlUmV0YWluKGltYWdlUmVmKTsKKworICAgIENHRmxvYXQgc2NhbGUgPSB3a0dldFNjcmVlblNj
YWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIENHUGF0dGVybkNyZWF0ZSgodm9pZCopaW1hZ2VSZWYs
IENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlUmVmKSAvIHNjYWxlLCBDR0lt
YWdlR2V0SGVpZ2h0KGltYWdlUmVmKSAvIHNjYWxlKSwgQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0
eSwgQ0dJbWFnZUdldFdpZHRoKGltYWdlUmVmKSAvIHNjYWxlLCBDR0ltYWdlR2V0SGVpZ2h0KGlt
YWdlUmVmKSAvIHNjYWxlLCBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCAxIC8qaXND
b2xvcmVkKi8sICZXS1BhdHRlcm5CaXRtYXBDYWxsYmFja3MpOworfQorCit2b2lkIFdLU2V0UGF0
dGVybihDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXR0ZXJuUmVmIHBhdHRlcm4sIGJvb2wgZmls
bCwgYm9vbCBzdHJva2UpIAoreworICAgIGlmIChwYXR0ZXJuID09IE5VTEwpCisgICAgICAgIHJl
dHVybjsKKworICAgIENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKKyAgICBDR0NvbG9yU3BhY2VS
ZWYgY29sb3JzcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVBhdHRlcm4oTlVMTCk7CisgICAgaWYg
KGZpbGwpIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3BhY2UoY29udGV4dCwgY29s
b3JzcGFjZSk7CisgICAgICAgIENHQ29udGV4dFNldEZpbGxQYXR0ZXJuKGNvbnRleHQsIHBhdHRl
cm4sICZwYXR0ZXJuQWxwaGEpOworICAgIH0KKyAgICBpZiAoc3Ryb2tlKSB7CisgICAgICAgIENH
Q29udGV4dFNldFN0cm9rZUNvbG9yU3BhY2UoY29udGV4dCwgY29sb3JzcGFjZSk7CisgICAgICAg
IENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4oY29udGV4dCwgcGF0dGVybiwgJnBhdHRlcm5BbHBo
YSk7CisgICAgfQorICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JzcGFjZSk7Cit9CisKK3Zv
aWQgV0tGb250QW50aWFsaWFzaW5nU3RhdGVTYXZlcjo6c2V0dXAoYm9vbCBpc0xhbmRzY2FwZU9y
aWVudGF0aW9uKQoreworI2lmICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgIG1fb2xkQW50
aWFsaWFzaW5nU3R5bGUgPSBDR0NvbnRleHRHZXRGb250QW50aWFsaWFzaW5nU3R5bGUobV9jb250
ZXh0KTsKKworICAgIGlmIChtX3VzZU9yaWVudGF0aW9uRGVwZW5kZW50Rm9udEFudGlhbGlhc2lu
ZykKKyAgICAgICAgQ0dDb250ZXh0U2V0Rm9udEFudGlhbGlhc2luZ1N0eWxlKG1fY29udGV4dCwg
aXNMYW5kc2NhcGVPcmllbnRhdGlvbiA/IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZUZpbHRlckxp
Z2h0IDoga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShpc0xhbmRzY2FwZU9yaWVudGF0aW9uKTsKKyNlbmRpZgorfQorCit2b2lkIFdL
Rm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXI6OnJlc3RvcmUoKQoreworI2lmICFQTEFURk9STShJ
T1NfU0lNVUxBVE9SKQorICAgIGlmIChtX3VzZU9yaWVudGF0aW9uRGVwZW5kZW50Rm9udEFudGlh
bGlhc2luZykKKyAgICAgICAgQ0dDb250ZXh0U2V0Rm9udEFudGlhbGlhc2luZ1N0eWxlKG1fY29u
dGV4dCwgbV9vbGRBbnRpYWxpYXNpbmdTdHlsZSk7CisjZW5kaWYKK30KKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsv
V0tUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS1R5cGVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2Q5Mzc0Y2QxOGU3YWFhMjA0MjBhNWRmYzlkYjUzY2E5NTVlOWM3NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tUeXBlcy5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdL
VHlwZXNfaAorI2RlZmluZSBXS1R5cGVzX2gKKworI2lmIFRBUkdFVF9PU19JUEhPTkUKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBf
V0tPYmplY3QgV0tPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBfV0tPYmplY3QgKldLT2JqZWN0UmVm
OwordHlwZWRlZiBzdHJ1Y3QgV0tDb250cm9sKiBXS0NvbnRyb2xSZWY7Cit0eXBlZGVmIHN0cnVj
dCBfV0tWaWV3KiBXS1ZpZXdSZWY7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisK
KyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCisKKyNlbmRpZiAvLyBXS1R5cGVzX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tVdGlsaXRpZXMuYyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tVdGlsaXRpZXMuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MmY2MzY0Y2EyNDE2Mzc5NTY3ZDNlMzVkODQ0MmQ3YzMxYTllNmQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS1V0aWxpdGllcy5jCkBAIC0wLDAg
KzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJXS1V0aWxpdGllcy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjb25zdCBDRkFycmF5Q2FsbEJhY2tzIFdLQ29sbGVj
dGlvbkFycmF5Q2FsbEJhY2tzID0geyAwLCBXS0NvbGxlY3Rpb25SZXRhaW4sIFdLQ29sbGVjdGlv
blJlbGVhc2UsIE5VTEwsIE5VTEwgfTsKK2NvbnN0IENGU2V0Q2FsbEJhY2tzIFdLQ29sbGVjdGlv
blNldENhbGxCYWNrcyA9IHsgMCwgV0tDb2xsZWN0aW9uUmV0YWluLCBXS0NvbGxlY3Rpb25SZWxl
YXNlLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKK2NvbnN0IHZvaWQgKldLQ29sbGVjdGlvblJldGFp
biAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBjb25zdCB2b2lkICp2YWx1ZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0oYWxsb2NhdG9yKTsKKyAgICByZXR1cm4gV0tSZXRhaW4gKHZhbHVlKTsKK30K
KworY29uc3Qgdm9pZCAqV0tSZXRhaW4oY29uc3Qgdm9pZCAqbykKK3sKKyAgICBXS09iamVjdFJl
ZiBvYmplY3QgPSAoV0tPYmplY3RSZWYpbzsKKyAgICAKKyAgICBvYmplY3QtPnJlZmVyZW5jZUNv
dW50Kys7CisgICAgCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwordm9pZCBXS0NvbGxlY3Rpb25S
ZWxlYXNlIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIGNvbnN0IHZvaWQgKnZhbHVlKQorewor
ICAgIFVOVVNFRF9QQVJBTShhbGxvY2F0b3IpOworICAgIFdLUmVsZWFzZSAodmFsdWUpOworfQor
Cit2b2lkIFdLUmVsZWFzZShjb25zdCB2b2lkICpvKQoreworICAgIFdLT2JqZWN0UmVmIG9iamVj
dCA9IChXS09iamVjdFJlZilvOworCisgICAgaWYgKG9iamVjdC0+cmVmZXJlbmNlQ291bnQgPT0g
MCkgeworICAgICAgICBXS0Vycm9yICgiYXR0ZW1wdCB0byByZWxlYXNlIGludmFsaWQgb2JqZWN0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb2JqZWN0LT5yZWZlcmVuY2VD
b3VudC0tOworCisgICAgaWYgKG9iamVjdC0+cmVmZXJlbmNlQ291bnQgPT0gMCkgeworICAgICAg
ICBjb25zdCBXS0NsYXNzSW5mbyAqaW5mbyA9IG9iamVjdC0+Y2xhc3NJbmZvOworICAgICAgICB3
aGlsZSAoaW5mbykgeworICAgICAgICAgICAgaWYgKGluZm8tPmRlYWxsb2MpCisgICAgICAgICAg
ICAgICAgaW5mby0+ZGVhbGxvYyAoKHZvaWQgKilvYmplY3QpOworICAgICAgICAgICAgaW5mbyA9
IGluZm8tPnBhcmVudDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgX1dLT2Jq
ZWN0RGVhbGxvYyAoV0tPYmplY3RSZWYgdikKK3sKKyAgICBmcmVlICh2KTsKK30KKworV0tDbGFz
c0luZm8gV0tPYmplY3RDbGFzcyA9IHsgMCwgIldLT2JqZWN0IiwgX1dLT2JqZWN0RGVhbGxvYyB9
OworCitjb25zdCB2b2lkICpXS0NyZWF0ZU9iamVjdFdpdGhTaXplIChzaXplX3Qgc2l6ZSwgV0tD
bGFzc0luZm8gKmluZm8pCit7CisgICAgV0tPYmplY3RSZWYgb2JqZWN0ID0gKFdLT2JqZWN0UmVm
KWNhbGxvYyAoc2l6ZSwgMSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgb2JqZWN0LT5jbGFzc0luZm8gPSBpbmZvOworICAgIAorICAgIFdLUmV0YWluKG9iamVj
dCk7CisgICAgCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworV1RGX0FUVFJJQlVURV9QUklOVEYo
NCwgNSkKK3ZvaWQgV0tSZXBvcnRFcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29u
c3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xp
c3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIGZwcmludGYoc3RkZXJy
LCAiJXM6JWQgJXM6ICAiLCBmaWxlLCBsaW5lLCBmdW5jdGlvbik7CisgICAgdmZwcmludGYoc3Rk
ZXJyLCBmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIlxuIik7Cit9CisKK0NGSW5kZXggV0tBcnJheUluZGV4T2ZWYWx1ZSAoQ0ZBcnJheVJlZiBh
cnJheSwgY29uc3Qgdm9pZCAqdmFsdWUpCit7CisgICAgQ0ZJbmRleCBpLCBjb3VudCwgaW5kZXgg
PSAtMTsKKworICAgIGNvdW50ID0gQ0ZBcnJheUdldENvdW50IChhcnJheSk7CisgICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXggKGFycmF5LCBpKSA9PSB2YWx1ZSkgeworICAgICAgICAgICAgaW5kZXggPSBpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGluZGV4Owor
fQorCitXS0NsYXNzSW5mbyAqV0tHZXRDbGFzc0luZm8gKFdLT2JqZWN0UmVmIG9iamVjdCkKK3sK
KyAgICByZXR1cm4gb2JqZWN0LT5jbGFzc0luZm87Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLVXRpbGl0
aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dLVXRpbGl0aWVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDIwNTNmMjk5ZWYzYTk2MGQwNzRmOThmMjUyZjU2YTBkMzUwODM3ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tVdGlsaXRpZXMu
aApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXS1V0aWxpdGllc19oCisjZGVmaW5lIFdLVXRpbGl0aWVzX2gKKworI2lmIFRBUkdFVF9PU19J
UEhPTkUKKworI2ltcG9ydCAiV0tUeXBlcy5oIgorI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisK
K2V4dGVybiBjb25zdCBDRkFycmF5Q2FsbEJhY2tzIFdLQ29sbGVjdGlvbkFycmF5Q2FsbEJhY2tz
OworZXh0ZXJuIGNvbnN0IENGU2V0Q2FsbEJhY2tzIFdLQ29sbGVjdGlvblNldENhbGxCYWNrczsK
KworCit0eXBlZGVmIHZvaWQoKldLRGVhbGxvY0NhbGxiYWNrKShXS09iamVjdFJlZiBvYmplY3Qp
OworCit0eXBlZGVmIHN0cnVjdCBfV0tDbGFzc0luZm8gV0tDbGFzc0luZm87CisKK3N0cnVjdCBf
V0tDbGFzc0luZm8KK3sKKyAgICBjb25zdCBXS0NsYXNzSW5mbyAqcGFyZW50OworICAgIGNvbnN0
IGNoYXIgKm5hbWU7CisgICAgV0tEZWFsbG9jQ2FsbGJhY2sgZGVhbGxvYzsKK307CisKK2V4dGVy
biBXS0NsYXNzSW5mbyBXS09iamVjdENsYXNzOworCitzdHJ1Y3QgX1dLT2JqZWN0Cit7CisgICAg
dW5zaWduZWQgcmVmZXJlbmNlQ291bnQ7CisgICAgV0tDbGFzc0luZm8gKmNsYXNzSW5mbzsKK307
CisKK2NvbnN0IHZvaWQgKldLQ3JlYXRlT2JqZWN0V2l0aFNpemUgKHNpemVfdCBzaXplLCBXS0Ns
YXNzSW5mbyAqaW5mbyk7Citjb25zdCB2b2lkICpXS1JldGFpbihjb25zdCB2b2lkICpvYmplY3Qp
Owordm9pZCBXS1JlbGVhc2UoY29uc3Qgdm9pZCAqb2JqZWN0KTsKKworY29uc3Qgdm9pZCAqV0tD
b2xsZWN0aW9uUmV0YWluIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIGNvbnN0IHZvaWQgKnZh
bHVlKTsKK3ZvaWQgV0tDb2xsZWN0aW9uUmVsZWFzZSAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9y
LCBjb25zdCB2b2lkICp2YWx1ZSk7CisKK3ZvaWQgV0tSZXBvcnRFcnJvcihjb25zdCBjaGFyICpm
aWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwg
Li4uKTsKKyNkZWZpbmUgV0tFcnJvcihmb3JtYXRBbmRBcmdzLi4uKSBXS1JlcG9ydEVycm9yKF9f
RklMRV9fLCBfX0xJTkVfXywgX19QUkVUVFlfRlVOQ1RJT05fXywgZm9ybWF0QW5kQXJncykKKwor
Q0ZJbmRleCBXS0FycmF5SW5kZXhPZlZhbHVlIChDRkFycmF5UmVmIGFycmF5LCBjb25zdCB2b2lk
ICp2YWx1ZSk7CisKK1dLQ2xhc3NJbmZvICpXS0dldENsYXNzSW5mbyAoV0tPYmplY3RSZWYgb2Jq
ZWN0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIFRBUkdF
VF9PU19JUEhPTkUKKworI2VuZGlmIC8vIFdLVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3Mvd2FrL1dLVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3YzRmOTMwNzBjYTIwZWI5MGJhMjk4
NzMwNjNkMWM1ZWM1NjUwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3Mvd2FrL1dLVmlldy5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS1ZpZXdfaAorI2RlZmluZSBXS1ZpZXdfaAor
CisjaWYgVEFSR0VUX09TX0lQSE9ORQorCisjaW1wb3J0ICJXS1V0aWxpdGllcy5oIgorI2ltcG9y
dCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4
dGVybiAiQyIgeworI2VuZGlmCisKK0BjbGFzcyBXQUtXaW5kb3c7CisKK2VudW0geworICAgIE5T
Vmlld05vdFNpemFibGUgPSAwLAorICAgIE5TVmlld01pblhNYXJnaW4gPSAxLAorICAgIE5TVmll
d1dpZHRoU2l6YWJsZSA9IDIsCisgICAgTlNWaWV3TWF4WE1hcmdpbiA9IDQsCisgICAgTlNWaWV3
TWluWU1hcmdpbiA9IDgsCisgICAgTlNWaWV3SGVpZ2h0U2l6YWJsZSA9IDE2LAorICAgIE5TVmll
d01heFlNYXJnaW4gPSAzMgorfTsgICAgCisgICAgCit0eXBlZGVmIGVudW0geworICAgIFdLVmll
d05vdGlmaWNhdGlvblZpZXdEaWRNb3ZlVG9XaW5kb3csCisgICAgV0tWaWV3Tm90aWZpY2F0aW9u
Vmlld0ZyYW1lU2l6ZUNoYW5nZWQsCisgICAgV0tWaWV3Tm90aWZpY2F0aW9uVmlld0RpZFNjcm9s
bAorfSBXS1ZpZXdOb3RpZmljYXRpb25UeXBlOworCit0eXBlZGVmIGVudW0geworICAgIFdLVmll
d1Jlc3BvbmRlckFjY2VwdHNGaXJzdFJlc3BvbmRlciwKKyAgICBXS1ZpZXdSZXNwb25kZXJCZWNv
bWVGaXJzdFJlc3BvbmRlciwKKyAgICBXS1ZpZXdSZXNwb25kZXJSZXNpZ25GaXJzdFJlc3BvbmRl
ciwKK30gV0tWaWV3UmVzcG9uZGVyQ2FsbGJhY2tUeXBlOworCit0eXBlZGVmIHZvaWQgKCpXS1Zp
ZXdEcmF3Q2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBDR1JlY3QgZGlydHlSZWN0LCB2b2lkICp1
c2VySW5mbyk7IAordHlwZWRlZiB2b2lkICgqV0tWaWV3Tm90aWZpY2F0aW9uQ2FsbGJhY2spKFdL
Vmlld1JlZiB2aWV3LCBXS1ZpZXdOb3RpZmljYXRpb25UeXBlIHR5cGUsIHZvaWQgKnVzZXJJbmZv
KTsKK3R5cGVkZWYgYm9vbCAoKldLVmlld1Jlc3BvbmRlckNhbGxiYWNrKShXS1ZpZXdSZWYgdmll
dywgV0tWaWV3UmVzcG9uZGVyQ2FsbGJhY2tUeXBlIHR5cGUsIHZvaWQgKnVzZXJJbmZvKTsKK3R5
cGVkZWYgdm9pZCAoKldLVmlld1dpbGxSZW1vdmVTdWJ2aWV3Q2FsbGJhY2spKFdLVmlld1JlZiB2
aWV3LCBXS1ZpZXdSZWYgc3Vidmlldyk7Cit0eXBlZGVmIHZvaWQgKCpXS1ZpZXdJbnZhbGlkYXRl
R1N0YXRlQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1dLVmll
d0NvbnRleHQgeworICAgIFdLVmlld05vdGlmaWNhdGlvbkNhbGxiYWNrIG5vdGlmaWNhdGlvbkNh
bGxiYWNrOworICAgIHZvaWQgKm5vdGlmaWNhdGlvblVzZXJJbmZvOworICAgIFdLVmlld1Jlc3Bv
bmRlckNhbGxiYWNrIHJlc3BvbmRlckNhbGxiYWNrOworICAgIHZvaWQgKnJlc3BvbmRlclVzZXJJ
bmZvOworICAgIFdLVmlld1dpbGxSZW1vdmVTdWJ2aWV3Q2FsbGJhY2sgd2lsbFJlbW92ZVN1YnZp
ZXdDYWxsYmFjazsKKyAgICBXS1ZpZXdJbnZhbGlkYXRlR1N0YXRlQ2FsbGJhY2sgaW52YWxpZGF0
ZUdTdGF0ZUNhbGxiYWNrOworfSBXS1ZpZXdDb250ZXh0OworCitzdHJ1Y3QgX1dLVmlldyB7Cisg
ICAgV0tPYmplY3QgaXNhOworICAgIAorICAgIFdLVmlld0NvbnRleHQgKmNvbnRleHQ7CisgICAg
CisgICAgX191bnNhZmVfdW5yZXRhaW5lZCBXQUtXaW5kb3cgKndpbmRvdzsKKworICAgIFdLVmll
d1JlZiBzdXBlcnZpZXc7CisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgc3Vidmlld3M7CisKKyAgICBD
R1BvaW50IG9yaWdpbjsKKyAgICBDR1JlY3QgYm91bmRzOworICAgIAorICAgIHVuc2lnbmVkIGlu
dCBhdXRvcmVzaXppbmdNYXNrOworICAgIAorICAgIGZsb2F0IHNjYWxlOworCisgICAgLy8gVGhp
cyBpcyByZWFsbHkgYSBXQUtWaWV3LgorICAgIHZvaWQgKndyYXBwZXI7Cit9OworCitleHRlcm4g
V0tDbGFzc0luZm8gV0tWaWV3Q2xhc3NJbmZvOworCitXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0
aEZyYW1lIChDR1JlY3QgcmVjdCwgV0tWaWV3Q29udGV4dCAqY29udGV4dCk7Cit2b2lkIFdLVmll
d0luaXRpYWxpemUgKFdLVmlld1JlZiB2aWV3LCBDR1JlY3QgcmVjdCwgV0tWaWV3Q29udGV4dCAq
Y29udGV4dCk7CisKK3ZvaWQgV0tWaWV3U2V0Vmlld0NvbnRleHQgKFdLVmlld1JlZiB2aWV3LCBX
S1ZpZXdDb250ZXh0ICpjb250ZXh0KTsKK3ZvaWQgV0tWaWV3R2V0Vmlld0NvbnRleHQgKFdLVmll
d1JlZiB2aWV3LCBXS1ZpZXdDb250ZXh0ICpjb250ZXh0KTsKKworQ0dSZWN0IFdLVmlld0dldEJv
dW5kcyAoV0tWaWV3UmVmIHZpZXcpOworCit2b2lkIFdLVmlld1NldEZyYW1lT3JpZ2luIChXS1Zp
ZXdSZWYgdmlldywgQ0dQb2ludCBuZXdQb2ludCk7Cit2b2lkIFdLVmlld1NldEZyYW1lU2l6ZSAo
V0tWaWV3UmVmIHZpZXcsIENHU2l6ZSBuZXdTaXplKTsKK3ZvaWQgV0tWaWV3U2V0Qm91bmRzT3Jp
Z2luKFdLVmlld1JlZiB2aWV3LCBDR1BvaW50IG5ld09yaWdpbik7Cit2b2lkIFdLVmlld1NldEJv
dW5kc1NpemUgKFdLVmlld1JlZiB2aWV3LCBDR1NpemUgbmV3U2l6ZSk7CisKK0NHUmVjdCBXS1Zp
ZXdHZXRGcmFtZSAoV0tWaWV3UmVmIHZpZXcpOworCit2b2lkIFdLVmlld1NldFNjYWxlIChXS1Zp
ZXdSZWYgdmlldywgZmxvYXQgc2NhbGUpOworZmxvYXQgV0tWaWV3R2V0U2NhbGUgKFdLVmlld1Jl
ZiB2aWV3KTsKK0NHQWZmaW5lVHJhbnNmb3JtIF9XS1ZpZXdHZXRUcmFuc2Zvcm0oV0tWaWV3UmVm
IHZpZXcpOworCitXQUtXaW5kb3cgKldLVmlld0dldFdpbmRvdyAoV0tWaWV3UmVmIHZpZXcpOwor
CitDRkFycmF5UmVmIFdLVmlld0dldFN1YnZpZXdzIChXS1ZpZXdSZWYgdmlldyk7CisKK1dLVmll
d1JlZiBXS1ZpZXdHZXRTdXBlcnZpZXcgKFdLVmlld1JlZiB2aWV3KTsKKwordm9pZCBXS1ZpZXdB
ZGRTdWJ2aWV3IChXS1ZpZXdSZWYgdmlldywgV0tWaWV3UmVmIHN1YnZpZXcpOwordm9pZCBXS1Zp
ZXdSZW1vdmVGcm9tU3VwZXJ2aWV3IChXS1ZpZXdSZWYgdmlldyk7CisKK0NHUG9pbnQgV0tWaWV3
Q29udmVydFBvaW50VG9TdXBlcnZpZXcgKFdLVmlld1JlZiB2aWV3LCBDR1BvaW50IGFQb2ludCk7
CitDR1BvaW50IFdLVmlld0NvbnZlcnRQb2ludEZyb21TdXBlcnZpZXcgKFdLVmlld1JlZiB2aWV3
LCBDR1BvaW50IGFQb2ludCk7CitDR1BvaW50IFdLVmlld0NvbnZlcnRQb2ludFRvQmFzZShXS1Zp
ZXdSZWYgdmlldywgQ0dQb2ludCBhUG9pbnQpOworQ0dQb2ludCBXS1ZpZXdDb252ZXJ0UG9pbnRG
cm9tQmFzZShXS1ZpZXdSZWYgdmlldywgQ0dQb2ludCBhUG9pbnQpOworCitDR1JlY3QgV0tWaWV3
Q29udmVydFJlY3RUb1N1cGVydmlldyAoV0tWaWV3UmVmIHZpZXcsIENHUmVjdCBhUmVjdCk7CitD
R1JlY3QgV0tWaWV3Q29udmVydFJlY3RGcm9tU3VwZXJ2aWV3IChXS1ZpZXdSZWYgdmlldywgQ0dS
ZWN0IGFSZWN0KTsKK0NHUmVjdCBXS1ZpZXdDb252ZXJ0UmVjdFRvQmFzZSAoV0tWaWV3UmVmIHZp
ZXcsIENHUmVjdCByKTsKK0NHUmVjdCBXS1ZpZXdDb252ZXJ0UmVjdEZyb21CYXNlIChXS1ZpZXdS
ZWYgdmlldywgQ0dSZWN0IGFSZWN0KTsKKworQ0dSZWN0IFdLVmlld0dldFZpc2libGVSZWN0IChX
S1ZpZXdSZWYgdmlldyk7CisKK1dLVmlld1JlZiBXS1ZpZXdGaXJzdENoaWxkIChXS1ZpZXdSZWYg
dmlldyk7CitXS1ZpZXdSZWYgV0tWaWV3TmV4dFNpYmxpbmcgKFdLVmlld1JlZiB2aWV3KTsKK1dL
Vmlld1JlZiBXS1ZpZXdUcmF2ZXJzZU5leHQgKFdLVmlld1JlZiB2aWV3KTsKKworYm9vbCBXS1Zp
ZXdBY2NlcHRzRmlyc3RSZXNwb25kZXIgKFdLVmlld1JlZiB2aWV3KTsKK2Jvb2wgV0tWaWV3QmVj
b21lRmlyc3RSZXNwb25kZXIgKFdLVmlld1JlZiB2aWV3KTsKK2Jvb2wgV0tWaWV3UmVzaWduRmly
c3RSZXNwb25kZXIgKFdLVmlld1JlZiB2aWV3KTsKKwordW5zaWduZWQgaW50IFdLVmlld0dldEF1
dG9yZXNpemluZ01hc2soV0tWaWV3UmVmIHZpZXcpOwordm9pZCBXS1ZpZXdTZXRBdXRvcmVzaXpp
bmdNYXNrIChXS1ZpZXdSZWYgdmlldywgdW5zaWduZWQgaW50IG1hc2spOworCit2b2lkIFdLVmll
d1Njcm9sbFRvUmVjdChXS1ZpZXdSZWYgdmlldywgQ0dSZWN0IHJlY3QpOworCisjaWZkZWYgX19j
cGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gVEFSR0VUX09TX0lQSE9ORQorCisjZW5k
aWYgLy8gV0tWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93
YWsvV0tWaWV3Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XS1ZpZXcubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzExZmEwOTY4ODEyNDI0NDY5OWY0ZmMyYTNhODFmOTRiZGY2MDEyMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0tWaWV3Lm1t
CkBAIC0wLDAgKzEsNzM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgorCisjaWYgUExB
VEZPUk0oSU9TKQorCisjaW1wb3J0ICJXQUtWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0FLV2lu
ZG93LmgiCisjaW1wb3J0ICJXS1V0aWxpdGllcy5oIgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKwordm9pZCBfV0tWaWV3U2V0U3VwZXJ2aWV3IChXS1ZpZXdSZWYgdmlldywgV0tWaWV3UmVm
IHN1cGVydmlldykKK3sKKyAgICAvLyBOb3QgcmV0YWluZWQuCisgICAgdmlldy0+c3VwZXJ2aWV3
ID0gc3VwZXJ2aWV3OworfQorCit2b2lkIF9XS1ZpZXdXaWxsUmVtb3ZlU3VidmlldyhXS1ZpZXdS
ZWYgdmlldywgV0tWaWV3UmVmIHN1YnZpZXcpCit7CisgICAgaWYgKHZpZXctPmNvbnRleHQgJiYg
dmlldy0+Y29udGV4dC0+d2lsbFJlbW92ZVN1YnZpZXdDYWxsYmFjaykKKyAgICAgICAgdmlldy0+
Y29udGV4dC0+d2lsbFJlbW92ZVN1YnZpZXdDYWxsYmFjayh2aWV3LCBzdWJ2aWV3KTsKK30KKwor
dm9pZCBfV0tWaWV3U2V0V2luZG93IChXS1ZpZXdSZWYgdmlldywgV0FLV2luZG93ICp3aW5kb3cp
Cit7CisgICAgaWYgKHZpZXctPndpbmRvdyA9PSB3aW5kb3cpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFt3aW5kb3cgcmV0YWluXTsKKyAgICBbdmlldy0+d2luZG93IHJlbGVhc2VdOworCisgICAg
dmlldy0+d2luZG93ID0gd2luZG93OworCisgICAgLy8gU2V0IHRoZSB3aW5kb3cgb24gYWxsIHN1
YnZpZXdzLgorICAgIFdLVmlld1JlZiBmaXJzdENoaWxkID0gV0tWaWV3Rmlyc3RDaGlsZCh2aWV3
KTsKKyAgICBpZiAoZmlyc3RDaGlsZCkgeworICAgICAgICBfV0tWaWV3U2V0V2luZG93IChmaXJz
dENoaWxkLCB3aW5kb3cpOworICAgICAgICBXS1ZpZXdSZWYgbmV4dFNpYmxpbmcgPSBXS1ZpZXdO
ZXh0U2libGluZyhmaXJzdENoaWxkKTsKKyAgICAgICAgd2hpbGUgKG5leHRTaWJsaW5nKSB7Cisg
ICAgICAgICAgICBfV0tWaWV3U2V0V2luZG93IChuZXh0U2libGluZywgd2luZG93KTsKKyAgICAg
ICAgICAgIG5leHRTaWJsaW5nID0gV0tWaWV3TmV4dFNpYmxpbmcobmV4dFNpYmxpbmcpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKHZpZXctPmNvbnRleHQgJiYgdmlldy0+Y29udGV4dC0+
bm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIHZpZXctPmNvbnRleHQtPm5vdGlmaWNhdGlv
bkNhbGxiYWNrICh2aWV3LCBXS1ZpZXdOb3RpZmljYXRpb25WaWV3RGlkTW92ZVRvV2luZG93LCB2
aWV3LT5jb250ZXh0LT5ub3RpZmljYXRpb25Vc2VySW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIF9X
S1ZpZXdDbGVhclN1cGVydmlldyhjb25zdCB2b2lkICp2YWx1ZSwgdm9pZCAqY29udGV4dCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgX1dLVmlld1NldFN1cGVydmlldygoV0tW
aWV3UmVmKXZhbHVlLCAwKTsKK30KKworc3RhdGljIHZvaWQgX1dLVmlld0RlYWxsb2MgKFdLT2Jq
ZWN0UmVmIHYpCit7CisgICAgV0tWaWV3UmVmIHZpZXcgPSAoV0tWaWV3UmVmKXY7CisgICAgCisg
ICAgaWYgKHZpZXctPnN1YnZpZXdzKSB7CisgICAgICAgIENGQXJyYXlBcHBseUZ1bmN0aW9uKHZp
ZXctPnN1YnZpZXdzLCBDRlJhbmdlTWFrZSgwLCBDRkFycmF5R2V0Q291bnQodmlldy0+c3Vidmll
d3MpKSwgX1dLVmlld0NsZWFyU3VwZXJ2aWV3LCBOVUxMKTsKKyAgICAgICAgQ0ZSZWxlYXNlICh2
aWV3LT5zdWJ2aWV3cyk7CisgICAgICAgIHZpZXctPnN1YnZpZXdzID0gMDsKKyAgICB9CisKKyAg
ICBbdmlldy0+d2luZG93IHJlbGVhc2VdOworICAgIHZpZXctPndpbmRvdyA9IG5pbDsKK30KKwor
dm9pZCBXS1ZpZXdJbml0aWFsaXplIChXS1ZpZXdSZWYgdmlldywgQ0dSZWN0IGZyYW1lLCBXS1Zp
ZXdDb250ZXh0ICpjb250ZXh0KQoreworICAgIHZpZXctPm9yaWdpbiA9IGZyYW1lLm9yaWdpbjsK
KyAgICB2aWV3LT5ib3VuZHMub3JpZ2luID0gQ0dQb2ludFplcm87CisgICAgdmlldy0+Ym91bmRz
LnNpemUgPSBmcmFtZS5zaXplOworICAgIAorICAgIHZpZXctPmNvbnRleHQgPSBjb250ZXh0Owor
ICAgIHZpZXctPmF1dG9yZXNpemluZ01hc2sgPSBOU1ZpZXdOb3RTaXphYmxlOworICAgIHZpZXct
PnNjYWxlID0gMS4wZjsKK30KKworV0tDbGFzc0luZm8gV0tWaWV3Q2xhc3NJbmZvID0geyAmV0tP
YmplY3RDbGFzcywgIldLVmlldyIsIF9XS1ZpZXdEZWFsbG9jIH07CisKK1dLVmlld1JlZiBXS1Zp
ZXdDcmVhdGVXaXRoRnJhbWUgKENHUmVjdCBmcmFtZSwgV0tWaWV3Q29udGV4dCAqY29udGV4dCkK
K3sKKyAgICBXS1ZpZXdSZWYgdmlldyA9IChXS1ZpZXdSZWYpV0tDcmVhdGVPYmplY3RXaXRoU2l6
ZSAoc2l6ZW9mKHN0cnVjdCBfV0tWaWV3KSwgJldLVmlld0NsYXNzSW5mbyk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBXS1ZpZXdJbml0aWFsaXplICh2aWV3
LCBmcmFtZSwgY29udGV4dCk7CisgICAgCisgICAgcmV0dXJuIHZpZXc7Cit9CisKK3ZvaWQgX1dL
Vmlld1NldFZpZXdDb250ZXh0IChXS1ZpZXdSZWYgdmlldywgV0tWaWV3Q29udGV4dCAqY29udGV4
dCkKK3sKKyAgICBpZiAoIXZpZXcpIHsKKyAgICAgICAgV0tFcnJvciAoImludmFsaWQgcGFyYW1l
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmlldy0+Y29udGV4dCA9IGNvbnRl
eHQ7Cit9CisKK0NHUmVjdCBXS1ZpZXdHZXRCb3VuZHMgKFdLVmlld1JlZiB2aWV3KQoreworICAg
IGlmICghdmlldykgeworICAgICAgICBXS0Vycm9yICgiaW52YWxpZCBwYXJhbWV0ZXIiKTsKKyAg
ICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgfQorICAgIAorICAgIHJldHVybiB2aWV3LT5i
b3VuZHM7Cit9CisKK0NHUmVjdCBXS1ZpZXdHZXRGcmFtZSAoV0tWaWV3UmVmIHZpZXcpCit7Cisg
ICAgaWYgKCF2aWV3KSB7CisgICAgICAgIFdLRXJyb3IgKCJpbnZhbGlkIHBhcmFtZXRlciIpOwor
ICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFdLVmll
d0NvbnZlcnRSZWN0VG9TdXBlcnZpZXcodmlldywgdmlldy0+Ym91bmRzKTsKK30KKworc3RhdGlj
IHZvaWQgX1dLVmlld1JlY3Vyc2l2ZWx5SW52YWxpZGF0ZUdTdGF0ZShXS1ZpZXdSZWYgdmlldykK
K3sKKyAgICBpZiAoIXZpZXcpIHsKKyAgICAgICAgV0tFcnJvciAoImludmFsaWQgcGFyYW1ldGVy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmlldy0+Y29udGV4dCAmJiB2
aWV3LT5jb250ZXh0LT5pbnZhbGlkYXRlR1N0YXRlQ2FsbGJhY2spCisgICAgICAgIHZpZXctPmNv
bnRleHQtPmludmFsaWRhdGVHU3RhdGVDYWxsYmFjayh2aWV3KTsKKyAgICAKKyAgICBXS1ZpZXdS
ZWYgc3VidmlldyA9IFdLVmlld0ZpcnN0Q2hpbGQodmlldyk7CisgICAgd2hpbGUgKHN1YnZpZXcp
IHsKKyAgICAgICAgX1dLVmlld1JlY3Vyc2l2ZWx5SW52YWxpZGF0ZUdTdGF0ZShzdWJ2aWV3KTsK
KyAgICAgICAgc3VidmlldyA9IFdLVmlld05leHRTaWJsaW5nKHN1YnZpZXcpOworICAgIH0KK30K
Kwordm9pZCBXS1ZpZXdTZXRGcmFtZU9yaWdpbiAoV0tWaWV3UmVmIHZpZXcsIENHUG9pbnQgbmV3
T3JpZ2luKQoreworICAgIGlmICghdmlldykgeworICAgICAgICBXS0Vycm9yICgiaW52YWxpZCBw
YXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoIWlz
aW5mKG5ld09yaWdpbi54KSk7CisgICAgQVNTRVJUKCFpc25hbihuZXdPcmlnaW4ueCkpOworICAg
IEFTU0VSVCghaXNpbmYobmV3T3JpZ2luLnkpKTsKKyAgICBBU1NFUlQoIWlzbmFuKG5ld09yaWdp
bi55KSk7CisgICAgCisgICAgaWYgKCFDR1BvaW50RXF1YWxUb1BvaW50KHZpZXctPm9yaWdpbiwg
bmV3T3JpZ2luKSkgeworICAgICAgICB2aWV3LT5vcmlnaW4gPSBuZXdPcmlnaW47CisgICAgICAg
IF9XS1ZpZXdSZWN1cnNpdmVseUludmFsaWRhdGVHU3RhdGUodmlldyk7CisgICAgfQorfQorCisj
ZGVmaW5lIFhTSVpJTkdfQklUUyhtYXNrKSAgICAgICgobWFzaykgJiA3KQorI2RlZmluZSBZU0la
SU5HX0JJVFMobWFzaykgICAgICAoKChtYXNrKSA+PiAzKSAmIDcpCisKK3N0YXRpYyB2b2lkIF9X
S1ZpZXdBdXRvcmVzaXplQ29vcmQoYm9vbCBiQnlIZWlnaHQsIHVuc2lnbmVkIGludCBzaXppbmdN
ZXRob2QsIGNvbnN0IENHUmVjdCAqb3JpZ1N1cGVyRnJhbWUsIGNvbnN0IENHUmVjdCAqbmV3U3Vw
ZXJGcmFtZSwgQ0dSZWN0ICpuZXdGcmFtZSkKK3sKKyAgICBDR0Zsb2F0IG9yaWdTdXBlckZyYW1l
V2lkdGhPckhlaWdodDsKKyAgICBDR0Zsb2F0IG5ld1N1cGVyRnJhbWVXaWR0aE9ySGVpZ2h0Owor
ICAgIENHRmxvYXQgKm9yaWdGcmFtZVhvclk7CisgICAgQ0dGbG9hdCAqb3JpZ0ZyYW1lV2lkdGhP
ckhlaWdodDsKKyAgICBDR0Zsb2F0IHByb3A7CisgICAgQ0dGbG9hdCB0bXA7CisgICAgQ0dGbG9h
dCB4T3JZOworICAgIENHRmxvYXQgd2lkdGhPckhlaWdodDsKKyAgICBDR0Zsb2F0IG9yaWdNYXJn
aW5zVG90YWw7CisgICAgQ0dGbG9hdCBvcmlnV2lkdGhNaW51c01pbk1hcmdpbjsKKyAgICAKKyAg
ICBpZiAoYkJ5SGVpZ2h0KSB7CisgICAgICAgIHNpemluZ01ldGhvZCA9IFlTSVpJTkdfQklUUyhz
aXppbmdNZXRob2QpOworICAgICAgICBvcmlnU3VwZXJGcmFtZVdpZHRoT3JIZWlnaHQgPSBvcmln
U3VwZXJGcmFtZS0+c2l6ZS5oZWlnaHQ7CisgICAgICAgIG5ld1N1cGVyRnJhbWVXaWR0aE9ySGVp
Z2h0ID0gbmV3U3VwZXJGcmFtZS0+c2l6ZS5oZWlnaHQ7CisgICAgICAgIG9yaWdGcmFtZVhvclkg
PSAmbmV3RnJhbWUtPm9yaWdpbi55OworICAgICAgICBvcmlnRnJhbWVXaWR0aE9ySGVpZ2h0ID0g
Jm5ld0ZyYW1lLT5zaXplLmhlaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgICBzaXppbmdNZXRo
b2QgPSBYU0laSU5HX0JJVFMoc2l6aW5nTWV0aG9kKTsKKyAgICAgICAgb3JpZ1N1cGVyRnJhbWVX
aWR0aE9ySGVpZ2h0ID0gb3JpZ1N1cGVyRnJhbWUtPnNpemUud2lkdGg7CisgICAgICAgIG5ld1N1
cGVyRnJhbWVXaWR0aE9ySGVpZ2h0ID0gbmV3U3VwZXJGcmFtZS0+c2l6ZS53aWR0aDsKKyAgICAg
ICAgb3JpZ0ZyYW1lWG9yWSA9ICZuZXdGcmFtZS0+b3JpZ2luLng7CisgICAgICAgIG9yaWdGcmFt
ZVdpZHRoT3JIZWlnaHQgPSAmbmV3RnJhbWUtPnNpemUud2lkdGg7CisgICAgfQorICAgIAorICAg
IHhPclkgPSAqb3JpZ0ZyYW1lWG9yWTsKKyAgICB3aWR0aE9ySGVpZ2h0ID0gKm9yaWdGcmFtZVdp
ZHRoT3JIZWlnaHQ7CisgICAgCisgICAgc3dpdGNoIChzaXppbmdNZXRob2QpIHsKKyAgICAgICAg
Y2FzZSBOU1ZpZXdOb3RTaXphYmxlOgorICAgICAgICBjYXNlIE5TVmlld01heFhNYXJnaW46Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOU1ZpZXdXaWR0aFNpemFibGU6CisgICAg
ICAgICAgICB3aWR0aE9ySGVpZ2h0ID0gbmV3U3VwZXJGcmFtZVdpZHRoT3JIZWlnaHQgLSAob3Jp
Z1N1cGVyRnJhbWVXaWR0aE9ySGVpZ2h0IC0gd2lkdGhPckhlaWdodCk7CisgICAgICAgICAgICBp
ZiAod2lkdGhPckhlaWdodCA8IDAuMGYpCisgICAgICAgICAgICAgICAgd2lkdGhPckhlaWdodCA9
IDAuMGY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTlNWaWV3V2lkdGhT
aXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbjoKKyAgICAgICAgICAgIG9yaWdXaWR0aE1pbnVzTWlu
TWFyZ2luID0gb3JpZ1N1cGVyRnJhbWVXaWR0aE9ySGVpZ2h0IC0geE9yWTsKKyAgICAgICAgICAg
IGlmICh3aWR0aE9ySGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKG9yaWdXaWR0aE1pbnVz
TWluTWFyZ2luICE9IDAuMGYpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcCA9IHdpZHRoT3JI
ZWlnaHQgLyBvcmlnV2lkdGhNaW51c01pbk1hcmdpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBwcm9wID0gMC4wZjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3AgPSAxLjBmOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHdpZHRoT3JIZWlnaHQgPSAoKG5ld1N1cGVyRnJhbWVX
aWR0aE9ySGVpZ2h0IC0geE9yWSkpICogcHJvcDsKKyAgICAgICAgICAgIGlmICh3aWR0aE9ySGVp
Z2h0IDwgMC4wZikKKyAgICAgICAgICAgICAgICB3aWR0aE9ySGVpZ2h0ID0gMC4wZjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOU1ZpZXdNaW5YTWFyZ2luOgorICAgICAg
ICAgICAgeE9yWSA9IG5ld1N1cGVyRnJhbWVXaWR0aE9ySGVpZ2h0IC0gKG9yaWdTdXBlckZyYW1l
V2lkdGhPckhlaWdodCAtIHhPclkpOworICAgICAgICAgICAgaWYgKHhPclkgPCAwLjBmKQorICAg
ICAgICAgICAgICAgIHhPclkgPSAwLjBmOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTlNWaWV3TWluWE1hcmdpbiB8IE5TVmlld01heFhNYXJnaW46CisgICAgICAgICAgICBvcmln
TWFyZ2luc1RvdGFsID0gb3JpZ1N1cGVyRnJhbWVXaWR0aE9ySGVpZ2h0IC0gd2lkdGhPckhlaWdo
dDsKKyAgICAgICAgICAgIGlmICh4T3JZICYmIG9yaWdNYXJnaW5zVG90YWwgIT0gMC4wZikgewor
ICAgICAgICAgICAgICAgIHByb3AgPSB4T3JZIC8gb3JpZ01hcmdpbnNUb3RhbDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEbyB0aGUgNTAvNTAgc3BsaXQgZXZlbiBpZiBYb3JZ
ID0gMCBhbmQgdGhlIFdpZHRoT3JIZWlnaHQgaXMgb25seQorICAgICAgICAgICAgICAgIC8vIG9u
ZSBwaXhlbCBzaG9ydGVyLi4uCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3JpZ01hcmdpbnNU
b3RhbCA9PSAwLjBmIAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChhYnMob3JpZ01hcmdp
bnNUb3RhbCkgPT0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcCA9IDAuNWY7ICAvLyBU
aGVuIHNwbGl0IGl0IDUwOjUwLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcCA9IDEuMGY7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHhPclkgPSAoKG5ld1N1cGVyRnJhbWVXaWR0aE9ySGVpZ2h0IC0g
d2lkdGhPckhlaWdodCkpICogcHJvcDsKKyAgICAgICAgICAgIGlmICh4T3JZIDwgMC4wZikKKyAg
ICAgICAgICAgICAgICB4T3JZID0gMC4wZjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBOU1ZpZXdNaW5YTWFyZ2luIHwgTlNWaWV3V2lkdGhTaXphYmxlOgorICAgICAgICAg
ICAgdG1wID0geE9yWSArIHdpZHRoT3JIZWlnaHQ7CisgICAgICAgICAgICBpZiAodG1wKQorICAg
ICAgICAgICAgICAgIHByb3AgPSB4T3JZIC8gdG1wOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByb3AgPSAwLjVmOworICAgICAgICAgICAgeE9yWSA9ICgobmV3U3VwZXJGcmFt
ZVdpZHRoT3JIZWlnaHQgLSAob3JpZ1N1cGVyRnJhbWVXaWR0aE9ySGVpZ2h0IC0gdG1wKSkpICog
cHJvcDsKKyAgICAgICAgICAgIHdpZHRoT3JIZWlnaHQgID0gbmV3U3VwZXJGcmFtZVdpZHRoT3JI
ZWlnaHQgLSAoeE9yWSArIChvcmlnU3VwZXJGcmFtZVdpZHRoT3JIZWlnaHQgLSB0bXApKTsKKyAg
ICAgICAgICAgIGlmICh4T3JZIDwgMC4wZikKKyAgICAgICAgICAgICAgICB4T3JZID0gMC4wZjsK
KyAgICAgICAgICAgICAgICBpZiAod2lkdGhPckhlaWdodCA8IDAuMGYpCisgICAgICAgICAgICAg
ICAgICAgIHdpZHRoT3JIZWlnaHQgPSAwLjBmOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBOU1ZpZXdNaW5YTWFyZ2luIHwgTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNW
aWV3TWF4WE1hcmdpbjoKKyAgICAgICAgICAgIGlmIChvcmlnU3VwZXJGcmFtZVdpZHRoT3JIZWln
aHQpCisgICAgICAgICAgICAgICAgcHJvcCA9IHhPclkgLyBvcmlnU3VwZXJGcmFtZVdpZHRoT3JI
ZWlnaHQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvcCA9IDEuMGYgLyAz
LjBmOworICAgICAgICAgICAgeE9yWSA9IChuZXdTdXBlckZyYW1lV2lkdGhPckhlaWdodCAqIHBy
b3ApOworICAgICAgICAgICAgaWYgKG9yaWdTdXBlckZyYW1lV2lkdGhPckhlaWdodCkKKyAgICAg
ICAgICAgICAgICBwcm9wID0gd2lkdGhPckhlaWdodCAvIG9yaWdTdXBlckZyYW1lV2lkdGhPckhl
aWdodDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcm9wID0gMS4wZiAvIDMu
MGY7CisgICAgICAgICAgICB3aWR0aE9ySGVpZ2h0ID0gKG5ld1N1cGVyRnJhbWVXaWR0aE9ySGVp
Z2h0ICogcHJvcCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgKm9yaWdG
cmFtZVhvclkgPSBmbG9vcmYoeE9yWSk7CisgICAgKm9yaWdGcmFtZVdpZHRoT3JIZWlnaHQgPSBm
bG9vcmYod2lkdGhPckhlaWdodCk7Cit9CisKK3ZvaWQgX1dLVmlld0F1dG9yZXNpemUoV0tWaWV3
UmVmIHZpZXcsIGNvbnN0IENHUmVjdCAqb2xkU3VwZXJGcmFtZSwgY29uc3QgQ0dSZWN0ICpuZXdT
dXBlckZyYW1lKQoreworICAgIGlmICh2aWV3LT5hdXRvcmVzaXppbmdNYXNrICE9IE5TVmlld05v
dFNpemFibGUpIHsKKyAgICAgICAgQ0dSZWN0IG5ld0ZyYW1lID0gV0tWaWV3R2V0RnJhbWUodmll
dyk7CisgICAgICAgIF9XS1ZpZXdBdXRvcmVzaXplQ29vcmQoZmFsc2UsIHZpZXctPmF1dG9yZXNp
emluZ01hc2ssIG9sZFN1cGVyRnJhbWUsIG5ld1N1cGVyRnJhbWUsICZuZXdGcmFtZSk7CisgICAg
ICAgIF9XS1ZpZXdBdXRvcmVzaXplQ29vcmQodHJ1ZSwgdmlldy0+YXV0b3Jlc2l6aW5nTWFzaywg
b2xkU3VwZXJGcmFtZSwgbmV3U3VwZXJGcmFtZSwgJm5ld0ZyYW1lKTsKKyAgICAgICAgV0tWaWV3
U2V0RnJhbWVPcmlnaW4odmlldywgbmV3RnJhbWUub3JpZ2luKTsKKyAgICAgICAgV0tWaWV3U2V0
RnJhbWVTaXplKHZpZXcsIG5ld0ZyYW1lLnNpemUpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
X1dLVmlld0F1dG9yZXNpemVDaGlsZHJlbihXS1ZpZXdSZWYgdmlldywgY29uc3QgQ0dSZWN0ICpv
bGRTdXBlckZyYW1lLCBjb25zdCBDR1JlY3QgKm5ld1N1cGVyRnJhbWUpCit7CisgICAgV0tWaWV3
UmVmIGNoaWxkOworICAgIGZvciAoY2hpbGQgPSBXS1ZpZXdGaXJzdENoaWxkKHZpZXcpOyBjaGls
ZCAhPSBOVUxMOyBjaGlsZCA9IFdLVmlld05leHRTaWJsaW5nKGNoaWxkKSkgeworICAgICAgICBf
V0tWaWV3QXV0b3Jlc2l6ZShjaGlsZCwgb2xkU3VwZXJGcmFtZSwgbmV3U3VwZXJGcmFtZSk7Cisg
ICAgfSAgICAgICAgCit9CisKK3ZvaWQgV0tWaWV3U2V0RnJhbWVTaXplIChXS1ZpZXdSZWYgdmll
dywgQ0dTaXplIG5ld1NpemUpCit7CisgICAgaWYgKCF2aWV3KSB7CisgICAgICAgIFdLRXJyb3Ig
KCJpbnZhbGlkIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IEFTU0VSVCghaXNpbmYobmV3U2l6ZS53aWR0aCkpOworICAgIEFTU0VSVCghaXNuYW4obmV3U2l6
ZS53aWR0aCkpOworICAgIEFTU0VSVCghaXNpbmYobmV3U2l6ZS5oZWlnaHQpKTsKKyAgICBBU1NF
UlQoIWlzbmFuKG5ld1NpemUuaGVpZ2h0KSk7CisgICAgCisgICAgQ0dSZWN0IGZyYW1lOworICAg
IGZyYW1lLm9yaWdpbiA9IENHUG9pbnRaZXJvOworICAgIGZyYW1lLnNpemUgPSBuZXdTaXplOwor
ICAgIENHU2l6ZSBib3VuZHNTaXplID0gV0tWaWV3Q29udmVydFJlY3RGcm9tU3VwZXJ2aWV3KHZp
ZXcsIGZyYW1lKS5zaXplOworICAgIFdLVmlld1NldEJvdW5kc1NpemUodmlldywgYm91bmRzU2l6
ZSk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0Qm91bmRzU2l6ZSAoV0tWaWV3UmVmIHZpZXcsIENHU2l6
ZSBuZXdTaXplKQoreworICAgIGlmIChDR1NpemVFcXVhbFRvU2l6ZSh2aWV3LT5ib3VuZHMuc2l6
ZSwgbmV3U2l6ZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDR1JlY3Qgb2xkRnJhbWUg
PSBXS1ZpZXdHZXRGcmFtZSh2aWV3KTsKKyAgICB2aWV3LT5ib3VuZHMuc2l6ZSA9IG5ld1NpemU7
CisgICAgQ0dSZWN0IG5ld0ZyYW1lID0gV0tWaWV3R2V0RnJhbWUodmlldyk7CisgICAgCisgICAg
aWYgKHZpZXctPmNvbnRleHQgJiYgdmlldy0+Y29udGV4dC0+bm90aWZpY2F0aW9uQ2FsbGJhY2sp
CisgICAgICAgIHZpZXctPmNvbnRleHQtPm5vdGlmaWNhdGlvbkNhbGxiYWNrICh2aWV3LCBXS1Zp
ZXdOb3RpZmljYXRpb25WaWV3RnJhbWVTaXplQ2hhbmdlZCwgdmlldy0+Y29udGV4dC0+bm90aWZp
Y2F0aW9uVXNlckluZm8pOworICAgIAorICAgIF9XS1ZpZXdBdXRvcmVzaXplQ2hpbGRyZW4odmll
dywgJm9sZEZyYW1lLCAmbmV3RnJhbWUpOyAgICAKKyAgICBfV0tWaWV3UmVjdXJzaXZlbHlJbnZh
bGlkYXRlR1N0YXRlKHZpZXcpOworfQorCit2b2lkIFdLVmlld1NldEJvdW5kc09yaWdpbihXS1Zp
ZXdSZWYgdmlldywgQ0dQb2ludCBuZXdPcmlnaW4pCit7CisgICAgaWYgKENHUG9pbnRFcXVhbFRv
UG9pbnQodmlldy0+Ym91bmRzLm9yaWdpbiwgbmV3T3JpZ2luKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdmlldy0+Ym91bmRzLm9yaWdpbiA9IG5ld09yaWdpbjsKKworICAgIF9XS1ZpZXdSZWN1
cnNpdmVseUludmFsaWRhdGVHU3RhdGUodmlldyk7ICAgIAorfQorCit2b2lkIFdLVmlld1NldFNj
YWxlKFdLVmlld1JlZiB2aWV3LCBmbG9hdCBzY2FsZSkKK3sKKyAgICBBU1NFUlQoIWlzaW5mKHNj
YWxlKSk7CisgICAgQVNTRVJUKCFpc25hbihzY2FsZSkpOworICAgIAorICAgIGlmICh2aWV3LT5z
Y2FsZSA9PSBzY2FsZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHZpZXctPnNjYWxlID0g
c2NhbGU7CisgICAgCisgICAgaWYgKHZpZXctPmNvbnRleHQgJiYgdmlldy0+Y29udGV4dC0+bm90
aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIHZpZXctPmNvbnRleHQtPm5vdGlmaWNhdGlvbkNh
bGxiYWNrICh2aWV3LCBXS1ZpZXdOb3RpZmljYXRpb25WaWV3RnJhbWVTaXplQ2hhbmdlZCwgdmll
dy0+Y29udGV4dC0+bm90aWZpY2F0aW9uVXNlckluZm8pOworfQorCitmbG9hdCBXS1ZpZXdHZXRT
Y2FsZShXS1ZpZXdSZWYgdmlldykKK3sKKyAgICByZXR1cm4gdmlldy0+c2NhbGU7Cit9CisKK1dB
S1dpbmRvdyAqV0tWaWV3R2V0V2luZG93IChXS1ZpZXdSZWYgdmlldykKK3sKKyAgICBpZiAoIXZp
ZXcpIHsKKyAgICAgICAgV0tFcnJvciAoImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdmlldy0+d2luZG93OworfQorCitDRkFy
cmF5UmVmIFdLVmlld0dldFN1YnZpZXdzIChXS1ZpZXdSZWYgdmlldykKK3sKKyAgICBpZiAoIXZp
ZXcpIHsKKyAgICAgICAgV0tFcnJvciAoImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdmlldy0+c3Vidmlld3M7Cit9CisKK3Zv
aWQgV0tWaWV3QWRkU3VidmlldyAoV0tWaWV3UmVmIHZpZXcsIFdLVmlld1JlZiBzdWJ2aWV3KQor
eworICAgIGlmICghdmlldyB8fCAhc3VidmlldykgeworICAgICAgICBXS0Vycm9yICgiaW52YWxp
ZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXZp
ZXctPnN1YnZpZXdzKSB7CisgICAgICAgIHZpZXctPnN1YnZpZXdzID0gQ0ZBcnJheUNyZWF0ZU11
dGFibGUoTlVMTCwgMCwgJldLQ29sbGVjdGlvbkFycmF5Q2FsbEJhY2tzKTsKKyAgICB9CisgICAg
Q0ZBcnJheUFwcGVuZFZhbHVlICh2aWV3LT5zdWJ2aWV3cywgc3Vidmlldyk7CisgICAgX1dLVmll
d1NldFN1cGVydmlldyAoc3Vidmlldywgdmlldyk7CisgICAgCisgICAgLy8gU2V0IHRoZSB3aW5k
b3cgb24gc3VidmlldyBhbmQgYWxsIGl0J3MgY2hpbGRyZW4uCisgICAgX1dLVmlld1NldFdpbmRv
dyAoc3Vidmlldywgdmlldy0+d2luZG93KTsKK30KKwordm9pZCBXS1ZpZXdSZW1vdmVGcm9tU3Vw
ZXJ2aWV3IChXS1ZpZXdSZWYgdmlldykKK3sKKyAgICBpZiAoIXZpZXcpIHsKKyAgICAgICAgV0tF
cnJvciAoImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBfV0tWaWV3U2V0V2luZG93ICh2aWV3LCAwKTsKKworICAgIGlmICghdmlldy0+c3VwZXJ2aWV3
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYg
c3ZzID0gdmlldy0+c3VwZXJ2aWV3LT5zdWJ2aWV3czsKKyAgICBpZiAoIXN2cykgeworICAgICAg
ICBXS0Vycm9yICgic3VwZXJ2aWV3IGhhcyBubyBzdWJ2aWV3cyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ0ZJbmRleCBpbmRleCA9IFdLQXJyYXlJbmRleE9mVmFsdWUgKHN2cywg
dmlldyk7CisgICAgaWYgKGluZGV4IDwgMCkgeworICAgICAgICBXS0Vycm9yICgidmlldyBub3Qg
aW4gc3VwZXJ2aWV3IHN1YnZpZXdzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBf
V0tWaWV3V2lsbFJlbW92ZVN1YnZpZXcodmlldy0+c3VwZXJ2aWV3LCB2aWV3KTsKKyAgICAKKyAg
ICBDRkFycmF5UmVtb3ZlVmFsdWVBdEluZGV4IChzdnMsIGluZGV4KTsKKworICAgIF9XS1ZpZXdT
ZXRTdXBlcnZpZXcgKHZpZXcsIDApOworfQorCitXS1ZpZXdSZWYgV0tWaWV3Rmlyc3RDaGlsZCAo
V0tWaWV3UmVmIHZpZXcpCit7CisgICAgaWYgKCF2aWV3KSB7CisgICAgICAgIFdLRXJyb3IgKCJp
bnZhbGlkIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBDRkFy
cmF5UmVmIHN2ID0gdmlldy0+c3Vidmlld3M7CisgICAgCisgICAgaWYgKCFzdikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIAorICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQg
KHN2KTsKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAg
cmV0dXJuIChjb25zdCBXS1ZpZXdSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCAoc3YsIDApOwor
fQorCitXS1ZpZXdSZWYgV0tWaWV3TmV4dFNpYmxpbmcgKFdLVmlld1JlZiB2aWV3KQoreworICAg
IGlmICghdmlldykgeworICAgICAgICBXS0Vycm9yICgiaW52YWxpZCBwYXJhbWV0ZXIiKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCF2aWV3LT5zdXBlcnZpZXcpCisgICAg
ICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBDRkFycmF5UmVmIHN2cyA9IHZpZXctPnN1cGVy
dmlldy0+c3Vidmlld3M7CisgICAgaWYgKCFzdnMpCisgICAgICAgIHJldHVybiAwOworICAgICAg
ICAKKyAgICBDRkluZGV4IHRoaXNJbmRleCA9IFdLQXJyYXlJbmRleE9mVmFsdWUgKHN2cywgdmll
dyk7CisgICAgaWYgKHRoaXNJbmRleCA8IDApIHsKKyAgICAgICAgV0tFcnJvciAoImludGVybmFs
IGVycm9yLCB2aWV3IGlzIG5vdCBwcmVzZW50IGluIHN1cGVydmlldyBzdWJ2aWV3cyIpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudCAoc3ZzKTsKKyAgICBpZiAodGhpc0luZGV4KzEgPj0gY291bnQpCisgICAgICAgIHJl
dHVybiAwOworICAgICAgICAKKyAgICByZXR1cm4gKGNvbnN0IFdLVmlld1JlZilDRkFycmF5R2V0
VmFsdWVBdEluZGV4IChzdnMsIHRoaXNJbmRleCsxKTsKK30KKworLy8gVG8gcmVtb3ZlLCBzZWU6
IDxyZGFyOi8vcHJvYmxlbS8xMDM2MDQyNT4gUmVtb3ZlIFdLVmlld1RyYXZlcnNlTmV4dCBmcm9t
IFNrYW5rcGhvbmUKK1dLVmlld1JlZiBXS1ZpZXdUcmF2ZXJzZU5leHQoV0tWaWV3UmVmIHZpZXcp
Cit7CisgICAgaWYgKCF2aWV3KSB7CisgICAgICAgIFdLRXJyb3IgKCJpbnZhbGlkIHBhcmFtZXRl
ciIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBXS1ZpZXdSZWYgZmlyc3RDaGls
ZCA9IFdLVmlld0ZpcnN0Q2hpbGQodmlldyk7CisgICAgaWYgKGZpcnN0Q2hpbGQpCisgICAgICAg
IHJldHVybiBmaXJzdENoaWxkOworCisgICAgV0tWaWV3UmVmIG5leHRTaWJsaW5nID0gV0tWaWV3
TmV4dFNpYmxpbmcodmlldyk7CisgICAgaWYgKG5leHRTaWJsaW5nKQorICAgICAgICByZXR1cm4g
bmV4dFNpYmxpbmc7CisKKyAgICB3aGlsZSAodmlldyAmJiAhV0tWaWV3TmV4dFNpYmxpbmcodmll
dykpIHsKKyAgICAgICAgV0FLVmlldyAqd2FrVmlldyA9IFdBS1ZpZXdGb3JXS1ZpZXdSZWYodmll
dyk7CisgICAgICAgIFdBS1ZpZXcgKnN1cGVyVmlldyA9IFt3YWtWaWV3IHN1cGVydmlld107Cisg
ICAgICAgIHZpZXcgPSBbc3VwZXJWaWV3IF92aWV3UmVmXTsKKyAgICB9CisgICAgICAgIAorICAg
IGlmICh2aWV3KQorICAgICAgICByZXR1cm4gV0tWaWV3TmV4dFNpYmxpbmcodmlldyk7CisgICAg
CisgICAgcmV0dXJuIDA7Cit9CisKK0NHQWZmaW5lVHJhbnNmb3JtIF9XS1ZpZXdHZXRUcmFuc2Zv
cm0oV0tWaWV3UmVmIHZpZXcpCit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwor
ICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHZpZXctPm9y
aWdpbi54LCB2aWV3LT5vcmlnaW4ueSk7CisgICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zv
cm1TY2FsZSh0cmFuc2Zvcm0sIHZpZXctPnNjYWxlLCB2aWV3LT5zY2FsZSk7CisgICAgdHJhbnNm
b3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUodHJhbnNmb3JtLCAtdmlldy0+Ym91bmRz
Lm9yaWdpbi54LCAtdmlldy0+Ym91bmRzLm9yaWdpbi55KTsKKyAgICByZXR1cm4gdHJhbnNmb3Jt
OworfQorCitDR1JlY3QgV0tWaWV3R2V0VmlzaWJsZVJlY3QoV0tWaWV3UmVmIHZpZXdSZWYpCit7
CisgICAgaWYgKCF2aWV3UmVmKSB7CisgICAgICAgIFdLRXJyb3IgKCJpbnZhbGlkIHBhcmFtZXRl
ciIpOworICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICB9CisKKyAgICBXS1ZpZXdSZWYg
dmlldyA9IHZpZXdSZWY7CisgICAgQ0dSZWN0IHJlY3QgPSBXS1ZpZXdHZXRCb3VuZHModmlldyk7
CisgICAgV0tWaWV3UmVmIHN1cGVydmlldyA9IHZpZXctPnN1cGVydmlldzsKKyAgICAKKyAgICB3
aGlsZSAoc3VwZXJ2aWV3ICE9IE5VTEwpIHsKKyAgICAgICAgcmVjdCA9IFdLVmlld0NvbnZlcnRS
ZWN0VG9TdXBlcnZpZXcodmlldywgcmVjdCk7CisgICAgICAgIHJlY3QgPSBDR1JlY3RJbnRlcnNl
Y3Rpb24oV0tWaWV3R2V0Qm91bmRzKHN1cGVydmlldyksIHJlY3QpOworICAgICAgICB2aWV3ID0g
c3VwZXJ2aWV3OworICAgICAgICBzdXBlcnZpZXcgPSBzdXBlcnZpZXctPnN1cGVydmlldzsKKyAg
ICB9CisgICAgCisgICAgaWYgKHZpZXcgIT0gdmlld1JlZikgeworICAgICAgICByZWN0ID0gV0tW
aWV3Q29udmVydFJlY3RUb0Jhc2UodmlldywgcmVjdCk7CisgICAgICAgIHJlY3QgPSBXS1ZpZXdD
b252ZXJ0UmVjdEZyb21CYXNlKHZpZXdSZWYsIHJlY3QpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcmVjdDsKK30KKworQ0dSZWN0IFdLVmlld0NvbnZlcnRSZWN0VG9TdXBlcnZpZXcoV0tWaWV3
UmVmIHZpZXcsIENHUmVjdCByKQoreworICAgIGlmICghdmlldykgeworICAgICAgICBXS0Vycm9y
ICgiaW52YWxpZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAg
fQorICAgIAorICAgIHJldHVybiBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyLCBfV0tWaWV3
R2V0VHJhbnNmb3JtKHZpZXcpKTsKK30KKworQ0dSZWN0IFdLVmlld0NvbnZlcnRSZWN0VG9CYXNl
KFdLVmlld1JlZiB2aWV3LCBDR1JlY3QgcikKK3sKKyAgICBpZiAoIXZpZXcpIHsKKyAgICAgICAg
V0tFcnJvciAoImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybiBDR1JlY3RaZXJv
OworICAgIH0KKworICAgIENHUmVjdCBhUmVjdCA9IHI7CisgICAgCisgICAgd2hpbGUgKHZpZXcp
IHsKKyAgICAgICAgYVJlY3QgPSBXS1ZpZXdDb252ZXJ0UmVjdFRvU3VwZXJ2aWV3ICh2aWV3LCBh
UmVjdCk7ICAgIAorICAgICAgICB2aWV3ID0gdmlldy0+c3VwZXJ2aWV3OworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gYVJlY3Q7Cit9CisKK0NHUG9pbnQgV0tWaWV3Q29udmVydFBvaW50VG9TdXBl
cnZpZXcoV0tWaWV3UmVmIHZpZXcsIENHUG9pbnQgcCkKK3sKKyAgICBpZiAoIXZpZXcpIHsKKyAg
ICAgICAgV0tFcnJvciAoImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybiBDR1Bv
aW50WmVybzsKKyAgICB9CisKKyAgICByZXR1cm4gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3Jt
KHAsIF9XS1ZpZXdHZXRUcmFuc2Zvcm0odmlldykpOworfQorCitDR1BvaW50IFdLVmlld0NvbnZl
cnRQb2ludEZyb21TdXBlcnZpZXcoV0tWaWV3UmVmIHZpZXcsIENHUG9pbnQgcCkKK3sKKyAgICBp
ZiAoIXZpZXcpIHsKKyAgICAgICAgV0tFcnJvciAoImludmFsaWQgcGFyYW1ldGVyIik7CisgICAg
ICAgIHJldHVybiBDR1BvaW50WmVybzsKKyAgICB9CisgICAgCisgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoX1dLVmlld0dldFRyYW5zZm9y
bSh2aWV3KSk7CisgICAgcmV0dXJuIENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwLCB0cmFu
c2Zvcm0pOworfQorCitDR1BvaW50IFdLVmlld0NvbnZlcnRQb2ludFRvQmFzZShXS1ZpZXdSZWYg
dmlldywgQ0dQb2ludCBwKQoreworICAgIGlmICghdmlldykgeworICAgICAgICBXS0Vycm9yICgi
aW52YWxpZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJvOworICAgIH0K
KworICAgIENHUG9pbnQgYVBvaW50ID0gcDsKKyAgICAKKyAgICB3aGlsZSAodmlldykgeworICAg
ICAgICBhUG9pbnQgPSBXS1ZpZXdDb252ZXJ0UG9pbnRUb1N1cGVydmlldyAodmlldywgYVBvaW50
KTsgICAgCisgICAgICAgIHZpZXcgPSB2aWV3LT5zdXBlcnZpZXc7CisgICAgfQorICAgIAorICAg
IHJldHVybiBhUG9pbnQ7Cit9CisKKyNkZWZpbmUgVklFV19BUlJBWV9TSVpFIDEyOAorCitzdGF0
aWMgdm9pZCBfV0tWaWV3R2V0QW5jZXN0b3JWaWV3c0luY2x1ZGluZ1ZpZXcgKFdLVmlld1JlZiB2
aWV3LCBXS1ZpZXdSZWYgKnZpZXdzLCB1bnNpZ25lZCBtYXhWaWV3cywgdW5zaWduZWQgKnZpZXdD
b3VudCkKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgCisgICAgdmlld3NbY291bnQr
K10gPSB2aWV3OworICAgIFdLVmlld1JlZiBzdXBlcnZpZXcgPSB2aWV3LT5zdXBlcnZpZXc7Cisg
ICAgd2hpbGUgKHN1cGVydmlldykgeworICAgICAgICB2aWV3c1tjb3VudCsrXSA9IHN1cGVydmll
dzsKKyAgICAgICAgaWYgKGNvdW50ID49IG1heFZpZXdzKSB7CisgICAgICAgICAgICBXS0Vycm9y
ICgiRXhjZWVkZWQgbWF4Vmlld3MsIHVzZSBtYWxsb2MvcmVhbGxvYyIpOworICAgICAgICAgICAg
KnZpZXdDb3VudCA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
c3VwZXJ2aWV3ID0gc3VwZXJ2aWV3LT5zdXBlcnZpZXc7CisgICAgfQorICAgICp2aWV3Q291bnQg
PSBjb3VudDsKK30KKworQ0dQb2ludCBXS1ZpZXdDb252ZXJ0UG9pbnRGcm9tQmFzZShXS1ZpZXdS
ZWYgdmlldywgQ0dQb2ludCBwKQoreworICAgIGlmICghdmlldykgeworICAgICAgICBXS0Vycm9y
ICgiaW52YWxpZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJvOworICAg
IH0KKworICAgIFdLVmlld1JlZiB2aWV3c1tWSUVXX0FSUkFZX1NJWkVdOworICAgIHVuc2lnbmVk
IHZpZXdDb3VudCA9IDA7CisKKyAgICBfV0tWaWV3R2V0QW5jZXN0b3JWaWV3c0luY2x1ZGluZ1Zp
ZXcgKHZpZXcsIHZpZXdzLCBWSUVXX0FSUkFZX1NJWkUsICZ2aWV3Q291bnQpOworICAgIGlmICh2
aWV3Q291bnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIENHUG9pbnRaZXJvOworCisgICAgQ0dQb2lu
dCBhUG9pbnQgPSBwOworICAgIGludCBpOworICAgIGZvciAoaSA9IHZpZXdDb3VudC0xOyBpID49
IDA7IGktLSkgeworICAgICAgICBhUG9pbnQgPSBXS1ZpZXdDb252ZXJ0UG9pbnRGcm9tU3VwZXJ2
aWV3ICh2aWV3c1tpXSwgYVBvaW50KTsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBhUG9p
bnQ7Cit9CisKK0NHUmVjdCBXS1ZpZXdDb252ZXJ0UmVjdEZyb21TdXBlcnZpZXcoV0tWaWV3UmVm
IHZpZXcsIENHUmVjdCByKQoreworICAgIGlmICghdmlldykgeworICAgICAgICBXS0Vycm9yICgi
aW52YWxpZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgfQor
ICAgIAorICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3Jt
SW52ZXJ0KF9XS1ZpZXdHZXRUcmFuc2Zvcm0odmlldykpOworICAgIHJldHVybiBDR1JlY3RBcHBs
eUFmZmluZVRyYW5zZm9ybShyLCB0cmFuc2Zvcm0pOworfQorCitDR1JlY3QgV0tWaWV3Q29udmVy
dFJlY3RGcm9tQmFzZShXS1ZpZXdSZWYgdmlldywgQ0dSZWN0IHIpCit7CisgICAgaWYgKCF2aWV3
KSB7CisgICAgICAgIFdLRXJyb3IgKCJpbnZhbGlkIHBhcmFtZXRlciIpOworICAgICAgICByZXR1
cm4gQ0dSZWN0WmVybzsKKyAgICB9CisKKyAgICBXS1ZpZXdSZWYgdmlld3NbVklFV19BUlJBWV9T
SVpFXTsKKyAgICB1bnNpZ25lZCB2aWV3Q291bnQgPSAwOworCisgICAgX1dLVmlld0dldEFuY2Vz
dG9yVmlld3NJbmNsdWRpbmdWaWV3ICh2aWV3LCB2aWV3cywgVklFV19BUlJBWV9TSVpFLCAmdmll
d0NvdW50KTsKKyAgICBpZiAodmlld0NvdW50ID09IDApCisgICAgICAgIHJldHVybiBDR1JlY3Ra
ZXJvOworICAgIAorICAgIENHUmVjdCBhUmVjdCA9IHI7CisgICAgaW50IGk7CisgICAgZm9yIChp
ID0gdmlld0NvdW50LTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGFSZWN0ID0gV0tWaWV3Q29u
dmVydFJlY3RGcm9tU3VwZXJ2aWV3ICh2aWV3c1tpXSwgYVJlY3QpOworICAgIH0KKyAgICAgICAg
CisgICAgcmV0dXJuIGFSZWN0OworfQorCitib29sIFdLVmlld0FjY2VwdHNGaXJzdFJlc3BvbmRl
ciAoV0tWaWV3UmVmIHZpZXcpCit7CisgICAgYm9vbCByZXN1bHQgPSBUUlVFOworICAgIGlmICh2
aWV3ICYmIHZpZXctPmNvbnRleHQgJiYgdmlldy0+Y29udGV4dC0+cmVzcG9uZGVyQ2FsbGJhY2sp
CisgICAgICAgIHJlc3VsdCA9IHZpZXctPmNvbnRleHQtPnJlc3BvbmRlckNhbGxiYWNrKHZpZXcs
IFdLVmlld1Jlc3BvbmRlckFjY2VwdHNGaXJzdFJlc3BvbmRlciwgdmlldy0+Y29udGV4dC0+cmVz
cG9uZGVyVXNlckluZm8pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgV0tWaWV3QmVj
b21lRmlyc3RSZXNwb25kZXIgKFdLVmlld1JlZiB2aWV3KQoreworICAgIGJvb2wgcmVzdWx0ID0g
VFJVRTsKKyAgICBpZiAodmlldyAmJiB2aWV3LT5jb250ZXh0ICYmIHZpZXctPmNvbnRleHQtPnJl
c3BvbmRlckNhbGxiYWNrKQorICAgICAgICByZXN1bHQgPSB2aWV3LT5jb250ZXh0LT5yZXNwb25k
ZXJDYWxsYmFjayh2aWV3LCBXS1ZpZXdSZXNwb25kZXJCZWNvbWVGaXJzdFJlc3BvbmRlciwgdmll
dy0+Y29udGV4dC0+cmVzcG9uZGVyVXNlckluZm8pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2Jvb2wgV0tWaWV3UmVzaWduRmlyc3RSZXNwb25kZXIgKFdLVmlld1JlZiB2aWV3KQoreworICAg
IGJvb2wgcmVzdWx0ID0gVFJVRTsKKyAgICBpZiAodmlldyAmJiB2aWV3LT5jb250ZXh0ICYmIHZp
ZXctPmNvbnRleHQtPnJlc3BvbmRlckNhbGxiYWNrKQorICAgICAgICByZXN1bHQgPSB2aWV3LT5j
b250ZXh0LT5yZXNwb25kZXJDYWxsYmFjayh2aWV3LCBXS1ZpZXdSZXNwb25kZXJSZXNpZ25GaXJz
dFJlc3BvbmRlciwgdmlldy0+Y29udGV4dC0+cmVzcG9uZGVyVXNlckluZm8pOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIGludCBXS1ZpZXdHZXRBdXRvcmVzaXppbmdNYXNrKFdL
Vmlld1JlZiB2aWV3KQoreworICAgIGlmICghdmlldykgeworICAgICAgICBXS0Vycm9yICgiaW52
YWxpZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSAgICAKKyAgICByZXR1
cm4gdmlldy0+YXV0b3Jlc2l6aW5nTWFzazsKK30KKwordm9pZCBXS1ZpZXdTZXRBdXRvcmVzaXpp
bmdNYXNrIChXS1ZpZXdSZWYgdmlldywgdW5zaWduZWQgaW50IG1hc2spCit7CisgICAgaWYgKCF2
aWV3KSB7CisgICAgICAgIFdLRXJyb3IgKCJpbnZhbGlkIHBhcmFtZXRlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgfSAgICAKKyAgICB2aWV3LT5hdXRvcmVzaXppbmdNYXNrID0gbWFzazsKK30K
KworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy93YWsvV0tWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XS1ZpZXdQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYzY2Q1NjYwNWU4YzM2ZTk0YTI5
MTk4ZDg2YmNiZTE3MjRlMmQwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy93YWsvV0tWaWV3UHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLVmlld1ByaXZhdGVfaAorI2RlZmluZSBX
S1ZpZXdQcml2YXRlX2gKKworI2lmIFRBUkdFVF9PU19JUEhPTkUKKworI2ltcG9ydCAiV0tWaWV3
LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgICAgCisKK3Zv
aWQgX1dLVmlld1NldFdpbmRvdyAoV0tWaWV3UmVmIHZpZXcsIFdBS1dpbmRvdyAqd2luZG93KTsK
K3ZvaWQgX1dLVmlld1NldFN1cGVydmlldyAoV0tWaWV3UmVmIHZpZXcsIFdLVmlld1JlZiBzdXBl
cnZpZXcpOwordm9pZCBfV0tWaWV3V2lsbFJlbW92ZVN1YnZpZXcoV0tWaWV3UmVmIHZpZXcsIFdL
Vmlld1JlZiBzdWJ2aWV3KTsKK1dLVmlld1JlZiBfV0tWaWV3QmFzZVZpZXcgKFdLVmlld1JlZiB2
aWV3KTsKK3ZvaWQgX1dLVmlld0F1dG9yZXNpemUoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IENHUmVj
dCAqb2xkU3VwZXJGcmFtZSwgY29uc3QgQ0dSZWN0ICpuZXdTdXBlckZyYW1lKTsKK3ZvaWQgX1dL
Vmlld1NldFZpZXdDb250ZXh0IChXS1ZpZXdSZWYgdmlldywgV0tWaWV3Q29udGV4dCAqY29udGV4
dCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBUQVJHRVRf
T1NfSVBIT05FCisKKyNlbmRpZiAvLyBXS1ZpZXdQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIxMzkxOTM2
MTNiMzcwZWI2OTUwZGU2OTM0ZDQ5NTM2MjcyMjcyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5oCkBAIC0wLDAgKzEsOTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvcmVUaHJlYWRf
aAorI2RlZmluZSBXZWJDb3JlVGhyZWFkX2gKKworI2lmIFRBUkdFVF9PU19JUEhPTkUKKworI2lt
cG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9ydCA8ZmVudi5oPgorCisj
aWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmICAgIAorICAgICAg
ICAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBDR0NvbnRleHRSZWYgY3VycmVudENHQ29udGV4dDsK
K30gV2ViVGhyZWFkQ29udGV4dDsKKyAgICAKK2V4dGVybiB2b2xhdGlsZSBib29sIHdlYlRocmVh
ZFNob3VsZFlpZWxkOworCitleHRlcm4gZmVudl90IG1haW5UaHJlYWRGRW52OworCisjaWZkZWYg
X19PQkpDX18KK0BjbGFzcyBOU1J1bkxvb3A7CisjZWxzZQorY2xhc3MgTlNSdW5Mb29wOworI2Vu
ZGlmCisKKy8vIFRoZSBsb2NrIGlzIGF1dG9tYXRpY2FsbHkgZnJlZWQgYXQgdGhlIGJvdHRvbSBv
ZiB0aGUgcnVubG9vcC4gTm8gbmVlZCB0byB1bmxvY2suCisvLyBOb3RlIHRoYXQgY2FsbGluZyB0
aGlzIGZ1bmN0aW9uIG1heSBoYW5nIHlvdXIgVUkgZm9yIHNldmVyYWwgc2Vjb25kcy4gRG9uJ3Qg
dXNlCisvLyB1bmxlc3MgeW91IGhhdmUgdG8uCit2b2lkIFdlYlRocmVhZExvY2sodm9pZCk7Cisg
ICAgCisvLyBUaGlzIGlzIGEgbm8tb3AgZm9yIGNvbXBhdGliaWxpdHkgb25seS4gSXQgd2lsbCBn
byBhd2F5LiBQbGVhc2UgZG9uJ3QgdXNlLgordm9pZCBXZWJUaHJlYWRVbmxvY2sodm9pZCk7Cisg
ICAgCisvLyBQbGVhc2UgZG9uJ3QgdXNlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSB1bmxlc3Mg
eW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBJZiB1bnN1cmUsIGFzay4KKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9vbCBXZWJUaHJlYWRJc0xvY2tlZCh2b2lk
KTsKK2Jvb2wgV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKHZvaWQpOworICAgIAordm9pZCBX
ZWJUaHJlYWRMb2NrUHVzaE1vZGFsKHZvaWQpOwordm9pZCBXZWJUaHJlYWRMb2NrUG9wTW9kYWwo
dm9pZCk7CisKK3ZvaWQgV2ViVGhyZWFkRW5hYmxlKHZvaWQpOworYm9vbCBXZWJUaHJlYWRJc0Vu
YWJsZWQodm9pZCk7Citib29sIFdlYlRocmVhZElzQ3VycmVudCh2b2lkKTsKK2Jvb2wgV2ViVGhy
ZWFkTm90Q3VycmVudCh2b2lkKTsKKyAgICAKKy8vIFRoZXNlIGFyZSBmb3IgPHJkYXI6Ly9wcm9i
bGVtLzY4MTczNDE+IE1hbnkgYXBwcyBjcmFzaGluZyBjYWxsaW5nIC1bVUlGaWVsZEVkaXRvciB0
ZXh0XSBpbiBzZWNvbmRhcnkgdGhyZWFkCisvLyBEb24ndCB1c2UgdGhlbSB0byBzb2x2ZSBhbnkg
cmFuZG9tIHByb2JsZW1zIHlvdSBtaWdodCBoYXZlLgordm9pZCBXZWJUaHJlYWRMb2NrRnJvbUFu
eVRocmVhZCgpOwordm9pZCBXZWJUaHJlYWRMb2NrRnJvbUFueVRocmVhZE5vTG9nKCk7Cit2b2lk
IFdlYlRocmVhZFVubG9ja0Zyb21BbnlUaHJlYWQoKTsKKworLy8gVGhpcyBpcyBmb3IgPHJkYXI6
Ly9wcm9ibGVtLzgwMDUxOTI+IE1haWwgZW50ZXJlZCBhIHN0YXRlIHdoZXJlIG1lc3NhZ2Ugc3Vi
amVjdCBhbmQgY29udGVudCBpc24ndCBkaXNwbGF5ZWQuCisvLyBJdCBzaG91bGQgb25seSBiZSB1
c2VkIGZvciBNb2JpbGVNYWlsIHRvIHdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS84MDA1MTky
Pi4KK3ZvaWQgV2ViVGhyZWFkVW5sb2NrR3VhcmRGb3JNYWlsKCk7CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBXZWJUaHJlYWRTaG91bGRZaWVsZCh2b2lkKSB7IHJldHVybiB3ZWJUaHJlYWRTaG91bGRZ
aWVsZDsgfQorc3RhdGljIGlubGluZSB2b2lkIFdlYlRocmVhZFNldFNob3VsZFlpZWxkKCkgeyB3
ZWJUaHJlYWRTaG91bGRZaWVsZCA9IHRydWU7IH0KKworQ0ZSdW5Mb29wUmVmIFdlYlRocmVhZFJ1
bkxvb3Aodm9pZCk7CitOU1J1bkxvb3AqIFdlYlRocmVhZE5TUnVuTG9vcCh2b2lkKTsKK1dlYlRo
cmVhZENvbnRleHQgKldlYlRocmVhZEN1cnJlbnRDb250ZXh0KHZvaWQpOworYm9vbCBXZWJUaHJl
YWRDb250ZXh0SXNDdXJyZW50KHZvaWQpOworCit2b2lkIFdlYlRocmVhZFNldERlbGVnYXRlU291
cmNlUnVuTG9vcE1vZGUoQ0ZTdHJpbmdSZWYgbW9kZSk7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNw
bHVzKQorfQorI2VuZGlmCisKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCisKKyNlbmRpZiAv
LyBXZWJDb3JlVGhyZWFkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy93YWsvV2ViQ29yZVRocmVhZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsv
V2ViQ29yZVRocmVhZC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2M3NWIyYjg1MTM1YmFjZjQyNzc5ZTBlMzdl
ZjA0MjkxMWI1MTRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCkBAIC0wLDAgKzEsMTAyNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZC5o
IgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJKU0RPTVdpbmRvd0Jhc2UuaCIKKyNp
bXBvcnQgIlRocmVhZEdsb2JhbERhdGEuaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRJbnRlcm5h
bC5oIgorI2ltcG9ydCAiV2ViQ29yZVRocmVhZE1lc3NhZ2UuaCIKKyNpbXBvcnQgIldlYkNvcmVU
aHJlYWRSdW4uaCIKKyNpbXBvcnQgIldlYkNvcmVUaHJlYWRTYWZlLmgiCisjaW1wb3J0ICJXS1V0
aWxpdGllcy5oIgorCisjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNp
bXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbXBv
cnQgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9D
RlByaXYuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNJbnZvY2F0aW9uLmg+CisjaW1wb3J0IDxs
aWJrZXJuL09TQXRvbWljLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKworI2RlZmluZSBM
T0dfTUVTU0FHRVMgMAorI2RlZmluZSBMT0dfV0VCX0xPQ0sgMAorI2RlZmluZSBMT0dfTUFJTl9U
SFJFQURfTE9DS0lORyAwCisjZGVmaW5lIExPR19SRUxFQVNFUyAwCisKKyNkZWZpbmUgRGlzdGFu
dEZ1dHVyZSAgICg4NjQwMC4wICogMjAwMCAqIDM2NS4yNDI1ICsgODY0MDAuMCkgICAvLyBzYW1l
IGFzICtbTlNEYXRlIGRpc3RhbnRGdXR1cmVdCisjZGVmaW5lIE1heEFyZ0NvdW50ICAgICAgICAg
NQorI2RlZmluZSBEcmF3V2FpdEludGVydmFsICAgICAxMAorI2RlZmluZSBEZWxlZ2F0ZVdhaXRJ
bnRlcnZhbCAxMAorCitzdGF0aWMgdm9pZCBfV2ViVGhyZWFkQXV0b0xvY2sodm9pZCk7CitzdGF0
aWMgYm9vbCBfV2ViVHJ5VGhyZWFkTG9jayhib29sIHNob3VsZFRyeSk7CitzdGF0aWMgdm9pZCBf
V2ViVGhyZWFkTG9ja0Zyb21BbnlUaHJlYWQoYm9vbCBzaG91bGRMb2cpOworc3RhdGljIHZvaWQg
X1dlYlRocmVhZFVubG9jayh2b2lkKTsKKworQGludGVyZmFjZSBOU09iamVjdChGb3J3YXJkRGVj
bGFyYXRpb25zKQorLSh2b2lkKV93ZWJjb3JlX3JlbGVhc2VPbldlYlRocmVhZDsKKy0odm9pZClf
d2ViY29yZV9yZWxlYXNlV2l0aFdlYlRocmVhZExvY2s7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBOU09iamVjdChXZWJDb3JlVGhyZWFkQWRkaXRpb25zKQorCistICh2b2lkKXJlbGVhc2VPbk1h
aW5UaHJlYWQgeworICAgIGlmIChbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkgeworICAgICAgICBb
c2VsZiByZWxlYXNlXTsKKyAgICB9IGVsc2UgeworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0
b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKHJlbGVhc2UpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRp
bERvbmU6Tk9dOworICAgIH0KK30KKworQGVuZAorCit0eXBlZGVmIHZvaWQgKk5TQXV0b3JlbGVh
c2VQb29sTWFyazsKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2V4
dGVybiBOU0F1dG9yZWxlYXNlUG9vbE1hcmsgTlNQdXNoQXV0b3JlbGVhc2VQb29sKHVuc2lnbmVk
IGlnbm9yZWQpOworZXh0ZXJuIHZvaWQgTlNQb3BBdXRvcmVsZWFzZVBvb2woTlNBdXRvcmVsZWFz
ZVBvb2xNYXJrIHRva2VuKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKK3N0YXRp
YyBpbnQgV2ViVGltZWRDb25kaXRpb25Mb2NrIChwdGhyZWFkX2NvbmRfdCAqY29uZGl0aW9uLCBw
dGhyZWFkX211dGV4X3QgKmxvY2ssIENGQWJzb2x1dGVUaW1lIGludGVydmFsKTsKKworc3RhdGlj
IHB0aHJlYWRfbXV0ZXhfdCB3ZWJMb2NrOworc3RhdGljIE5TQXV0b3JlbGVhc2VQb29sTWFyayBh
dXRvcmVsZWFzZVBvb2xNYXJrOworc3RhdGljIENGUnVuTG9vcFJlZiB3ZWJUaHJlYWRSdW5Mb29w
Oworc3RhdGljIE5TUnVuTG9vcCogd2ViVGhyZWFkTlNSdW5Mb29wOworc3RhdGljIHB0aHJlYWRf
dCB3ZWJUaHJlYWQ7CitzdGF0aWMgQk9PTCBpc1dlYlRocmVhZExvY2tlZDsKK3N0YXRpYyBCT09M
IHdlYlRocmVhZFN0YXJ0ZWQ7CitzdGF0aWMgdW5zaWduZWQgd2ViVGhyZWFkTG9ja0NvdW50Owor
ZmVudl90IG1haW5UaHJlYWRGRW52OworCitzdGF0aWMgTlNBdXRvcmVsZWFzZVBvb2xNYXJrIHNh
dmVkQXV0b3JlbGVhc2VQb29sTWFyazsKK3N0YXRpYyBCT09MIGlzTmVzdGVkV2ViVGhyZWFkUnVu
TG9vcDsKK3R5cGVkZWYgZW51bSB7CisgICAgUHVzaE9yUG9wQXV0b3JlbGVhc2VQb29sLAorICAg
IElnbm9yZUF1dG9yZWxlYXNlUG9vbAorfSBBdXRvcmVsZWFzZVBvb2xPcGVyYXRpb247CisKK3N0
YXRpYyBwdGhyZWFkX211dGV4X3QgV2ViVGhyZWFkUmVsZWFzZUxvY2sgPSBQVEhSRUFEX01VVEVY
X0lOSVRJQUxJWkVSOworc3RhdGljIENGUnVuTG9vcFNvdXJjZVJlZiBXZWJUaHJlYWRSZWxlYXNl
U291cmNlOworc3RhdGljIENGTXV0YWJsZUFycmF5UmVmIFdlYlRocmVhZFJlbGVhc2VPYmpBcnJh
eTsKKworc3RhdGljIHZvaWQgTWFpblRocmVhZEFkb3B0QW5kUmVsZWFzZShpZCBvYmopOworCitz
dGF0aWMgcHRocmVhZF9tdXRleF90IGRlbGVnYXRlTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElB
TElaRVI7CitzdGF0aWMgcHRocmVhZF9jb25kX3QgZGVsZWdhdGVDb25kaXRpb24gPSBQVEhSRUFE
X0NPTkRfSU5JVElBTElaRVI7CitzdGF0aWMgTlNJbnZvY2F0aW9uICpkZWxlZ2F0ZUludm9jYXRp
b247CitzdGF0aWMgQ0ZSdW5Mb29wU291cmNlUmVmIGRlbGVnYXRlU291cmNlID0gTlVMTDsKK3N0
YXRpYyBCT09MIGRlbGVnYXRlSGFuZGxlZDsKKyNpZiBMT0dfTUFJTl9USFJFQURfTE9DS0lORwor
c3RhdGljIEJPT0wgc2VuZGluZ0RlbGVnYXRlTWVzc2FnZTsKKyNlbmRpZgorCitzdGF0aWMgQ0ZS
dW5Mb29wT2JzZXJ2ZXJSZWYgbWFpblJ1bkxvb3BBdXRvVW5sb2NrT2JzZXJ2ZXI7CisKK3N0YXRp
YyBwdGhyZWFkX211dGV4X3Qgc3RhcnR1cExvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVS
Oworc3RhdGljIHB0aHJlYWRfY29uZF90IHN0YXJ0dXBDb25kaXRpb24gPSBQVEhSRUFEX0NPTkRf
SU5JVElBTElaRVI7CisKK3N0YXRpYyBXZWJUaHJlYWRDb250ZXh0ICp3ZWJUaHJlYWRDb250ZXh0
Oworc3RhdGljIHB0aHJlYWRfa2V5X3QgdGhyZWFkQ29udGV4dEtleTsKK3N0YXRpYyB1bnNpZ25l
ZCBtYWluVGhyZWFkTG9ja0NvdW50Oworc3RhdGljIHVuc2lnbmVkIG90aGVyVGhyZWFkTG9ja0Nv
dW50Oworc3RhdGljIHVuc2lnbmVkIHNNYWluVGhyZWFkTW9kYWxDb3VudDsKKwordm9sYXRpbGUg
Ym9vbCB3ZWJUaHJlYWRTaG91bGRZaWVsZDsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBXZWJD
b3JlUmVsZWFzZUxvY2s7CitzdGF0aWMgdm9pZCBXZWJDb3JlT2JqQ0RlYWxsb2NPbldlYlRocmVh
ZEltcGwoaWQgc2VsZiwgU0VMIF9jbWQpOworc3RhdGljIHZvaWQgV2ViQ29yZU9iakNEZWFsbG9j
V2l0aFdlYlRocmVhZExvY2tJbXBsKGlkIHNlbGYsIFNFTCBfY21kKTsKKworc3RhdGljIE5TTXV0
YWJsZUFycmF5ICpzQXN5bmNEZWxlZ2F0ZXMgPSBuaWw7CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBk
ZWxlZ2F0ZVNvdXJjZVJ1bkxvb3BNb2RlOworCitzdGF0aWMgaW5saW5lIHZvaWQgU2VuZE1lc3Nh
Z2UoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uKQoreworICAgIFtpbnZvY2F0aW9uIGludm9rZV07
CisgICAgTWFpblRocmVhZEFkb3B0QW5kUmVsZWFzZShpbnZvY2F0aW9uKTsKK30KKworc3RhdGlj
IHZvaWQgSGFuZGxlRGVsZWdhdGVTb3VyY2Uodm9pZCAqaW5mbykKK3sKKyAgICBVTlVTRURfUEFS
QU0oaW5mbyk7CisgICAgQVNTRVJUKCFXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisKKyNpZiBMT0df
TUFJTl9USFJFQURfTE9DS0lORworICAgIHNlbmRpbmdEZWxlZ2F0ZU1lc3NhZ2UgPSBZRVM7Cisj
ZW5kaWYKKworICAgIF9XZWJUaHJlYWRBdXRvTG9jaygpOworCisgICAgaW50IHJlc3VsdCA9IHB0
aHJlYWRfbXV0ZXhfbG9jaygmZGVsZWdhdGVMb2NrKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHJlc3VsdCA9PSAwLCAiZGVsZWdhdGUgbG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgcmVzdWx0
KTsKKworI2lmIExPR19NRVNTQUdFUworICAgIGlmIChbW2RlbGVnYXRlSW52b2NhdGlvbiB0YXJn
ZXRdIGlzS2luZE9mQ2xhc3M6W05TTm90aWZpY2F0aW9uQ2VudGVyIGNsYXNzXV0pIHsKKyAgICAg
ICAgaWQgYXJndW1lbnQwOworICAgICAgICBbZGVsZWdhdGVJbnZvY2F0aW9uIGdldEFyZ3VtZW50
OiZhcmd1bWVudDAgYXRJbmRleDowXTsKKyAgICAgICAgTlNMb2coQCJub3RpZmljYXRpb24gcmVj
ZWl2ZTogJUAiLCBhcmd1bWVudDApOworICAgIH0gZWxzZSB7CisgICAgICAgIE5TTG9nKEAiZGVs
ZWdhdGUgcmVjZWl2ZTogJUAiLCBOU1N0cmluZ0Zyb21TZWxlY3RvcihbZGVsZWdhdGVJbnZvY2F0
aW9uIHNlbGVjdG9yXSkpOworICAgIH0KKyNlbmRpZgorCisgICAgU2VuZE1lc3NhZ2UoZGVsZWdh
dGVJbnZvY2F0aW9uKTsKKworICAgIGRlbGVnYXRlSGFuZGxlZCA9IFlFUzsKKyAgICBwdGhyZWFk
X2NvbmRfc2lnbmFsKCZkZWxlZ2F0ZUNvbmRpdGlvbik7CisKKyAgICByZXN1bHQgPSBwdGhyZWFk
X211dGV4X3VubG9jaygmZGVsZWdhdGVMb2NrKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJl
c3VsdCA9PSAwLCAiZGVsZWdhdGUgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCByZXN1bHQp
OworCisjaWYgTE9HX01BSU5fVEhSRUFEX0xPQ0tJTkcKKyAgICBzZW5kaW5nRGVsZWdhdGVNZXNz
YWdlID0gTk87CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgU2VuZERlbGVnYXRlTWVzc2FnZShO
U0ludm9jYXRpb24gKmludm9jYXRpb24pCit7CisgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgp
KSB7CisgICAgICAgIEFTU0VSVChkZWxlZ2F0ZVNvdXJjZSk7CisgICAgICAgIGludCByZXN1bHQg
PSBwdGhyZWFkX211dGV4X2xvY2soJmRlbGVnYXRlTG9jayk7CisgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UocmVzdWx0ID09IDAsICJkZWxlZ2F0ZSBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQi
LCByZXN1bHQpOworCisgICAgICAgIGRlbGVnYXRlSW52b2NhdGlvbiA9IGludm9jYXRpb247Cisg
ICAgICAgIGRlbGVnYXRlSGFuZGxlZCA9IE5POworCisjaWYgTE9HX01FU1NBR0VTCisgICAgICAg
IGlmIChbW2RlbGVnYXRlSW52b2NhdGlvbiB0YXJnZXRdIGlzS2luZE9mQ2xhc3M6W05TTm90aWZp
Y2F0aW9uQ2VudGVyIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIGlkIGFyZ3VtZW50MDsKKyAgICAg
ICAgICAgIFtkZWxlZ2F0ZUludm9jYXRpb24gZ2V0QXJndW1lbnQ6JmFyZ3VtZW50MCBhdEluZGV4
OjBdOworICAgICAgICAgICAgTlNMb2coQCJub3RpZmljYXRpb24gc2VuZDogJUAiLCBhcmd1bWVu
dDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTlNMb2coQCJkZWxlZ2F0ZSBzZW5k
OiAlQCIsIE5TU3RyaW5nRnJvbVNlbGVjdG9yKFtkZWxlZ2F0ZUludm9jYXRpb24gc2VsZWN0b3Jd
KSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvZGUg
YmxvY2sgY3JlYXRlZCB0byBzY29wZSBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIG91dHNpZGUg
b2YgV2ViVGhyZWFkTG9jaygpCisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCksIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3M6OkFsd2F5c0Ryb3BMb2Nrcyk7CisgICAgICAgICAgICBfV2Vi
VGhyZWFkVW5sb2NrKCk7CisKKyAgICAgICAgICAgIENGUnVuTG9vcFNvdXJjZVNpZ25hbChkZWxl
Z2F0ZVNvdXJjZSk7CisgICAgICAgICAgICBDRlJ1bkxvb3BXYWtlVXAoQ0ZSdW5Mb29wR2V0TWFp
bigpKTsKKworICAgICAgICAgICAgd2hpbGUgKCFkZWxlZ2F0ZUhhbmRsZWQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoV2ViVGltZWRDb25kaXRpb25Mb2NrKCZkZWxlZ2F0ZUNvbmRpdGlvbiwgJmRl
bGVnYXRlTG9jaywgRGVsZWdhdGVXYWl0SW50ZXJ2YWwpICE9IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWQgZGVsZWdhdGVJbmZvcm1hdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFtb
ZGVsZWdhdGVJbnZvY2F0aW9uIHRhcmdldF0gaXNLaW5kT2ZDbGFzczpbTlNOb3RpZmljYXRpb25D
ZW50ZXIgY2xhc3NdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFtkZWxlZ2F0ZUludm9jYXRp
b24gZ2V0QXJndW1lbnQ6JmRlbGVnYXRlSW5mb3JtYXRpb24gYXRJbmRleDowXTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGVJbmZvcm1h
dGlvbiA9IE5TU3RyaW5nRnJvbVNlbGVjdG9yKFtkZWxlZ2F0ZUludm9jYXRpb24gc2VsZWN0b3Jd
KTsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIG1vZGUgPSBDRlJ1
bkxvb3BDb3B5Q3VycmVudE1vZGUoQ0ZSdW5Mb29wR2V0TWFpbigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgTlNMb2coQCIlczogZGVsZWdhdGUgKCVAKSBmYWlsZWQgdG8gcmV0dXJuIGFmdGVyIHdh
aXRpbmcgJWQgc2Vjb25kcy4gbWFpbiBydW4gbG9vcCBtb2RlOiAlQCIsIF9fUFJFVFRZX0ZVTkNU
SU9OX18sIGRlbGVnYXRlSW5mb3JtYXRpb24sIERlbGVnYXRlV2FpdEludGVydmFsLCBtb2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBD
RlJlbGVhc2UobW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJmRlbGVnYXRlTG9jayk7CisKKyAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVzdWx0ID09IDAsICJkZWxlZ2F0ZSB1bmxv
Y2sgZmFpbGVkIHdpdGggY29kZTolZCIsIHJlc3VsdCk7CisgICAgICAgICAgICBfV2ViVHJ5VGhy
ZWFkTG9jayhmYWxzZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBTZW5kTWVz
c2FnZShpbnZvY2F0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVGhyZWFkUnVuT25NYWluVGhy
ZWFkKHZvaWQoXmRlbGVnYXRlQmxvY2spKCkpCit7CisgICAgaWYgKCFXZWJUaHJlYWRJc0N1cnJl
bnQoKSkgeworICAgICAgICBBU1NFUlQocHRocmVhZF9tYWluX25wKCkpOworICAgICAgICBkZWxl
Z2F0ZUJsb2NrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCksIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3M6OkFsd2F5c0Ryb3BMb2Nrcyk7CisgICAg
X1dlYlRocmVhZFVubG9jaygpOworCisgICAgdm9pZCAoXmRlbGVnYXRlQmxvY2tDb3B5KSgpID0g
QmxvY2tfY29weShkZWxlZ2F0ZUJsb2NrKTsKKyAgICBkaXNwYXRjaF9zeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIGRlbGVnYXRlQmxvY2tDb3B5KTsKKyAgICBCbG9ja19yZWxlYXNlKGRl
bGVnYXRlQmxvY2tDb3B5KTsKKworICAgIF9XZWJUcnlUaHJlYWRMb2NrKGZhbHNlKTsKK30KKwor
c3RhdGljIHZvaWQgTWFpblRocmVhZEFkb3B0QW5kUmVsZWFzZShpZCBvYmopCit7CisgICAgaWYg
KCFXZWJUaHJlYWRJc0VuYWJsZWQoKSB8fCBDRlJ1bkxvb3BHZXRNYWluKCkgPT0gQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpKSB7CisgICAgICAgIFtvYmogcmVsZWFzZV07CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjaWYgTE9HX1JFTEVBU0VTCisgICAgTlNMb2coQCJSZWxlYXNlIHNlbmQgW3dlYiB0
aHJlYWRdIDogJUAiLCBvYmopOworI2VuZGlmCisgICAgLy8gV2Ugb3duIG9iaiBhdCB0aGlzIHBv
aW50LCBzbyB3ZSBkb24ndCBuZWVkIHRoZSBibG9jayB0byBpbXBsaWNpdGx5CisgICAgLy8gcmV0
YWluIGl0LgorICAgIF9fYmxvY2sgaWQgb2JqTm90UmV0YWluZWQgPSBvYmo7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgW29iak5vdFJl
dGFpbmVkIHJlbGVhc2VdOworICAgIH0pOworfQorCit2b2lkIFdlYlRocmVhZEFkb3B0QW5kUmVs
ZWFzZShpZCBvYmopCit7CisgICAgQVNTRVJUKCFXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAg
QVNTRVJUKFdlYlRocmVhZFJlbGVhc2VTb3VyY2UpOworCisjaWYgTE9HX1JFTEVBU0VTCisgICAg
TlNMb2coQCJSZWxlYXNlIHNlbmQgW21haW4gdGhyZWFkXTogJUAiLCBvYmopOworI2VuZGlmICAg
ICAgICAKKworICAgIGludCByZXN1bHQgPSBwdGhyZWFkX211dGV4X2xvY2soJldlYlRocmVhZFJl
bGVhc2VMb2NrKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlc3VsdCA9PSAwLCAiUmVsZWFz
ZSBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCByZXN1bHQpOworCisgICAgaWYgKFdlYlRocmVh
ZFJlbGVhc2VPYmpBcnJheSA9PSBuaWwpCisgICAgICAgIFdlYlRocmVhZFJlbGVhc2VPYmpBcnJh
eSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIDAsIE5V
TEwpOworICAgIENGQXJyYXlBcHBlbmRWYWx1ZShXZWJUaHJlYWRSZWxlYXNlT2JqQXJyYXksIG9i
aik7CisgICAgQ0ZSdW5Mb29wU291cmNlU2lnbmFsKFdlYlRocmVhZFJlbGVhc2VTb3VyY2UpOwor
ICAgIENGUnVuTG9vcFdha2VVcCh3ZWJUaHJlYWRSdW5Mb29wKTsKKworICAgIHJlc3VsdCA9IHB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCZXZWJUaHJlYWRSZWxlYXNlTG9jayk7ICAgIAorICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UocmVzdWx0ID09IDAsICJSZWxlYXNlIHVubG9jayBmYWlsZWQgd2l0aCBj
b2RlOiVkIiwgcmVzdWx0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tXZWJDb3JlUmVs
ZWFzZUxvY2soKQoreworICAgIGludCBsb2NrY29kZSA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmV2Vi
Q29yZVJlbGVhc2VMb2NrKTsKKyNwcmFnbWEgdW51c2VkIChsb2NrY29kZSkKKyAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGxvY2tjb2RlID09IDAsICJXZWJDb3JlUmVsZWFzZUxvY2sgbG9jayBmYWls
ZWQgd2l0aCBjb2RlOiVkIiwgbG9ja2NvZGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5s
b2NrV2ViQ29yZVJlbGVhc2VMb2NrKCkKK3sKKyAgICBpbnQgbG9ja2NvZGUgPSBwdGhyZWFkX211
dGV4X3VubG9jaygmV2ViQ29yZVJlbGVhc2VMb2NrKTsKKyNwcmFnbWEgdW51c2VkIChsb2NrY29k
ZSkKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGxvY2tjb2RlID09IDAsICJXZWJDb3JlUmVsZWFz
ZUxvY2sgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCBsb2NrY29kZSk7Cit9CisKK3ZvaWQg
V2ViQ29yZU9iakNEZWFsbG9jT25XZWJUaHJlYWQoQ2xhc3MgY2xzKQoreworICAgIFNFTCByZWxl
YXNlU0VMID0gQHNlbGVjdG9yKHJlbGVhc2UpOworICAgIFNFTCB3ZWJUaHJlYWRSZWxlYXNlU0VM
ID0gQHNlbGVjdG9yKF93ZWJjb3JlX3JlbGVhc2VPbldlYlRocmVhZCk7CisKKyAgICAvLyBnZXQg
dGhlIGV4aXN0aW5nIHJlbGVhc2UgbWV0aG9kCisgICAgTWV0aG9kIHJlbGVhc2VNZXRob2QgPSBj
bGFzc19nZXRJbnN0YW5jZU1ldGhvZChjbHMsIHJlbGVhc2VTRUwpOworICAgIGlmICghcmVsZWFz
ZU1ldGhvZCkgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlbGVhc2VNZXRob2QsICJX
ZWJDb3JlT2JqQ0RlYWxsb2NPbldlYlRocmVhZCgpIGZhaWxlZCB0byBmaW5kICVzIGZvciAlQCIs
IHJlbGVhc2VTRUwsIE5TU3RyaW5nRnJvbUNsYXNzKGNscykpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gYWRkIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGVuc3VyZXMgcmVsZWFz
ZSBXZWJUaHJlYWQgcmVsZWFzZS9kZWFsbG9jYXRpb24KKyAgICBpZiAoIWNsYXNzX2FkZE1ldGhv
ZChjbHMsIHdlYlRocmVhZFJlbGVhc2VTRUwsIChJTVApV2ViQ29yZU9iakNEZWFsbG9jT25XZWJU
aHJlYWRJbXBsLCBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKHJlbGVhc2VNZXRob2QpKSkgeworICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlbGVhc2VNZXRob2QsICJXZWJDb3JlT2JqQ0RlYWxs
b2NPbldlYlRocmVhZCgpIGZhaWxlZCB0byBhZGQgJXMgZm9yICVAIiwgd2ViVGhyZWFkUmVsZWFz
ZVNFTCwgTlNTdHJpbmdGcm9tQ2xhc3MoY2xzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBlbnN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGV4aXN0cyBhdCBjbHMgaW4gdGhlIGNs
YXNzIGhpZXJhcmNoeQorICAgIGlmIChjbGFzc19hZGRNZXRob2QoY2xzLCByZWxlYXNlU0VMLCBj
bGFzc19nZXRNZXRob2RJbXBsZW1lbnRhdGlvbihjbHMsIHJlbGVhc2VTRUwpLCBtZXRob2RfZ2V0
VHlwZUVuY29kaW5nKHJlbGVhc2VNZXRob2QpKSkKKyAgICAgICAgcmVsZWFzZU1ldGhvZCA9IGNs
YXNzX2dldEluc3RhbmNlTWV0aG9kKGNscywgcmVsZWFzZVNFTCk7CisKKyAgICAvLyBzd2l6emxl
IHRoZSBvbGQgcmVsZWFzZSBmb3IgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbgorICAgIG1ldGhvZF9l
eGNoYW5nZUltcGxlbWVudGF0aW9ucyhyZWxlYXNlTWV0aG9kLCBjbGFzc19nZXRJbnN0YW5jZU1l
dGhvZChjbHMsIHdlYlRocmVhZFJlbGVhc2VTRUwpKTsKK30KKwordm9pZCBXZWJDb3JlT2JqQ0Rl
YWxsb2NXaXRoV2ViVGhyZWFkTG9jayhDbGFzcyBjbHMpCit7CisgICAgU0VMIHJlbGVhc2VTRUwg
PSBAc2VsZWN0b3IocmVsZWFzZSk7CisgICAgU0VMIHdlYlRocmVhZExvY2tSZWxlYXNlU0VMID0g
QHNlbGVjdG9yKF93ZWJjb3JlX3JlbGVhc2VXaXRoV2ViVGhyZWFkTG9jayk7CisKKyAgICAvLyBn
ZXQgdGhlIGV4aXN0aW5nIHJlbGVhc2UgbWV0aG9kCisgICAgTWV0aG9kIHJlbGVhc2VNZXRob2Qg
PSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChjbHMsIHJlbGVhc2VTRUwpOworICAgIGlmICghcmVs
ZWFzZU1ldGhvZCkgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlbGVhc2VNZXRob2Qs
ICJXZWJDb3JlT2JqQ0RlYWxsb2NXaXRoV2ViVGhyZWFkTG9jaygpIGZhaWxlZCB0byBmaW5kICVz
IGZvciAlQCIsIHJlbGVhc2VTRUwsIE5TU3RyaW5nRnJvbUNsYXNzKGNscykpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gYWRkIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGVuc3Vy
ZXMgcmVsZWFzZSBXZWJUaHJlYWRMb2NrIHJlbGVhc2UvZGVhbGxvY2F0aW9uCisgICAgaWYgKCFj
bGFzc19hZGRNZXRob2QoY2xzLCB3ZWJUaHJlYWRMb2NrUmVsZWFzZVNFTCwgKElNUClXZWJDb3Jl
T2JqQ0RlYWxsb2NXaXRoV2ViVGhyZWFkTG9ja0ltcGwsIG1ldGhvZF9nZXRUeXBlRW5jb2Rpbmco
cmVsZWFzZU1ldGhvZCkpKSB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVsZWFzZU1l
dGhvZCwgIldlYkNvcmVPYmpDRGVhbGxvY1dpdGhXZWJUaHJlYWRMb2NrKCkgZmFpbGVkIHRvIGFk
ZCAlcyBmb3IgJUAiLCB3ZWJUaHJlYWRMb2NrUmVsZWFzZVNFTCwgTlNTdHJpbmdGcm9tQ2xhc3Mo
Y2xzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBlbnN1cmUgdGhlIGltcGxl
bWVudGF0aW9uIGV4aXN0cyBhdCBjbHMgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeQorICAgIGlmIChj
bGFzc19hZGRNZXRob2QoY2xzLCByZWxlYXNlU0VMLCBjbGFzc19nZXRNZXRob2RJbXBsZW1lbnRh
dGlvbihjbHMsIHJlbGVhc2VTRUwpLCBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKHJlbGVhc2VNZXRo
b2QpKSkKKyAgICAgICAgcmVsZWFzZU1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKGNs
cywgcmVsZWFzZVNFTCk7CisKKyAgICAvLyBzd2l6emxlIHRoZSBvbGQgcmVsZWFzZSBmb3IgdGhl
IG5ldyBpbXBsZW1lbnRhdGlvbgorICAgIG1ldGhvZF9leGNoYW5nZUltcGxlbWVudGF0aW9ucyhy
ZWxlYXNlTWV0aG9kLCBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChjbHMsIHdlYlRocmVhZExvY2tS
ZWxlYXNlU0VMKSk7Cit9CisKK3ZvaWQgV2ViQ29yZU9iakNEZWFsbG9jT25XZWJUaHJlYWRJbXBs
KGlkIHNlbGYsIFNFTCBfY21kKQoreworICAgIFVOVVNFRF9QQVJBTShfY21kKTsKKyAgICBpZiAo
IVdlYlRocmVhZElzRW5hYmxlZCgpKQorICAgICAgICBbc2VsZiBfd2ViY29yZV9yZWxlYXNlT25X
ZWJUaHJlYWRdOworICAgIGVsc2UgeworICAgICAgICBsb2NrV2ViQ29yZVJlbGVhc2VMb2NrKCk7
CisgICAgICAgIGlmIChbc2VsZiByZXRhaW5Db3VudF0gPT0gMSkgeworICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgb25seSByZWZlcmVuY2UgcmV0YWluaW5nIHRoZSBvYmplY3QsIHNvIHdlIGNh
bgorICAgICAgICAgICAgLy8gc2FmZWx5IHJlbGVhc2UgdGhlIFdlYkNvcmVSZWxlYXNlTG9jayBu
b3cuCisgICAgICAgICAgICB1bmxvY2tXZWJDb3JlUmVsZWFzZUxvY2soKTsKKyAgICAgICAgICAg
IGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkKKyAgICAgICAgICAgICAgICBbc2VsZiBfd2ViY29y
ZV9yZWxlYXNlT25XZWJUaHJlYWRdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IFdlYlRocmVhZEFkb3B0QW5kUmVsZWFzZShzZWxmKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBvbmx5IHJlZmVyZW5jZSByZXRhaW5pbmcgdGhlIG9i
amVjdCwgc28gYW5vdGhlcgorICAgICAgICAgICAgLy8gdGhyZWFkIGNvdWxkIGFsc28gY2FsbCBy
ZWxlYXNlIC0gaG9sZCB0aGUgbG9jayB3aGlsc3QgY2FsbGluZworICAgICAgICAgICAgLy8gcmVs
ZWFzZSB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLgorICAgICAgICAgICAgW3NlbGYgX3dlYmNv
cmVfcmVsZWFzZU9uV2ViVGhyZWFkXTsKKyAgICAgICAgICAgIHVubG9ja1dlYkNvcmVSZWxlYXNl
TG9jaygpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdlYkNvcmVPYmpDRGVhbGxvY1dp
dGhXZWJUaHJlYWRMb2NrSW1wbChpZCBzZWxmLCBTRUwgX2NtZCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oX2NtZCk7CisgICAgbG9ja1dlYkNvcmVSZWxlYXNlTG9jaygpOworICAgIGlmIChXZWJUaHJl
YWRJc0xvY2tlZE9yRGlzYWJsZWQoKSB8fCAxICE9IFtzZWxmIHJldGFpbkNvdW50XSkKKyAgICAg
ICAgW3NlbGYgX3dlYmNvcmVfcmVsZWFzZVdpdGhXZWJUaHJlYWRMb2NrXTsKKyAgICBlbHNlCisg
ICAgICAgIFdlYlRocmVhZEFkb3B0QW5kUmVsZWFzZShzZWxmKTsKKyAgICB1bmxvY2tXZWJDb3Jl
UmVsZWFzZUxvY2soKTsKK30KKworc3RhdGljIHZvaWQgSGFuZGxlV2ViVGhyZWFkUmVsZWFzZVNv
dXJjZSh2b2lkICppbmZvKQoreworICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKKyAgICBBU1NFUlQo
V2ViVGhyZWFkSXNDdXJyZW50KCkpOworCisgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhf
bG9jaygmV2ViVGhyZWFkUmVsZWFzZUxvY2spOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVz
dWx0ID09IDAsICJSZWxlYXNlIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIHJlc3VsdCk7CisK
KyAgICBDRk11dGFibGVBcnJheVJlZiBvYmplY3RzID0gTlVMTDsKKyAgICBpZiAoQ0ZBcnJheUdl
dENvdW50KFdlYlRocmVhZFJlbGVhc2VPYmpBcnJheSkpIHsKKyAgICAgICAgb2JqZWN0cyA9IENG
QXJyYXlDcmVhdGVNdXRhYmxlQ29weShOVUxMLCAwLCBXZWJUaHJlYWRSZWxlYXNlT2JqQXJyYXkp
OworICAgICAgICBDRkFycmF5UmVtb3ZlQWxsVmFsdWVzKFdlYlRocmVhZFJlbGVhc2VPYmpBcnJh
eSk7CisgICAgfQorCisgICAgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJldlYlRocmVh
ZFJlbGVhc2VMb2NrKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlc3VsdCA9PSAwLCAiUmVs
ZWFzZSB1bmxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIHJlc3VsdCk7CisKKyAgICBpZiAoIW9i
amVjdHMpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gQ0ZBcnJheUdl
dENvdW50KG9iamVjdHMpOworICAgIHVuc2lnbmVkIGk7CisgICAgZm9yIChpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKKyAgICAgICAgaWQgb2JqID0gKGlkKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
b2JqZWN0cywgaSk7CisjaWYgTE9HX1JFTEVBU0VTCisgICAgICAgIE5TTG9nKEAiUmVsZWFzZSBy
ZWN2IFt3ZWIgdGhyZWFkXSA6ICVAIiwgb2JqKTsKKyNlbmRpZgorICAgICAgICBbb2JqIHJlbGVh
c2VdOworICAgIH0KKworICAgIENGUmVsZWFzZShvYmplY3RzKTsKK30KKwordm9pZCBXZWJUaHJl
YWRDYWxsRGVsZWdhdGUoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uKQoreworICAgIC8vIE5TSW52
b2NhdGlvbiByZWxlYXNlZCBpbiBTZW5kTWVzc2FnZSgpCisgICAgU2VuZERlbGVnYXRlTWVzc2Fn
ZShbaW52b2NhdGlvbiByZXRhaW5dKTsKK30KKwordm9pZCBXZWJUaHJlYWRQb3N0Tm90aWZpY2F0
aW9uKE5TU3RyaW5nICpuYW1lLCBpZCBvYmplY3QsIGlkIHVzZXJJbmZvKQoreworICAgIGlmIChw
dGhyZWFkX21haW5fbnAoKSkKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpuYW1lIG9iamVjdDpvYmplY3QgdXNlckluZm86
dXNlckluZm9dOworICAgIGVsc2UgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeIHsKKyAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6bmFtZSBvYmplY3Q6b2JqZWN0IHVz
ZXJJbmZvOnVzZXJJbmZvXTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIFdlYlRocmVh
ZENhbGxEZWxlZ2F0ZUFzeW5jKE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbikKK3sKKyAgICBBU1NF
UlQoaW52b2NhdGlvbik7CisgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKQorICAgICAgICBb
c0FzeW5jRGVsZWdhdGVzIGFkZE9iamVjdDppbnZvY2F0aW9uXTsKKyAgICBlbHNlCisgICAgICAg
IFdlYlRocmVhZENhbGxEZWxlZ2F0ZShpbnZvY2F0aW9uKTsKK30KKworLy8gTm90ZTogZGVzcGl0
ZSB0aGUgbmFtZSwgcmV0dXJucyBhbiBhdXRvcmVsZWFzZWQgb2JqZWN0LgorTlNJbnZvY2F0aW9u
ICpXZWJUaHJlYWRNYWtlTlNJbnZvY2F0aW9uKGlkIHRhcmdldCwgU0VMIHNlbGVjdG9yKQorewor
ICAgIE5TTWV0aG9kU2lnbmF0dXJlICpzaWduYXR1cmUgPSBbdGFyZ2V0IG1ldGhvZFNpZ25hdHVy
ZUZvclNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlKTsKKyAgICBpZiAo
c2lnbmF0dXJlKSB7CisgICAgICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IFtOU0ludm9j
YXRpb24gaW52b2NhdGlvbldpdGhNZXRob2RTaWduYXR1cmU6c2lnbmF0dXJlXTsKKyAgICAgICAg
W2ludm9jYXRpb24gc2V0U2VsZWN0b3I6c2VsZWN0b3JdOworICAgICAgICBbaW52b2NhdGlvbiBz
ZXRUYXJnZXQ6dGFyZ2V0XTsKKyAgICAgICAgW2ludm9jYXRpb24gcmV0YWluQXJndW1lbnRzXTsK
KyAgICAgICAgcmV0dXJuIGludm9jYXRpb247CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9CisK
K3N0YXRpYyB2b2lkIE1haW5SdW5Mb29wQXV0b1VubG9jayhDRlJ1bkxvb3BPYnNlcnZlclJlZiBv
YnNlcnZlciwgQ0ZSdW5Mb29wQWN0aXZpdHkgYWN0aXZpdHksIHZvaWQgKmNvbnRleHQpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKG9ic2VydmVyKTsKKyAgICBVTlVTRURfUEFSQU0oYWN0aXZpdHkpOwor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBBU1NFUlQoIVdlYlRocmVhZElzQ3VycmVu
dCgpKTsKKworICAgIGlmIChzTWFpblRocmVhZE1vZGFsQ291bnQgIT0gMCkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIENGUnVuTG9vcFJlbW92ZU9ic2VydmVyKENGUnVuTG9vcEdldEN1cnJl
bnQoKSwgbWFpblJ1bkxvb3BBdXRvVW5sb2NrT2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rl
cyk7CisKKyAgICBfV2ViVGhyZWFkVW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9XZWJUaHJl
YWRBdXRvTG9jayh2b2lkKQoreworICAgIEFTU0VSVCghV2ViVGhyZWFkSXNDdXJyZW50KCkpOwor
CisgICAgaWYgKG1haW5UaHJlYWRMb2NrQ291bnQgPT0gMCkgeworICAgICAgICBDRlJ1bkxvb3BB
ZGRPYnNlcnZlcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1haW5SdW5Mb29wQXV0b1VubG9ja09i
c2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOyAgICAKKyAgICAgICAgX1dlYlRyeVRocmVh
ZExvY2soZmFsc2UpOworICAgICAgICBDRlJ1bkxvb3BXYWtlVXAoQ0ZSdW5Mb29wR2V0TWFpbigp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIFdlYlJ1bkxvb3BMb2NrSW50ZXJuYWwoQXV0b3Jl
bGVhc2VQb29sT3BlcmF0aW9uIHBvb2xPcGVyYXRpb24pCit7CisgICAgX1dlYlRyeVRocmVhZExv
Y2soZmFsc2UpOworICAgIGlmIChwb29sT3BlcmF0aW9uID09IFB1c2hPclBvcEF1dG9yZWxlYXNl
UG9vbCkKKyAgICAgICAgYXV0b3JlbGVhc2VQb29sTWFyayA9IE5TUHVzaEF1dG9yZWxlYXNlUG9v
bCgwKTsKKyAgICBpc1dlYlRocmVhZExvY2tlZCA9IFlFUzsKK30KKworc3RhdGljIHZvaWQgV2Vi
UnVuTG9vcFVubG9ja0ludGVybmFsKEF1dG9yZWxlYXNlUG9vbE9wZXJhdGlvbiBwb29sT3BlcmF0
aW9uKQoreworICAgIEFTU0VSVChzQXN5bmNEZWxlZ2F0ZXMpOworICAgIGlmIChbc0FzeW5jRGVs
ZWdhdGVzIGNvdW50XSkgeworICAgICAgICBmb3IgKE5TSW52b2NhdGlvbiogaW52b2NhdGlvbiBp
biBzQXN5bmNEZWxlZ2F0ZXMpCisgICAgICAgICAgICBTZW5kRGVsZWdhdGVNZXNzYWdlKFtpbnZv
Y2F0aW9uIHJldGFpbl0pOworICAgICAgICBbc0FzeW5jRGVsZWdhdGVzIHJlbW92ZUFsbE9iamVj
dHNdOworICAgIH0KKworICAgIGlmIChwb29sT3BlcmF0aW9uID09IFB1c2hPclBvcEF1dG9yZWxl
YXNlUG9vbCkKKyAgICAgICAgTlNQb3BBdXRvcmVsZWFzZVBvb2woYXV0b3JlbGVhc2VQb29sTWFy
ayk7CisKKyAgICBfV2ViVGhyZWFkVW5sb2NrKCk7CisgICAgaXNXZWJUaHJlYWRMb2NrZWQgPSBO
TzsKK30KKworc3RhdGljIHZvaWQgV2ViUnVuTG9vcExvY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYg
b2JzZXJ2ZXIsIENGUnVuTG9vcEFjdGl2aXR5IGFjdGl2aXR5LCB2b2lkICpjb250ZXh0KQorewor
ICAgIFVOVVNFRF9QQVJBTShvYnNlcnZlcik7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwor
ICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChhY3Rp
dml0eSwgYWN0aXZpdHkgPT0ga0NGUnVuTG9vcEFmdGVyV2FpdGluZyB8fCBhY3Rpdml0eSA9PSBr
Q0ZSdW5Mb29wQmVmb3JlVGltZXJzIHx8IGFjdGl2aXR5ID09IGtDRlJ1bkxvb3BCZWZvcmVTb3Vy
Y2VzKTsKKworICAgIC8vIElmIHRoZSBXZWJUaHJlYWQgaXMgbG9ja2VkIGJ5IHRoZSBtYWluIHRo
cmVhZCB0aGVuIHdlIHdhbnQgdG8KKyAgICAvLyBncmFiIHRoZSBsb2NrIG91cnNlbHZlcyB3aGVu
IHRoZSBtYWluIHRocmVhZCByZWxlYXNlcyB0aGUgbG9jay4KKyAgICBpZiAoaXNXZWJUaHJlYWRM
b2NrZWQgJiYgIW1haW5UaHJlYWRMb2NrQ291bnQpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJS
dW5Mb29wTG9ja0ludGVybmFsKFB1c2hPclBvcEF1dG9yZWxlYXNlUG9vbCk7Cit9CisKK3N0YXRp
YyB2b2lkIFdlYlJ1bkxvb3BVbmxvY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2JzZXJ2ZXIsIENG
UnVuTG9vcEFjdGl2aXR5IGFjdGl2aXR5LCB2b2lkICpjb250ZXh0KQoreworICAgIFVOVVNFRF9Q
QVJBTShvYnNlcnZlcik7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIEFTU0VSVChX
ZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChhY3Rpdml0eSwgYWN0aXZp
dHkgPT0ga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcgfHwgYWN0aXZpdHkgPT0ga0NGUnVuTG9vcEV4
aXQpOworICAgIEFTU0VSVCghbWFpblRocmVhZExvY2tDb3VudCk7CisKKyAgICBpZiAoIWlzV2Vi
VGhyZWFkTG9ja2VkKQorICAgICAgICByZXR1cm47CisgICAgV2ViUnVuTG9vcFVubG9ja0ludGVy
bmFsKFB1c2hPclBvcEF1dG9yZWxlYXNlUG9vbCk7Cit9CisKK3N0YXRpYyB2b2lkIE1haW5SdW5M
b29wVW5sb2NrR3VhcmQoQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2JzZXJ2ZXIsIENGUnVuTG9vcEFj
dGl2aXR5IGFjdGl2aXR5LCB2b2lkICpjb250ZXh0KQoreworICAgIFVOVVNFRF9QQVJBTShvYnNl
cnZlcik7CisgICAgVU5VU0VEX1BBUkFNKGFjdGl2aXR5KTsKKyAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7CisgICAgQVNTRVJUKCFXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisKKyAgICAvLyBXZSBz
aG91bGRuJ3QgaGF2ZSB0aGUgd2ViIGxvY2sgYXQgdGhpcyBwb2ludC4gIEhvd2V2ZXIsIE1vYmls
ZU1haWwgc29tZXRpbWVzCisgICAgLy8gZ2V0IHRvIGEgc3RhdGUgd2hlcmUgdGhlIG1haW4gdGhy
ZWFkIGhhcyB3ZWIgbG9jayBidXQgaXQgZGlkbid0IHJlbGVhc2UgaXQgb24gbGFzdAorICAgIC8v
IHJ1bmxvb3AgZXhpdCwgYW5kIHdlYiB0aHJlYWQgZ2V0cyBzdHVjayBhdCB3YWl0aW5nIGZvciB0
aGUgbG9jay4gSWYgdGhpcyBoYXBwZW5zLAorICAgIC8vIHdlIG5lZWQgdG8gaGVscCByZWxlYXNl
IHRoZSBsb2NrLiAgU2VlIDxyZGFyOi8vcHJvYmxlbS84MDA1MTkyPi4KKyAgICBpZiAobWFpblRo
cmVhZExvY2tDb3VudCAhPSAwICYmIHNNYWluVGhyZWFkTW9kYWxDb3VudCA9PSAwKSB7CisgICAg
ICAgIE5TTG9nKEAiV0FSTklORzogTWFpbiB0aHJlYWQgZGlkbid0IHJlbGVhc2UgdGhlIGxvY2sg
YXQgbGFzdCBydW5sb29wIGV4aXQhIik7CisKKyAgICAgICAgTWFpblJ1bkxvb3BBdXRvVW5sb2Nr
KG9ic2VydmVyLCBhY3Rpdml0eSwgY29udGV4dCk7CisgICAgICAgIGlmIChtYWluVGhyZWFkTG9j
a0NvdW50ICE9IDApCisgICAgICAgICAgICBtYWluVGhyZWFkTG9ja0NvdW50ID0gMDsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIF9XZWJSdW5Mb29wRW5hYmxlTmVzdGVkRnJvbU1haW5UaHJlYWQo
KQoreworICAgIENGUnVuTG9vcFJlbW92ZU9ic2VydmVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
bWFpblJ1bkxvb3BBdXRvVW5sb2NrT2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Cit9
CisKK3N0YXRpYyB2b2lkIF9XZWJSdW5Mb29wRGlzYWJsZU5lc3RlZEZyb21NYWluVGhyZWFkKCkK
K3sKKyAgICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1haW5S
dW5Mb29wQXV0b1VubG9ja09ic2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOyAKK30KKwor
dm9pZCBXZWJSdW5Mb29wRW5hYmxlTmVzdGVkKCkKK3sKKyAgICBpZiAoIVdlYlRocmVhZElzRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWlzTmVzdGVkV2ViVGhyZWFk
UnVuTG9vcCk7CisKKyAgICBpZiAoIVdlYlRocmVhZElzQ3VycmVudCgpKQorICAgICAgICBfV2Vi
UnVuTG9vcEVuYWJsZU5lc3RlZEZyb21NYWluVGhyZWFkKCk7CisKKyAgICBzYXZlZEF1dG9yZWxl
YXNlUG9vbE1hcmsgPSBhdXRvcmVsZWFzZVBvb2xNYXJrOworICAgIGF1dG9yZWxlYXNlUG9vbE1h
cmsgPSAwOworICAgIFdlYlJ1bkxvb3BVbmxvY2tJbnRlcm5hbChJZ25vcmVBdXRvcmVsZWFzZVBv
b2wpOworICAgIGlzTmVzdGVkV2ViVGhyZWFkUnVuTG9vcCA9IFlFUzsKK30KKwordm9pZCBXZWJS
dW5Mb29wRGlzYWJsZU5lc3RlZCgpCit7CisgICAgaWYgKCFXZWJUaHJlYWRJc0VuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGlzTmVzdGVkV2ViVGhyZWFkUnVuTG9vcCk7
CisKKyAgICBpZiAoIVdlYlRocmVhZElzQ3VycmVudCgpKQorICAgICAgICBfV2ViUnVuTG9vcERp
c2FibGVOZXN0ZWRGcm9tTWFpblRocmVhZCgpOworCisgICAgYXV0b3JlbGVhc2VQb29sTWFyayA9
IHNhdmVkQXV0b3JlbGVhc2VQb29sTWFyazsKKyAgICBzYXZlZEF1dG9yZWxlYXNlUG9vbE1hcmsg
PSAwOworICAgIFdlYlJ1bkxvb3BMb2NrSW50ZXJuYWwoSWdub3JlQXV0b3JlbGVhc2VQb29sKTsK
KyAgICBpc05lc3RlZFdlYlRocmVhZFJ1bkxvb3AgPSBOTzsKK30KKworc3RhdGljIHZvaWQgRnJl
ZVRocmVhZENvbnRleHQodm9pZCAqdGhyZWFkQ29udGV4dCkKK3sKKyAgICBpZiAodGhyZWFkQ29u
dGV4dCAhPSBOVUxMKQorICAgICAgIGZyZWUodGhyZWFkQ29udGV4dCk7Cit9CisKK3N0YXRpYyB2
b2lkIEluaXRUaHJlYWRDb250ZXh0S2V5KCkKK3sKKyAgICBwdGhyZWFkX2tleV9jcmVhdGUoJnRo
cmVhZENvbnRleHRLZXksIEZyZWVUaHJlYWRDb250ZXh0KTsKK30KKworc3RhdGljIFdlYlRocmVh
ZENvbnRleHQgKkN1cnJlbnRUaHJlYWRDb250ZXh0KHZvaWQpCit7CisgICAgc3RhdGljIHB0aHJl
YWRfb25jZV90IGluaXRDb250cm9sID0gUFRIUkVBRF9PTkNFX0lOSVQ7IAorICAgIHB0aHJlYWRf
b25jZSgmaW5pdENvbnRyb2wsIEluaXRUaHJlYWRDb250ZXh0S2V5KTsgICAgCisKKyAgICBXZWJU
aHJlYWRDb250ZXh0ICp0aHJlYWRDb250ZXh0ID0gKFdlYlRocmVhZENvbnRleHQqKXB0aHJlYWRf
Z2V0c3BlY2lmaWModGhyZWFkQ29udGV4dEtleSk7CisgICAgaWYgKHRocmVhZENvbnRleHQgPT0g
TlVMTCkgeworICAgICAgICB0aHJlYWRDb250ZXh0ID0gKFdlYlRocmVhZENvbnRleHQgKiljYWxs
b2Moc2l6ZW9mKFdlYlRocmVhZENvbnRleHQpLCAxKTsKKyAgICAgICAgcHRocmVhZF9zZXRzcGVj
aWZpYyh0aHJlYWRDb250ZXh0S2V5LCB0aHJlYWRDb250ZXh0KTsKKyAgICB9ICAgICAgICAKKyAg
ICByZXR1cm4gdGhyZWFkQ29udGV4dDsKK30KKworc3RhdGljCisjaWZuZGVmIF9fbGx2bV9fCitO
T19SRVRVUk4KKyNlbmRpZgordm9pZCAqUnVuV2ViVGhyZWFkKHZvaWQgKmFyZykKK3sKKyAgICAv
LyBQcm9wYWdhdGUgdGhlIG1haW5UaHJlYWQncyBmZW52IHRvIHRoZSB3ZWIgdGhyZWFkLgorICAg
IGZlc2V0ZW52KCZtYWluVGhyZWFkRkVudik7CisKKyAgICBVTlVTRURfUEFSQU0oYXJnKTsKKyAg
ICAvLyBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9y
ZSBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKSBzaW5jZSB0aGUKKyAgICAvLyBjb2RlIGludm9r
ZWQgYnkgdGhlIGxhdHRlciBuZWVkcyB0byBrbm93IGlmIGl0J3MgcnVubmluZyBvbiB0aGUgV2Vi
VGhyZWFkLiBTZWUKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vODUwMjQ4Nz4uCisgICAgV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZCgpOworICAgIFdURjo6aW5pdGlhbGl6ZVdlYlRocmVhZCgpOwor
ICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIAorI2lmIEVOQUJMRShXT1JLRVJT
KQorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBXZWJUaHJlYWQgYW5kIHRoZSBtYWluIHRocmVh
ZCBzaGFyZSB0aGUgc2FtZSBUaHJlYWRHbG9iYWxEYXRhIG9iamVjdHMuCisgICAgV2ViQ29yZTo6
dGhyZWFkR2xvYmFsRGF0YSgpLnNldFdlYkNvcmVUaHJlYWREYXRhKCk7CisjZW5kaWYKKyAgICBp
bml0aWFsaXplV2ViVGhyZWFkSWRlbnRpZmllcigpOworCisjaWYgSEFWRShQVEhSRUFEX1NFVE5B
TUVfTlApCisgICAgcHRocmVhZF9zZXRuYW1lX25wKCJXZWJUaHJlYWQiKTsKKyNlbmRpZgorCisg
ICAgd2ViVGhyZWFkQ29udGV4dCA9IEN1cnJlbnRUaHJlYWRDb250ZXh0KCk7CisgICAgd2ViVGhy
ZWFkUnVuTG9vcCA9IENGUnVuTG9vcEdldEN1cnJlbnQoKTsKKyAgICB3ZWJUaHJlYWROU1J1bkxv
b3AgPSBbW05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gcmV0YWluXTsKKworICAgIENGUnVuTG9v
cE9ic2VydmVyUmVmIHdlYlJ1bkxvb3BMb2NrT2JzZXJ2ZXJSZWYgPSBDRlJ1bkxvb3BPYnNlcnZl
ckNyZWF0ZShOVUxMLCBrQ0ZSdW5Mb29wQmVmb3JlVGltZXJzfGtDRlJ1bkxvb3BCZWZvcmVTb3Vy
Y2VzfGtDRlJ1bkxvb3BBZnRlcldhaXRpbmcsIFlFUywgMCwgV2ViUnVuTG9vcExvY2ssIE5VTEwp
OworICAgIENGUnVuTG9vcEFkZE9ic2VydmVyKHdlYlRocmVhZFJ1bkxvb3AsIHdlYlJ1bkxvb3BM
b2NrT2JzZXJ2ZXJSZWYsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZSZWxlYXNlKHdl
YlJ1bkxvb3BMb2NrT2JzZXJ2ZXJSZWYpOworICAgIAorICAgIFdlYlRocmVhZEluaXRSdW5RdWV1
ZSgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIHRoZSBsb2NrIHdoZW4gQ0EgcGFpbnRzIGluIHRo
ZSB3ZWIgdGhyZWFkLiBDQSBjb21taXRzIGF0IDIwMDAwMDAgc28gd2UgdXNlIGxhcmdlciBvcmRl
ciBudW1iZXIgdGhhbiB0aGF0IHRvIGZyZWUgdGhlIGxvY2suCisgICAgQ0ZSdW5Mb29wT2JzZXJ2
ZXJSZWYgd2ViUnVuTG9vcFVubG9ja09ic2VydmVyUmVmID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVh
dGUoTlVMTCwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmd8a0NGUnVuTG9vcEV4aXQsIFlFUywgMjUw
MDAwMCwgV2ViUnVuTG9vcFVubG9jaywgTlVMTCk7ICAgIAorICAgIENGUnVuTG9vcEFkZE9ic2Vy
dmVyKHdlYlRocmVhZFJ1bkxvb3AsIHdlYlJ1bkxvb3BVbmxvY2tPYnNlcnZlclJlZiwga0NGUnVu
TG9vcENvbW1vbk1vZGVzKTsKKyAgICBDRlJlbGVhc2Uod2ViUnVuTG9vcFVubG9ja09ic2VydmVy
UmVmKTsgICAgCisKKyAgICBDRlJ1bkxvb3BTb3VyY2VDb250ZXh0IFJlbGVhc2VTb3VyY2VDb250
ZXh0ID0gezAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws
IEhhbmRsZVdlYlRocmVhZFJlbGVhc2VTb3VyY2V9OworICAgIFdlYlRocmVhZFJlbGVhc2VTb3Vy
Y2UgPSBDRlJ1bkxvb3BTb3VyY2VDcmVhdGUoTlVMTCwgLTEsICZSZWxlYXNlU291cmNlQ29udGV4
dCk7CisgICAgQ0ZSdW5Mb29wQWRkU291cmNlKHdlYlRocmVhZFJ1bkxvb3AsIFdlYlRocmVhZFJl
bGVhc2VTb3VyY2UsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisKKyAgICBpbnQgcmVzdWx0ID0g
cHRocmVhZF9tdXRleF9sb2NrKCZzdGFydHVwTG9jayk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShyZXN1bHQgPT0gMCwgInN0YXJ0dXAgbG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgcmVzdWx0
KTsKKworICAgIHJlc3VsdCA9IHB0aHJlYWRfY29uZF9zaWduYWwoJnN0YXJ0dXBDb25kaXRpb24p
OworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVzdWx0ID09IDAsICJzdGFydHVwIHNpZ25hbCBm
YWlsZWQgd2l0aCBjb2RlOiVkIiwgcmVzdWx0KTsKKworICAgIHJlc3VsdCA9IHB0aHJlYWRfbXV0
ZXhfdW5sb2NrKCZzdGFydHVwTG9jayk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShyZXN1bHQg
PT0gMCwgInN0YXJ0dXAgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCByZXN1bHQpOworCisg
ICAgd2hpbGUgKDEpCisgICAgICAgIENGUnVuTG9vcFJ1bkluTW9kZShrQ0ZSdW5Mb29wRGVmYXVs
dE1vZGUsIERpc3RhbnRGdXR1cmUsIHRydWUpOworCisjaWZkZWYgX19sbHZtX18KKyAgICByZXR1
cm4gTlVMTDsKKyNlbmRpZiAgCit9CisKK3N0YXRpYyB2b2lkIFN0YXJ0V2ViVGhyZWFkKCkKK3sK
KyAgICB3ZWJUaHJlYWRTdGFydGVkID0gVFJVRTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAg
IC8vIEluaXRpYWxpemUgVGhyZWFkR2xvYmFsRGF0YSBvbiB0aGUgbWFpbiBVSSB0aHJlYWQgc28g
dGhhdCB0aGUgV2ViQ29yZSB0aHJlYWQKKyAgICAvLyBjYW4gbGF0ZXIgc2V0IGl0J3MgdGhyZWFk
LXNwZWNpZmljIGRhdGEgdG8gcG9pbnQgdG8gdGhlIHNhbWUgb2JqZWN0cy4KKyAgICBXZWJDb3Jl
OjpUaHJlYWRHbG9iYWxEYXRhJiB1bnVzZWQgPSBXZWJDb3JlOjp0aHJlYWRHbG9iYWxEYXRhKCk7
CisgICAgKHZvaWQpdW51c2VkOworI2VuZGlmCisKKyAgICAvLyBJbml0aWFsaXplIEF0b21pY1N0
cmluZyBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgV1RGOjpBdG9taWNTdHJpbmc6OmluaXQoKTsK
KworICAgIC8vIHJlZ2lzdGVyIGNsYXNzIGZvciBXZWJUaHJlYWQgZGVhbGxvY2F0aW9uCisgICAg
V2ViQ29yZU9iakNEZWFsbG9jT25XZWJUaHJlYWQoW0RPTU9iamVjdCBjbGFzc10pOworICAgIFdl
YkNvcmVPYmpDRGVhbGxvY09uV2ViVGhyZWFkKFtXQUtXaW5kb3cgY2xhc3NdKTsKKyAgICBXZWJD
b3JlT2JqQ0RlYWxsb2NXaXRoV2ViVGhyZWFkTG9jayhbV0FLVmlldyBjbGFzc10pOworCisgICAg
cHRocmVhZF9tdXRleGF0dHJfdCBtYXR0cjsKKyAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KCZt
YXR0cik7CisgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbWF0dHIsIFBUSFJFQURfTVVU
RVhfUkVDVVJTSVZFKTsKKyAgICBwdGhyZWFkX211dGV4X2luaXQoJndlYkxvY2ssICZtYXR0cik7
CisgICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbWF0dHIpOyAgICAgICAgICAgIAorCisg
ICAgcHRocmVhZF9tdXRleGF0dHJfdCBtdXRleF9hdHRyOworICAgIHB0aHJlYWRfbXV0ZXhhdHRy
X2luaXQoJm11dGV4X2F0dHIpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJm11dGV4
X2F0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsgICAgCisgICAgcHRocmVhZF9tdXRleF9p
bml0KCZXZWJDb3JlUmVsZWFzZUxvY2ssICZtdXRleF9hdHRyKTsKKyAgICBwdGhyZWFkX211dGV4
YXR0cl9kZXN0cm95KCZtdXRleF9hdHRyKTsKKworICAgIENGUnVuTG9vcFJlZiBydW5Mb29wID0g
Q0ZSdW5Mb29wR2V0Q3VycmVudCgpOworICAgIENGUnVuTG9vcFNvdXJjZUNvbnRleHQgZGVsZWdh
dGVTb3VyY2VDb250ZXh0ID0gezAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws
IE5VTEwsIE5VTEwsIEhhbmRsZURlbGVnYXRlU291cmNlfTsKKyAgICBkZWxlZ2F0ZVNvdXJjZSA9
IENGUnVuTG9vcFNvdXJjZUNyZWF0ZShOVUxMLCAwLCAmZGVsZWdhdGVTb3VyY2VDb250ZXh0KTsK
KyAgICAvLyBXZSBzaG91bGRuJ3QgZ2V0IGRlbGVnYXRlIGNhbGxiYWNrcyB3aGlsZSBzY3JvbGxp
bmcsIGJ1dCB0aGVyZSBtaWdodCBiZQorICAgIC8vIG9uZSBvdXRzdGFuZGluZyB3aGVuIHdlIHN0
YXJ0LiAgQWRkIHRoZSBzb3VyY2UgZm9yIGFsbCBjb21tb24gcnVuIGxvb3AKKyAgICAvLyBtb2Rl
cyBzbyB3ZSBkb24ndCBibG9jayB0aGUgd2ViIHRocmVhZCB3aGlsZSBzY3JvbGxpbmcuCisgICAg
aWYgKCFkZWxlZ2F0ZVNvdXJjZVJ1bkxvb3BNb2RlKQorICAgICAgICBkZWxlZ2F0ZVNvdXJjZVJ1
bkxvb3BNb2RlID0ga0NGUnVuTG9vcENvbW1vbk1vZGVzOworICAgIENGUnVuTG9vcEFkZFNvdXJj
ZShydW5Mb29wLCBkZWxlZ2F0ZVNvdXJjZSwgZGVsZWdhdGVTb3VyY2VSdW5Mb29wTW9kZSk7CisK
KyAgICBzQXN5bmNEZWxlZ2F0ZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKwor
ICAgIG1haW5SdW5Mb29wQXV0b1VubG9ja09ic2VydmVyID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVh
dGUoTlVMTCwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5Mb29wRXhpdCwgWUVTLCAz
MDAwMDAxLCBNYWluUnVuTG9vcEF1dG9VbmxvY2ssIE5VTEwpOworCisgICAgcHRocmVhZF9hdHRy
X3QgdGF0dHI7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJnRhdHRyKTsKKyAgICBwdGhyZWFkX2F0
dHJfc2V0c2NvcGUoJnRhdHRyLCBQVEhSRUFEX1NDT1BFX1NZU1RFTSk7CisgICAgLy8gVGhlIHdl
YiB0aHJlYWQgaXMgYSBzZWNvbmRhcnkgdGhyZWFkLCBhbmQgc2Vjb25kYXJ5IHRocmVhZHMgYXJl
IHVzdWFsbHkgZ2l2ZW4KKyAgICAvLyBhIDUxMiBrYiBzdGFjaywgYnV0IHdlIG5lZWQgbW9yZSBz
cGFjZSBpbiBvcmRlciB0byBoYXZlIHJvb20gZm9yIHRoZSBKYXZhU2NyaXB0Q29yZQorICAgIC8v
IHJlZW50cmFuY3kgbGltaXQuIFRoaXMgbGltaXQgd29ya3Mgb24gYm90aCB0aGUgc2ltdWxhdG9y
IGFuZCB0aGUgZGV2aWNlLgorICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJnRhdHRyLCAy
MDAgKiA0MDk2KTsKKworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKyAgICBwdGhyZWFk
X2F0dHJfZ2V0c2NoZWRwYXJhbSgmdGF0dHIsICZwYXJhbSk7CisgICAgcGFyYW0uc2NoZWRfcHJp
b3JpdHktLTsKKyAgICBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSgmdGF0dHIsICZwYXJhbSk7
CisKKyAgICAvLyBXYWl0IGZvciB0aGUgd2ViIHRocmVhZCB0byBzdGFydHVwIGNvbXBsZXRlbHkg
YmVmb3JlIHdlIGNvbnRpbnVlLgorICAgIGludCByZXN1bHQgPSBwdGhyZWFkX211dGV4X2xvY2so
JnN0YXJ0dXBMb2NrKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlc3VsdCA9PSAwLCAic3Rh
cnR1cCBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCByZXN1bHQpOworCisgICAgLy8gUHJvcGFn
YXRlIHRoZSBtYWluVGhyZWFkJ3MgZmVudiB0byB3b3JrZXJzICYgdGhlIHdlYiB0aHJlYWQuCisg
ICAgZmVnZXRlbnYoJm1haW5UaHJlYWRGRW52KTsKKworICAgIHB0aHJlYWRfY3JlYXRlKCZ3ZWJU
aHJlYWQsICZ0YXR0ciwgUnVuV2ViVGhyZWFkLCBOVUxMKTsKKyAgICBwdGhyZWFkX2F0dHJfZGVz
dHJveSgmdGF0dHIpOworCisgICAgcmVzdWx0ID0gcHRocmVhZF9jb25kX3dhaXQoJnN0YXJ0dXBD
b25kaXRpb24sICZzdGFydHVwTG9jayk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShyZXN1bHQg
PT0gMCwgInN0YXJ0dXAgd2FpdCBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgcmVzdWx0KTsKKworICAg
IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzdGFydHVwTG9jayk7CisgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShyZXN1bHQgPT0gMCwgInN0YXJ0dXAgdW5sb2NrIGZhaWxlZCB3aXRoIGNv
ZGU6JWQiLCByZXN1bHQpOworCisgICAgaW5pdGlhbGl6ZUFwcGxpY2F0aW9uVUlUaHJlYWRJZGVu
dGlmaWVyKCk7Cit9CisKK3N0YXRpYyBpbnQgV2ViVGltZWRDb25kaXRpb25Mb2NrIChwdGhyZWFk
X2NvbmRfdCAqY29uZGl0aW9uLCBwdGhyZWFkX211dGV4X3QgKmxvY2ssIENGQWJzb2x1dGVUaW1l
IGludGVydmFsKQoreworICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lOworICAgIENGQWJzb2x1dGVU
aW1lIGF0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbDsKKyAgICB0aW1l
LnR2X3NlYyA9ICh0aW1lX3QpKGZsb29yKGF0KSArIGtDRkFic29sdXRlVGltZUludGVydmFsU2lu
Y2UxOTcwKTsKKyAgICB0aW1lLnR2X25zZWMgPSAoaW50MzJfdCkoKGF0IC0gZmxvb3IoYXQpKSAq
IDEwMDAwMDAwMDAuMCk7ICAgICAgICAKKyAgICByZXR1cm4gcHRocmVhZF9jb25kX3RpbWVkd2Fp
dChjb25kaXRpb24sIGxvY2ssICZ0aW1lKTsKK30KKworCisjaWYgTE9HX1dFQl9MT0NLIHx8IExP
R19NQUlOX1RIUkVBRF9MT0NLSU5HCitzdGF0aWMgdW5zaWduZWQgbG9ja0NvdW50OworI2VuZGlm
CisKK3N0YXRpYyBib29sIF9XZWJUcnlUaHJlYWRMb2NrKGJvb2wgc2hvdWxkVHJ5KQoreworICAg
IC8vIFN1c3BlbmQgdGhlIHdlYiB0aHJlYWQgaWYgdGhlIG1haW4gdGhyZWFkIGlzIHRyeWluZyB0
byBsb2NrLgorICAgIGJvb2wgb25NYWluVGhyZWFkID0gcHRocmVhZF9tYWluX25wKCk7CisgICAg
aWYgKG9uTWFpblRocmVhZCkKKyAgICAgICAgd2ViVGhyZWFkU2hvdWxkWWllbGQgPSB0cnVlOwor
ICAgIGVsc2UgaWYgKCFXZWJUaHJlYWRJc0N1cnJlbnQoKSkgeworICAgICAgICBOU0xvZyhAIiVz
LCAlcDogVHJpZWQgdG8gb2J0YWluIHRoZSB3ZWIgbG9jayBmcm9tIGEgdGhyZWFkIG90aGVyIHRo
YW4gdGhlIG1haW4gdGhyZWFkIG9yIHRoZSB3ZWIgdGhyZWFkLiBUaGlzIG1heSBiZSBhIHJlc3Vs
dCBvZiBjYWxsaW5nIHRvIFVJS2l0IGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLiBDcmFzaGluZyBu
b3cuLi4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBDdXJyZW50VGhyZWFkQ29udGV4dCgpKTsKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgICAgIAorICAgICAgICAgICAgCisgICAgaW50IHJl
c3VsdDsKKyAgICBib29sIGJ1c3kgPSBmYWxzZTsKKyAgICBpZiAoc2hvdWxkVHJ5KSB7CisgICAg
ICAgIHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmd2ViTG9jayk7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gRUJVU1kpIHsKKyAgICAgICAgICAgIGJ1c3kgPSB0cnVlOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVzdWx0ID09IDAsICJ0cnkg
d2ViIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIHJlc3VsdCk7CisgICAgfQorICAgIGVsc2Ug
eworICAgICAgICByZXN1bHQgPSBwdGhyZWFkX211dGV4X2xvY2soJndlYkxvY2spOworICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlc3VsdCA9PSAwLCAid2ViIGxvY2sgZmFpbGVkIHdpdGgg
Y29kZTolZCIsIHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIGlmICghYnVzeSkgeworI2lmIExP
R19XRUJfTE9DSyB8fCBMT0dfTUFJTl9USFJFQURfTE9DS0lORworICAgICAgICBsb2NrQ291bnQr
KzsKKyNpZiBMT0dfV0VCX0xPQ0sKKyAgICAgICAgTlNMb2coQCJsb2NrICAgJWQsIHdlYi10aHJl
YWQ6ICVkIiwgbG9ja0NvdW50LCBXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisjZW5kaWYKKyNlbmRp
ZgorICAgICAgICBpZiAob25NYWluVGhyZWFkKSB7CisgICAgICAgICAgICBBU1NFUlQoQ0ZSdW5M
b29wR2V0Q3VycmVudCgpID09IENGUnVuTG9vcEdldE1haW4oKSk7CisgICAgICAgICAgICB3ZWJU
aHJlYWRTaG91bGRZaWVsZCA9IGZhbHNlOworICAgICAgICAgICAgbWFpblRocmVhZExvY2tDb3Vu
dCsrOworI2lmIExPR19NQUlOX1RIUkVBRF9MT0NLSU5HCisgICAgICAgICAgICBpZiAoIXNlbmRp
bmdEZWxlZ2F0ZU1lc3NhZ2UgJiYgbG9ja0NvdW50ID09IDEpCisgICAgICAgICAgICAgICAgTlNM
b2coQCJNYWluIHRocmVhZCBsb2NraW5nIG91dHNpZGUgb2YgZGVsZWdhdGUgbWVzc2FnZXMuIik7
CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdlYlRocmVhZExvY2tDb3Vu
dCsrOworICAgICAgICAgICAgaWYgKHdlYlRocmVhZExvY2tDb3VudCA+IDEpIHsKKyAgICAgICAg
ICAgICAgICBOU0xvZyhAIiVzLCAlcDogTXVsdGlwbGUgbG9ja3Mgb24gd2ViIHRocmVhZCBub3Qg
YWxsb3dlZCEgUGxlYXNlIGZpbGUgYSBidWcuIENyYXNoaW5nIG5vdy4uLiIsIF9fUFJFVFRZX0ZV
TkNUSU9OX18sIEN1cnJlbnRUaHJlYWRDb250ZXh0KCkpOworICAgICAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuICFi
dXN5OworfQorCit2b2lkIFdlYlRocmVhZExvY2sodm9pZCkKK3sKKyAgICBpZiAoIXdlYlRocmVh
ZFN0YXJ0ZWQgfHwgcHRocmVhZF9lcXVhbCh3ZWJUaHJlYWQsIHB0aHJlYWRfc2VsZigpKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIF9XZWJUaHJlYWRBdXRvTG9jaygpOworfQorCit2b2lkIFdlYlRo
cmVhZFVubG9jayh2b2lkKQoreworICAgIC8vIFRoaXMgaXMgYSBuby1vcCwgd2UgdW5sb2NrIGF1
dG9tYXRpY2FsbHkgb24gdG9wIG9mIHRoZSBydW5sb29wCisgICAgQVNTRVJUKCFXZWJUaHJlYWRJ
c0N1cnJlbnQoKSk7Cit9CisKK3ZvaWQgV2ViVGhyZWFkTG9ja0Zyb21BbnlUaHJlYWQoKQorewor
ICAgIF9XZWJUaHJlYWRMb2NrRnJvbUFueVRocmVhZCh0cnVlKTsKK30KKyAgICAKK3ZvaWQgV2Vi
VGhyZWFkTG9ja0Zyb21BbnlUaHJlYWROb0xvZygpCit7CisgICAgX1dlYlRocmVhZExvY2tGcm9t
QW55VGhyZWFkKGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgX1dlYlRocmVhZExvY2tGcm9tQW55
VGhyZWFkKGJvb2wgc2hvdWxkTG9nKQoreworICAgIGlmICghd2ViVGhyZWFkU3RhcnRlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIGlm
IChwdGhyZWFkX21haW5fbnAoKSkgeworICAgICAgICBfV2ViVGhyZWFkQXV0b0xvY2soKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2hvdWxkTG9nKQorICAgICAgICBOU0xvZyhA
IiVzLCAlcDogT2J0YWluaW5nIHRoZSB3ZWIgbG9jayBmcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4g
dGhlIG1haW4gdGhyZWFkIG9yIHRoZSB3ZWIgdGhyZWFkLiBVSUtpdCBzaG91bGQgbm90IGJlIGNh
bGxlZCBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZC4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBDdXJy
ZW50VGhyZWFkQ29udGV4dCgpKTsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmd2ViTG9jayk7
CisgICAgCisgICAgLy8gVGhpcyB1c2VkIGZvciBhbnkgdGhyZWFkIG90aGVyIHRoYW4gdGhlIHdl
YiB0aHJlYWQuCisgICAgb3RoZXJUaHJlYWRMb2NrQ291bnQrKzsKKyAgICB3ZWJUaHJlYWRTaG91
bGRZaWVsZCA9IGZhbHNlOworfQorCit2b2lkIFdlYlRocmVhZFVubG9ja0Zyb21BbnlUaHJlYWQo
KQoreworICAgIGlmICghd2ViVGhyZWFkU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVCghV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIC8vIE5vLW9wIGV4Y2VwdCBmcm9tIGEg
c2Vjb25kYXJ5IHRocmVhZC4KKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBBU1NFUlQob3RoZXJUaHJlYWRMb2NrQ291bnQpOworICAgIG90aGVy
VGhyZWFkTG9ja0NvdW50LS07CisgICAgCisgICAgaW50IHJlc3VsdDsKKyAgICByZXN1bHQgPSBw
dGhyZWFkX211dGV4X3VubG9jaygmd2ViTG9jayk7IAorICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
cmVzdWx0ID09IDAsICJ3ZWIgdW5sb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCByZXN1bHQpOwor
fQorCit2b2lkIFdlYlRocmVhZFVubG9ja0d1YXJkRm9yTWFpbCgpCit7CisgICAgQVNTRVJUKCFX
ZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisKKyAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZiBtYWluUnVu
TG9vcFVubG9ja0d1YXJkT2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNlcnZlckNyZWF0ZShOVUxMLCBr
Q0ZSdW5Mb29wRW50cnksIFlFUywgMCwgTWFpblJ1bkxvb3BVbmxvY2tHdWFyZCwgTlVMTCk7Cisg
ICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2ZXIoQ0ZSdW5Mb29wR2V0TWFpbigpLCBtYWluUnVuTG9vcFVu
bG9ja0d1YXJkT2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZSZWxlYXNl
KG1haW5SdW5Mb29wVW5sb2NrR3VhcmRPYnNlcnZlcik7Cit9CisKK3ZvaWQgX1dlYlRocmVhZFVu
bG9jayh2b2lkKQoreworI2lmIExPR19XRUJfTE9DSyB8fCBMT0dfTUFJTl9USFJFQURfTE9DS0lO
RworICAgIGxvY2tDb3VudC0tOworI2lmIExPR19XRUJfTE9DSworICAgIE5TTG9nKEAidW5sb2Nr
ICVkLCB3ZWItdGhyZWFkOiAlZCIsIGxvY2tDb3VudCwgV2ViVGhyZWFkSXNDdXJyZW50KCkpOwor
I2VuZGlmCisjZW5kaWYKKyAgICAKKyAgICBpZiAoIVdlYlRocmVhZElzQ3VycmVudCgpKSB7Cisg
ICAgICAgIEFTU0VSVChtYWluVGhyZWFkTG9ja0NvdW50ICE9IDApOworICAgICAgICBtYWluVGhy
ZWFkTG9ja0NvdW50LS07CisgICAgfSBlbHNlIHsgICAgCisgICAgICAgIHdlYlRocmVhZExvY2tD
b3VudC0tOworICAgICAgICB3ZWJUaHJlYWRTaG91bGRZaWVsZCA9IGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBpbnQgcmVzdWx0OworICAgIHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ3
ZWJMb2NrKTsgCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShyZXN1bHQgPT0gMCwgIndlYiB1bmxv
Y2sgZmFpbGVkIHdpdGggY29kZTolZCIsIHJlc3VsdCk7ICAgIAorfQorCitib29sIFdlYlRocmVh
ZElzTG9ja2VkKHZvaWQpCit7CisgICAgaWYgKFdlYlRocmVhZElzQ3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gd2ViVGhyZWFkTG9ja0NvdW50OworICAgIGVsc2UgaWYgKHB0aHJlYWRfbWFpbl9u
cCgpKQorICAgICAgICByZXR1cm4gbWFpblRocmVhZExvY2tDb3VudDsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiBvdGhlclRocmVhZExvY2tDb3VudDsKK30KKworYm9vbCBXZWJUaHJlYWRJc0xv
Y2tlZE9yRGlzYWJsZWQodm9pZCkKK3sKKyAgICByZXR1cm4gIVdlYlRocmVhZElzRW5hYmxlZCgp
IHx8IFdlYlRocmVhZElzTG9ja2VkKCk7Cit9CisKK3ZvaWQgV2ViVGhyZWFkTG9ja1B1c2hNb2Rh
bCh2b2lkKQoreworICAgIGlmIChXZWJUaHJlYWRJc0N1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZCgpKTsKKyAgICArK3NNYWluVGhy
ZWFkTW9kYWxDb3VudDsKK30KKwordm9pZCBXZWJUaHJlYWRMb2NrUG9wTW9kYWwodm9pZCkKK3sK
KyAgICBpZiAoV2ViVGhyZWFkSXNDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWQoKSk7CisgICAgQVNTRVJUKHNNYWluVGhyZWFkTW9k
YWxDb3VudCAhPSAwKTsKKyAgICAtLXNNYWluVGhyZWFkTW9kYWxDb3VudDsKK30KKworQ0ZSdW5M
b29wUmVmIFdlYlRocmVhZFJ1bkxvb3Aodm9pZCkKK3sKKyAgICBpZiAod2ViVGhyZWFkU3RhcnRl
ZCkgeworICAgICAgICBBU1NFUlQod2ViVGhyZWFkUnVuTG9vcCk7CisgICAgICAgIHJldHVybiB3
ZWJUaHJlYWRSdW5Mb29wOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpOworfQorCitOU1J1bkxvb3AqIFdlYlRocmVhZE5TUnVuTG9vcCh2b2lkKQoreworICAg
IGlmICh3ZWJUaHJlYWRTdGFydGVkKSB7CisgICAgICAgIEFTU0VSVCh3ZWJUaHJlYWROU1J1bkxv
b3ApOworICAgICAgICByZXR1cm4gd2ViVGhyZWFkTlNSdW5Mb29wOworICAgIH0KKworICAgIHJl
dHVybiBbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXTsKK30KKworV2ViVGhyZWFkQ29udGV4dCAq
V2ViVGhyZWFkQ3VycmVudENvbnRleHQodm9pZCkKK3sKKyAgICByZXR1cm4gQ3VycmVudFRocmVh
ZENvbnRleHQoKTsKK30KKworYm9vbCBXZWJUaHJlYWRDb250ZXh0SXNDdXJyZW50KHZvaWQpCit7
ICAgCisgICAgcmV0dXJuIFdlYlRocmVhZEN1cnJlbnRDb250ZXh0KCkgPT0gd2ViVGhyZWFkQ29u
dGV4dDsKK30KKwordm9pZCBXZWJUaHJlYWRTZXREZWxlZ2F0ZVNvdXJjZVJ1bkxvb3BNb2RlKENG
U3RyaW5nUmVmIG1vZGUpCit7CisgICAgQVNTRVJUKCF3ZWJUaHJlYWRTdGFydGVkKTsKKyAgICBk
ZWxlZ2F0ZVNvdXJjZVJ1bkxvb3BNb2RlID0gbW9kZTsKK30KKwordm9pZCBXZWJUaHJlYWRFbmFi
bGUodm9pZCkKK3sKKyAgICBzdGF0aWMgcHRocmVhZF9vbmNlX3QgaW5pdENvbnRyb2wgPSBQVEhS
RUFEX09OQ0VfSU5JVDsgCisgICAgcHRocmVhZF9vbmNlKCZpbml0Q29udHJvbCwgU3RhcnRXZWJU
aHJlYWQpOworfQorCitib29sIFdlYlRocmVhZElzRW5hYmxlZCh2b2lkKQoreworICAgIHJldHVy
biB3ZWJUaHJlYWRTdGFydGVkOworfQorCitib29sIFdlYlRocmVhZElzQ3VycmVudCh2b2lkKQor
eworICAgIHJldHVybiB3ZWJUaHJlYWRTdGFydGVkICYmIHB0aHJlYWRfZXF1YWwod2ViVGhyZWFk
LCBwdGhyZWFkX3NlbGYoKSk7Cit9CisKK2Jvb2wgV2ViVGhyZWFkTm90Q3VycmVudCh2b2lkKQor
eworICAgIHJldHVybiB3ZWJUaHJlYWRTdGFydGVkICYmICFwdGhyZWFkX2VxdWFsKHdlYlRocmVh
ZCwgcHRocmVhZF9zZWxmKCkpOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkSW50ZXJu
YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZEludGVy
bmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDY1NjZjMzc1MTIyYzQxMjcxYjNhZjk0MDJlNGZhMDQ0ZjdkZTk1
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2Vi
Q29yZVRocmVhZEludGVybmFsLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViQ29yZVRocmVhZEludGVybmFsX2gKKyNkZWZpbmUgV2ViQ29yZVRocmVhZEludGVybmFs
X2gKKworI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKworI2lmIGRlZmluZWQoX19jcGx1c3Bs
dXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAgICAKKworLy8gU29tZXRpbWVzLCBsaWtlIGZvciB0
aGUgSW5zcGVjdG9yLCB3ZSBuZWVkIHRvIHBhdXNlIHRoZSBleGVjdXRpb24gb2YgYSBjdXJyZW50
IHJ1bgorLy8gbG9vcCBpdGVyYXRpb24gYW5kIHJlc3VtZSBpdCBsYXRlci4gVGhpcyBoYW5kbGVz
IHB1c2hpbmcgYW5kIHBvcHBpbmcgdGhlIGF1dG9yZWxlYXNlCisvLyBwb29scyB0byBrZWVwIHRo
ZSBvcmlnaW5hbCBwb29sIHVuYWZmZWN0ZWQgYnkgdGhlIHJ1biBsb29wIG9ic2VydmVycy4gVGhl
CisvLyBXZWJUaHJlYWRMb2NrIGlzIHJlbGVhc2VkIHdoZW4gY2FsbGluZyBFbmFibGUsIGFuZCBh
Y3F1aXJlZCB3aGVuIGNhbGxpbmcgRGlzYWJsZS4KKy8vIE5PVEU6IERvZXMgbm90IGV4cGVjdCBh
cmJpdHJhcnkgbmVzdGluZywgb25seSAxIGxldmVsIG9mIG5lc3RpbmcuCit2b2lkIFdlYlJ1bkxv
b3BFbmFibGVOZXN0ZWQoKTsKK3ZvaWQgV2ViUnVuTG9vcERpc2FibGVOZXN0ZWQoKTsKKwordm9p
ZCBXZWJUaHJlYWRJbml0UnVuUXVldWUoKTsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9
IC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgLy8gV2ViQ29yZVRocmVhZEludGVybmFs
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRo
cmVhZE1lc3NhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRo
cmVhZE1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjdmMmZiOGJmNTJjMDQxMGQzMDQyY2QwMDYwZDk3
NTZiZmVjNGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvcmVUaHJlYWRNZXNzYWdlX2gKKyNkZWZp
bmUgV2ViQ29yZVRocmVhZE1lc3NhZ2VfaAorCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCisjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2lmZGVmIF9fT0JKQ19fCisjaW1wb3J0
ICJXZWJDb3JlVGhyZWFkLmgiCisjZW5kaWYgLy8gX19PQkpDX18KKworI2lmIGRlZmluZWQoX19j
cGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZiAgICAKKworLy8KKy8vIFJlbGVhc2UgYW4g
b2JqZWN0IG9uIHRoZSBtYWluIHRocmVhZC4KKy8vCitAaW50ZXJmYWNlIE5TT2JqZWN0KFdlYkNv
cmVUaHJlYWRBZGRpdGlvbnMpCistICh2b2lkKXJlbGVhc2VPbk1haW5UaHJlYWQ7CitAZW5kCisK
Ky8vIFJlZ2lzdGVyIGEgY2xhc3MgZm9yIGRlYWxsb2NhdGlvbiBvbiB0aGUgV2ViVGhyZWFkCit2
b2lkIFdlYkNvcmVPYmpDRGVhbGxvY09uV2ViVGhyZWFkKENsYXNzIGNscyk7Cit2b2lkIFdlYkNv
cmVPYmpDRGVhbGxvY1dpdGhXZWJUaHJlYWRMb2NrKENsYXNzIGNscyk7CisKKy8vIEFzeW5jaHJv
bm91cyBmcm9tIG1haW4gdGhyZWFkIHRvIHdlYiB0aHJlYWQuCit2b2lkIFdlYlRocmVhZEFkb3B0
QW5kUmVsZWFzZShpZCBvYmopOworCisvLyBTeW5jaHJvbm91cyBmcm9tIHdlYiB0aHJlYWQgdG8g
bWFpbiB0aHJlYWQsIG9yIG1haW4gdGhyZWFkIHRvIG1haW4gdGhyZWFkLgordm9pZCBXZWJUaHJl
YWRDYWxsRGVsZWdhdGUoTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uKTsKK3ZvaWQgV2ViVGhyZWFk
UnVuT25NYWluVGhyZWFkKHZvaWQgKF4pKHZvaWQpKTsKKworLy8gQXN5bmNocm9ub3VzIGZyb20g
d2ViIHRocmVhZCB0byBtYWluIHRocmVhZCwgYnV0IHN5bmNocm9ub3VzIHdoZW4gY2FsbGVkIG9u
IHRoZSBtYWluIHRocmVhZC4KK3ZvaWQgV2ViVGhyZWFkQ2FsbERlbGVnYXRlQXN5bmMoTlNJbnZv
Y2F0aW9uICppbnZvY2F0aW9uKTsKKworLy8gQXN5bmNocm9ub3VzIGZyb20gd2ViIHRocmVhZCB0
byBtYWluIHRocmVhZCwgYnV0IHN5bmNocm9ub3VzIHdoZW4gY2FsbGVkIG9uIHRoZSBtYWluIHRo
cmVhZC4KK3ZvaWQgV2ViVGhyZWFkUG9zdE5vdGlmaWNhdGlvbihOU1N0cmluZyAqbmFtZSwgaWQg
b2JqZWN0LCBpZCB1c2VySW5mbyk7CisKKy8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgbWFraW5n
IGFuIE5TSW52b2NhdGlvbiBvYmplY3QKK05TSW52b2NhdGlvbiAqV2ViVGhyZWFkTWFrZU5TSW52
b2NhdGlvbihpZCB0YXJnZXQsIFNFTCBzZWxlY3Rvcik7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNw
bHVzKQorfQorI2VuZGlmCisKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCisKKyNlbmRpZiAv
LyBXZWJDb3JlVGhyZWFkTWVzc2FnZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWRSdW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkUnVuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmQ5ODA1ZjdmZWIz
ODllYjFlOGY0MGVmY2JjMDBkMzIwNTMwM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkUnVuLmNwcApAQCAtMCwwICsxLDE5
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
VGhyZWFkUnVuLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJXZWJDb3JlVGhy
ZWFkLmgiCisjaW5jbHVkZSAiV2ViQ29yZVRocmVhZEludGVybmFsLmgiCisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSB7CisKK2NsYXNzIFdlYlRocmVhZEJsb2NrU3RhdGUgeworcHVibGljOgorICAgIFdlYlRo
cmVhZEJsb2NrU3RhdGUoKQorICAgICAgICA6IG1fY29tcGxldGVkKGZhbHNlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIHdhaXRGb3JDb21wbGV0aW9uKCkKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3N0YXRlTXV0ZXgpOworICAgICAgICB3aGlsZSAoIW1fY29tcGxldGVk
KQorICAgICAgICAgICAgbV9jb21wbGV0aW9uQ29uZGl0aW9uLndhaXQobV9zdGF0ZU11dGV4KTsK
KyAgICB9CisKKyAgICB2b2lkIHNldENvbXBsZXRlZCgpCisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9zdGF0ZU11dGV4KTsKKyAgICAgICAgQVNTRVJUKCFtX2NvbXBsZXRlZCk7
CisgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgbV9jb21wbGV0aW9uQ29uZGl0
aW9uLnNpZ25hbCgpOworICAgIH0KK3ByaXZhdGU6CisgICAgV1RGOjpNdXRleCBtX3N0YXRlTXV0
ZXg7CisgICAgV1RGOjpUaHJlYWRDb25kaXRpb24gbV9jb21wbGV0aW9uQ29uZGl0aW9uOworICAg
IGJvb2wgbV9jb21wbGV0ZWQ7Cit9OworCitjbGFzcyBXZWJUaHJlYWRCbG9jayB7CitwdWJsaWM6
CisgICAgV2ViVGhyZWFkQmxvY2sodm9pZCAoXnRhc2spKCksIFdlYlRocmVhZEJsb2NrU3RhdGUq
IHN0YXRlKQorICAgICAgICA6IG1fdGFzayhCbG9ja19jb3B5KHRhc2spKQorICAgICAgICAsIG1f
c3RhdGUoc3RhdGUpCisgICAgeworICAgIH0KKworICAgIFdlYlRocmVhZEJsb2NrKGNvbnN0IFdl
YlRocmVhZEJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBtX3Rhc2soQmxvY2tfY29weShvdGhlci5t
X3Rhc2spKQorICAgICAgICAsIG1fc3RhdGUob3RoZXIubV9zdGF0ZSkKKyAgICB7CisgICAgfQor
CisgICAgV2ViVGhyZWFkQmxvY2smIG9wZXJhdG9yPShjb25zdCBXZWJUaHJlYWRCbG9jayYgb3Ro
ZXIpCisgICAgeworICAgICAgICB2b2lkICheb2xkVGFzaykoKSA9IG1fdGFzazsKKyAgICAgICAg
bV90YXNrID0gQmxvY2tfY29weShvdGhlci5tX3Rhc2spOworICAgICAgICBCbG9ja19yZWxlYXNl
KG9sZFRhc2spOworICAgICAgICBtX3N0YXRlID0gb3RoZXIubV9zdGF0ZTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIH5XZWJUaHJlYWRCbG9jaygpCisgICAgeworICAgICAg
ICBCbG9ja19yZWxlYXNlKG1fdGFzayk7CisgICAgfQorCisgICAgdm9pZCBvcGVyYXRvcigpKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIG1fdGFzaygpOworICAgICAgICBpZiAobV9zdGF0ZSkKKyAg
ICAgICAgICAgIG1fc3RhdGUtPnNldENvbXBsZXRlZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIChebV90YXNrKSgpOworICAgIFdlYlRocmVhZEJsb2NrU3RhdGUqIG1fc3RhdGU7Cit9
OworCit9CisKK2V4dGVybiAiQyIgeworCit0eXBlZGVmIFdURjo6VmVjdG9yPFdlYlRocmVhZEJs
b2NrPiBXZWJUaHJlYWRSdW5RdWV1ZTsKKworc3RhdGljIFdURjo6TXV0ZXggKnJ1blF1ZXVlTG9j
ayA9IE5VTEw7CitzdGF0aWMgQ0ZSdW5Mb29wU291cmNlUmVmIHJ1blNvdXJjZSA9IE5VTEw7Citz
dGF0aWMgV2ViVGhyZWFkUnVuUXVldWUgKnJ1blF1ZXVlID0gTlVMTDsKKworc3RhdGljIHZvaWQg
SGFuZGxlUnVuU291cmNlKHZvaWQgKmluZm8pCit7CisgICAgVU5VU0VEX1BBUkFNKGluZm8pOwor
ICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgQVNTRVJUKHJ1blF1ZXVlTG9j
ayk7CisgICAgQVNTRVJUKHJ1blNvdXJjZSk7CisgICAgQVNTRVJUKHJ1blF1ZXVlKTsKKworICAg
IFdlYlRocmVhZFJ1blF1ZXVlIHF1ZXVlQ29weTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcigqcnVuUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWVDb3B5ID0gKnJ1blF1ZXVlOwor
ICAgICAgICBydW5RdWV1ZS0+Y2xlYXIoKTsKKyAgICB9CisKKyAgICBmb3IgKFdlYlRocmVhZFJ1
blF1ZXVlOjpjb25zdF9pdGVyYXRvciBpdCA9IHF1ZXVlQ29weS5iZWdpbigpOyBpdCAhPSBxdWV1
ZUNvcHkuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQpKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9X
ZWJUaHJlYWRSdW4odm9pZCAoXnRhc2spKCksIGJvb2wgc3luY2hyb25vdXMpCit7CisgICAgaWYg
KFdlYlRocmVhZElzQ3VycmVudCgpIHx8ICFXZWJUaHJlYWRJc0VuYWJsZWQoKSkgeworICAgICAg
ICB0YXNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHJ1blF1
ZXVlTG9jayk7CisgICAgQVNTRVJUKHJ1blNvdXJjZSk7CisgICAgQVNTRVJUKHJ1blF1ZXVlKTsK
KworICAgIFdlYlRocmVhZEJsb2NrU3RhdGUqIHN0YXRlID0gMDsKKyAgICBpZiAoc3luY2hyb25v
dXMpCisgICAgICAgIHN0YXRlID0gbmV3IFdlYlRocmVhZEJsb2NrU3RhdGU7CisKKyAgICB7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcigqcnVuUXVldWVMb2NrKTsKKyAgICAgICAgcnVuUXVl
dWUtPmFwcGVuZChXZWJUaHJlYWRCbG9jayh0YXNrLCBzdGF0ZSkpOworICAgIH0KKworICAgIENG
UnVuTG9vcFNvdXJjZVNpZ25hbChydW5Tb3VyY2UpOworICAgIENGUnVuTG9vcFdha2VVcChXZWJU
aHJlYWRSdW5Mb29wKCkpOworCisgICAgaWYgKHN5bmNocm9ub3VzKSB7CisgICAgICAgIHN0YXRl
LT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBkZWxldGUgc3RhdGU7CisgICAgfQorfQor
Cit2b2lkIFdlYlRocmVhZFJ1bih2b2lkIChedGFzaykoKSkKK3sKKyAgICBfV2ViVGhyZWFkUnVu
KHRhc2ssIGZhbHNlKTsKK30KKwordm9pZCBXZWJUaHJlYWRSdW5TeW5jKHZvaWQgKF50YXNrKSgp
KQoreworICAgIF9XZWJUaHJlYWRSdW4odGFzaywgdHJ1ZSk7Cit9CisgICAgCit2b2lkIFdlYlRo
cmVhZEluaXRSdW5RdWV1ZSgpCit7CisgICAgQVNTRVJUKCFydW5RdWV1ZSk7CisgICAgQVNTRVJU
KCFydW5RdWV1ZUxvY2spOworICAgIEFTU0VSVCghcnVuU291cmNlKTsKKworICAgIHN0YXRpYyBk
aXNwYXRjaF9vbmNlX3QgcHJlZDsKKyAgICBkaXNwYXRjaF9vbmNlKCZwcmVkLCBeeworICAgICAg
ICBydW5RdWV1ZSA9IG5ldyBXZWJUaHJlYWRSdW5RdWV1ZTsKKworICAgICAgICBDRlJ1bkxvb3BT
b3VyY2VDb250ZXh0IHJ1blNvdXJjZUNvbnRleHQgPSB7MCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgSGFuZGxlUnVuU291cmNlfTsKKyAgICAgICAgcnVu
U291cmNlID0gQ0ZSdW5Mb29wU291cmNlQ3JlYXRlKE5VTEwsIC0xLCAmcnVuU291cmNlQ29udGV4
dCk7CisgICAgICAgIENGUnVuTG9vcEFkZFNvdXJjZShXZWJUaHJlYWRSdW5Mb29wKCksIHJ1blNv
dXJjZSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKworICAgICAgICBydW5RdWV1ZUxvY2sgPSBu
ZXcgV1RGOjpNdXRleDsKKyAgICB9KTsKK30KKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhy
ZWFkUnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWRS
dW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41YTg4ZTgxZTdkZGFmY2JhYWFmMWFmMGQwODFhMjA0MWE5OTY5Yjk0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJD
b3JlVGhyZWFkUnVuLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
Q29yZVRocmVhZFJ1bl9oCisjZGVmaW5lIFdlYkNvcmVUaHJlYWRSdW5faAorCisjaWYgVEFSR0VU
X09TX0lQSE9ORQorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKKworLy8gT24gdGhlIHdlYiB0aHJlYWQsIGJvdGgKKy8vICAgV2ViVGhyZWFkUnVuKF57
IGNvZGU7IH0pOworLy8gYW5kCisvLyAgIFdlYlRocmVhZFJ1blN5bmMoXnsgY29kZTsgfSk7Cisv
LyBqdXN0IHJ1biB0aGUgYmxvY2sgaW1tZWRpYXRlbHkuCisKKy8vIE9uIGFueSBvdGhlciB0aHJl
YWQsCisvLyAgIFdlYlRocmVhZFJ1biheeyBjb2RlOyB9KTsKKy8vIHdpbGwgcXVldWUgdGhlIGJs
b2NrIGZvciBhc3luY2hyb25vdXMgZXhlY3V0aW9uIG9uIHRoZSB3ZWIgdGhyZWFkLCBhbmQKKy8v
ICAgV2ViVGhyZWFkUnVuU3luYyheeyBjb2RlOyB9KTsKKy8vIHdpbGwgcXVldWUgdGhlIGJsb2Nr
IGFuZCB3YWl0IGZvciBpdHMgZXhlY3V0aW9uIHRvIGZpbmlzaC4KKwordm9pZCBXZWJUaHJlYWRS
dW4odm9pZCAoXmJsb2NrKSgpKTsKK3ZvaWQgV2ViVGhyZWFkUnVuU3luYyh2b2lkICheYmxvY2sp
KCkpOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30gLy8gZXh0ZXJuICJDIgorI2VuZGlm
CisKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCisKKyNlbmRpZiAvLyBXZWJDb3JlVGhyZWFk
UnVuX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29y
ZVRocmVhZFNhZmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRo
cmVhZFNhZmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTZiMDgzMmQwZWQxMWM0N2IyNTFlMGMzYzhhMmZiZDRm
ZDhlNTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dh
ay9XZWJDb3JlVGhyZWFkU2FmZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvcmVUaHJlYWRTYWZlX2gKKyNkZWZpbmUgV2ViQ29y
ZVRocmVhZFNhZmVfaAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNs
YXNzIFdlYkV2ZW50OworCisvLyBMaXN0aW5nIG9mIG1ldGhvZHMgdGhhdCBhcmUgY3VycmVudGx5
IHRocmVhZC1zYWZlLgorCitAaW50ZXJmYWNlIFdBS1ZpZXcgOiBOU09iamVjdAorQGVuZAorCitA
aW50ZXJmYWNlIFdlYlZpZXcgOiBXQUtWaWV3CistICh2b2lkKXJlbG9hZDooaWQpc2VuZGVyOwor
LSAodm9pZClzdG9wTG9hZGluZzooaWQpc2VuZGVyOworLSAoQk9PTCljYW5Hb0JhY2s7CistICh2
b2lkKWdvQmFjazsKKy0gKEJPT0wpY2FuR29Gb3J3YXJkOworLSAodm9pZClnb0ZvcndhcmQ7CitA
ZW5kCisKK0BpbnRlcmZhY2UgV2ViRnJhbWUgOiBOU09iamVjdAorLSAodm9pZClsb2FkUmVxdWVz
dDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdDsKK0BlbmQKKworQGludGVyZmFjZSBXQUtSZXNwb25k
ZXIgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIFdBS1dpbmRvdyA6IFdBS1Jlc3BvbmRl
cgorLSAodm9pZClzZW5kRXZlbnQ6KFdlYkV2ZW50ICopZXZlbnQ7CitAZW5kCisKK0Bwcm90b2Nv
bCBXZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyIDxOU09iamVjdD4KKy0gKHZvaWQpdXNlOworQGVu
ZAorCitAaW50ZXJmYWNlIFdlYlNjcmlwdE9iamVjdCA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRl
cmZhY2UgRE9NT2JqZWN0IDogV2ViU2NyaXB0T2JqZWN0CitAZW5kCisKKyNlbmRpZiAvLyBXZWJD
b3JlVGhyZWFkU2FmZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
d2FrL1dlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNDhjYTQ4MDkyYjljMmQwZmU2Y2I1NDA2YjZjNGM3OGJhZmIzZjgzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkU3lzdGVt
SW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuaCIKKworI2lm
IFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIgCisjaW5jbHVkZSA8
d3RmL2lvcy9XZWJDb3JlVGhyZWFkLmg+CisKKy8vICJGaWxsIEluIiBKYXZhU2NyaXB0Q29yZSdz
IGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGggb3Vycy4KKy8vIEphdmFTY3JpcHRDb3JlJ3MgZnVuY3Rp
b25zIGhhdmUgdGhlIHNhbWUgbmFtZSwgYnV0CisvLyB0aGV5IGFyZSBwcmVmaXhlZCB3aXRoICJX
ZWJDb3JlIi4KKworI2RlZmluZSBJTklUKGZ1bmN0aW9uKSBXZWJDb3JlIyNmdW5jdGlvbiA9IGZ1
bmN0aW9uCisKK3ZvaWQgSW5pdFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBkaWRJbml0OworICAgIGlmIChkaWRJbml0KQorICAgICAgICByZXR1
cm47CisKKyAgICBJTklUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCk7CisKKyAgICBkaWRJ
bml0ID0gdHJ1ZTsKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkU3lzdGVt
SW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDMxZTBiYWU4YTI0ZDZiNTU3ZWJhNzg5ZmJjZmNmZjY4
YzQzN2MzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93
YWsvV2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKK3ZvaWQgSW5pdFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2Uo
dm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBUQVJH
RVRfT1NfSVBIT05FCg==
</data>
<flag name="review"
          id="244553"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>