<?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>173956</bug_id>
          
          <creation_ts>2017-06-28 20:04:20 -0700</creation_ts>
          <short_desc>[WebIDL] Remove custom binding for UserMessageHandlersNamespace</short_desc>
          <delta_ts>2017-06-29 16:13:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1323815</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-28 20:04:20 -0700</bug_when>
    <thetext>[WebIDL] Remove custom binding for UserMessageHandlersNamespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323817</commentid>
    <comment_count>1</comment_count>
      <attachid>314100</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-28 20:10:47 -0700</bug_when>
    <thetext>Created attachment 314100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323822</commentid>
    <comment_count>2</comment_count>
      <attachid>314101</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-28 20:23:20 -0700</bug_when>
    <thetext>Created attachment 314101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324134</commentid>
    <comment_count>3</comment_count>
      <attachid>314101</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-29 16:13:29 -0700</bug_when>
    <thetext>Comment on attachment 314101
Patch

Clearing flags on attachment: 314101

Committed r218967: &lt;http://trac.webkit.org/changeset/218967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324135</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-29 16:13:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314100</attachid>
            <date>2017-06-28 20:10:47 -0700</date>
            <delta_ts>2017-06-28 20:23:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173956-20170628201159.patch</filename>
            <type>text/plain</type>
            <size>95355</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE3LTA2LTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYklETF0gUmVtb3ZlIGN1c3RvbSBi
aW5kaW5nIGZvciBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5NTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwOiBSZW1vdmVkLgor
ICAgICAgICBSZW1vdmUgSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcAor
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAg
IChHZW5lcmF0ZU5hbWVkR2V0dGVyTGFtYmRhKToKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNh
bGxpbmcgbmFtZWQgZ2V0dGVycyB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzIGZyb20gW0NhbGxX
aXRoXS4KKworICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbik6
CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW9uKToKKyAgICAg
ICAgKEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMpOgorICAgICAgICAoR2VuZXJhdGVD
YWxsV2l0aFVzaW5nUG9pbnRlcnMpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxX
aXRoVXNpbmdQb2ludGVycyk6CisgICAgICAgIChHZW5lcmF0ZUNhbGxXaXRoKToKKyAgICAgICAg
KEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgVXBkYXRlIGFyZ3VtZW50cyB0byBH
ZW5lcmF0ZUNhbGxXaXRoKFVzaW5nLi4uKSB0byBubyBsb25nZXIgcGFzcyBhbiBvcGVyYXRpb24s
CisgICAgICAgIHdoaWNoIHdhcyBvbmx5IG5lZWRlZCBmb3IgdGhlIG5vIGxvbmdlciB1c2VkIFNj
cmlwdEFyZ3VtZW50cywgcGFzcyBhIHRoaXNPYmplY3QKKyAgICAgICAgcmVmZXJlbmNlLCBhbmQg
b3B0aW9uYWxseSBwYXNzIGFuIGluZGVudGF0aW9uLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgIFJlbW92ZSBubyBsb25nZXIgdXNlZCBT
Y3JpcHRBcmd1bWVudHMgYW5kIENhbGxTdGFjaywgYWRkIFdvcmxkLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZVNldHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0JvZHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgIFJlbW92ZSB0ZXN0cyBvZiBT
Y3JpcHRBcmd1bWVudHMgYW5kIENhbGxTdGFjay4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmlkbDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5pZGw6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllci5pZGw6IEFkZGVkLgorICAgICAgICBBZGQgYmFzaWMgbmFtZWQgZ2V0dGVyIHRl
c3RzIGFuZCBhIHNwZWNpZmljIHRlc3Qgb2YgbmFtZWQgZ2V0dGVycyB1c2luZyBDYWxsV2l0aC4K
KworICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2U6Om5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlOjpoYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL1VzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2UuaDoKKyAgICAgICAgUmVuYW1lIGhhbmRsZXIgdG8gbmFtZWRJdGVtLCBt
YXRjaGluZyBjb252ZW50aW9uIGFuZCB0aGUgZXhwZWN0YXRpb25zIG9mIHRoZQorICAgICAgICBi
aW5kaW5ncyBnZW5lcmF0b3IgYW5kIHN3YXAgdGhlIG9yZGVyIG9mIHRoZSBhcmd1bWVudHMgZm9y
IHRoZSBzYW1lIHJlYXNvbi4KKworICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZS5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmRE
ZXNjcmlwdG9yLCBhbmQgYWRkIHRoZSBhbm9ueW1vdXMgbmFtZWQgZ2V0dGVyLgorCiAyMDE3LTA2
LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNhZmFyaSdz
IFNwZWVkb21ldGVyIHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5
IGlzIGVuYWJsZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTg5MDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzUyNCw4
ICszNTI0LDYgQEAgaWYgKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMpCiAgICAgICAgIHBh
Z2UvV2ViS2l0TmFtZXNwYWNlLmlkbAogICAgICkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKLSAgICAgICAgYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNl
Q3VzdG9tLmNwcAotCiAgICAgICAgIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyLmNwcAogICAgICAg
ICBwYWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuY3BwCiAgICAgICAgIHBhZ2UvVXNl
ck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxODkwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzIxNyw3ICszMjE3LDYgQEAKIAkJN0M3M0ZCMEQxOTFFRjVBODAwN0RFMDYx
IC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3M0ZCMEIxOTFFRjVBODAwN0RFMDYxIC8qIEpT
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oICovOyB9OwogCQk3QzczRkIxMTE5MUVGNkY0
MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3M0ZCMEYxOTFFRjZGNDAwN0RFMDYxIC8qIEpT
VXNlck1lc3NhZ2VIYW5kbGVyLmNwcCAqLzsgfTsKIAkJN0M3M0ZCMTIxOTFFRjZGNDAwN0RFMDYx
IC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzczRkIxMDE5MUVGNkY0MDA3REUwNjEgLyogSlNVc2VyTWVzc2Fn
ZUhhbmRsZXIuaCAqLzsgfTsKLQkJN0M3M0ZCMTkxOTFFRjgwODAwN0RFMDYxIC8qIEpTVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJN0M3N0MzRDExREVF
NDcyNDAwQTUwQkZBIC8qIEJsb2JQcm9wZXJ0eUJhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3N0MzRDAxREVFNDcyNDAwQTUwQkZBIC8qIEJsb2JQ
cm9wZXJ0eUJhZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdDNzdDM0Q0MURFRjE3OEUwMEE1MEJGQSAvKiBKU0Jsb2JQcm9wZXJ0eUJhZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzc3QzNEMjFE
RUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcuY3BwICovOyB9OwogCQk3Qzc3QzNE
NTFERUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzdDM0QzMURFRjE3OEUwMEE1MEJGQSAv
KiBKU0Jsb2JQcm9wZXJ0eUJhZy5oICovOyB9OwpAQCAtMTEzMjcsNyArMTEzMjYsNiBAQAogCQk3
QzczRkIwRTE5MUVGNjBFMDA3REUwNjEgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBV
c2VyTWVzc2FnZUhhbmRsZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzcz
RkIwRjE5MUVGNkY0MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzczRkIxMDE5MUVGNkY0MDA3REUwNjEgLyog
SlNVc2VyTWVzc2FnZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNVc2VyTWVzc2FnZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M3
M0ZCMTcxOTFFRjgwODAwN0RFMDYxIC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Qzc3QzNDRjFERUU0NzE4MDBBNTBCRkEgLyogQmxvYlByb3BlcnR5QmFnLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBCbG9iUHJvcGVydHlCYWcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzc3
QzNEMDFERUU0NzI0MDBBNTBCRkEgLyogQmxvYlByb3BlcnR5QmFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JQcm9wZXJ0eUJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Qzc3QzNEMjFERUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCbG9iUHJvcGVydHlC
YWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM3MzEsNyArMjM3MjksNiBA
QAogCQkJCTUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0b3JhZ2VDdXN0b20uY3BwICov
LAogCQkJCTU3QTlDODhEMURBNzBCRjgwMEJDNzMwNSAvKiBKU1N1YnRsZUNyeXB0b0N1c3RvbS5j
cHAgKi8sCiAJCQkJMDdFMTE2QjAxNDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9t
LmNwcCAqLywKLQkJCQk3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwODE3MUNBMkM1MDBERDUy
QjggLyogSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCAqLywKIAkJCQlEM0YzRDM1OTFBNjlBM0IwMDA1
OUZDMkIgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQk0OUVF
RDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
ICovLApAQCAtMzI1NjAsNyArMzI1NTcsNiBAQAogCQkJCTVDNTM4MUI1MUQ4N0UwODcwMEUyRUJF
NiAvKiBKU1VSTFNlYXJjaFBhcmFtcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzczRkIxMTE5
MUVGNkY0MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M3M0ZCMEMxOTFFRjVBODAwN0RFMDYxIC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QzczRkIxOTE5MUVGODA4MDA3REUwNjEg
LyogSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE1Qzc3MDk0MTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQ0RFODNEQjYxODNEMzUyQTAwMzFFQUEzIC8qIEpTVmlkZW9QbGF5
YmFja1F1YWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU4RUYwNEExNzFDOTAxNDAwOUI0
OEMzIC8qIEpTVmlkZW9UcmFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmgiCi0K
LSNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotCi0jaW5jbHVkZSAiSlNET01Db252
ZXJ0SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgotI2luY2x1
ZGUgIkpTVXNlck1lc3NhZ2VIYW5kbGVyLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9v
bCBKU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6OmdldE93blByb3BlcnR5U2xvdERlbGVn
YXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQotewotICAgIGlmIChhdXRvKiBoYW5kbGVyID0gd3JhcHBlZCgpLmhhbmRsZXIo
cHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSwgZ2xvYmFsT2JqZWN0KCkt
PndvcmxkKCkpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgUmVhZE9ubHkgfCBEb250
RGVsZXRlIHwgRG9udEVudW0sIHRvSlM8SURMSW50ZXJmYWNlPFVzZXJNZXNzYWdlSGFuZGxlcj4+
KCpleGVjLCAqZ2xvYmFsT2JqZWN0KCksICpoYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShV
U0VSX01FU1NBR0VfSEFORExFUlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjE4OTA1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTU5Niw5ICs1OTYsMTMgQEAgc3ViIEdlbmVyYXRlTmFtZWRHZXR0ZXJMYW1iZGEK
ICAgICBteSAkcmVzdWx0VHlwZSA9ICJ0eXBlbmFtZSAke0lETFR5cGV9OjpJbXBsZW1lbnRhdGlv
blR5cGUiOwogICAgICRyZXN1bHRUeXBlID0gIkV4Y2VwdGlvbk9yPCIgLiAkcmVzdWx0VHlwZSAu
ICI+IiBpZiAkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e01heVRo
cm93RXhjZXB0aW9ufTsKICAgICBteSAkcmV0dXJuVHlwZSA9ICJzdGQ6Om9wdGlvbmFsPCIgLiAk
cmVzdWx0VHlwZSAuICI+IjsKLSAgICAKKwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBh
dXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5h
bWUpIC0+ICR7cmV0dXJuVHlwZX0ge1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLiR7bmFtZWRHZXR0ZXJGdW5j
dGlvbk5hbWV9KHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpO1xuIik7
CisKKyAgICBteSBAYXJncyA9IEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMoJG5hbWVk
R2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sICRvdXRwdXRB
cnJheSwgInN0ZDo6bnVsbG9wdCIsICJ0aGlzT2JqZWN0IiwgIiAgICAgICAgIik7CisgICAgcHVz
aChAYXJncywgInByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkiKTsKKwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKS4ke25hbWVkR2V0dGVyRnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJn
cykgLiAiKTtcbiIpOwogICAgIAogICAgIGlmICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e01heVRocm93RXhjZXB0aW9ufSkgewogICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpXG4iKTsKQEAgLTQ2
ODQsNyArNDY4OCw3IEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUdldHRlckJvZHlEZWZpbml0aW8K
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIGNhY2hlZFZh
bHVlO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG15IEBjYWxsV2l0aEFyZ3Mg
PSBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NhbGxXaXRofSwgJG91dHB1dEFycmF5LCAianNVbmRlZmluZWQoKSIpOworICAg
ICAgICBteSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVDYWxsV2l0aFVzaW5nUmVmZXJlbmNlcygk
YXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sICRvdXRwdXRBcnJheSwg
ImpzVW5kZWZpbmVkKCkiLCAidGhpc09iamVjdCIpOwogICAgICAgICAKICAgICAgICAgbXkgKCRi
YXNlRnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHBy
ZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5uYW1lLCAkYXR0cmlidXRl
KTsKICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bGx5UXVhbGlmaWVkSW1wbGVtZW50
YXRpb25DYWxsTmFtZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLCAkYmFzZUZ1bmN0aW9uTmFtZSwg
ImltcGwiLCAkY29uZGl0aW9uYWwpOwpAQCAtNDg5Miw4ICs0ODk2LDggQEAgc3ViIEdlbmVyYXRl
QXR0cmlidXRlU2V0dGVyQm9keURlZmluaXRpbwogICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0g
R2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOYW1lKCRpbnRlcmZhY2UsICRhdHRy
aWJ1dGUsICRiYXNlRnVuY3Rpb25OYW1lLCAiaW1wbCIsICRjb25kaXRpb25hbCk7CiAgICAgICAg
IEFkZEFkZGl0aW9uYWxBcmd1bWVudHNGb3JJbXBsZW1lbnRhdGlvbkNhbGwoXEBhcmd1bWVudHMs
ICRpbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJpbXBsIiwgInN0YXRlIiwgInRoaXNPYmplY3QiKTsK
IAotICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVy
ZW5jZXMoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57U2V0dGVyQ2FsbFdpdGh9LCAk
b3V0cHV0QXJyYXksICJmYWxzZSIpKTsKLSAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5l
cmF0ZUNhbGxXaXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NhbGxXaXRofSwgJG91dHB1dEFycmF5LCAiZmFsc2UiKSk7CisgICAgICAgIHVuc2hpZnQo
QGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aFVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntTZXR0ZXJDYWxsV2l0aH0sICRvdXRwdXRBcnJheSwgImZhbHNl
IiwgInRoaXNPYmplY3QiKSk7CisgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgR2VuZXJhdGVD
YWxsV2l0aFVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
YWxsV2l0aH0sICRvdXRwdXRBcnJheSwgImZhbHNlIiwgInRoaXNPYmplY3QiKSk7CiAKICAgICAg
ICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBA
YXJndW1lbnRzKSAuICIpIjsKICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgJGZ1bmN0aW9uU3RyaW5nKSIgaWYgJGF0dHJpYnV0
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57U2V0dGVyTWF5VGhyb3dFeGNlcHRpb259OwpAQCAtNTMx
MywzMCArNTMxNywzMCBAQCBzdWIgR2VuZXJhdGVMZWdhY3lDYWxsZXJEZWZpbml0aW9uCiAKIHN1
YiBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdSZWZlcmVuY2VzCiB7Ci0gICAgbXkgKCRjYWxsV2l0aCwg
JG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICRvcGVyYXRpb24pID0gQF87CisgICAgbXkgKCRj
YWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICR0aGlzUmVmZXJlbmNlLCAkaW5k
ZW50KSA9IEBfOwogCiAgICAgbXkgJHN0YXRlUG9pbnRlciA9ICImc3RhdGUiOwogICAgIG15ICRz
dGF0ZVJlZmVyZW5jZSA9ICJzdGF0ZSI7CiAgICAgbXkgJGdsb2JhbE9iamVjdCA9ICJqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpIjsKIAotICAg
IHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJu
VmFsdWUsICRyZXR1cm5WYWx1ZSwgJG9wZXJhdGlvbiwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVm
ZXJlbmNlLCAkZ2xvYmFsT2JqZWN0LCAkZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gR2VuZXJh
dGVDYWxsV2l0aCgkY2FsbFdpdGgsICRvdXRwdXRBcnJheSwgJHJldHVyblZhbHVlLCAkcmV0dXJu
VmFsdWUsICRzdGF0ZVBvaW50ZXIsICRzdGF0ZVJlZmVyZW5jZSwgJGdsb2JhbE9iamVjdCwgJGds
b2JhbE9iamVjdCwgJHRoaXNSZWZlcmVuY2UsICRpbmRlbnQpOwogfQogCiAjIEZJWE1FOiBXZSBz
aG91bGQgcmVtb3ZlIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzIGFuZCBjb21iaW5lIEdl
bmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMgYW5kIEdlbmVyYXRlQ2FsbFdpdGgKIHN1YiBH
ZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycwogewotICAgIG15ICgkY2FsbFdpdGgsICRvdXRw
dXRBcnJheSwgJHJldHVyblZhbHVlLCAkb3BlcmF0aW9uKSA9IEBfOworICAgIG15ICgkY2FsbFdp
dGgsICRvdXRwdXRBcnJheSwgJHJldHVyblZhbHVlLCAkdGhpc1JlZmVyZW5jZSwgJGluZGVudCkg
PSBAXzsKIAogICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAic3RhdGUiOwogICAgIG15ICRzdGF0ZVJl
ZmVyZW5jZSA9ICIqc3RhdGUiOwogICAgIG15ICRnbG9iYWxPYmplY3QgPSAianNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkiOwogCi0gICAgcmV0
dXJuIEdlbmVyYXRlQ2FsbFdpdGgoJGNhbGxXaXRoLCAkb3V0cHV0QXJyYXksICRyZXR1cm5WYWx1
ZSwgJHJldHVyblZhbHVlLCAkb3BlcmF0aW9uLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZlcmVu
Y2UsICRnbG9iYWxPYmplY3QsICRnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBHZW5lcmF0ZUNh
bGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICRyZXR1cm5WYWx1
ZSwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVmZXJlbmNlLCAkZ2xvYmFsT2JqZWN0LCAkZ2xvYmFs
T2JqZWN0LCAkdGhpc1JlZmVyZW5jZSwgJGluZGVudCk7CiB9CiAKIHN1YiBHZW5lcmF0ZUNvbnN0
cnVjdG9yQ2FsbFdpdGhVc2luZ1BvaW50ZXJzCiB7Ci0gICAgbXkgKCRjYWxsV2l0aCwgJG91dHB1
dEFycmF5LCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICRvcGVyYXRpb24pID0gQF87CisgICAgbXkg
KCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICR0aGlzUmVm
ZXJlbmNlLCAkaW5kZW50KSA9IEBfOwogCiAgICAgbXkgJHN0YXRlUG9pbnRlciA9ICJzdGF0ZSI7
CiAgICAgbXkgJHN0YXRlUmVmZXJlbmNlID0gIipzdGF0ZSI7CkBAIC01MzQ0LDUwICs1MzQ4LDQ2
IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbFdpdGhVc2luZ1BvaW4KICAgICBteSAkY29u
dGV4dE1pc3NpbmcgPSAidGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2
YWlsYWJsZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgXCIke3Zpc2libGVJbnRlcmZhY2VOYW1l
fVwiKSI7CiAgICAgbXkgJHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBY2Nlc3NvciA9ICJjYXN0ZWRU
aGlzIjsKIAotICAgIHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFy
cmF5LCAiIiwgJGNvbnRleHRNaXNzaW5nLCAkb3BlcmF0aW9uLCAkc3RhdGVQb2ludGVyLCAkc3Rh
dGVSZWZlcmVuY2UsICRnbG9iYWxPYmplY3QsICRzY3JpcHRFeGVjdXRpb25Db250ZXh0QWNjZXNz
b3IpOworICAgIHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5
LCAiIiwgJGNvbnRleHRNaXNzaW5nLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZlcmVuY2UsICRn
bG9iYWxPYmplY3QsICRzY3JpcHRFeGVjdXRpb25Db250ZXh0QWNjZXNzb3IsICR0aGlzUmVmZXJl
bmNlLCAkaW5kZW50KTsKIH0KIAogc3ViIEdlbmVyYXRlQ2FsbFdpdGgKIHsKLSAgICBteSAoJGNh
bGxXaXRoLCAkb3V0cHV0QXJyYXksICRyZXR1cm5WYWx1ZSwgJGNvbnRleHRNaXNzaW5nLCAkb3Bl
cmF0aW9uLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZlcmVuY2UsICRnbG9iYWxPYmplY3QsICRz
Y3JpcHRFeGVjdXRpb25Db250ZXh0QWNjZXNzb3IpID0gQF87CisgICAgbXkgKCRjYWxsV2l0aCwg
JG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICRjb250ZXh0TWlzc2luZywgJHN0YXRlUG9pbnRl
ciwgJHN0YXRlUmVmZXJlbmNlLCAkZ2xvYmFsT2JqZWN0LCAkc2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFjY2Vzc29yLCAkdGhpc1JlZmVyZW5jZSwgJGluZGVudCkgPSBAXzsKIAogICAgIHJldHVybiAo
KSB1bmxlc3MgJGNhbGxXaXRoOwogCisgICAgJGluZGVudCB8fD0gIiAgICAiOworCiAgICAgbXkg
QGNhbGxXaXRoQXJnczsKICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICRzdGF0ZVJlZmVyZW5jZSkg
aWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAi
U2NyaXB0U3RhdGUiKTsKICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICIqJHtnbG9iYWxPYmplY3R9
IikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRo
LCAiR2xvYmFsT2JqZWN0Iik7CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJp
YnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSkgewotICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogY29udGV4dCA9ICR7c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFjY2Vzc29yfS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7Ci0g
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKVxu
Iik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAuICgkY29u
dGV4dE1pc3NpbmcgPyAiICIgLiAkY29udGV4dE1pc3NpbmcgOiAiIikgLiAiO1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvKiBjb250ZXh0ID0gJHtzY3Jp
cHRFeGVjdXRpb25Db250ZXh0QWNjZXNzb3J9LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImlmIChVTkxJS0VMWSgh
Y29udGV4dCkpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAg
ICByZXR1cm4iIC4gKCRjb250ZXh0TWlzc2luZyA/ICIgIiAuICRjb250ZXh0TWlzc2luZyA6ICIi
KSAuICI7XG4iKTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKmNvbnRleHQiKTsKICAg
ICB9CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRj
YWxsV2l0aCwgIkRvY3VtZW50IikpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRvY3Vt
ZW50LmgiKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNvbnRleHQg
PSAke3NjcmlwdEV4ZWN1dGlvbkNvbnRleHRBY2Nlc3Nvcn0tPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZ
KCFjb250ZXh0KSlcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJl
dHVybiIgLiAoJGNvbnRleHRNaXNzaW5nID8gIiAiIC4gJGNvbnRleHRNaXNzaW5nIDogIiIpIC4g
IjtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byogY29udGV4dCA9ICR7c2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFjY2Vzc29yfS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkoIWNv
bnRleHQpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICIgICAg
cmV0dXJuIiAuICgkY29udGV4dE1pc3NpbmcgPyAiICIgLiAkY29udGV4dE1pc3NpbmcgOiAiIikg
LiAiO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJBU1NFUlQo
Y29udGV4dC0+aXNEb2N1bWVudCgpKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICRpbmRlbnQgLiAiYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
O1xuIik7CiAgICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgImRvY3VtZW50Iik7CiAgICAgfQog
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdp
dGgsICJJbmN1bWJlbnREb2N1bWVudCIpKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJK
U0RPTVdpbmRvd0Jhc2UuaCIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byogaW5jdW1iZW50RG9jdW1lbnQgPSBpbmN1bWJlbnRET01XaW5kb3coJHN0YXRlUmVmZXJlbmNl
KS5kb2N1bWVudCgpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAo
IWluY3VtYmVudERvY3VtZW50KVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIiAuICgkcmV0dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikg
LiAiO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvKiBp
bmN1bWJlbnREb2N1bWVudCA9IGluY3VtYmVudERPTVdpbmRvdygkc3RhdGVSZWZlcmVuY2UpLmRv
Y3VtZW50KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImlm
ICghaW5jdW1iZW50RG9jdW1lbnQpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAk
aW5kZW50IC4gIiAgICByZXR1cm4iIC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5WYWx1
ZSA6ICIiKSAuICI7XG4iKTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKmluY3VtYmVu
dERvY3VtZW50Iik7CiAgICAgfQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRy
aWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJSZXNwb25zaWJsZURvY3VtZW50IikpIHsKICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NV2luZG93QmFzZS5oIik7CiAgICAgICAgIHB1c2go
QGNhbGxXaXRoQXJncywgInJlc3BvbnNpYmxlRG9jdW1lbnQoJHN0YXRlUmVmZXJlbmNlKSIpOwog
ICAgIH0KLSAgICBpZiAoJG9wZXJhdGlvbiBhbmQgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0
cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0QXJndW1lbnRzIikpIHsKLSAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIjxpbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmg+Iik7Ci0gICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
aD4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJn
dW1lbnRzKCRzdGF0ZVBvaW50ZXIsICIgLiBAeyRvcGVyYXRpb24tPmFyZ3VtZW50c30gLiAiKSk7
XG4iKTsKLSAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiV1RGTW92ZShzY3JpcHRBcmd1bWVu
dHMpIik7Ci0gICAgfQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVD
b250YWlucygkY2FsbFdpdGgsICJBY3RpdmVXaW5kb3ciKSkgewogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNET01XaW5kb3dCYXNlLmgiKTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdz
LCAiYWN0aXZlRE9NV2luZG93KCRzdGF0ZVJlZmVyZW5jZSkiKTsKQEAgLTU0MDMsNiArNTQwMyw5
IEBAIHN1YiBHZW5lcmF0ZUNhbGxXaXRoCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRl
ZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlJ1bnRpbWVGbGFncyIpKSB7CiAgICAgICAg
IHB1c2goQGNhbGxXaXRoQXJncywgIiR7Z2xvYmFsT2JqZWN0fS0+cnVudGltZUZsYWdzKCkiKTsK
ICAgICB9CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5z
KCRjYWxsV2l0aCwgIldvcmxkIikpIHsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAid29y
bGRGb3JET01PYmplY3QoJiR7dGhpc1JlZmVyZW5jZX0pIik7CisgICAgfQogCiAgICAgcmV0dXJu
IEBjYWxsV2l0aEFyZ3M7CiB9CkBAIC01NDk4LDEwICs1NTAxLDEwIEBAIHN1YiBHZW5lcmF0ZVBh
cmFtZXRlcnNDaGVjawogICAgIGlmICghJGlzQ29uc3RydWN0b3IpIHsKICAgICAgICAgbXkgJG5h
bWUgPSAkb3BlcmF0aW9uLT5uYW1lOwogICAgICAgICAkcXVvdGVkRnVuY3Rpb25OYW1lID0gIlwi
JG5hbWVcIiI7Ci0gICAgICAgIHB1c2goQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aFVzaW5n
UG9pbnRlcnMoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRv
dXRwdXRBcnJheSwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIsICRvcGVyYXRpb24p
KTsKKyAgICAgICAgcHVzaChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVy
cygkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxAJG91dHB1dEFy
cmF5LCAiSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIiwgIipjYXN0ZWRUaGlzIikpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgICRxdW90ZWRGdW5jdGlvbk5hbWUgPSAibnVsbHB0ciI7Ci0g
ICAgICAgIHB1c2goQGFyZ3VtZW50cywgR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxXaXRoVXNpbmdQ
b2ludGVycygkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25zdHJ1Y3RvckNhbGxX
aXRofSwgXEAkb3V0cHV0QXJyYXksICR2aXNpYmxlSW50ZXJmYWNlTmFtZSwgJG9wZXJhdGlvbikp
OworICAgICAgICBwdXNoKEBhcmd1bWVudHMsIEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsV2l0aFVz
aW5nUG9pbnRlcnMoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uc3RydWN0b3JD
YWxsV2l0aH0sIFxAJG91dHB1dEFycmF5LCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICIqY2FzdGVk
VGhpcyIpKTsKICAgICB9CiAKICAgICBteSAkYXJndW1lbnRJbmRleCA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgko
cmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAg
fSwKICAgICAgICAgIkNhbGxXaXRoIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6
IFsiYXR0cmlidXRlIiwgIm9wZXJhdGlvbiJdLAotICAgICAgICAgICAgInZhbHVlcyI6IFsiRG9j
dW1lbnQiLCAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsICJTY3JpcHRTdGF0ZSIsICJTY3JpcHRB
cmd1bWVudHMiLCAiQ2FsbFN0YWNrIiwgIkdsb2JhbE9iamVjdCIsICJBY3RpdmVXaW5kb3ciLCAi
Rmlyc3RXaW5kb3ciLCAiUmVzcG9uc2libGVEb2N1bWVudCJdCisgICAgICAgICAgICAidmFsdWVz
IjogWyJEb2N1bWVudCIsICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IiwgIlNjcmlwdFN0YXRlIiwg
Ikdsb2JhbE9iamVjdCIsICJBY3RpdmVXaW5kb3ciLCAiRmlyc3RXaW5kb3ciLCAiUmVzcG9uc2li
bGVEb2N1bWVudCIsICJXb3JsZCJdCiAgICAgICAgIH0sCiAgICAgICAgICJDaGVja1NlY3VyaXR5
IjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KQEAgLTM5
Nyw3ICszOTcsNyBAQAogICAgICAgICB9LAogICAgICAgICAiU2V0dGVyQ2FsbFdpdGgiOiB7CiAg
ICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJhdHRyaWJ1dGUiXSwKLSAgICAgICAgICAg
ICJ2YWx1ZXMiOiBbIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiLCAiU2NyaXB0U3RhdGUiLCAiU2Ny
aXB0QXJndW1lbnRzIiwgIkNhbGxTdGFjayIsICJHbG9iYWxPYmplY3QiLCAiQWN0aXZlV2luZG93
IiwgIkZpcnN0V2luZG93Il0KKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQiLCAiU2NyaXB0U3RhdGUiLCAiR2xvYmFsT2JqZWN0IiwgIkFjdGl2ZVdpbmRvdyIs
ICJGaXJzdFdpbmRvdyJdCiAgICAgICAgIH0sCiAgICAgICAgICJTZXR0ZXJNYXlUaHJvd0V4Y2Vw
dGlvbiI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImF0dHJpYnV0ZSJdCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGguaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW50ZXJm
YWNlIFRlc3ROYW1lZEdldHRlckNhbGxXaXRoIHsKKyAgICBbQ2FsbFdpdGg9V29ybGRdIGdldHRl
ciBET01TdHJpbmcgKERPTVN0cmluZyBuYW1lKTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW50ZXJmYWNlIFRlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllciB7CisgICAgZ2V0dGVyIERPTVN0cmluZyAoRE9NU3RyaW5n
IG5hbWUpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZhY2UgVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXIgeworICAgIGdldHRlciBET01TdHJpbmcgZ2V0dGVyTmFtZShET01TdHJpbmcgbmFt
ZSk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
YmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2
LDYgQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdwogICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0JlNjcmlwdFN0YXRlXSB2b2lkIHdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUoKTsKICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCZTY3JpcHRTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIFRlc3RPYmogd2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigpOwogICAg
IFtDYWxsV2l0aD0gIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgICYgIFNjcmlwdFN0YXRlICBdIFRl
c3RPYmogd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMo
KTsKLSAgICBbQ2FsbFdpdGg9U2NyaXB0QXJndW1lbnRzJkNhbGxTdGFja10gdm9pZCB3aXRoU2Ny
aXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKCk7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSB2b2lk
IHdpdGhEb2N1bWVudEFyZ3VtZW50KCk7CiAgICAgW0NhbGxXaXRoPUluY3VtYmVudERvY3VtZW50
XSB2b2lkIHdpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KCk7CiAgICAgW0NhbGxXaXRoPUluY3Vt
YmVudFdpbmRvd10gdm9pZCB3aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoKTsKQEAgLTIxOSw3ICsy
MTgsNiBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93CiAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmU2NyaXB0U3RhdGVdIGF0dHJpYnV0ZSBUZXN0
T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGU7CiAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmU2NyaXB0U3RhdGUsR2V0dGVyTWF5
VGhyb3dFeGNlcHRpb25dIGF0dHJpYnV0ZSBUZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXM7CiAgICAgW0NhbGxXaXRoPSAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCAgJiAgU2NyaXB0U3RhdGUgIF0gYXR0cmlidXRlIFRlc3RPYmogd2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGU7
Ci0gICAgW0NhbGxXaXRoPVNjcmlwdEFyZ3VtZW50cyZDYWxsU3RhY2tdIGF0dHJpYnV0ZSBUZXN0
T2JqIHdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGU7CiAKICAgICAvLyBP
cHRpb25hbCBwYXJhbWV0ZXJzLgogICAgIHZvaWQgICAgbWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9w
dGlvbmFsIGxvbmcgb3B0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjY1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgiCisKKyNpbmNsdWRl
ICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoUHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZEdldHRlckNhbGxX
aXRoUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IgPSBK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
PjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1
Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0
dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGg6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGgiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9u
dEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEdldHRlckNhbGxXaXRo
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUg
Zm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0
cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0
cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oc2V0SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKSB9IH0sCit9Owor
Citjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGhQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aFBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGhQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6c19pbmZvID0geyAiVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGgiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpIH07CisKK0pTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGg6OkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aD4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRo
PihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBK
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmNyZWF0ZVBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmds
b2JhbE9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkp
KTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnByb3RvdHlwZShW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoPih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRDb25zdHJ1Y3Rv
cihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3Rv
cj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsK
K30KKwordm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQoreworICAgIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4oY2VsbCk7CisgICAgdGhpc09i
amVjdC0+SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6fkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGgoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIHVzaW5nIEdldHRl
cklETFR5cGUgPSBJRExET01TdHJpbmc7CisgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1
dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBzdGQ6Om9wdGlvbmFsPHR5cGVu
YW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4geworICAgICAgICBhdXRvIHJl
c3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbSh3b3JsZEZvckRPTU9iamVjdCgm
dGhpc09iamVjdCksIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOwor
ICAgICAgICBpZiAoIUdldHRlcklETFR5cGU6OmlzTnVsbFZhbHVlKHJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsg
R2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVy
dHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0
YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAg
ICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFBy
b3BlcnR5LnZhbHVlKCkpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFk
T25seSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgdXNpbmcgR2V0dGVySURM
VHlwZSA9IElETERPTVN0cmluZzsKKyAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYg
dGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUg
R2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHdvcmxkRm9yRE9NT2JqZWN0KCZ0aGlz
T2JqZWN0KSwgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAg
ICAgIGlmICghR2V0dGVySURMVHlwZTo6aXNOdWxsVmFsdWUocmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0
ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH07CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9
IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUs
ICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1
dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVy
dHkudmFsdWUoKSkpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFJlYWRPbmx5
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3Qp
OworfQorCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CisgICAgZm9yIChhdXRv
JiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGhQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+
cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aE93bmVy
OjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4
dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gc3RhdGljX2Nhc3Q8
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAg
ICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsK
KyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgtPndy
YXBwZWQoKSwganNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCk7Cit9CisKKyNpZiBFTkFCTEUoQklO
RElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIo
Ij8/XzdUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aEBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxz
ZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aEVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihf
X2lkZW50aWZpZXIoIj8/XzdUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aEBXZWJDb3JlQEA2QkAiKSk7
CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3Jl
MjNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aEVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAg
Ly8gSWYgdGhpcyBmYWlscyBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCBkb2VzIG5vdCBoYXZlIGEg
dnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNr
c1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGlj
X2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRlc3ROYW1lZEdldHRlckNhbGxXaXRoKSwgIlRlc3RO
YW1lZEdldHRlckNhbGxXaXRoIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYK
KyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBh
ZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCBoYXMgc3Vi
Y2xhc3Nlcy4gSWYgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggaGFzIHN1YmNsYXNzZXMgdGhhdCBn
ZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3ROYW1l
ZEdldHRlckNhbGxXaXRoIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAg
Ly8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGlu
dGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBv
aW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVh
dGVXcmFwcGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPihnbG9iYWxPYmplY3QsIFdURk1vdmUo
aW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEdldHRlckNhbGxXaXRoJiBp
bXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQor
CitUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCogSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6dG9X
cmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8q
IHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4o
dm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGguaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aC5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggOiBwdWJsaWMgSlNET01XcmFw
cGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aD47CisgICAgc3RhdGljIEpTVGVz
dE5hbWVkR2V0dGVyQ2FsbFdpdGgqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGg+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
KHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90
b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3ROYW1l
ZEdldHRlckNhbGxXaXRoKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0g
SlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aChKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiYmKTsK
KworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aE93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYp
OworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBl
ck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3ROYW1lZEdldHRlckNhbGxXaXRoKikKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aE93bmVyPiBv
d25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBl
cktleShUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJl
dHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIGltcGwpIHsgcmV0
dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxs
KCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+JiYpOworaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZEdldHRlckNhbGxX
aXRoPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aD4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGg7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY1IEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmlu
Z3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF0
dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3Rv
dHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiKSkp
LCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1w
bGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHBy
b3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1
Y3RvciIsIERvbnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9IH0s
Cit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVz
KHZtLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZVRhYmxlVmFsdWVzLCAq
dGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
cjo6c19pbmZvID0geyAiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllcikgfTsKKworSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OkpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiYm
IGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Y3Jl
YXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU6OmNyZWF0
ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVj
dFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllcjo6fkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKCk7Cit9
CisKK2Jvb2wgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIHVzaW5nIEdldHRl
cklETFR5cGUgPSBJRExET01TdHJpbmc7CisgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1
dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBzdGQ6Om9wdGlvbmFsPHR5cGVu
YW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4geworICAgICAgICBhdXRvIHJl
c3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21p
Y1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFHZXR0ZXJJRExUeXBlOjppc051
bGxWYWx1ZShyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZShyZXN1bHQpIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfTsK
KyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8
T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
Z2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdCwgUmVhZE9ubHksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0
YXRlLCBpbmRleCk7CisgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKKyAg
ICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0
eU5hbWUpIC0+IHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPiB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCku
bmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAg
ICAgICBpZiAoIUdldHRlcklETFR5cGU6OmlzTnVsbFZhbHVlKHJlc3VsdCkpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0
dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkg
PSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRl
LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBh
dXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3Bl
cnR5LnZhbHVlKCkpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25s
eSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90
KTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcio+KG9iamVj
dCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CisgICAg
Zm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworRW5j
b2RlZEpTVmFsdWUganNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9v
bCBzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkp
IHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRl
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3Js
ZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hl
V3JhcHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLT53cmFwcGVkKCks
IGpzVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5H
X0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9f
N1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxz
ZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjdUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKQoreworCisjaWYg
RU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIg
PSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7CisjaWYgUExBVEZPUk0o
V0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckBXZWJD
b3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZf
WlRWTjdXZWJDb3JlMjdUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJFWzJdOworI2lmIENPTVBJ
TEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAv
LyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRl
ZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyKSwgIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciBpcyBub3QgcG9s
eW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2Vy
dGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8g
dG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciB5
b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUg
U2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmlu
aXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVk
VlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisK
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyJiBpbXBsKQorewor
ICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIqIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjp0b1dy
YXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byog
d3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
Kj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdl
dHRlck5vSWRlbnRpZmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllciA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiB7
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXI+OworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciog
Y3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKKyAgICB7
CisgICAgICAgIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKHN0cnVj
dHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
cHJvdGVjdGVkOgorICAgIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3Mg
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXIqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitp
bmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqIHdyYXBw
YWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxl
YXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4gewor
ICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOwor
ICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXIqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RP
cGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJp
bmdzLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRl
IDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlw
ZUZ1bmN0aW9uR2V0dGVyTmFtZShKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKKworY2xhc3MgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
ICAgIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUg
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1
bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
cjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcikgfTsK
KworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1
ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJnZXR0ZXJOYW1lIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0
ZXJOYW1lKSwgKGludHB0cl90KSAoMSkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnNfaW5mbyA9IHsgIlRl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
KSB9OworCitKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkK
KyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4oc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpjcmVh
dGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlOjpjcmVh
dGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9i
amVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNv
bnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sK
KyAgICBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOworICAgIHRoaXNP
YmplY3QtPkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6On5KU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyKCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3Rh
dGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKKyAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOworICAgIGF1
dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFt
ZSkgLT4gc3RkOjpvcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU+IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5nZXR0
ZXJOYW1lKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgICAg
ICBpZiAoIUdldHRlcklETFR5cGU6OmlzTnVsbFZhbHVlKHJlc3VsdCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVy
SURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBh
Y2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAq
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRv
IHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5
LnZhbHVlKCkpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSwg
dmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgdXNpbmcgR2V0
dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKKyAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAo
YXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IHN0ZDo6b3B0aW9uYWw8dHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkuZ2V0dGVyTmFtZShwcm9wZXJ0eU5hbWVUb0F0
b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFHZXR0ZXJJRExUeXBlOjpp
c051bGxWYWx1ZShyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklE
TFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZShyZXN1bHQpIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgUmVhZE9ubHksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFt
ZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCisgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3Bl
cnR5TmFtZSkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KHN0YXRlLnZt
KCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0ZXJOYW1lQm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKKyAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLmdldHRlck5hbWUoV1RGTW92ZShuYW1lKSkp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0ZXJOYW1lKEV4ZWNTdGF0ZSogc3RhdGUp
Cit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rp
b25HZXR0ZXJOYW1lQm9keT4oKnN0YXRlLCAiZ2V0dGVyTmFtZSIpOworfQorCitib29sIEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIq
PihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nh
c3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQs
ICZqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLT53cmFwcGVkKCksIGpzVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZ
KQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0
ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXJAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVy
biAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTI5VGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCit7CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4p
CisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJAV2ViQ29y
ZUBANkJAIikpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pU
Vk43V2ViQ29yZTI5VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJFWzJdOworI2lmIENPTVBJ
TEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXIgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAg
IC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2Ug
ZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllciksICJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciBpcyBu
b3QgcG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlz
IGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAg
Ly8gVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAor
ICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllciB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5
IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZh
Y2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVy
ID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3Jh
cHBlcjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsKK30KKworVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3Jh
cHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisv
KgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3JhcHBl
cjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4geworcHVibGljOgorICAgIHVzaW5nIEJh
c2UgPSBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OworICAgIHN0
YXRpYyBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+KGdsb2JhbE9iamVjdC0+dm0o
KS5oZWFwKSkgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcihzdHJ1Y3R1cmUsICpnbG9i
YWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKwor
ICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0ds
b2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJvdGVjdGVk
OgorICAgIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVP
d25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJPd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKwor
aW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqIHdy
YXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXImKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcio7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5
LDYgQEAKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CiAjaW5jbHVkZSA8YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdEFyZ3VtZW50cy5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tG
YWN0b3J5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9BcnJheVByb3RvdHlwZS5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5oPgpAQCAtMTA4NSw3ICsxMDgzLDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVy
RG9jdW1lbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0Fy
Z3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CkBAIC0xMzMwLDggKzEzMjcsNiBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwpAQCAtMTY0OSw3ICsxNjQ0LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZh
bHVlIEpTVGVzdE9ialBybwogICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSkgfSB9LAog
ICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcykgfSB9LAog
ICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZSkgfSB9LAotICAgIHsgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZSkgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIHsgImNv
bmRpdGlvbmFsQXR0cjEiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIxKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMSkgfSB9LAogI2Vsc2UKQEAgLTE3
NjIsNyArMTc1Niw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8K
ICAgICB7ICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGUpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIsIEpTQzo6RnVuY3Rpb24s
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgIndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzIiwgSlNDOjpGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVXaXRoU3BhY2VzKSwgKGludHB0cl90KSAoMCkgfSB9LAotICAgIHsgIndpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2siLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayksIChpbnRwdHJfdCkgKDApIH0g
fSwKICAgICB7ICJ3aXRoRG9jdW1lbnRBcmd1bWVudCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudCksIChpbnRwdHJfdCkgKDApIH0gfSwK
ICAgICB7ICJ3aXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudCksIChpbnRwdHJfdCkg
KDApIH0gfSwKICAgICB7ICJ3aXRoQ2FsbGVyV2luZG93QXJndW1lbnQiLCBKU0M6OkZ1bmN0aW9u
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50KSwgKGludHB0
cl90KSAoMCkgfSB9LApAQCAtNDA2OSwzNiArNDA2Miw2IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
LCBpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNr
QXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQotewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmpl
Y3QiLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIsICJUZXN0T2Jq
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IGltcGwuc2V0V2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgqbmF0aXZl
VmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUi
KTsKLX0KLQogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewpAQCAtNTgyMywyMSArNTc4
Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0JvZHk+
KCpzdGF0ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3Bh
Y2VzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tCb2R5KEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFJlZjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0
QXJndW1lbnRzKHN0YXRlLCAwKSk7Ci0gICAgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrKFdURk1vdmUoc2NyaXB0QXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2so
RXhlY1N0YXRlKiBzdGF0ZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQm9keT4oKnN0YXRlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayIpOwot
fQotCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDIxODkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDE0IEBAIHZvaWQgVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6ZGlkSW4KICAg
ICAgICAgdXNlck1lc3NhZ2VIYW5kbGVyLT5pbnZhbGlkYXRlRGVzY3JpcHRvcigpOwogfQogCi1V
c2VyTWVzc2FnZUhhbmRsZXIqIFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6OmhhbmRsZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQorVmVjdG9y
PEF0b21pY1N0cmluZz4gVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6c3VwcG9ydGVkUHJv
cGVydHlOYW1lcygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBzdXBw
b3J0IGZvciBpdGVyYXRpbmcgdGhlIHJlZ2lzdGVyZWQgVXNlck1lc3NhZ2VIYW5kbGVycy4gVGhp
cyB3b3VsZAorICAgIC8vIHJlcXVpcmUgYWRkaW5nIHN1cHBvcnQgZm9yIHBhc3NpbmcgdGhlIERP
TVdyYXBwZXJXb3JsZCB0byBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzLgorICAgIHJldHVybiB7IH07
Cit9CisKK1VzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6
bmFtZWRJdGVtKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNO
YW1lc3BhY2UuaAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSgp
OwogCi0gICAgVXNlck1lc3NhZ2VIYW5kbGVyKiBoYW5kbGVyKGNvbnN0IEF0b21pY1N0cmluZyYs
IERPTVdyYXBwZXJXb3JsZCYpOworICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMoKSBjb25zdDsKKyAgICBVc2VyTWVzc2FnZUhhbmRsZXIqIG5hbWVkSXRlbShE
T01XcmFwcGVyV29ybGQmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKEZyYW1lJiwgVXNlckNvbnRlbnRQ
cm92aWRlciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCShyZXZpc2lvbiAyMTg5MDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw2IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1VU0VSX01FU1NBR0VfSEFO
RExFUlMsCi0gICAgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKIF0gaW50
ZXJmYWNlIFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UgeworICAgIFtDYWxsV2l0aD1Xb3Js
ZF0gZ2V0dGVyIFVzZXJNZXNzYWdlSGFuZGxlciAoRE9NU3RyaW5nIG5hbWUpOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314101</attachid>
            <date>2017-06-28 20:23:20 -0700</date>
            <delta_ts>2017-06-29 16:13:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173956-20170628202432.patch</filename>
            <type>text/plain</type>
            <size>96865</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE3LTA2LTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYklETF0gUmVtb3ZlIGN1c3RvbSBi
aW5kaW5nIGZvciBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5NTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwOiBSZW1vdmVkLgor
ICAgICAgICBSZW1vdmUgSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcAor
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAg
IChHZW5lcmF0ZU5hbWVkR2V0dGVyTGFtYmRhKToKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNh
bGxpbmcgbmFtZWQgZ2V0dGVycyB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzIGZyb20gW0NhbGxX
aXRoXS4KKworICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbik6
CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW9uKToKKyAgICAg
ICAgKEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMpOgorICAgICAgICAoR2VuZXJhdGVD
YWxsV2l0aFVzaW5nUG9pbnRlcnMpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxX
aXRoVXNpbmdQb2ludGVycyk6CisgICAgICAgIChHZW5lcmF0ZUNhbGxXaXRoKToKKyAgICAgICAg
KEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgVXBkYXRlIGFyZ3VtZW50cyB0byBH
ZW5lcmF0ZUNhbGxXaXRoKFVzaW5nLi4uKSB0byBubyBsb25nZXIgcGFzcyBhbiBvcGVyYXRpb24s
CisgICAgICAgIHdoaWNoIHdhcyBvbmx5IG5lZWRlZCBmb3IgdGhlIG5vIGxvbmdlciB1c2VkIFNj
cmlwdEFyZ3VtZW50cywgcGFzcyBhIHRoaXNPYmplY3QKKyAgICAgICAgcmVmZXJlbmNlLCBhbmQg
b3B0aW9uYWxseSBwYXNzIGFuIGluZGVudGF0aW9uLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgIFJlbW92ZSBubyBsb25nZXIgdXNlZCBT
Y3JpcHRBcmd1bWVudHMgYW5kIENhbGxTdGFjaywgYWRkIFdvcmxkLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZVNldHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0JvZHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgIFJlbW92ZSB0ZXN0cyBvZiBT
Y3JpcHRBcmd1bWVudHMgYW5kIENhbGxTdGFjay4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcDogQWRkZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmlkbDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5pZGw6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllci5pZGw6IEFkZGVkLgorICAgICAgICBBZGQgYmFzaWMgbmFtZWQgZ2V0dGVyIHRl
c3RzIGFuZCBhIHNwZWNpZmljIHRlc3Qgb2YgbmFtZWQgZ2V0dGVycyB1c2luZyBDYWxsV2l0aC4K
KworICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2U6Om5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlOjpoYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL1VzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2UuaDoKKyAgICAgICAgUmVuYW1lIGhhbmRsZXIgdG8gbmFtZWRJdGVtLCBt
YXRjaGluZyBjb252ZW50aW9uIGFuZCB0aGUgZXhwZWN0YXRpb25zIG9mIHRoZQorICAgICAgICBi
aW5kaW5ncyBnZW5lcmF0b3IgYW5kIHN3YXAgdGhlIG9yZGVyIG9mIHRoZSBhcmd1bWVudHMgZm9y
IHRoZSBzYW1lIHJlYXNvbi4KKworICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZS5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmRE
ZXNjcmlwdG9yLCBhbmQgYWRkIHRoZSBhbm9ueW1vdXMgbmFtZWQgZ2V0dGVyLgorCiAyMDE3LTA2
LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNhZmFyaSdz
IFNwZWVkb21ldGVyIHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5
IGlzIGVuYWJsZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTg5MDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzUyNCw4
ICszNTI0LDYgQEAgaWYgKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMpCiAgICAgICAgIHBh
Z2UvV2ViS2l0TmFtZXNwYWNlLmlkbAogICAgICkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKLSAgICAgICAgYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNl
Q3VzdG9tLmNwcAotCiAgICAgICAgIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyLmNwcAogICAgICAg
ICBwYWdlL1VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuY3BwCiAgICAgICAgIHBhZ2UvVXNl
ck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxODkwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzIxNyw3ICszMjE3LDYgQEAKIAkJN0M3M0ZCMEQxOTFFRjVBODAwN0RFMDYx
IC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3M0ZCMEIxOTFFRjVBODAwN0RFMDYxIC8qIEpT
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oICovOyB9OwogCQk3QzczRkIxMTE5MUVGNkY0
MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3M0ZCMEYxOTFFRjZGNDAwN0RFMDYxIC8qIEpT
VXNlck1lc3NhZ2VIYW5kbGVyLmNwcCAqLzsgfTsKIAkJN0M3M0ZCMTIxOTFFRjZGNDAwN0RFMDYx
IC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzczRkIxMDE5MUVGNkY0MDA3REUwNjEgLyogSlNVc2VyTWVzc2Fn
ZUhhbmRsZXIuaCAqLzsgfTsKLQkJN0M3M0ZCMTkxOTFFRjgwODAwN0RFMDYxIC8qIEpTVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJN0M3N0MzRDExREVF
NDcyNDAwQTUwQkZBIC8qIEJsb2JQcm9wZXJ0eUJhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3N0MzRDAxREVFNDcyNDAwQTUwQkZBIC8qIEJsb2JQ
cm9wZXJ0eUJhZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdDNzdDM0Q0MURFRjE3OEUwMEE1MEJGQSAvKiBKU0Jsb2JQcm9wZXJ0eUJhZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzc3QzNEMjFE
RUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcuY3BwICovOyB9OwogCQk3Qzc3QzNE
NTFERUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzdDM0QzMURFRjE3OEUwMEE1MEJGQSAv
KiBKU0Jsb2JQcm9wZXJ0eUJhZy5oICovOyB9OwpAQCAtMTEzMjcsNyArMTEzMjYsNiBAQAogCQk3
QzczRkIwRTE5MUVGNjBFMDA3REUwNjEgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBV
c2VyTWVzc2FnZUhhbmRsZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzcz
RkIwRjE5MUVGNkY0MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzczRkIxMDE5MUVGNkY0MDA3REUwNjEgLyog
SlNVc2VyTWVzc2FnZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNVc2VyTWVzc2FnZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M3
M0ZCMTcxOTFFRjgwODAwN0RFMDYxIC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Qzc3QzNDRjFERUU0NzE4MDBBNTBCRkEgLyogQmxvYlByb3BlcnR5QmFnLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBCbG9iUHJvcGVydHlCYWcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzc3
QzNEMDFERUU0NzI0MDBBNTBCRkEgLyogQmxvYlByb3BlcnR5QmFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JQcm9wZXJ0eUJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Qzc3QzNEMjFERUYxNzhFMDBBNTBCRkEgLyogSlNCbG9iUHJvcGVydHlCYWcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCbG9iUHJvcGVydHlC
YWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM3MzEsNyArMjM3MjksNiBA
QAogCQkJCTUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0b3JhZ2VDdXN0b20uY3BwICov
LAogCQkJCTU3QTlDODhEMURBNzBCRjgwMEJDNzMwNSAvKiBKU1N1YnRsZUNyeXB0b0N1c3RvbS5j
cHAgKi8sCiAJCQkJMDdFMTE2QjAxNDg5QzlBMTAwRUM1QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9t
LmNwcCAqLywKLQkJCQk3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwODE3MUNBMkM1MDBERDUy
QjggLyogSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCAqLywKIAkJCQlEM0YzRDM1OTFBNjlBM0IwMDA1
OUZDMkIgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQk0OUVF
RDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
ICovLApAQCAtMzI1NjAsNyArMzI1NTcsNiBAQAogCQkJCTVDNTM4MUI1MUQ4N0UwODcwMEUyRUJF
NiAvKiBKU1VSTFNlYXJjaFBhcmFtcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzczRkIxMTE5
MUVGNkY0MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M3M0ZCMEMxOTFFRjVBODAwN0RFMDYxIC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QzczRkIxOTE5MUVGODA4MDA3REUwNjEg
LyogSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE1Qzc3MDk0MTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQ0RFODNEQjYxODNEMzUyQTAwMzFFQUEzIC8qIEpTVmlkZW9QbGF5
YmFja1F1YWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU4RUYwNEExNzFDOTAxNDAwOUI0
OEMzIC8qIEpTVmlkZW9UcmFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ3VzdG9tLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSlNVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmgiCi0K
LSNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotCi0jaW5jbHVkZSAiSlNET01Db252
ZXJ0SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgotI2luY2x1
ZGUgIkpTVXNlck1lc3NhZ2VIYW5kbGVyLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9v
bCBKU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6OmdldE93blByb3BlcnR5U2xvdERlbGVn
YXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQotewotICAgIGlmIChhdXRvKiBoYW5kbGVyID0gd3JhcHBlZCgpLmhhbmRsZXIo
cHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSwgZ2xvYmFsT2JqZWN0KCkt
PndvcmxkKCkpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgUmVhZE9ubHkgfCBEb250
RGVsZXRlIHwgRG9udEVudW0sIHRvSlM8SURMSW50ZXJmYWNlPFVzZXJNZXNzYWdlSGFuZGxlcj4+
KCpleGVjLCAqZ2xvYmFsT2JqZWN0KCksICpoYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShV
U0VSX01FU1NBR0VfSEFORExFUlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjE4OTA1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTU5Niw5ICs1OTYsMTMgQEAgc3ViIEdlbmVyYXRlTmFtZWRHZXR0ZXJMYW1iZGEK
ICAgICBteSAkcmVzdWx0VHlwZSA9ICJ0eXBlbmFtZSAke0lETFR5cGV9OjpJbXBsZW1lbnRhdGlv
blR5cGUiOwogICAgICRyZXN1bHRUeXBlID0gIkV4Y2VwdGlvbk9yPCIgLiAkcmVzdWx0VHlwZSAu
ICI+IiBpZiAkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e01heVRo
cm93RXhjZXB0aW9ufTsKICAgICBteSAkcmV0dXJuVHlwZSA9ICJzdGQ6Om9wdGlvbmFsPCIgLiAk
cmVzdWx0VHlwZSAuICI+IjsKLSAgICAKKwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBh
dXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5h
bWUpIC0+ICR7cmV0dXJuVHlwZX0ge1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICBhdXRvIHJlc3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLiR7bmFtZWRHZXR0ZXJGdW5j
dGlvbk5hbWV9KHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpO1xuIik7
CisKKyAgICBteSBAYXJncyA9IEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMoJG5hbWVk
R2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sICRvdXRwdXRB
cnJheSwgInN0ZDo6bnVsbG9wdCIsICJ0aGlzT2JqZWN0IiwgIiAgICAgICAgIik7CisgICAgcHVz
aChAYXJncywgInByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkiKTsKKwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKS4ke25hbWVkR2V0dGVyRnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJn
cykgLiAiKTtcbiIpOwogICAgIAogICAgIGlmICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e01heVRocm93RXhjZXB0aW9ufSkgewogICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpXG4iKTsKQEAgLTQ2
ODQsNyArNDY4OCw3IEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUdldHRlckJvZHlEZWZpbml0aW8K
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIGNhY2hlZFZh
bHVlO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG15IEBjYWxsV2l0aEFyZ3Mg
PSBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0NhbGxXaXRofSwgJG91dHB1dEFycmF5LCAianNVbmRlZmluZWQoKSIpOworICAg
ICAgICBteSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVDYWxsV2l0aFVzaW5nUmVmZXJlbmNlcygk
YXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sICRvdXRwdXRBcnJheSwg
ImpzVW5kZWZpbmVkKCkiLCAidGhpc09iamVjdCIpOwogICAgICAgICAKICAgICAgICAgbXkgKCRi
YXNlRnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHBy
ZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5uYW1lLCAkYXR0cmlidXRl
KTsKICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bGx5UXVhbGlmaWVkSW1wbGVtZW50
YXRpb25DYWxsTmFtZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLCAkYmFzZUZ1bmN0aW9uTmFtZSwg
ImltcGwiLCAkY29uZGl0aW9uYWwpOwpAQCAtNDg5Miw4ICs0ODk2LDggQEAgc3ViIEdlbmVyYXRl
QXR0cmlidXRlU2V0dGVyQm9keURlZmluaXRpbwogICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0g
R2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOYW1lKCRpbnRlcmZhY2UsICRhdHRy
aWJ1dGUsICRiYXNlRnVuY3Rpb25OYW1lLCAiaW1wbCIsICRjb25kaXRpb25hbCk7CiAgICAgICAg
IEFkZEFkZGl0aW9uYWxBcmd1bWVudHNGb3JJbXBsZW1lbnRhdGlvbkNhbGwoXEBhcmd1bWVudHMs
ICRpbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJpbXBsIiwgInN0YXRlIiwgInRoaXNPYmplY3QiKTsK
IAotICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVy
ZW5jZXMoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57U2V0dGVyQ2FsbFdpdGh9LCAk
b3V0cHV0QXJyYXksICJmYWxzZSIpKTsKLSAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5l
cmF0ZUNhbGxXaXRoVXNpbmdSZWZlcmVuY2VzKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NhbGxXaXRofSwgJG91dHB1dEFycmF5LCAiZmFsc2UiKSk7CisgICAgICAgIHVuc2hpZnQo
QGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aFVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntTZXR0ZXJDYWxsV2l0aH0sICRvdXRwdXRBcnJheSwgImZhbHNl
IiwgInRoaXNPYmplY3QiKSk7CisgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgR2VuZXJhdGVD
YWxsV2l0aFVzaW5nUmVmZXJlbmNlcygkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
YWxsV2l0aH0sICRvdXRwdXRBcnJheSwgImZhbHNlIiwgInRoaXNPYmplY3QiKSk7CiAKICAgICAg
ICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBA
YXJndW1lbnRzKSAuICIpIjsKICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgJGZ1bmN0aW9uU3RyaW5nKSIgaWYgJGF0dHJpYnV0
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57U2V0dGVyTWF5VGhyb3dFeGNlcHRpb259OwpAQCAtNTMx
MywzMCArNTMxNywzMCBAQCBzdWIgR2VuZXJhdGVMZWdhY3lDYWxsZXJEZWZpbml0aW9uCiAKIHN1
YiBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdSZWZlcmVuY2VzCiB7Ci0gICAgbXkgKCRjYWxsV2l0aCwg
JG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICRvcGVyYXRpb24pID0gQF87CisgICAgbXkgKCRj
YWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICR0aGlzUmVmZXJlbmNlLCAkaW5k
ZW50KSA9IEBfOwogCiAgICAgbXkgJHN0YXRlUG9pbnRlciA9ICImc3RhdGUiOwogICAgIG15ICRz
dGF0ZVJlZmVyZW5jZSA9ICJzdGF0ZSI7CiAgICAgbXkgJGdsb2JhbE9iamVjdCA9ICJqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpIjsKIAotICAg
IHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJu
VmFsdWUsICRyZXR1cm5WYWx1ZSwgJG9wZXJhdGlvbiwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVm
ZXJlbmNlLCAkZ2xvYmFsT2JqZWN0LCAkZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gR2VuZXJh
dGVDYWxsV2l0aCgkY2FsbFdpdGgsICRvdXRwdXRBcnJheSwgJHJldHVyblZhbHVlLCAkcmV0dXJu
VmFsdWUsICRzdGF0ZVBvaW50ZXIsICRzdGF0ZVJlZmVyZW5jZSwgJGdsb2JhbE9iamVjdCwgJGds
b2JhbE9iamVjdCwgJHRoaXNSZWZlcmVuY2UsICRpbmRlbnQpOwogfQogCiAjIEZJWE1FOiBXZSBz
aG91bGQgcmVtb3ZlIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzIGFuZCBjb21iaW5lIEdl
bmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMgYW5kIEdlbmVyYXRlQ2FsbFdpdGgKIHN1YiBH
ZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVycwogewotICAgIG15ICgkY2FsbFdpdGgsICRvdXRw
dXRBcnJheSwgJHJldHVyblZhbHVlLCAkb3BlcmF0aW9uKSA9IEBfOworICAgIG15ICgkY2FsbFdp
dGgsICRvdXRwdXRBcnJheSwgJHJldHVyblZhbHVlLCAkdGhpc1JlZmVyZW5jZSwgJGluZGVudCkg
PSBAXzsKIAogICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAic3RhdGUiOwogICAgIG15ICRzdGF0ZVJl
ZmVyZW5jZSA9ICIqc3RhdGUiOwogICAgIG15ICRnbG9iYWxPYmplY3QgPSAianNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkiOwogCi0gICAgcmV0
dXJuIEdlbmVyYXRlQ2FsbFdpdGgoJGNhbGxXaXRoLCAkb3V0cHV0QXJyYXksICRyZXR1cm5WYWx1
ZSwgJHJldHVyblZhbHVlLCAkb3BlcmF0aW9uLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZlcmVu
Y2UsICRnbG9iYWxPYmplY3QsICRnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBHZW5lcmF0ZUNh
bGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICRyZXR1cm5WYWx1
ZSwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVmZXJlbmNlLCAkZ2xvYmFsT2JqZWN0LCAkZ2xvYmFs
T2JqZWN0LCAkdGhpc1JlZmVyZW5jZSwgJGluZGVudCk7CiB9CiAKIHN1YiBHZW5lcmF0ZUNvbnN0
cnVjdG9yQ2FsbFdpdGhVc2luZ1BvaW50ZXJzCiB7Ci0gICAgbXkgKCRjYWxsV2l0aCwgJG91dHB1
dEFycmF5LCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICRvcGVyYXRpb24pID0gQF87CisgICAgbXkg
KCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICR0aGlzUmVm
ZXJlbmNlLCAkaW5kZW50KSA9IEBfOwogCiAgICAgbXkgJHN0YXRlUG9pbnRlciA9ICJzdGF0ZSI7
CiAgICAgbXkgJHN0YXRlUmVmZXJlbmNlID0gIipzdGF0ZSI7CkBAIC01MzQ0LDUwICs1MzQ4LDQ2
IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbFdpdGhVc2luZ1BvaW4KICAgICBteSAkY29u
dGV4dE1pc3NpbmcgPSAidGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2
YWlsYWJsZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgXCIke3Zpc2libGVJbnRlcmZhY2VOYW1l
fVwiKSI7CiAgICAgbXkgJHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBY2Nlc3NvciA9ICJjYXN0ZWRU
aGlzIjsKIAotICAgIHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFy
cmF5LCAiIiwgJGNvbnRleHRNaXNzaW5nLCAkb3BlcmF0aW9uLCAkc3RhdGVQb2ludGVyLCAkc3Rh
dGVSZWZlcmVuY2UsICRnbG9iYWxPYmplY3QsICRzY3JpcHRFeGVjdXRpb25Db250ZXh0QWNjZXNz
b3IpOworICAgIHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5
LCAiIiwgJGNvbnRleHRNaXNzaW5nLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZlcmVuY2UsICRn
bG9iYWxPYmplY3QsICRzY3JpcHRFeGVjdXRpb25Db250ZXh0QWNjZXNzb3IsICR0aGlzUmVmZXJl
bmNlLCAkaW5kZW50KTsKIH0KIAogc3ViIEdlbmVyYXRlQ2FsbFdpdGgKIHsKLSAgICBteSAoJGNh
bGxXaXRoLCAkb3V0cHV0QXJyYXksICRyZXR1cm5WYWx1ZSwgJGNvbnRleHRNaXNzaW5nLCAkb3Bl
cmF0aW9uLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZlcmVuY2UsICRnbG9iYWxPYmplY3QsICRz
Y3JpcHRFeGVjdXRpb25Db250ZXh0QWNjZXNzb3IpID0gQF87CisgICAgbXkgKCRjYWxsV2l0aCwg
JG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICRjb250ZXh0TWlzc2luZywgJHN0YXRlUG9pbnRl
ciwgJHN0YXRlUmVmZXJlbmNlLCAkZ2xvYmFsT2JqZWN0LCAkc2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFjY2Vzc29yLCAkdGhpc1JlZmVyZW5jZSwgJGluZGVudCkgPSBAXzsKIAogICAgIHJldHVybiAo
KSB1bmxlc3MgJGNhbGxXaXRoOwogCisgICAgJGluZGVudCB8fD0gIiAgICAiOworCiAgICAgbXkg
QGNhbGxXaXRoQXJnczsKICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICRzdGF0ZVJlZmVyZW5jZSkg
aWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAi
U2NyaXB0U3RhdGUiKTsKICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICIqJHtnbG9iYWxPYmplY3R9
IikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRo
LCAiR2xvYmFsT2JqZWN0Iik7CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJp
YnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSkgewotICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogY29udGV4dCA9ICR7c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFjY2Vzc29yfS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7Ci0g
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKVxu
Iik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAuICgkY29u
dGV4dE1pc3NpbmcgPyAiICIgLiAkY29udGV4dE1pc3NpbmcgOiAiIikgLiAiO1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvKiBjb250ZXh0ID0gJHtzY3Jp
cHRFeGVjdXRpb25Db250ZXh0QWNjZXNzb3J9LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImlmIChVTkxJS0VMWSgh
Y29udGV4dCkpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAg
ICByZXR1cm4iIC4gKCRjb250ZXh0TWlzc2luZyA/ICIgIiAuICRjb250ZXh0TWlzc2luZyA6ICIi
KSAuICI7XG4iKTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKmNvbnRleHQiKTsKICAg
ICB9CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRj
YWxsV2l0aCwgIkRvY3VtZW50IikpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRvY3Vt
ZW50LmgiKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNvbnRleHQg
PSAke3NjcmlwdEV4ZWN1dGlvbkNvbnRleHRBY2Nlc3Nvcn0tPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZ
KCFjb250ZXh0KSlcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJl
dHVybiIgLiAoJGNvbnRleHRNaXNzaW5nID8gIiAiIC4gJGNvbnRleHRNaXNzaW5nIDogIiIpIC4g
IjtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSk7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byogY29udGV4dCA9ICR7c2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFjY2Vzc29yfS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkoIWNv
bnRleHQpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICIgICAg
cmV0dXJuIiAuICgkY29udGV4dE1pc3NpbmcgPyAiICIgLiAkY29udGV4dE1pc3NpbmcgOiAiIikg
LiAiO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJBU1NFUlQo
Y29udGV4dC0+aXNEb2N1bWVudCgpKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICRpbmRlbnQgLiAiYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
O1xuIik7CiAgICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgImRvY3VtZW50Iik7CiAgICAgfQog
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdp
dGgsICJJbmN1bWJlbnREb2N1bWVudCIpKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJK
U0RPTVdpbmRvd0Jhc2UuaCIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byogaW5jdW1iZW50RG9jdW1lbnQgPSBpbmN1bWJlbnRET01XaW5kb3coJHN0YXRlUmVmZXJlbmNl
KS5kb2N1bWVudCgpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAo
IWluY3VtYmVudERvY3VtZW50KVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIiAuICgkcmV0dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikg
LiAiO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvKiBp
bmN1bWJlbnREb2N1bWVudCA9IGluY3VtYmVudERPTVdpbmRvdygkc3RhdGVSZWZlcmVuY2UpLmRv
Y3VtZW50KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImlm
ICghaW5jdW1iZW50RG9jdW1lbnQpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAk
aW5kZW50IC4gIiAgICByZXR1cm4iIC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5WYWx1
ZSA6ICIiKSAuICI7XG4iKTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKmluY3VtYmVu
dERvY3VtZW50Iik7CiAgICAgfQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRy
aWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJSZXNwb25zaWJsZURvY3VtZW50IikpIHsKICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NV2luZG93QmFzZS5oIik7CiAgICAgICAgIHB1c2go
QGNhbGxXaXRoQXJncywgInJlc3BvbnNpYmxlRG9jdW1lbnQoJHN0YXRlUmVmZXJlbmNlKSIpOwog
ICAgIH0KLSAgICBpZiAoJG9wZXJhdGlvbiBhbmQgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0
cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0QXJndW1lbnRzIikpIHsKLSAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIjxpbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmg+Iik7Ci0gICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
aD4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJn
dW1lbnRzKCRzdGF0ZVBvaW50ZXIsICIgLiBAeyRvcGVyYXRpb24tPmFyZ3VtZW50c30gLiAiKSk7
XG4iKTsKLSAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiV1RGTW92ZShzY3JpcHRBcmd1bWVu
dHMpIik7Ci0gICAgfQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVD
b250YWlucygkY2FsbFdpdGgsICJBY3RpdmVXaW5kb3ciKSkgewogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNET01XaW5kb3dCYXNlLmgiKTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdz
LCAiYWN0aXZlRE9NV2luZG93KCRzdGF0ZVJlZmVyZW5jZSkiKTsKQEAgLTU0MDMsNiArNTQwMyw5
IEBAIHN1YiBHZW5lcmF0ZUNhbGxXaXRoCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRl
ZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlJ1bnRpbWVGbGFncyIpKSB7CiAgICAgICAg
IHB1c2goQGNhbGxXaXRoQXJncywgIiR7Z2xvYmFsT2JqZWN0fS0+cnVudGltZUZsYWdzKCkiKTsK
ICAgICB9CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5z
KCRjYWxsV2l0aCwgIldvcmxkIikpIHsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAid29y
bGRGb3JET01PYmplY3QoJiR7dGhpc1JlZmVyZW5jZX0pIik7CisgICAgfQogCiAgICAgcmV0dXJu
IEBjYWxsV2l0aEFyZ3M7CiB9CkBAIC01NDk4LDEwICs1NTAxLDEwIEBAIHN1YiBHZW5lcmF0ZVBh
cmFtZXRlcnNDaGVjawogICAgIGlmICghJGlzQ29uc3RydWN0b3IpIHsKICAgICAgICAgbXkgJG5h
bWUgPSAkb3BlcmF0aW9uLT5uYW1lOwogICAgICAgICAkcXVvdGVkRnVuY3Rpb25OYW1lID0gIlwi
JG5hbWVcIiI7Ci0gICAgICAgIHB1c2goQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aFVzaW5n
UG9pbnRlcnMoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbFdpdGh9LCBcQCRv
dXRwdXRBcnJheSwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIsICRvcGVyYXRpb24p
KTsKKyAgICAgICAgcHVzaChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQb2ludGVy
cygkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsV2l0aH0sIFxAJG91dHB1dEFy
cmF5LCAiSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIiwgIipjYXN0ZWRUaGlzIikpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgICRxdW90ZWRGdW5jdGlvbk5hbWUgPSAibnVsbHB0ciI7Ci0g
ICAgICAgIHB1c2goQGFyZ3VtZW50cywgR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxXaXRoVXNpbmdQ
b2ludGVycygkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25zdHJ1Y3RvckNhbGxX
aXRofSwgXEAkb3V0cHV0QXJyYXksICR2aXNpYmxlSW50ZXJmYWNlTmFtZSwgJG9wZXJhdGlvbikp
OworICAgICAgICBwdXNoKEBhcmd1bWVudHMsIEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsV2l0aFVz
aW5nUG9pbnRlcnMoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uc3RydWN0b3JD
YWxsV2l0aH0sIFxAJG91dHB1dEFycmF5LCAkdmlzaWJsZUludGVyZmFjZU5hbWUsICIqY2FzdGVk
VGhpcyIpKTsKICAgICB9CiAKICAgICBteSAkYXJndW1lbnRJbmRleCA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgko
cmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAg
fSwKICAgICAgICAgIkNhbGxXaXRoIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6
IFsiYXR0cmlidXRlIiwgIm9wZXJhdGlvbiJdLAotICAgICAgICAgICAgInZhbHVlcyI6IFsiRG9j
dW1lbnQiLCAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIsICJTY3JpcHRTdGF0ZSIsICJTY3JpcHRB
cmd1bWVudHMiLCAiQ2FsbFN0YWNrIiwgIkdsb2JhbE9iamVjdCIsICJBY3RpdmVXaW5kb3ciLCAi
Rmlyc3RXaW5kb3ciLCAiUmVzcG9uc2libGVEb2N1bWVudCJdCisgICAgICAgICAgICAidmFsdWVz
IjogWyJEb2N1bWVudCIsICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IiwgIlNjcmlwdFN0YXRlIiwg
Ikdsb2JhbE9iamVjdCIsICJBY3RpdmVXaW5kb3ciLCAiRmlyc3RXaW5kb3ciLCAiUmVzcG9uc2li
bGVEb2N1bWVudCIsICJXb3JsZCJdCiAgICAgICAgIH0sCiAgICAgICAgICJDaGVja1NlY3VyaXR5
IjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KQEAgLTM5
Nyw3ICszOTcsNyBAQAogICAgICAgICB9LAogICAgICAgICAiU2V0dGVyQ2FsbFdpdGgiOiB7CiAg
ICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJhdHRyaWJ1dGUiXSwKLSAgICAgICAgICAg
ICJ2YWx1ZXMiOiBbIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiLCAiU2NyaXB0U3RhdGUiLCAiU2Ny
aXB0QXJndW1lbnRzIiwgIkNhbGxTdGFjayIsICJHbG9iYWxPYmplY3QiLCAiQWN0aXZlV2luZG93
IiwgIkZpcnN0V2luZG93Il0KKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQiLCAiU2NyaXB0U3RhdGUiLCAiR2xvYmFsT2JqZWN0IiwgIkFjdGl2ZVdpbmRvdyIs
ICJGaXJzdFdpbmRvdyJdCiAgICAgICAgIH0sCiAgICAgICAgICJTZXR0ZXJNYXlUaHJvd0V4Y2Vw
dGlvbiI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImF0dHJpYnV0ZSJdCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGguaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW50ZXJm
YWNlIFRlc3ROYW1lZEdldHRlckNhbGxXaXRoIHsKKyAgICBbQ2FsbFdpdGg9V29ybGRdIGdldHRl
ciBET01TdHJpbmcgKERPTVN0cmluZyBuYW1lKTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW50ZXJmYWNlIFRlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllciB7CisgICAgZ2V0dGVyIERPTVN0cmluZyAoRE9NU3RyaW5n
IG5hbWUpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZhY2UgVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXIgeworICAgIGdldHRlciBET01TdHJpbmcgZ2V0dGVyTmFtZShET01TdHJpbmcgbmFt
ZSk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
YmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2
LDYgQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdwogICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0JlNjcmlwdFN0YXRlXSB2b2lkIHdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUoKTsKICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCZTY3JpcHRTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIFRlc3RPYmogd2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigpOwogICAg
IFtDYWxsV2l0aD0gIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgICYgIFNjcmlwdFN0YXRlICBdIFRl
c3RPYmogd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMo
KTsKLSAgICBbQ2FsbFdpdGg9U2NyaXB0QXJndW1lbnRzJkNhbGxTdGFja10gdm9pZCB3aXRoU2Ny
aXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKCk7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSB2b2lk
IHdpdGhEb2N1bWVudEFyZ3VtZW50KCk7CiAgICAgW0NhbGxXaXRoPUluY3VtYmVudERvY3VtZW50
XSB2b2lkIHdpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KCk7CiAgICAgW0NhbGxXaXRoPUluY3Vt
YmVudFdpbmRvd10gdm9pZCB3aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoKTsKQEAgLTIxOSw3ICsy
MTgsNiBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93CiAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmU2NyaXB0U3RhdGVdIGF0dHJpYnV0ZSBUZXN0
T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGU7CiAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmU2NyaXB0U3RhdGUsR2V0dGVyTWF5
VGhyb3dFeGNlcHRpb25dIGF0dHJpYnV0ZSBUZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXM7CiAgICAgW0NhbGxXaXRoPSAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCAgJiAgU2NyaXB0U3RhdGUgIF0gYXR0cmlidXRlIFRlc3RPYmogd2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGU7
Ci0gICAgW0NhbGxXaXRoPVNjcmlwdEFyZ3VtZW50cyZDYWxsU3RhY2tdIGF0dHJpYnV0ZSBUZXN0
T2JqIHdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGU7CiAKICAgICAvLyBP
cHRpb25hbCBwYXJhbWV0ZXJzLgogICAgIHZvaWQgICAgbWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9w
dGlvbmFsIGxvbmcgb3B0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjY1IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgiCisKKyNpbmNsdWRl
ICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQcm90b3R5
cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoUHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZEdldHRlckNhbGxX
aXRoUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0
cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IgPSBK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
PjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1
Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0
dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGg6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGgiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9u
dEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEdldHRlckNhbGxXaXRo
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUg
Zm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0
cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0
cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oc2V0SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKSB9IH0sCit9Owor
Citjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGhQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aFBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGhQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6c19pbmZvID0geyAiVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGgiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpIH07CisKK0pTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGg6OkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aD4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRo
PihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBK
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmNyZWF0ZVBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmds
b2JhbE9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkp
KTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnByb3RvdHlwZShW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoPih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRDb25zdHJ1Y3Rv
cihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3Rv
cj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsK
K30KKwordm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQoreworICAgIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4oY2VsbCk7CisgICAgdGhpc09i
amVjdC0+SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6fkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGgoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIHVzaW5nIEdldHRl
cklETFR5cGUgPSBJRExET01TdHJpbmc7CisgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1
dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBzdGQ6Om9wdGlvbmFsPHR5cGVu
YW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4geworICAgICAgICBhdXRvIHJl
c3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbSh3b3JsZEZvckRPTU9iamVjdCgm
dGhpc09iamVjdCksIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOwor
ICAgICAgICBpZiAoIUdldHRlcklETFR5cGU6OmlzTnVsbFZhbHVlKHJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsg
R2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVy
dHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0
YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAg
ICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFBy
b3BlcnR5LnZhbHVlKCkpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFk
T25seSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgdXNpbmcgR2V0dGVySURM
VHlwZSA9IElETERPTVN0cmluZzsKKyAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYg
dGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUg
R2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gdGhpc09iamVjdC53cmFwcGVkKCkubmFtZWRJdGVtKHdvcmxkRm9yRE9NT2JqZWN0KCZ0aGlz
T2JqZWN0KSwgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAg
ICAgIGlmICghR2V0dGVySURMVHlwZTo6aXNOdWxsVmFsdWUocmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0
ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH07CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9
IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUs
ICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1
dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVy
dHkudmFsdWUoKSkpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFJlYWRPbmx5
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3Qp
OworfQorCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CisgICAgZm9yIChhdXRv
JiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGhQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+
cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aE93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aE93bmVy
OjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4
dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gc3RhdGljX2Nhc3Q8
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAg
ICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsK
KyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgtPndy
YXBwZWQoKSwganNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCk7Cit9CisKKyNpZiBFTkFCTEUoQklO
RElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIo
Ij8/XzdUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aEBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxz
ZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aEVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihf
X2lkZW50aWZpZXIoIj8/XzdUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aEBXZWJDb3JlQEA2QkAiKSk7
CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3Jl
MjNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aEVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAg
Ly8gSWYgdGhpcyBmYWlscyBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCBkb2VzIG5vdCBoYXZlIGEg
dnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNr
c1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGlj
X2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRlc3ROYW1lZEdldHRlckNhbGxXaXRoKSwgIlRlc3RO
YW1lZEdldHRlckNhbGxXaXRoIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYK
KyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBh
ZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCBoYXMgc3Vi
Y2xhc3Nlcy4gSWYgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggaGFzIHN1YmNsYXNzZXMgdGhhdCBn
ZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3ROYW1l
ZEdldHRlckNhbGxXaXRoIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAg
Ly8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGlu
dGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBv
aW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVh
dGVXcmFwcGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPihnbG9iYWxPYmplY3QsIFdURk1vdmUo
aW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEdldHRlckNhbGxXaXRoJiBp
bXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQor
CitUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCogSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6dG9X
cmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8q
IHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4o
dm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGguaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aC5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggOiBwdWJsaWMgSlNET01XcmFw
cGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aD47CisgICAgc3RhdGljIEpTVGVz
dE5hbWVkR2V0dGVyQ2FsbFdpdGgqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGg+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
KHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsK
KyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90
b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3ROYW1l
ZEdldHRlckNhbGxXaXRoKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0g
SlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aChKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiYmKTsK
KworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aE93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYp
OworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBl
ck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3ROYW1lZEdldHRlckNhbGxXaXRoKikKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aE93bmVyPiBv
d25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBl
cktleShUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJl
dHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIGltcGwpIHsgcmV0
dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxs
KCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+JiYpOworaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZEdldHRlckNhbGxX
aXRoPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aD4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGg7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY1IEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmlu
Z3MuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF0
dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
UHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmlu
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3Rv
dHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiKSkp
LCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1w
bGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHBy
b3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1
Y3RvciIsIERvbnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9IH0s
Cit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVz
KHZtLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZVRhYmxlVmFsdWVzLCAq
dGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
cjo6c19pbmZvID0geyAiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllcikgfTsKKworSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OkpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiYm
IGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPihz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Y3Jl
YXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU6OmNyZWF0
ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVj
dFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllcjo6fkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKCk7Cit9
CisKK2Jvb2wgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIHVzaW5nIEdldHRl
cklETFR5cGUgPSBJRExET01TdHJpbmc7CisgICAgYXV0byBnZXR0ZXJGdW5jdG9yID0gW10gKGF1
dG8mIHRoaXNPYmplY3QsIGF1dG8gcHJvcGVydHlOYW1lKSAtPiBzdGQ6Om9wdGlvbmFsPHR5cGVu
YW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4geworICAgICAgICBhdXRvIHJl
c3VsdCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21p
Y1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFHZXR0ZXJJRExUeXBlOjppc051
bGxWYWx1ZShyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZShyZXN1bHQpIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfTsK
KyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8
T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
Z2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdCwgUmVhZE9ubHksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0
YXRlLCBpbmRleCk7CisgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKKyAg
ICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0
eU5hbWUpIC0+IHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPiB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCku
bmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAg
ICAgICBpZiAoIUdldHRlcklETFR5cGU6OmlzTnVsbFZhbHVlKHJlc3VsdCkpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0
dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkg
PSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRl
LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBh
dXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3Bl
cnR5LnZhbHVlKCkpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25s
eSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90
KTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcio+KG9iamVj
dCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CisgICAg
Zm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworRW5j
b2RlZEpTVmFsdWUganNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9v
bCBzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkp
IHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRl
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3Js
ZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hl
V3JhcHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLT53cmFwcGVkKCks
IGpzVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5H
X0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9f
N1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxz
ZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjdUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKQoreworCisjaWYg
RU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIg
PSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7CisjaWYgUExBVEZPUk0o
V0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckBXZWJD
b3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZf
WlRWTjdXZWJDb3JlMjdUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJFWzJdOworI2lmIENPTVBJ
TEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAv
LyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRl
ZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyKSwgIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciBpcyBub3QgcG9s
eW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2Vy
dGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8g
dG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciB5
b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUg
U2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmlu
aXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVk
VlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisK
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyJiBpbXBsKQorewor
ICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIqIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjp0b1dy
YXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byog
d3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
Kj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdl
dHRlck5vSWRlbnRpZmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllciA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiB7
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXI+OworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciog
Y3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKKyAgICB7
CisgICAgICAgIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKHN0cnVj
dHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
cHJvdGVjdGVkOgorICAgIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3Mg
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXIqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitp
bmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqIHdyYXBw
YWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxl
YXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4gewor
ICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOwor
ICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXIqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RP
cGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJp
bmdzLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRl
IDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlw
ZUZ1bmN0aW9uR2V0dGVyTmFtZShKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKKworY2xhc3MgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAg
ICAgIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUg
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1
bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
cjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcikgfTsK
KworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1
ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJnZXR0ZXJOYW1lIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0
ZXJOYW1lKSwgKGludHB0cl90KSAoMSkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnNfaW5mbyA9IHsgIlRl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
KSB9OworCitKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkK
KyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4oc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpjcmVh
dGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlOjpjcmVh
dGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9i
amVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNv
bnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sK
KyAgICBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOworICAgIHRoaXNP
YmplY3QtPkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6On5KU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyKCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3Rh
dGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKKyAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOworICAgIGF1
dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFt
ZSkgLT4gc3RkOjpvcHRpb25hbDx0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU+IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5nZXR0
ZXJOYW1lKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgICAg
ICBpZiAoIUdldHRlcklETFR5cGU6OmlzTnVsbFZhbHVlKHJlc3VsdCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVy
SURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBh
Y2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAq
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRv
IHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5
LnZhbHVlKCkpKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSwg
dmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKworYm9vbCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgdXNpbmcgR2V0
dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKKyAgICBhdXRvIGdldHRlckZ1bmN0b3IgPSBbXSAo
YXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUpIC0+IHN0ZDo6b3B0aW9uYWw8dHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gdGhpc09iamVjdC53cmFwcGVkKCkuZ2V0dGVyTmFtZShwcm9wZXJ0eU5hbWVUb0F0
b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFHZXR0ZXJJRExUeXBlOjpp
c051bGxWYWx1ZShyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklE
TFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZShyZXN1bHQpIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgUmVhZE9ubHksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFt
ZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCisgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3Bl
cnR5TmFtZSkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KHN0YXRlLnZt
KCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0ZXJOYW1lQm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKKyAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLmdldHRlck5hbWUoV1RGTW92ZShuYW1lKSkp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0ZXJOYW1lKEV4ZWNTdGF0ZSogc3RhdGUp
Cit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rp
b25HZXR0ZXJOYW1lQm9keT4oKnN0YXRlLCAiZ2V0dGVyTmFtZSIpOworfQorCitib29sIEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBo
YW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIq
PihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nh
c3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQs
ICZqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLT53cmFwcGVkKCksIGpzVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZ
KQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0
ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXJAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVy
biAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTI5VGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCit7CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4p
CisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJAV2ViQ29y
ZUBANkJAIikpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pU
Vk43V2ViQ29yZTI5VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJFWzJdOworI2lmIENPTVBJ
TEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXIgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAg
IC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2Ug
ZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllciksICJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciBpcyBu
b3QgcG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlz
IGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAg
Ly8gVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAor
ICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllciB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5
IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZh
Y2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVy
ID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3Jh
cHBlcjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsKK30KKworVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqIEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3Jh
cHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisv
KgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3JhcHBl
cjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4geworcHVibGljOgorICAgIHVzaW5nIEJh
c2UgPSBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OworICAgIHN0
YXRpYyBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+KGdsb2JhbE9iamVjdC0+dm0o
KS5oZWFwKSkgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcihzdHJ1Y3R1cmUsICpnbG9i
YWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKwor
ICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0ds
b2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2Vu
Y2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJvdGVjdGVk
OgorICAgIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVP
d25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZp
c2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXJPd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKwor
aW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqIHdy
YXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXImKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcio7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5
LDYgQEAKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CiAjaW5jbHVkZSA8YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdEFyZ3VtZW50cy5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tG
YWN0b3J5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9BcnJheVByb3RvdHlwZS5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5oPgpAQCAtMTA4NSw3ICsxMDgzLDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoSlNDOjpFeGVjU3RhdGUq
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqKTsK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVy
RG9jdW1lbnRBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0Fy
Z3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CkBAIC0xMzMwLDggKzEzMjcsNiBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwpAQCAtMTY0OSw3ICsxNjQ0LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZh
bHVlIEpTVGVzdE9ialBybwogICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSkgfSB9LAog
ICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcykgfSB9LAog
ICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZSkgfSB9LAotICAgIHsgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZSkgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIHsgImNv
bmRpdGlvbmFsQXR0cjEiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIxKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMSkgfSB9LAogI2Vsc2UKQEAgLTE3
NjIsNyArMTc1Niw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8K
ICAgICB7ICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGUpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIsIEpTQzo6RnVuY3Rpb24s
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgIndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzIiwgSlNDOjpGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVXaXRoU3BhY2VzKSwgKGludHB0cl90KSAoMCkgfSB9LAotICAgIHsgIndpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2siLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayksIChpbnRwdHJfdCkgKDApIH0g
fSwKICAgICB7ICJ3aXRoRG9jdW1lbnRBcmd1bWVudCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudCksIChpbnRwdHJfdCkgKDApIH0gfSwK
ICAgICB7ICJ3aXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudCksIChpbnRwdHJfdCkg
KDApIH0gfSwKICAgICB7ICJ3aXRoQ2FsbGVyV2luZG93QXJndW1lbnQiLCBKU0M6OkZ1bmN0aW9u
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50KSwgKGludHB0
cl90KSAoMCkgfSB9LApAQCAtNDA2OSwzNiArNDA2Miw2IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
LCBpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNr
QXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQotewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmpl
Y3QiLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIsICJUZXN0T2Jq
Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IGltcGwuc2V0V2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgqbmF0aXZl
VmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUi
KTsKLX0KLQogI2lmIEVOQUJMRShDb25kaXRpb24xKQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewpAQCAtNTgyMywyMSArNTc4
Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0JvZHk+
KCpzdGF0ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3Bh
Y2VzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tCb2R5KEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFJlZjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0
QXJndW1lbnRzKHN0YXRlLCAwKSk7Ci0gICAgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrKFdURk1vdmUoc2NyaXB0QXJndW1lbnRzKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2so
RXhlY1N0YXRlKiBzdGF0ZSkKLXsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQm9keT4oKnN0YXRlLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayIpOwot
fQotCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDIxODkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDE0IEBAIHZvaWQgVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6ZGlkSW4KICAg
ICAgICAgdXNlck1lc3NhZ2VIYW5kbGVyLT5pbnZhbGlkYXRlRGVzY3JpcHRvcigpOwogfQogCi1V
c2VyTWVzc2FnZUhhbmRsZXIqIFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6OmhhbmRsZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQorVmVjdG9y
PEF0b21pY1N0cmluZz4gVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6c3VwcG9ydGVkUHJv
cGVydHlOYW1lcygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBzdXBw
b3J0IGZvciBpdGVyYXRpbmcgdGhlIHJlZ2lzdGVyZWQgVXNlck1lc3NhZ2VIYW5kbGVycy4gVGhp
cyB3b3VsZAorICAgIC8vIHJlcXVpcmUgYWRkaW5nIHN1cHBvcnQgZm9yIHBhc3NpbmcgdGhlIERP
TVdyYXBwZXJXb3JsZCB0byBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzLgorICAgIHJldHVybiB7IH07
Cit9CisKK1VzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6
bmFtZWRJdGVtKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNO
YW1lc3BhY2UuaAkocmV2aXNpb24gMjE4OTA1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSgp
OwogCi0gICAgVXNlck1lc3NhZ2VIYW5kbGVyKiBoYW5kbGVyKGNvbnN0IEF0b21pY1N0cmluZyYs
IERPTVdyYXBwZXJXb3JsZCYpOworICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMoKSBjb25zdDsKKyAgICBVc2VyTWVzc2FnZUhhbmRsZXIqIG5hbWVkSXRlbShE
T01XcmFwcGVyV29ybGQmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKEZyYW1lJiwgVXNlckNvbnRlbnRQ
cm92aWRlciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCShyZXZpc2lvbiAyMTg5MDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw2IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1VU0VSX01FU1NBR0VfSEFO
RExFUlMsCi0gICAgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKIF0gaW50
ZXJmYWNlIFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UgeworICAgIFtDYWxsV2l0aD1Xb3Js
ZF0gZ2V0dGVyIFVzZXJNZXNzYWdlSGFuZGxlciAoRE9NU3RyaW5nIG5hbWUpOwogfTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxODkxMSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA2LTI4ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYklETF0gUmVtb3ZlIGN1c3RvbSBiaW5kaW5n
IGZvciBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5NTYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93LmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fZG9t
X3dpbmRvd193ZWJraXRfbWVzc2FnZV9oYW5kbGVyc19wb3N0X21lc3NhZ2UpOgorICAgICAgICBV
cGRhdGUgZm9yIG5hbWUgY2hhbmdlLgorCiAyMDE3LTA2LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMTg4NDIpOiBjb20uYXBwbGUu
V2ViS2l0IGNyYXNoIGluIFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cuY3Bw
CShyZXZpc2lvbiAyMTg5MDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNDgsNyArMTA0OCw3IEBAIGdib29sZWFuIHdlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJr
aXRfbWUKICAgICBpZiAoIXdlYmtpdE5hbWVzcGFjZSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwog
Ci0gICAgYXV0byBoYW5kbGVyID0gd2Via2l0TmFtZXNwYWNlLT5tZXNzYWdlSGFuZGxlcnMoKS0+
aGFuZGxlcihTdHJpbmc6OmZyb21VVEY4KGhhbmRsZXJOYW1lKSwgV2ViQ29yZTo6bWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpOworICAgIGF1dG8gaGFuZGxlciA9IHdlYmtpdE5hbWVzcGFjZS0+bWVz
c2FnZUhhbmRsZXJzKCktPm5hbWVkSXRlbShXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQo
KSwgU3RyaW5nOjpmcm9tVVRGOChoYW5kbGVyTmFtZSkpOwogICAgIGlmICghaGFuZGxlcikKICAg
ICAgICAgcmV0dXJuIEZBTFNFOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>