<?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>139558</bug_id>
          
          <creation_ts>2014-12-11 12:57:18 -0800</creation_ts>
          <short_desc>Move storage code from WebCore to WebKit</short_desc>
          <delta_ts>2014-12-30 01:37:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1054595</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-12-11 12:57:18 -0800</bug_when>
    <thetext>Move storage code from WebCore to WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054596</commentid>
    <comment_count>1</comment_count>
      <attachid>243140</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-12-11 13:00:58 -0800</bug_when>
    <thetext>Created attachment 243140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054597</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-11 13:03:43 -0800</bug_when>
    <thetext>Attachment 243140 did not pass style-queue:


ERROR: Source/WebKit/Storage/StorageAreaImpl.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/mac/Storage/WebStorageManager.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:76:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:44:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:93:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:172:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:197:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:373:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/Storage/StorageTrackerClient.h:25:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/Storage/StorageNamespaceImpl.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageTracker.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageNamespaceImpl.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.cpp:66:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 19 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058129</commentid>
    <comment_count>3</comment_count>
      <attachid>243808</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-12-29 12:55:10 -0800</bug_when>
    <thetext>Created attachment 243808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058130</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-29 12:57:07 -0800</bug_when>
    <thetext>Attachment 243808 did not pass style-queue:


ERROR: Source/WebKit/Storage/StorageAreaImpl.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/mac/Storage/WebStorageManager.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:76:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:80:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:44:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/Storage/StorageAreaSync.cpp:91:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/Storage/StorageTrackerClient.h:25:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/Storage/StorageNamespaceImpl.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageTracker.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.cpp:66:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 15 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058131</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-12-29 13:12:29 -0800</bug_when>
    <thetext>Committed r177813: &lt;http://trac.webkit.org/changeset/177813&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058170</commentid>
    <comment_count>6</comment_count>
      <attachid>243808</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-30 01:37:46 -0800</bug_when>
    <thetext>Comment on attachment 243808
Patch

remove r? from landed patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243140</attachid>
            <date>2014-12-11 13:00:58 -0800</date>
            <delta_ts>2014-12-29 12:55:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139558-20141211130140.patch</filename>
            <type>text/plain</type>
            <size>227478</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3MTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRiMjA4YWEyOGFlM2Rk
NTQ0MmUyOTNhNzBhZmIwMGVjZjU1Y2ZhNC4uMjczZGMyNDJkOWVkYTNjZjM5ZDQ4YWYxMjZmZjg0
MDhlODczNzlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDE0LTEyLTExICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBzdG9yYWdl
IGNvZGUgZnJvbSBXZWJDb3JlIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NTU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDoKKworMjAxNC0xMi0xMSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIFN0b3AgdXNpbmcgU1FMaXRlRmlsZVN5
c3RlbSBpbiB0aGUgc3RvcmFnZSBjb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzk1NDkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzZTMzM2Q5ZGZjNTFiYTdjZDYy
NjcwNTEzNTVkN2FhMDAzZTRjN2IzLi4wNTFlOGY0ODA4Mzk4NmI0YzRiNjVmNTM4MzdmYmE4NjRj
OTM4NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMwIEBACiAyMDE0LTEyLTExICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBzdG9yYWdlIGNvZGUg
ZnJvbSBXZWJDb3JlIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM5NTU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAuCisgICAgICAgICog
U3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmguCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuY3BwLgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oLgorICAgICAgICAqIFN0
b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAuCisgICAgICAgICogU3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oLgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5
bmNNYW5hZ2VyLmNwcC4KKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaC4K
KyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcC4KKyAgICAgICAgKiBTdG9yYWdlL1N0
b3JhZ2VUaHJlYWQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVRocmVhZC5oLgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAuCisgICAgICAg
ICogU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oLgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRy
YWNrZXJDbGllbnQuaC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92
aWRlci5jcHA6CisgICAgICAgICogV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9q
OgorICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJz
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTEy
LTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKICAgICAgICAgQnVp
bGQgZml4LgogCiAgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIu
aDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCA3NTQ0MmRlNTgwYWI0NjllNDYwNjBjMjY5MTVjMDg5MDJk
NWM2N2ViLi41ZjQ2YmY2NTU2NDFkNDU4YTMzNWM2Y2E0N2MwYzU1NjdkYzkxMTJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDUgKzEsMTcgQEAKIDIwMTQtMTItMTEgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAorICAgICAgICBNb3ZlIHN0b3JhZ2UgY29kZSBmcm9tIFdl
YkNvcmUgdG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzk1NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFN0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW06CisgICAgICAgICogU3RvcmFn
ZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmg6CisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKworMjAx
NC0xMi0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAg
IENhbGwgU3RvcmFnZVRocmVhZDo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJl
YWRzIGZyb20gV2ViS2l0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzk1NDcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGYxMmExMmRkNDkxYjU1ZjliZDVkNWVhMmIw
NzUyMmUxNWUyYWZjYmYuLjM2ZTgyYzUyYzYyNmNlZWUzZmExZDg2NmUyYzI3YWZjMTZmN2YyMzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNC0xMi0xMSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgc3RvcmFnZSBjb2RlIGZyb20g
V2ViQ29yZSB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzOTU1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKwogMjAxNC0xMi0xMSAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEluc3BlY3RvciBQcm9jZXNzIGNyYXNoIHdoZW4gbmF2aWdhdGluZyB0byBub24taW5zcGVj
dGFibGUgcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxNjA4ZWQzMWQ4YTJlNzFhYzBmMjI4
NWRkMGRkOGQ4YzlhNWI1YjdmLi4yZWY2NTU5Y2ZhMzZiNDkwNDJlYzZjZWY2MjY3MGU0MTY1NjBk
YTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjQ4MCwxNiArMjQ4MCwxMCBAQCBzZXQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5jcHAKIAogICAgIHN0b3Jh
Z2UvU3RvcmFnZS5jcHAKLSAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKLSAgICBzdG9y
YWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKICAgICBzdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAKICAg
ICBzdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdl
TWFwLmNwcAotICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCiAgICAgc3RvcmFn
ZS9TdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwCi0gICAgc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuY3BwCi0gICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAotICAgIHN0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwCiAKICAgICBzdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCiAgICAg
c3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXgg
NDgxYjY5ZDRmZmIzYzEwZTFlMDc2ZTk1MzAwMGQ4YjgzZWM3ZDNlOC4uZDQ4NzFmMDA0YjQwMzY4
YzkyZmVkNDlmYmI2MGQ2YTA1NWY1NThhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTE5OSw2
ICsxOTksNyBAQCBfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5NmNyZWF0ZUVSTlMwXzZDbGllbnRF
TlMwXzExT3ZlcmxheVR5cGVFCiBfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5OHNldEZyYW1lRU5T
XzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTFTUUxSZXN1bHRPa0UKIF9fWk43V2ViQ29yZTExVVJM
V2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCitfX1pON1dlYkNvcmUxMWdldEZpbGVTaXplRVJLTjNX
VEY2U3RyaW5nRVJ4CiBfX1pON1dlYkNvcmUxMWdldFVSTEJ5dGVzRVBLN19fQ0ZVUkxSTjNXVEY2
VmVjdG9ySWNMbTUxMkVOUzNfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTExZ2V0
VVJMQnl0ZXNFUEs3X19DRlVSTFJOM1dURjdDU3RyaW5nRQogX19aTjdXZWJDb3JlMTFpQmVhbUN1
cnNvckV2CkBAIC0zMzIsNyArMzMzLDYgQEAgX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFF
UDdOU0Vycm9yCiBfX1pON1dlYkNvcmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgogX19a
TjdXZWJDb3JlMTNTUUxSZXN1bHREb25lRQogX19aTjdXZWJDb3JlMTNTZWxlY3Rpb25SZWN0QzFF
UktOU183SW50UmVjdEViaQotX19aTjdXZWJDb3JlMTNTdG9yYWdlVGhyZWFkMzlyZWxlYXNlRmFz
dE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHNFdgogX19aTjdXZWJDb3JlMTNTdHlsZWRFbGVt
ZW50MjJzZXRJbmxpbmVTdHlsZVByb3BlcnR5RU5TXzEzQ1NTUHJvcGVydHlJREVSS04zV1RGNlN0
cmluZ0ViCiBfX1pON1dlYkNvcmUxM1N0eWxlZEVsZW1lbnQyMnNldElubGluZVN0eWxlUHJvcGVy
dHlFTlNfMTNDU1NQcm9wZXJ0eUlERWROU18xN0NTU1ByaW1pdGl2ZVZhbHVlOVVuaXRUeXBlc0Vi
CiBfX1pON1dlYkNvcmUxM1RleHRJbmRpY2F0b3I2Y3JlYXRlRVJLTlNfMTdUZXh0SW5kaWNhdG9y
RGF0YUUKQEAgLTQ1NCwxMyArNDU0LDYgQEAgX19aTjdXZWJDb3JlMTRTZWN1cml0eVBvbGljeTIy
Z2VuZXJhdGVSZWZlcnJlckhlYWRlckVOU18xNFJlZmVycmVyUG9saWN5RVJLTlNfM1UKIF9fWk43
V2ViQ29yZTE0U2VjdXJpdHlQb2xpY3kyN3Jlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0c0V2CiBf
X1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5MjlhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eUVSS05TXzE0U2VjdXJpdHlPcmlnaW5FUktOM1dURjZTdHJpbmdFUzdfYgogX19aTjdXZWJDb3Jl
MTRTZWN1cml0eVBvbGljeTMycmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlFUktOU18x
NFNlY3VyaXR5T3JpZ2luRVJLTjNXVEY2U3RyaW5nRVM3X2IKLV9fWk43V2ViQ29yZTE0U3RvcmFn
ZVRyYWNrZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKLV9fWk43V2ViQ29y
ZTE0U3RvcmFnZVRyYWNrZXIxNmRlbGV0ZUFsbE9yaWdpbnNFdgotX19aTjdXZWJDb3JlMTRTdG9y
YWdlVHJhY2tlcjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdFUE5TXzIwU3RvcmFn
ZVRyYWNrZXJDbGllbnRFCi1fX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMThkaXNrVXNhZ2VG
b3JPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmlnaW5FCi1fX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFj
a2VyMzJzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZUV2Ci1fX1pON1dlYkNvcmUxNFN0
b3JhZ2VUcmFja2VyN29yaWdpbnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNlY3Vy
aXR5T3JpZ2luRUVFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQotX19aTjdXZWJDb3JlMTRT
dG9yYWdlVHJhY2tlcjd0cmFja2VyRXYKIF9fWk43V2ViQ29yZTE0U3ViZnJhbWVMb2FkZXIxMmFs
bG93UGx1Z2luc0VOU18yOFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnNFCiBfX1pON1dlYkNv
cmUxNFRpbGVDb250cm9sbGVyMTRzZXRUaWxlc09wYXF1ZUViCiBfX1pON1dlYkNvcmUxNFRpbGVD
b250cm9sbGVyMTVjb250YWluZXJMYXllcnNFdgpAQCAtNjQ4LDYgKzY0MSw3IEBAIF9fWk43V2Vi
Q29yZTE1U1FMaXRlU3RhdGVtZW50N3ByZXBhcmVFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0
ZW1lbnQ4YmluZEJsb2JFaVBLdmkKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJpbmRC
bG9iRWlSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJpbmRU
ZXh0RWlSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGZpbmFs
aXplRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OWJpbmRJbnQ2NEVpeAogX19aTjdX
ZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnRDMUVSTlNfMTRTUUxpdGVEYXRhYmFzZUVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFFdgpAQCAtODk3LDggKzg5MSw2
IEBAIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2UxOXNldFRleHRFbmNvZGluZ05h
bWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjRz
ZXRFeHBlY3RlZENvbnRlbnRMZW5ndGhFeAogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNl
QmFzZTZzZXRVUkxFUktOU18zVVJMRQogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFz
ZUMyRXYKLV9fWk43V2ViQ29yZTIwU3RvcmFnZU5hbWVzcGFjZUltcGwyOWNyZWF0ZVNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlRWoKLV9fWk43V2ViQ29yZTIwU3RvcmFnZU5hbWVzcGFjZUltcGwzMmdl
dE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlRVJLTjNXVEY2U3RyaW5nRWoKIF9fWk43V2Vi
Q29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXg1c2NhbGVFZAogX19aTjdXZWJDb3JlMjBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDl0cmFuc2xhdGVFZGQKIF9fWk43V2ViQ29yZTIwVXNlckdlc3R1cmVJbmRp
Y2F0b3I3c19zdGF0ZUUKQEAgLTk0OSw2ICs5NDEsOCBAQCBfX1pON1dlYkNvcmUyMVJlc291cmNl
TG9hZFNjaGVkdWxlcjMybm90aWZ5RGlkU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3RFUE5TXzE0UmVz
bwogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXI2cmVtb3ZlRVBOU18xNFJlc291
cmNlTG9hZGVyRQogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXJDMkV2CiBfX1pO
N1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlckQyRXYKK19fWk43V2ViQ29yZTIxU1FMaXRl
RGF0YWJhc2VUcmFja2VyMzVkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudEV2Citf
X1pON1dlYkNvcmUyMVNRTGl0ZURhdGFiYXNlVHJhY2tlcjM1aW5jcmVtZW50VHJhbnNhY3Rpb25J
blByb2dyZXNzQ291bnRFdgogX19aTjdXZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWUxMWRl
c2VyaWFsaXplRVBLMTVPcGFxdWVKU0NvbnRleHRQUEsxM09wYXF1ZUpTVmFsdWUKIF9fWk43V2Vi
Q29yZTIxU2VyaWFsaXplZFNjcmlwdFZhbHVlMTFkZXNlcmlhbGl6ZUVQTjNKU0M5RXhlY1N0YXRl
RVBOUzFfMTRKU0dsb2JhbE9iamVjdEVQTjNXVEY2VmVjdG9ySU5TNl82UmVmUHRySU5TXzExTWVz
c2FnZVBvcnRFRUVMbTFFTlM2XzE1Q3Jhc2hPbk92ZXJmbG93RUVFTlNfMjJTZXJpYWxpemF0aW9u
RXJyb3JNb2RlRQogX19aTjdXZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWU2Y3JlYXRlRVBL
MTVPcGFxdWVKU0NvbnRleHRQSzEzT3BhcXVlSlNWYWx1ZVBTNl8KQEAgLTk5OSw2ICs5OTMsOCBA
QCBfX1pON1dlYkNvcmUyMlBsYXRmb3JtQ0FBbmltYXRpb25NYWM2Y3JlYXRlRVAxOUNBUHJvcGVy
dHlBbmltYXRpb24KIF9fWk43V2ViQ29yZTIyUnVudGltZUVuYWJsZWRGZWF0dXJlczE0c2hhcmVk
RmVhdHVyZXNFdgogX19aTjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0MjZjYW5TdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0c0V2CiBfX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQydm1FdgorX19aTjdXZWJDb3JlMjJTdG9yYWdlRXZlbnREaXNwYXRjaGVyMjZkaXNwYXRjaExv
Y2FsU3RvcmFnZUV2ZW50c0VSS04zV1RGNlN0cmluZ0VTNF9TNF9QTlNfMTRTZWN1cml0eU9yaWdp
bkVQTlNfNUZyYW1lRQorX19aTjdXZWJDb3JlMjJTdG9yYWdlRXZlbnREaXNwYXRjaGVyMjhkaXNw
YXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzRVJLTjNXVEY2U3RyaW5nRVM0X1M0X1BOU18xNFNlY3Vy
aXR5T3JpZ2luRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUyMlN0b3JhZ2VFdmVudERpc3BhdGNo
ZXIzNGRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXNFUk5TXzlQYWdlR3JvdXBFUktO
M1dURjZWZWN0b3JJTlMzXzZSZWZQdHJJTlNfNUZyYW1lRUVFTG0wRU5TM18xNUNyYXNoT25PdmVy
Zmxvd0VFRVJLTlMzXzZTdHJpbmdFU0VfU0VfU0VfUE5TXzE0U2VjdXJpdHlPcmlnaW5FCiBfX1pO
N1dlYkNvcmUyMlVSTEJ5Q2Fub25pY2FsaXppbmdVUkxFUDVOU1VSTAogX19aTjdXZWJDb3JlMjJV
UkxXaXRoVXNlclR5cGVkU3RyaW5nRVA4TlNTdHJpbmdQNU5TVVJMCkBAIC0xNTU2LDYgKzE1NTIs
OCBAQCBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMzNtYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVS
ZWNhbGNFdgogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTZyZW1vdmVFUE5TXzExSGlzdG9yeUl0ZW1F
CiBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMTZzeW5jTG9jYWxTdG9yYWdlRXYKIF9fWk43V2ViQ29y
ZTlQYWdlR3JvdXAxN2Nsb3NlTG9jYWxTdG9yYWdlRXYKK19fWk43V2ViQ29yZTlQYWdlR3JvdXAy
NmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQorX19aTjdX
ZWJDb3JlOVBhZ2VHcm91cDMwY2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zRXYKIF9fWk43
V2ViQ29yZTlQYWdlR3JvdXAzMGNsb3NlSWRsZUxvY2FsU3RvcmFnZURhdGFiYXNlc0V2CiBfX1pO
N1dlYkNvcmU5UGFnZUdyb3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29y
ZTlTY3JvbGxiYXIxMW1vdXNlRXhpdGVkRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IDllYzY4MmY3OWY4ODZiODQxZjc4MmM0NTQ3MDA5
MzA4MTk1OWQ2ODIuLjA4Mjg1YzNiZjJhNzQ2MjEzMWYxZDMyMGRlNGIyYjQ1MTU5MDllYmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAt
MTc4NjgsMTcgKzE3ODY4LDExIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoaXN0b3J5
XEhpc3RvcnlJdGVtLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhpc3Rvcnlc
UGFnZUNhY2hlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3Rv
cmFnZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VB
cmVhSW1wbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3Jh
Z2VBcmVhU3luYy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0
b3JhZ2VFdmVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0
b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
c3RvcmFnZVxTdG9yYWdlTWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0
b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxzdG9yYWdlXFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRocmVhZC5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0eWxlXElubGluZVRleHRCb3hTdHlsZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdHlsZVxTdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0eWxlXFN0eWxlUmVz
b2x2ZUZvckRvY3VtZW50LmNwcCIgLz4KQEAgLTIxMjczLDE3ICsyMTI2NywxMSBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGlzdG9yeVxQYWdlQ2FjaGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZUFyZWFTeW5jLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VFdmVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3RvcmFnZVxTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VNYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VUaHJlYWQuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0eWxlXElubGluZVRleHRCb3hTdHlsZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3R5bGVcU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3R5bGVcU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA3MDU2MjFmZjNmNTgxYzNmZTgyOTFj
YTA1NjMxMWZlNDkwOGZhMjNjLi41YWQ0MTQ0ZGNiNDJhY2E3NjZiODJjZDQ1Mjc0NjdlNWFmMzJm
NmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCkBAIC00NjgzLDEyICs0NjgzLDYgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZS5jcHAiPgogICAgICAgPEZpbHRlcj5zdG9yYWdl
PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
dG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5jcHAiPgotICAgICAgPEZpbHRlcj5zdG9yYWdlPC9GaWx0
ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdl
XFN0b3JhZ2VBcmVhU3luYy5jcHAiPgotICAgICAgPEZpbHRlcj5zdG9yYWdlPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3Jh
Z2VFdmVudC5jcHAiPgogICAgICAgPEZpbHRlcj5zdG9yYWdlPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CkBAIC00NzAxLDIxICs0Njk1LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZS5jcHAiPgogICAgICAgPEZpbHRlcj5zdG9yYWdlPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9y
YWdlXFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCI+Ci0gICAgICA8RmlsdGVyPnN0b3JhZ2U8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3Jh
Z2VcU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCI+CiAgICAgICA8RmlsdGVyPnN0b3JhZ2U8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0
b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnN0b3JhZ2U8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3Jh
Z2VcU3RvcmFnZVRocmVhZC5jcHAiPgotICAgICAgPEZpbHRlcj5zdG9yYWdlPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3Jh
Z2VUcmFja2VyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJyaWRnZVxqc2NcQnJpZGdlSlND
LmNwcCI+CiAgICAgICA8RmlsdGVyPmJyaWRnZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpA
QCAtMTI0MDUsMTIgKzEyMzg3LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0b3Jh
Z2VcU3RvcmFnZUFyZWEuaCI+CiAgICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZUFy
ZWFJbXBsLmgiPgotICAgICAgPEZpbHRlcj5zdG9yYWdlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VBcmVhU3luYy5o
Ij4KLSAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlRXZlbnQuaCI+CiAgICAgICA8
RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTEyNDI2LDE1ICsx
MjQwMiw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmgiPgogICAgICAgPEZpbHRlcj5zdG9yYWdlPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VTeW5jTWFu
YWdlci5oIj4KLSAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlVGhyZWFkLmgiPgot
ICAgICAgPEZpbHRlcj5zdG9yYWdlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmgiPgotICAgICAgPEZp
bHRlcj5zdG9yYWdlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxicmlkZ2VcQnJpZGdlLmgiPgogICAgICAgPEZpbHRlcj5icmlkZ2U8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZmI5OGJhM2MwZTJkNmIwZTAzNmUwODQ0YmZjMTdl
NDQ0YzdlMWUxLi41NzY2NzcxNzc0N2UzMzg5MTExNmEwYTNmMGI5NWVmMjllZDNiMTJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMzg0LDkgKzEzODQsNiBAQAogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29y
ZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdGODE4RkUw
RDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAv
KiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CiAJCTM3RkQ0Mjk4MTE4MzY4NDYwMDkzQzAy
OSAvKiBUcmVlRGVwdGhMaW1pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzdGRDQyOTcxMTgzNjg0NjAwOTNDMDI5IC8qIFRyZWVEZXB0aExpbWl0Lmgg
Ki87IH07Ci0JCTNBQjAyRDJBMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJEMjgxMkQ0
RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJM0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0
b3JhZ2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi87
IH07Ci0JCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FDMzY3RkUx
MkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0FDNjQ4QjIxMjlFMTQ2NTAwQzNF
QjI1IC8qIEVkaXRpbmdCb3VuZGFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gM0FDNjQ4QjExMjlFMTQ2NTAwQzNFQjI1IC8qIEVkaXRpbmdCb3VuZGFy
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTND
MjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQzI0NEZFNEEzNzVBQzYz
M0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNDMjQ0RkVCQTM3NUFDNjMzRjg4QkU2RiAv
KiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTE4NDUsOCArMTg0Miw2IEBACiAJCTUxMUVGMkNG
MTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQkFueUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjJDQzE3RjBGREYxMDBFNEZBMTYgLyog
SlNJREJBbnlDdXN0b20uY3BwICovOyB9OwogCQk1MTFFRjJEMDE3RjBGREYxMDBFNEZBMTYgLyog
SlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTFFRjJDRDE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1
c3RvbS5jcHAgKi87IH07CiAJCTUxMUVGMkQxMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQk9iamVj
dFN0b3JlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMUVGMkNFMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQk9iamVjdFN0b3JlQ3VzdG9t
LmNwcCAqLzsgfTsKLQkJNTExRjIzMTkwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIz
MTUwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwICovOyB9OwotCQk1MTFGMjMx
QTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTYwREMxNjBEQTAwNEYwMDMyIC8qIFN0
b3JhZ2VUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MTIzQUYxODE4OTBBNENBMDAzMUNEQzkgLyogSURCS2V5UmFuZ2VEYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjNBRjE2MTg5
MEE0Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5nZURhdGEuY3BwICovOyB9OwogCQk1MTIzQUYxOTE4
OTBBNENBMDAzMUNEQzkgLyogSURCS2V5UmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTIzQUYxNzE4OTBBNENBMDAzMUNEQzkgLyogSURC
S2V5UmFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTEyM0FGMUQxODkxOEFFNDAwMzFDREM5IC8qIElEQkdldFJlc3VsdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyM0FGMUMxODkxOEFF
NDAwMzFDREM5IC8qIElEQkdldFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC01NTQzLDIwICs1NTM4LDEyIEBACiAJCUM1MEI1NjE2MTIx
MTlEMjMwMDhCNDZFMCAvKiBHcm91cFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MEI1NjE0MTIxMTlEMjMwMDhCNDZFMCAvKiBHcm91
cFNldHRpbmdzLmNwcCAqLzsgfTsKIAkJQzUwQjU2MTcxMjExOUQyMzAwOEI0NkUwIC8qIEdyb3Vw
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1MEI1NjE1MTIxMTlEMjMwMDhCNDZFMCAvKiBHcm91cFNldHRpbmdzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzUwRDBFODMwRkY0MjcyOTAw
QUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1MEQwRTgxMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFt
ZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJEOTIwRkQ5QUEy
RDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovOyB9OwotCQlDNTEwMkQ5NTBGRDlB
QTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBT
dG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwotCQlDNTEwMkVDRjBGRDlFRjhDMDBGQUZGMDQg
LyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmgg
Ki87IH07Ci0JCUM1MTAyRUQwMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJFQ0Uw
RkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi87IH07CiAJCUM1MTM3Q0Yy
MTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMzdDRjAxMUE1ODM3ODAwNEFEQjk5IC8q
IEpTRE9NU3RyaW5nTGlzdC5jcHAgKi87IH07CiAJCUM1MTM3Q0YzMTFBNTgzNzgwMDRBREI5OSAv
KiBKU0RPTVN0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuaCAq
LzsgfTsKLQkJQzUxNjBFRUExMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2MEVFODEw
MDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCAqLzsgfTsKLQkJQzUxNjBFRUIx
MDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0
b3JhZ2VBcmVhSW1wbC5oICovOyB9OwogCQlDNTI3OEIwQzE3RjIxMkVBMDAzQTI5OTggLyogUGxh
dGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzUyNzhCMEIxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVib2Fy
ZElPUy5tbSAqLzsgfTsKIAkJQzU0NDI3NEIxMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NDQy
NzQ5MTFBNTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzU1NjEwRjExMUE3MDRFQjAwQjgyRDI3
IC8qIERPTVN0cmluZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU1NjEwRjAxMUE3MDRFQjAwQjgyRDI3IC8qIERPTVN0cmluZ0xpc3QuY3Bw
ICovOyB9OwogCQlDNTVDN0JBMTE3MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVDN0JBMDE3
MThBRkJBMDAxMzI3RTQgLyogUmVuZGVyVGhlbWVJT1MubW0gKi87IH07Ci0JCUM1NUUzOEJGMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8q
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAg
Ki87IH07CiAJCUM1NzJFRTFGMTIwMUM5QkMwMDdEOEY4MiAvKiBKU0lEQkluZGV4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTcyRUUxRDEyMDFDOUJD
MDA3RDhGODIgLyogSlNJREJJbmRleC5oICovOyB9OwogCQlDNTdGRURFMTEyMTJFRTlDMDA5N0JF
NjUgLyogRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNTdGRURFMDEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3RlbS5jcHAgKi87
IH07CiAJCUM1ODM2MUE5MTc0NDUyM0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODM2MUE3MTc0NDUy
M0YwMDE3MzUxMSAvKiBGb250U2VydmljZXNJT1MuaCAqLzsgfTsKQEAgLTg0NDUsOSArODQzMiw2
IEBACiAJCTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9u
c2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RkM5NkRBMTEwNEVENzEwMDNF
MUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3RkQ0Mjk3MTE4MzY4NDYwMDkzQzAyOSAvKiBUcmVlRGVwdGhM
aW1pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlRGVwdGhMaW1pdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzQUIwMkQyODEyRDRGOTE2MDBGQkI2OTQg
LyogU3RvcmFnZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0FCMDJEMjkxMkQ0
RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyQ2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNBQzY0OEIxMTI5RTE0NjUwMEMzRUIy
NSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RWRpdGluZ0JvdW5kYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNDMjQ0RkU0
QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyTW9kZWxPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04OTY4LDggKzg5NTIsNiBAQAogCQk1MTFFRjJDQzE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJB
bnlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJB
bnlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFFRjJDRDE3RjBG
REYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUYyQ0UxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0
U3RvcmVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
REJPYmplY3RTdG9yZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
MUYyMzE1MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MTFGMjMxNjBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVh
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVGhyZWFkLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjNBRjE2MTg5MEE0Q0EwMDMxQ0RDOSAvKiBJ
REJLZXlSYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SURCS2V5UmFuZ2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyM0FG
MTcxODkwQTRDQTAwMzFDREM5IC8qIElEQktleVJhbmdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJLZXlSYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTEyM0FGMUMxODkxOEFFNDAwMzFDREM5IC8qIElEQkdldFJlc3VsdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJHZXRSZXN1bHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMDA5LDIxICsxMjk5MSwxMyBAQAogCQlDNTBCNTYxNDEyMTE5
RDIzMDA4QjQ2RTAgLyogR3JvdXBTZXR0aW5ncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcm91cFNldHRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzUwQjU2MTUxMjExOUQyMzAwOEI0NkUwIC8qIEdyb3VwU2V0dGluZ3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JvdXBTZXR0aW5ncy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNTBEMEU4MTBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVz
cGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1MTAyRDkyMEZEOUFBMkQwMEZBRkYw
NCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RvcmFnZVN5bmNNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1
MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0
b3JhZ2VBcmVhU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdl
QXJlYVN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzUxMDJFQ0UwRkQ5RUY4
QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYVN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNTEzN0NGMDExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTM3Q0YxMTFBNTgzNzgwMDRBREI5OSAv
KiBKU0RPTVN0cmluZ0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNE
T01TdHJpbmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1MTYwRUU4MTAw
NDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQzUxNjBFRTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYUltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUyNzhCMEIxN0YyMTJFQTAwM0EyOTk4IC8qIFBs
YXRmb3JtUGFzdGVib2FyZElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbTsgcGF0aCA9IGlvcy9QbGF0Zm9ybVBhc3Rl
Ym9hcmRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NDQyNzQ5MTFBNTdF
N0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERPTVN0cmluZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU0
NDI3NEExMUE1N0U3QTAwNjNBNzQ5IC8qIERPTVN0cmluZ0xpc3QuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IERPTVN0cmluZ0xpc3QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTU2MTBGMDExQTcwNEVCMDBCODJEMjcgLyogRE9NU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01TdHJpbmdMaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1QzdCQTAxNzE4QUZCQTAwMTMyN0U0IC8qIFJlbmRlclRo
ZW1lSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVy
VGhlbWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1NUUzOEJCMTAwNDBE
NUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZU5hbWVz
cGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTcyRUUxRDEyMDFD
OUJDMDA3RDhGODIgLyogSlNJREJJbmRleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0lEQkluZGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1N0ZFREUw
MTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNTgzNjFBNzE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9TLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTZXJ2aWNlc0lPUy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTUxMzMsMTAgKzE1MTA3LDYgQEAKIAkJCQk1MUUzRjlDNDBE
QTA1OURDMDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1
MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywKIAkJCQk1MUJFMzdERTBEQUVFMDBFMDAxMDg1RkMgLyog
U3RvcmFnZUFyZWEuaCAqLywKLQkJCQlDNTE2MEVFODEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFn
ZUFyZWFJbXBsLmNwcCAqLywKLQkJCQlDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFn
ZUFyZWFJbXBsLmggKi8sCi0JCQkJQzUxMDJFQ0UwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VB
cmVhU3luYy5jcHAgKi8sCi0JCQkJQzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VB
cmVhU3luYy5oICovLAogCQkJCTUxRTBCQUJBMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZl
bnQuY3BwICovLAogCQkJCTUxRTBCQUI5MERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQu
aCAqLywKIAkJCQk1MUUwQkFCRDBEQTU1NDg0MDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmlkbCAq
LywKQEAgLTE1MTQ1LDE3ICsxNTExNSw4IEBACiAJCQkJNTFFMEJCMzcwREE1QUNCNjAwQTlFNDE3
IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAvKiBT
dG9yYWdlTWFwLmggKi8sCiAJCQkJQzUwRDBFODEwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VO
YW1lc3BhY2UuaCAqLywKLQkJCQlDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5h
bWVzcGFjZUltcGwuY3BwICovLAotCQkJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9y
YWdlTmFtZXNwYWNlSW1wbC5oICovLAogCQkJCTFBMzc2MzY5MUEyRTY4QkIwMDlBN0VFMiAvKiBT
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwICovLAogCQkJCTFBMzc2MzZBMUEyRTY4QkIwMDlB
N0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAqLywKLQkJCQlDNTEwMkQ5MzBGRDlB
QTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLywKLQkJCQlDNTEwMkQ5MjBG
RDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8sCi0JCQkJNTExRjIzMTUw
REMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwICovLAotCQkJCTUxMUYyMzE2MERD
MTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmggKi8sCi0JCQkJM0FCMDJEMjkxMkQ0Rjkx
NjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLywKLQkJCQkzQUIwMkQyODEyRDRGOTE2
MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCAqLywKLQkJCQkzQUMzNjdGRTEyRUY3QTA5MDA2
QTNENkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLywKIAkJCSk7CiAJCQlpbmRlbnRXaWR0
aCA9IDQ7CiAJCQlwYXRoID0gc3RvcmFnZTsKQEAgLTI2MTg4LDE3ICsyNjE0OSwxMCBAQAogCQkJ
CUE1QUZCMzUwMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBQzJEODQ1MTcxNzM0QTEwMDY1MkZDMCAvKiBTdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUJFMzdFMDBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUM1MTYwRUVCMTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCBp
biBIZWFkZXJzICovLAotCQkJCUM1MTAyRUNGMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJl
YVN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRTBCQUJCMERBNTU0NzEwMEE5RTQxNyAvKiBT
dG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2
RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkIz
ODBEQTVBQ0I2MDBBOUU0MTcgLyogU3RvcmFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUw
RDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCUM1NUUzOEJGMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VT
eW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTExRjIzMUEwREMxNjBEQTAwNEYwMDMy
IC8qIFN0b3JhZ2VUaHJlYWQuaCBpbiBIZWFkZXJzICovLAotCQkJCTNBQjAyRDJBMTJENEY5MTYw
MEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJM0FDMzY4MDAx
MkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4MUFDNkMzNjEzMUM1N0QzMDAwOUE3RTAgLyogU3RyaW5nQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTlCNkM0MTUzMTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdX
aXRoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI5NjA1LDE1ICsyOTU1OSw5IEBACiAJ
CQkJQkM3RkE2MkUwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1QUZCMzRGMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5QzcwREEwNTlEQzAwMjUwOTExIC8qIFN0b3JhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQzUxNjBFRUExMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VB
cmVhSW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDNTEwMkVEMDBGRDlFRjhDMDBGQUZGMDQg
LyogU3RvcmFnZUFyZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUJDMERBNTU0
NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzVFOUI2
NzcxMDY5N0UxMzAwQzdCQjFBIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFFMEJCMzkwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQzU1RTM4QzAxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1MTAyRDk1MEZEOUFBMkQwMEZBRkYw
NCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTExRjIzMTkw
REMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
M0FCMDJEMkIxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTgxMDJDNTg4MTMyNUJCMTEwMERERTY3QSAvKiBTdHJpbmdDYWxsYmFjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjM1NDBGMjBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1
bmNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCNkEyMEU4MURDNEYwMEIyNTk2NSAv
KiBTdHlsZUJhY2tncm91bmREYXRhLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKaW5kZXggZTY2YzEzZDc2
ZWRmYzkwYjZkNjg2NGNjM2NmM2U5NDU2NmQ5NzBjMC4uZDhjMTQ1YmZmNDc2OGE1ZTc2YmVjZjBl
NmRiY2RhZjA2NjhmOGQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1v
cnlQcmVzc3VyZUhhbmRsZXIuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgot
I2luY2x1ZGUgIlN0b3JhZ2VUaHJlYWQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNjM0Y2FmOWQyOGRmNzQ2YzZiMjAxNDQwYWMyMTJjYThmMWMxNzA5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMw
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgotCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhU3luYy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCIKLSNp
bmNsdWRlICJTdG9yYWdlTWFwLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCi0j
aW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0b3JhZ2VBcmVhSW1wbDo6flN0b3JhZ2VBcmVhSW1w
bCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0KLQotaW5saW5lIFN0b3JhZ2VB
cmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2Vy
PiBzeW5jTWFuYWdlciwgdW5zaWduZWQgcXVvdGEpCi0gICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3Jh
Z2VUeXBlKQotICAgICwgbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCi0gICAgLCBtX3N0b3JhZ2VN
YXAoU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3RhKSkKLSAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2Vy
KHN5bmNNYW5hZ2VyKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0ZG93bihmYWxzZSkK
LSNlbmRpZgotICAgICwgbV9hY2Nlc3NDb3VudCgwKQotICAgICwgbV9jbG9zZURhdGFiYXNlVGlt
ZXIoKnRoaXMsICZTdG9yYWdlQXJlYUltcGw6OmNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4p
OwotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOwotICAgIAotICAgIC8vIEFjY2Vzc2luZyB0aGUg
c2hhcmVkIGdsb2JhbCBTdG9yYWdlVHJhY2tlciB3aGVuIGEgU3RvcmFnZUFyZWEgaXMgY3JlYXRl
ZCAKLSAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIHRyYWNrZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6
ZWQgYmVmb3JlIGFueW9uZSBhY3R1YWxseSBuZWVkcyB0byB1c2UgaXQuCi0gICAgU3RvcmFnZVRy
YWNrZXI6OnRyYWNrZXIoKTsKLX0KLQotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IFN0b3Jh
Z2VBcmVhSW1wbDo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5j
TWFuYWdlciwgdW5zaWduZWQgcXVvdGEpCi17Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4g
YXJlYSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYUltcGwoc3RvcmFnZVR5cGUsIG9yaWdpbiwg
c3luY01hbmFnZXIsIHF1b3RhKSk7Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhlcmUncyBubyBiYWNr
aW5nIHN0b3JhZ2UgZm9yIExvY2FsU3RvcmFnZSwgdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2aW9y
IHNob3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCi0gICAgLy8gbm90IHNpbGVudGx5
IGlnbm9yaW5nIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4
OTQKLSAgICBpZiAoYXJlYS0+bV9zdG9yYWdlU3luY01hbmFnZXIpIHsKLSAgICAgICAgYXJlYS0+
bV9zdG9yYWdlQXJlYVN5bmMgPSBTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShhcmVhLT5tX3N0b3Jh
Z2VTeW5jTWFuYWdlciwgYXJlYS5nZXQoKSwgYXJlYS0+bV9zZWN1cml0eU9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkpOwotICAgICAgICBBU1NFUlQoYXJlYS0+bV9zdG9yYWdlQXJlYVN5bmMp
OwotICAgIH0KLQotICAgIHJldHVybiBhcmVhLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y29weSgpCi17Ci0gICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFJbXBsKHRo
aXMpKTsKLX0KLQotU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZUFyZWFJ
bXBsKiBhcmVhKQotICAgIDogbV9zdG9yYWdlVHlwZShhcmVhLT5tX3N0b3JhZ2VUeXBlKQotICAg
ICwgbV9zZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3VyaXR5T3JpZ2luKQotICAgICwgbV9zdG9y
YWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKLSAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKGFy
ZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXNTaHV0
ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCi0jZW5kaWYKLSAgICAsIG1fYWNjZXNzQ291bnQoMCkK
LSAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlzLCAmU3RvcmFnZUFyZWFJbXBsOjpjbG9z
ZURhdGFiYXNlVGltZXJGaXJlZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKLSAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsKLSAg
ICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci19Ci0KLWJvb2wgU3RvcmFnZUFyZWFJbXBsOjpjYW5B
Y2Nlc3NTdG9yYWdlKEZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUt
PnBhZ2UoKTsKLX0KLQotU3RvcmFnZVR5cGUgU3RvcmFnZUFyZWFJbXBsOjpzdG9yYWdlVHlwZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RvcmFnZVR5cGU7Ci19Ci0KLXVuc2lnbmVkIFN0b3Jh
Z2VBcmVhSW1wbDo6bGVuZ3RoKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAg
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5s
ZW5ndGgoKTsKLX0KLQotU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6a2V5KHVuc2lnbmVkIGluZGV4
KQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmtleShpbmRleCk7Ci19Ci0KLVN0
cmluZyBTdG9yYWdlQXJlYUltcGw6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0g
ICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwotfQotCi12b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQo
IW1faXNTaHV0ZG93bik7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7Ci0gICAgYmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgUmVmUHRy
PFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBv
bGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwotICAgIGlmIChuZXdNYXApCi0gICAgICAgIG1fc3Rv
cmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7Ci0KLSAgICBpZiAocXVvdGFFeGNlcHRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChvbGRWYWx1ZSA9PSB2YWx1ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVh
U3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIHZhbHVlKTsKLQotICAgIGRpc3BhdGNoU3Rv
cmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZvaWQg
U3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXkpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJ
bXBvcnRDb21wbGV0ZSgpOwotCi0gICAgU3RyaW5nIG9sZFZhbHVlOwotICAgIFJlZlB0cjxTdG9y
YWdlTWFwPiBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7
Ci0gICAgaWYgKG5ld01hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVhc2Uo
KTsKLQotICAgIGlmIChvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1
bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKLQotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50
KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZvaWQgU3RvcmFn
ZUFyZWFJbXBsOjpjbGVhcihGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgQVNTRVJUKCFtX2lz
U2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0gICAgaWYgKCFt
X3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBx
dW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdl
TWFwOjpjcmVhdGUocXVvdGEpOwotCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAg
ICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwotCi0gICAgZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOwotfQot
Ci1ib29sIFN0b3JhZ2VBcmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpCi17Ci0g
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgp
OwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKLX0KLQotdm9pZCBT
dG9yYWdlQXJlYUltcGw6OmltcG9ydEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBpdGVtcykKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0KLSAgICBtX3N0b3JhZ2VN
YXAtPmltcG9ydEl0ZW1zKGl0ZW1zKTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3Nl
KCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFT
eW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIG1faXNTaHV0
ZG93biA9IHRydWU7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9y
T3JpZ2luRGVsZXRpb24oKQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBibG9j
a1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLSAgICAKLSAgICBpZiAobV9zdG9yYWdlTWFwLT5sZW5n
dGgoKSkgewotICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsK
LSAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3RhKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5
bmMtPnNjaGVkdWxlQ2xlYXIoKTsKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxl
Q2xvc2VEYXRhYmFzZSgpOwotICAgIH0KLX0KLSAgICAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpz
eW5jKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7Ci0gICAgCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBt
X3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVTeW5jKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJ
bXBsOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdAotewotICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOwotfQotCi1zaXplX3QgU3RvcmFnZUFyZWFJbXBsOjptZW1vcnlCeXRlc1VzZWRC
eUNhY2hlKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6Omlu
Y3JlbWVudEFjY2Vzc0NvdW50KCkKLXsKLSAgICBtX2FjY2Vzc0NvdW50Kys7Ci0KLSAgICBpZiAo
bV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9jbG9zZURhdGFiYXNl
VGltZXIuc3RvcCgpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGVjcmVtZW50QWNjZXNz
Q291bnQoKQotewotICAgIEFTU0VSVChtX2FjY2Vzc0NvdW50KTsKLSAgICAtLW1fYWNjZXNzQ291
bnQ7Ci0KLSAgICBpZiAoIW1fYWNjZXNzQ291bnQpIHsKLSAgICAgICAgaWYgKG1fY2xvc2VEYXRh
YmFzZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5z
dG9wKCk7Ci0gICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdl
VHJhY2tlcjo6dHJhY2tlcigpLnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgpKTsKLSAgICB9
Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCgpCi17
Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0gICAgaWYgKG1fc3RvcmFnZUFyZWFT
eW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7
Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlSWZJZGxlKCkKLXsKLSAg
ICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBBU1NFUlQo
IW1fYWNjZXNzQ291bnQpOwotICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5zdG9wKCk7Ci0K
LSAgICAgICAgY2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3Rv
cmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJj
ZUZyYW1lKQotewotICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSkKLSAgICAg
ICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMoa2V5
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIHNvdXJjZUZyYW1l
KTsKLSAgICBlbHNlCi0gICAgICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Vz
c2lvblN0b3JhZ2VFdmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG1fc2VjdXJpdHlPcmln
aW4uZ2V0KCksIHNvdXJjZUZyYW1lKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDkyM2E2ZjUwZDg4OTRiYmQ1ZGQwMjFmZTk5MmU4MDFlMjlhZThjNjYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBT
dG9yYWdlQXJlYUltcGxfaAotI2RlZmluZSBTdG9yYWdlQXJlYUltcGxfaAotCi0jaW5jbHVkZSAi
U3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNz
IFN0b3JhZ2VNYXA7Ci1jbGFzcyBTdG9yYWdlQXJlYVN5bmM7Ci0KLWNsYXNzIFN0b3JhZ2VBcmVh
SW1wbCA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWFJbXBsPiBjcmVhdGUoU3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIHVuc2lnbmVkIHF1b3Rh
KTsKLSAgICB2aXJ0dWFsIH5TdG9yYWdlQXJlYUltcGwoKTsKLQotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbGVuZ3RoKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBTdHJpbmcga2V5KHVuc2lnbmVkIGlu
ZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2Vw
dGlvbikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oRnJhbWUqIHNvdXJj
ZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGNvbnRh
aW5zKGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5B
Y2Nlc3NTdG9yYWdlKEZyYW1lKiBzb3VyY2VGcmFtZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBT
dG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBz
aXplX3QgbWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2
b2lkIGluY3JlbWVudEFjY2Vzc0NvdW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudEFj
Y2Vzc0NvdW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlRGF0YWJhc2VJZklkbGUoKTsKLQot
ICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBjb3B5KCk7Ci0gICAgdm9pZCBjbG9zZSgp
OwotCi0gICAgLy8gT25seSBjYWxsZWQgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLgotICAgIHZv
aWQgaW1wb3J0SXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zKTsKLQot
ICAgIC8vIFVzZWQgdG8gY2xlYXIgYSBTdG9yYWdlQXJlYSBhbmQgY2xvc2UgZGIgYmVmb3JlIGJh
Y2tpbmcgZGIgZmlsZSBpcyBkZWxldGVkLgotICAgIHZvaWQgY2xlYXJGb3JPcmlnaW5EZWxldGlv
bigpOwotCi0gICAgdm9pZCBzeW5jKCk7Ci0KLXByaXZhdGU6Ci0gICAgU3RvcmFnZUFyZWFJbXBs
KFN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUGFzc1JlZlB0cjxTdG9y
YWdlU3luY01hbmFnZXI+LCB1bnNpZ25lZCBxdW90YSk7Ci0gICAgZXhwbGljaXQgU3RvcmFnZUFy
ZWFJbXBsKFN0b3JhZ2VBcmVhSW1wbCopOwotCi0gICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKSBjb25zdDsKLSAgICB2b2lkIGNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKCk7Ci0KLSAg
ICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUp
OwotCi0gICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKLSAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47Ci0gICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG1fc3RvcmFn
ZU1hcDsKLQotICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3RvcmFnZUFyZWFTeW5jOwot
ICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3RvcmFnZVN5bmNNYW5hZ2VyOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIGJvb2wgbV9pc1NodXRkb3duOwotI2VuZGlmCi0gICAgdW5zaWdu
ZWQgbV9hY2Nlc3NDb3VudDsKLSAgICBUaW1lciBtX2Nsb3NlRGF0YWJhc2VUaW1lcjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFN0b3JhZ2VBcmVhSW1wbF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYwYzQyY2YzMDAzYjVmN2QyODE0MGUzOTNkN2I1MmE2MTY4NzVmMTgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTM4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5j
LmgiCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2VU
cmFja2VyLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMaXRl
VHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKLSNpbmNsdWRlICJT
dG9yYWdlU3luY01hbmFnZXIuaCIKLSNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgotI2luY2x1
ZGUgIlN1ZGRlblRlcm1pbmF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBJZiB0aGUgU3RvcmFnZUFyZWEgdW5kZXJnb2VzIHJh
cGlkIGNoYW5nZXMsIGRvbid0IHN5bmMgZWFjaCBjaGFuZ2UgdG8gZGlzay4KLS8vIEluc3RlYWQs
IHF1ZXVlIHVwIGEgYmF0Y2ggb2YgaXRlbXMgdG8gc3luYyBhbmQgYWN0dWFsbHkgZG8gdGhlIHN5
bmMgYXQgdGhlIGZvbGxvd2luZyBpbnRlcnZhbC4KLXN0YXRpYyBjb25zdCBkb3VibGUgU3RvcmFn
ZVN5bmNJbnRlcnZhbCA9IDEuMDsKLQotLy8gQSBzYW5lIGxpbWl0IG9uIGhvdyBtYW55IGl0ZW1z
IHdlJ2xsIHNjaGVkdWxlIHRvIHN5bmMgYWxsIGF0IG9uY2UuICBUaGlzIG1ha2VzIGl0Ci0vLyBt
dWNoIGhhcmRlciB0byBzdGFydmUgdGhlIHJlc3Qgb2YgTG9jYWxTdG9yYWdlIGFuZCB0aGUgT1Mn
cyBJTyBzdWJzeXN0ZW0gaW4gZ2VuZXJhbC4KLXN0YXRpYyBjb25zdCBpbnQgTWF4aXVtSXRlbXNU
b1N5bmMgPSAxMDA7Ci0KLWlubGluZSBTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJ
ZGVudGlmaWVyKQotICAgIDogbV9zeW5jVGltZXIoKnRoaXMsICZTdG9yYWdlQXJlYVN5bmM6OnN5
bmNUaW1lckZpcmVkKQotICAgICwgbV9pdGVtc0NsZWFyZWQoZmFsc2UpCi0gICAgLCBtX2ZpbmFs
U3luY1NjaGVkdWxlZChmYWxzZSkKLSAgICAsIG1fc3RvcmFnZUFyZWEoc3RvcmFnZUFyZWEpCi0g
ICAgLCBtX3N5bmNNYW5hZ2VyKHN0b3JhZ2VTeW5jTWFuYWdlcikKLSAgICAsIG1fZGF0YWJhc2VJ
ZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllci5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fY2xl
YXJJdGVtc1doaWxlU3luY2luZyhmYWxzZSkKLSAgICAsIG1fc3luY1NjaGVkdWxlZChmYWxzZSkK
LSAgICAsIG1fc3luY0luUHJvZ3Jlc3MoZmFsc2UpCi0gICAgLCBtX2RhdGFiYXNlT3BlbkZhaWxl
ZChmYWxzZSkKLSAgICAsIG1fc3luY0Nsb3NlRGF0YWJhc2UoZmFsc2UpCi0gICAgLCBtX2ltcG9y
dENvbXBsZXRlKGZhbHNlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKG1fc3RvcmFnZUFyZWEpOwotICAgIEFTU0VSVChtX3N5bmNNYW5hZ2VyKTsKLQotICAgIC8v
IEZJWE1FOiBJZiBpdCBjYW4ndCBpbXBvcnQsIHRoZW4gdGhlIGRlZmF1bHQgV2ViS2l0IGJlaGF2
aW9yIHNob3VsZCBiZSB0aGF0IG9mIHByaXZhdGUgYnJvd3NpbmcsCi0gICAgLy8gbm90IHNpbGVu
dGx5IGlnbm9yaW5nIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU4OTQKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAg
bV9zeW5jTWFuYWdlci0+ZGlzcGF0Y2goW3Byb3RlY3Rvcl0gewotICAgICAgICBwcm90ZWN0b3It
PnBlcmZvcm1JbXBvcnQoKTsKLSAgICB9KTsKLX0KLQotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5
bmM+IFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2Vy
PiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdl
QXJlYSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpCi17Ci0gICAgUmVmUHRyPFN0
b3JhZ2VBcmVhU3luYz4gYXJlYSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYVN5bmMoc3RvcmFn
ZVN5bmNNYW5hZ2VyLCBzdG9yYWdlQXJlYSwgZGF0YWJhc2VJZGVudGlmaWVyKSk7Ci0KLSAgICBy
ZXR1cm4gYXJlYS5yZWxlYXNlKCk7Ci19Ci0KLVN0b3JhZ2VBcmVhU3luYzo6flN0b3JhZ2VBcmVh
U3luYygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fc3lu
Y1RpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVChtX2ZpbmFsU3luY1NjaGVkdWxlZCk7Ci19
Ci0KLXZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUZpbmFsU3luYygpCi17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAvLyBGSVhNRTogV2UgZG8gdGhpcyB0byBhdm9pZCBy
YWNlcywgYnV0IGl0J2QgYmUgYmV0dGVyIHRvIG1ha2UgdGhpbmdzIHNhZmUgd2l0aG91dCBibG9j
a2luZy4KLSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLSAgICBtX3N0b3JhZ2VBcmVh
ID0gMDsgIC8vIFRoaXMgaXMgZG9uZSBpbiBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBidXQg
dGhpcyBpcyBoZXJlIGFzIGEgZm9ybSBvZiBkb2N1bWVudGF0aW9uIHRoYXQgd2UgbXVzdCBiZSBh
YnNvbHV0ZWx5IHN1cmUgdGhlIHJlZiBjb3VudCBjeWNsZSBpcyBicm9rZW4uCi0KLSAgICBpZiAo
bV9zeW5jVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9zeW5jVGltZXIuc3RvcCgpOwotICAg
IGVsc2UgewotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxs
IHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQotICAgICAgICAvLyBzeW5jVGltZXJG
aXJlZCBmdW5jdGlvbi4KLSAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7Ci0gICAg
fQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN5bmNocm9ub3VzLiAgV2Ugc2hvdWxkIGRvIGl0IG9u
IHRoZSBiYWNrZ3JvdW5kIHByb2Nlc3MsIGJ1dAotICAgIC8vIHdlIHNob3VsZCBkbyBpdCBzYWZl
bHkuCi0gICAgbV9maW5hbFN5bmNTY2hlZHVsZWQgPSB0cnVlOwotICAgIHN5bmNUaW1lckZpcmVk
KCk7Ci0KLSAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAg
bV9zeW5jTWFuYWdlci0+ZGlzcGF0Y2goW3Byb3RlY3Rvcl0gewotICAgICAgICBwcm90ZWN0b3It
PmRlbGV0ZUVtcHR5RGF0YWJhc2UoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnNjaGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fZmlu
YWxTeW5jU2NoZWR1bGVkKTsKLQotICAgIG1fY2hhbmdlZEl0ZW1zLnNldChrZXksIHZhbHVlKTsK
LSAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgbV9zeW5jVGltZXIu
c3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOwotCi0gICAgICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24g
aW4gdGhlCi0gICAgICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgotICAgICAgICBkaXNh
YmxlU3VkZGVuVGVybWluYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFTeW5j
OjpzY2hlZHVsZUNsZWFyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFT
U0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOwotCi0gICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIo
KTsKLSAgICBtX2l0ZW1zQ2xlYXJlZCA9IHRydWU7Ci0gICAgaWYgKCFtX3N5bmNUaW1lci5pc0Fj
dGl2ZSgpKSB7Ci0gICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0lu
dGVydmFsKTsKLQotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBj
YWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQotICAgICAgICAvLyBzeW5jVGlt
ZXJGaXJlZCBmdW5jdGlvbi4KLSAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7Ci0g
ICAgfQotfQotCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURhdGFiYXNlKCkK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9maW5hbFN5bmNT
Y2hlZHVsZWQpOwotCi0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1ZTsKLSAgICAKLSAgICBpZiAoIW1f
c3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90
KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0
aGUKLSAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCi0gICAgICAgIGRpc2FibGVT
dWRkZW5UZXJtaW5hdGlvbigpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5
bmNUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYm9v
bCBwYXJ0aWFsU3luYyA9IGZhbHNlOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fc3luY0xvY2spOwotCi0gICAgICAgIC8vIERvIG5vdCBzY2hlZHVsZSBhbm90aGVyIHN5bmMg
aWYgd2UncmUgc3RpbGwgdHJ5aW5nIHRvIGNvbXBsZXRlIHRoZQotICAgICAgICAvLyBwcmV2aW91
cyBvbmUuICBCdXQsIGlmIHdlJ3JlIHNodXR0aW5nIGRvd24sIHNjaGVkdWxlIGl0IGFueXdheS4K
LSAgICAgICAgaWYgKG1fc3luY0luUHJvZ3Jlc3MgJiYgIW1fZmluYWxTeW5jU2NoZWR1bGVkKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpOwotICAgICAgICAg
ICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1faXRlbXNDbGVhcmVkKSB7
Ci0gICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1f
Y2xlYXJJdGVtc1doaWxlU3luY2luZyA9IHRydWU7Ci0gICAgICAgICAgICBtX2l0ZW1zQ2xlYXJl
ZCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
Oml0ZXJhdG9yIGNoYW5nZWRfaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdpbigpOwotICAgICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgY2hhbmdlZF9lbmQgPSBtX2NoYW5nZWRJ
dGVtcy5lbmQoKTsKLSAgICAgICAgZm9yIChpbnQgY291bnQgPSAwOyBjaGFuZ2VkX2l0ICE9IGNo
YW5nZWRfZW5kOyArK2NvdW50LCArK2NoYW5nZWRfaXQpIHsKLSAgICAgICAgICAgIGlmIChjb3Vu
dCA+PSBNYXhpdW1JdGVtc1RvU3luYyAmJiAhbV9maW5hbFN5bmNTY2hlZHVsZWQpIHsKLSAgICAg
ICAgICAgICAgICBwYXJ0aWFsU3luYyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRf
aXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7Ci0gICAgICAgICAgICAv
LyBXZSBjYW4ndCBkbyB0aGUgZmFzdCBwYXRoIG9mIHNpbXBseSBjbGVhcmluZyBhbGwgaXRlbXMs
IHNvIHdlJ2xsIG5lZWQgdG8gbWFudWFsbHkKLSAgICAgICAgICAgIC8vIHJlbW92ZSB0aGVtIG9u
ZSBieSBvbmUuICBEb25lIHVuZGVyIGxvY2sgc2luY2UgbV9pdGVtc1BlbmRpbmdTeW5jIGlzIG1v
ZGlmaWVkIGJ5Ci0gICAgICAgICAgICAvLyB0aGUgYmFja2dyb3VuZCB0aHJlYWQuCi0gICAgICAg
ICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1faXRl
bXNQZW5kaW5nU3luYy5iZWdpbigpOwotICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46Oml0ZXJhdG9yIHBlbmRpbmdfZW5kID0gbV9pdGVtc1BlbmRpbmdTeW5jLmVuZCgpOwotICAg
ICAgICAgICAgZm9yICg7IHBlbmRpbmdfaXQgIT0gcGVuZGluZ19lbmQ7ICsrcGVuZGluZ19pdCkK
LSAgICAgICAgICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9zeW5jU2NoZWR1bGVkKSB7Ci0gICAgICAgICAg
ICBtX3N5bmNTY2hlZHVsZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5n
IGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRo
ZQotICAgICAgICAgICAgLy8gcGVyZm9ybVN5bmMgZnVuY3Rpb24uCi0gICAgICAgICAgICBkaXNh
YmxlU3VkZGVuVGVybWluYXRpb24oKTsKLQotICAgICAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVh
U3luYz4gcHJvdGVjdG9yKHRoaXMpOwotICAgICAgICAgICAgbV9zeW5jTWFuYWdlci0+ZGlzcGF0
Y2goW3Byb3RlY3Rvcl0gewotICAgICAgICAgICAgICAgIHByb3RlY3Rvci0+cGVyZm9ybVN5bmMo
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHBhcnRpYWxT
eW5jKSB7Ci0gICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5pc2ggc3luY2luZywgdGhlbiB3ZSBu
ZWVkIHRvIGZpbmlzaCB0aGUgam9iIGxhdGVyLgotICAgICAgICBBU1NFUlQoIW1fc3luY1RpbWVy
LmlzQWN0aXZlKCkpOwotICAgICAgICBtX3N5bmNUaW1lci5zdGFydE9uZVNob3QoU3RvcmFnZVN5
bmNJbnRlcnZhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBi
YWxhbmNlZCBieSB0aGUgY2FsbHMgdG8gZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQot
ICAgICAgICAvLyBzY2hlZHVsZUl0ZW1Gb3JTeW5jLCBzY2hlZHVsZUNsZWFyLCBhbmQgc2NoZWR1
bGVGaW5hbFN5bmMgZnVuY3Rpb25zLgotICAgICAgICBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigp
OwotCi0gICAgICAgIG1fY2hhbmdlZEl0ZW1zLmNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIFN0
b3JhZ2VBcmVhU3luYzo6b3BlbkRhdGFiYXNlKE9wZW5EYXRhYmFzZVBhcmFtVHlwZSBvcGVuaW5n
U3RyYXRlZ3kpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFt
X2RhdGFiYXNlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VPcGVuRmFpbGVkKTsK
LQotICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9u
Q291bnRlcjsKLQotICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+
ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOwotCi0gICAgaWYgKCFm
aWxlRXhpc3RzKGRhdGFiYXNlRmlsZW5hbWUpICYmIG9wZW5pbmdTdHJhdGVneSA9PSBTa2lwSWZO
b25FeGlzdGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRhdGFiYXNlRmlsZW5hbWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmlsZW5hbWUgZm9yIGxvY2FsIHN0b3Jh
Z2UgZGF0YWJhc2UgaXMgZW1wdHkgLSBjYW5ub3Qgb3BlbiBmb3IgcGVyc2lzdGVudCBzdG9yYWdl
Iik7Ci0gICAgICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAgICBtX2RhdGFiYXNlT3BlbkZhaWxl
ZCA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBIFN0b3JhZ2VUcmFj
a2VyIHRocmVhZCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxlZCB0byBkZWxldGUgdGhlIGRiIHdlJ3Jl
Ci0gICAgLy8gcmVvcGVuaW5nLCBzbyBjYW5jZWwgcG9zc2libGUgZGVsZXRpb24uCi0gICAgU3Rv
cmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5jZWxEZWxldGluZ09yaWdpbihtX2RhdGFiYXNlSWRl
bnRpZmllcik7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZUZpbGVuYW1lKSkg
ewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9y
IGxvY2FsIHN0b3JhZ2UiLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICBtYXJrSW1wb3J0ZWQoKTsKLSAgICAgICAgbV9kYXRhYmFzZU9wZW5GYWlsZWQgPSB0cnVlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7
Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0Us
IHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKSkgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdl
Iik7Ci0gICAgICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAgICBtX2RhdGFiYXNlT3BlbkZhaWxl
ZCA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdG9yYWdlVHJhY2tlcjo6
dHJhY2tlcigpLnNldE9yaWdpbkRldGFpbHMobV9kYXRhYmFzZUlkZW50aWZpZXIsIGRhdGFiYXNl
RmlsZW5hbWUpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlm
TmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkl0ZW1UYWJsZSIp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RhdGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIExJTUlUIDEiKTsKLSAg
ICAgICAgLy8gdGhpcyBxdWVyeSBpc24ndCBldmVyIGV4ZWN1dGVkLgotICAgICAgICBpZiAocXVl
cnkuaXNDb2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBhbHRlciB0YWJsZSBmb3IgYmFja3dhcmQgY29tcGxpYW5jZSwgY2hhbmdlIHRo
ZSB2YWx1ZSB0eXBlIGZyb20gVEVYVCB0byBCTE9CLgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b21tYW5kc1tdID0gewotICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSXRlbVRhYmxlMiIs
Ci0gICAgICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRFWFQgVU5JUVVFIE9OIENP
TkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiLAot
ICAgICAgICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBmcm9tIEl0ZW1UYWJsZSIs
Ci0gICAgICAgICJEUk9QIFRBQkxFIEl0ZW1UYWJsZSIsCi0gICAgICAgICJBTFRFUiBUQUJMRSBJ
dGVtVGFibGUyIFJFTkFNRSBUTyBJdGVtVGFibGUiLAotICAgICAgICAwLAotICAgIH07Ci0KLSAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlLCBmYWxzZSk7Ci0gICAg
dHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgY29tbWFuZHNbaV07
ICsraSkgewotICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY29tbWFuZHNb
aV0pKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtaWdyYXRlIHRhYmxlIEl0
ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSB3aGVuIGV4ZWN1dGluZzogJXMiLCBjb21tYW5kc1tp
XSk7Ci0gICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygpOwotCi0gICAgICAgICAgICAv
LyBmaW5hbGx5IGl0IHdpbGwgdHJ5IHRvIGtlZXAgYSBiYWNrdXAgb2YgSXRlbVRhYmxlIGZvciB0
aGUgZnV0dXJlIHJlc3RvcmF0aW9uLgotICAgICAgICAgICAgLy8gTk9USUNFOiB0aGlzIHdpbGwg
ZXNzZW50aWFsbHkgREVMRVRFIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBidXQgdGhhdCdzIGJldHRl
cgotICAgICAgICAgICAgLy8gdGhhbiBjb250aW51YWxseSBoaXR0aW5nIHRoaXMgY2FzZSBhbmQg
bmV2ZXIgYmVpbmcgYWJsZSB0byB1c2UgdGhlIGxvY2FsIHN0b3JhZ2UuCi0gICAgICAgICAgICAv
LyBpZiB0aGlzIGlzIGV2ZXIgaGl0LCBpdCdzIGRlZmluaXRlbHkgYSBidWcuCi0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVj
dXRlQ29tbWFuZCgiQUxURVIgVEFCTEUgSXRlbVRhYmxlIFJFTkFNRSBUTyBCYWNrdXBfSXRlbVRh
YmxlIikpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2F2ZSBJdGVtVGFi
bGUgYWZ0ZXIgbWlncmF0aW9uIGpvYiBmYWlsZWQuIik7Ci0KLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLX0KLQotdm9pZCBT
dG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwotICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0KLSAgICBvcGVuRGF0
YWJhc2UoU2tpcElmTm9uRXhpc3RlbnQpOwotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkg
ewotICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUgRlJP
TSBJdGVtVGFibGUiKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7
Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0ZW1UYWJs
ZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7Ci0K
LSAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwotICAgIHdoaWxlIChyZXN1bHQgPT0gU1FM
UmVzdWx0Um93KSB7Ci0gICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRleHQoMCks
IHF1ZXJ5LmdldENvbHVtbkJsb2JBc1N0cmluZygxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5
LnN0ZXAoKTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJFcnJvciByZWFkaW5nIGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBs
b2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbXMoaXRlbU1hcCk7Ci0KLSAg
ICBtYXJrSW1wb3J0ZWQoKTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYVN5bmM6Om1hcmtJbXBvcnRl
ZCgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgbV9pbXBv
cnRDb21wbGV0ZSA9IHRydWU7Ci0gICAgbV9pbXBvcnRDb25kaXRpb24uc2lnbmFsKCk7Ci19Ci0K
LS8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYWxsb3cgdXNlIG9mIFN0b3JhZ2VB
cmVhcyB3aGlsZSBpdCdzIGltcG9ydGluZyAod2hlbiBzYWZlIHRvIGRvIHNvKS4KLS8vIEJsb2Nr
aW5nIGV2ZXJ5dGhpbmcgdW50aWwgdGhlIGltcG9ydCBpcyBjb21wbGV0ZSBpcyBieSBmYXIgdGhl
IHNpbXBsZXN0IGFuZCBzYWZlc3QgdGhpbmcgdG8gZG8sIGJ1dAotLy8gdGhlcmUgaXMgY2VydGFp
bmx5IHJvb20gZm9yIHNhZmUgb3B0aW1pemF0aW9uOiBLZXkvbGVuZ3RoIHdpbGwgbmV2ZXIgYmUg
YWJsZSB0byBtYWtlIHVzZSBvZiBzdWNoIGFuCi0vLyBvcHRpbWl6YXRpb24gKHNpbmNlIHRoZSBv
cmRlciBvZiBpdGVyYXRpb24gY2FuIGNoYW5nZSBhcyBpdGVtcyBhcmUgYmVpbmcgYWRkZWQpLiBH
ZXQgY2FuIHJldHVybiBhbnkKLS8vIGl0ZW0gY3VycmVudGx5IGluIHRoZSBtYXAuIEdldC9yZW1v
dmUgY2FuIHdvcmsgd2hldGhlciBvciBub3QgaXQncyBpbiB0aGUgbWFwLCBidXQgd2UnbGwgbmVl
ZCBhIGxpc3QKLS8vIG9mIGl0ZW1zIHRoZSBpbXBvcnQgc2hvdWxkIG5vdCBvdmVyd3JpdGUuIENs
ZWFyIGNhbiBhbHNvIHdvcmssIGJ1dCBpdCdsbCBuZWVkIHRvIGtpbGwgdGhlIGltcG9ydAotLy8g
am9iIGZpcnN0Lgotdm9pZCBTdG9yYWdlQXJlYVN5bmM6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZhc3QgcGF0aC4g
IFdlIHNldCBtX3N0b3JhZ2VBcmVhIHRvIDAgb25seSBhZnRlciBtX2ltcG9ydENvbXBsZXRlIGJl
aW5nIHRydWUuCi0gICAgaWYgKCFtX3N0b3JhZ2VBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKLSAgICB3aGlsZSAoIW1faW1wb3J0
Q29tcGxldGUpCi0gICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndhaXQobV9pbXBvcnRMb2NrKTsK
LSAgICBtX3N0b3JhZ2VBcmVhID0gMDsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMo
Ym9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMpCi17
Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoaXRlbXMuaXNFbXB0eSgp
ICYmICFjbGVhckl0ZW1zICYmICFtX3N5bmNDbG9zZURhdGFiYXNlKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fZGF0YWJhc2VPcGVuRmFpbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkgJiYgbV9zeW5jQ2xvc2VEYXRhYmFzZSkgewotICAgICAg
ICBtX3N5bmNDbG9zZURhdGFiYXNlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIG9wZW5EYXRhYmFzZShDcmVh
dGVJZk5vbkV4aXN0ZW50KTsKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENsb3NpbmcgdGhpcyBkYiBiZWNhdXNlIGl0IGlzIGFib3V0IHRv
IGJlIGRlbGV0ZWQgYnkgU3RvcmFnZVRyYWNrZXIuCi0gICAgLy8gVGhlIGRlbGV0ZSB3aWxsIGJl
IGNhbmNlbGxlZCBpZiBTdG9yYWdlQXJlYVN5bmMgbmVlZHMgdG8gcmVvcGVuIHRoZSBkYgotICAg
IC8vIHRvIHdyaXRlIG5ldyBpdGVtcyBjcmVhdGVkIGFmdGVyIHRoZSByZXF1ZXN0IHRvIGRlbGV0
ZSB0aGUgZGIuCi0gICAgaWYgKG1fc3luY0Nsb3NlRGF0YWJhc2UpIHsKLSAgICAgICAgbV9zeW5j
Q2xvc2VEYXRhYmFzZSA9IGZhbHNlOwotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotCi0gICAgLy8gSWYgdGhlIGNsZWFyIGZs
YWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdlIHdyaXRlIGFu
eSBuZXcgb25lcyBpbi4KLSAgICBpZiAoY2xlYXJJdGVtcykgewotICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOwotICAgICAg
ICBpZiAoY2xlYXIucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0
byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgpOwotICAgICAgICBpZiAocmVz
dWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNsZWFyIGFsbCBpdGVtcyBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVz
dWx0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFNRTGl0
ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxV
RVMgKD8sID8pIik7Ci0gICAgaWYgKGluc2VydC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0g
Y2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmUobV9kYXRhYmFzZSwgIkRFTEVU
RSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOwotICAgIGlmIChyZW1vdmUucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUg
ZGVsZXRlIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNl
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlbXMuZW5kKCk7Ci0KLSAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwot
ICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRl
bXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEJhc2VkIG9uIHRoZSBu
dWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBh
biBpbnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBp
dC0+dmFsdWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7Ci0KLSAgICAgICAgcXVlcnkuYmlu
ZFRleHQoMSwgaXQtPmtleSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBp
cyBub24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2YWx1
ZS4KLSAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBxdWVyeS5i
aW5kQmxvYigyLCBpdC0+dmFsdWUpOwotCi0gICAgICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVw
KCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0
YWJhc2UgLSAlaSIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHF1ZXJ5LnJlc2V0KCk7Ci0gICAgfQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwot
fQotCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybVN5bmMoKQotewotICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgYm9vbCBjbGVhckl0ZW1zOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IGl0ZW1zOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
c3luY0xvY2spOwotCi0gICAgICAgIEFTU0VSVChtX3N5bmNTY2hlZHVsZWQpOwotCi0gICAgICAg
IGNsZWFySXRlbXMgPSBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmc7Ci0gICAgICAgIG1faXRlbXNQ
ZW5kaW5nU3luYy5zd2FwKGl0ZW1zKTsKLQotICAgICAgICBtX2NsZWFySXRlbXNXaGlsZVN5bmNp
bmcgPSBmYWxzZTsKLSAgICAgICAgbV9zeW5jU2NoZWR1bGVkID0gZmFsc2U7Ci0gICAgICAgIG1f
c3luY0luUHJvZ3Jlc3MgPSB0cnVlOwotICAgIH0KLQotICAgIHN5bmMoY2xlYXJJdGVtcywgaXRl
bXMpOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zeW5jTG9jayk7Ci0g
ICAgICAgIG1fc3luY0luUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgZm9s
bG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlv
biBpbiB0aGUKLSAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KLSAgICBlbmFibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlE
YXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSIpOwotICAg
IGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcmVzdWx0ID0gcXVl
cnkuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIExP
R19FUlJPUigiTm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1U
YWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aW50IGNvdW50ID0gcXVlcnkuZ2V0Q29sdW1uSW50KDApOwotICAgIGlmICghY291bnQpIHsKLSAg
ICAgICAgcXVlcnkuZmluYWxpemUoKTsKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAg
ICAgICBpZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7Ci0gICAgICAg
ICAgICBTdHJpbmdJbXBsKiBkYXRhYmFzZUlkZW50aWZpZXJDb3B5ID0gJm1fZGF0YWJhc2VJZGVu
dGlmaWVyLmltcGwoKS0+aXNvbGF0ZWRDb3B5KCkubGVha1JlZigpOwotICAgICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVyQ29weV0gewotICAgICAgICAgICAgICAg
IFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0
YWJhc2VJZGVudGlmaWVyQ29weSk7Ci0gICAgICAgICAgICAgICAgZGF0YWJhc2VJZGVudGlmaWVy
Q29weS0+ZGVyZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJh
c2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgICAgICAgICBpZiAoIWRlbGV0
ZUZpbGUoZGF0YWJhc2VGaWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFTeW5jOjpz
Y2hlZHVsZVN5bmMoKQotewotICAgIHN5bmNUaW1lckZpcmVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFTeW5jLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWFhNTA1ZmM3ZDg0MjJkYTJhY2IzNjQ5YzczNmQ5
ZTEyYTM2YzBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RvcmFnZUFyZWFTeW5jX2gKLSNkZWZpbmUgU3Rv
cmFnZUFyZWFTeW5jX2gKLQotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
VGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGcmFtZTsKLWNsYXNz
IFN0b3JhZ2VBcmVhSW1wbDsKLWNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKLQotY2xhc3MgU3Rv
cmFnZUFyZWFTeW5jIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VBcmVhU3lu
Yz4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gY3Jl
YXRlKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgflN0b3JhZ2VB
cmVhU3luYygpOwotCi0gICAgdm9pZCBzY2hlZHVsZUZpbmFsU3luYygpOwotICAgIHZvaWQgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlSXRlbUZvclN5bmMo
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgc2NoZWR1
bGVDbGVhcigpOwotICAgIHZvaWQgc2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7Ci0KLSAgICB2b2lk
IHNjaGVkdWxlU3luYygpOwotCi1wcml2YXRlOgotICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNzUmVm
UHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOwotCi0gICAgVGltZXIgbV9zeW5jVGltZXI7
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9jaGFuZ2VkSXRlbXM7Ci0gICAgYm9vbCBt
X2l0ZW1zQ2xlYXJlZDsKLQotICAgIGJvb2wgbV9maW5hbFN5bmNTY2hlZHVsZWQ7Ci0KLSAgICBS
ZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBtX3N0b3JhZ2VBcmVhOwotICAgIFJlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Ci0KLSAgICAvLyBUaGUgZGF0YWJhc2UgaGFuZGxl
IHdpbGwgb25seSBldmVyIGJlIG9wZW5lZCBhbmQgdXNlZCBvbiB0aGUgYmFja2dyb3VuZCB0aHJl
YWQuCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLQotICAgIC8vIFRoZSBmb2xsb3dp
bmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hyb25pemF0aW9uIGlzc3Vlcy4K
LXB1YmxpYzoKLSAgICAvLyBDYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQKLSAgICB2
b2lkIHBlcmZvcm1JbXBvcnQoKTsKLSAgICB2b2lkIHBlcmZvcm1TeW5jKCk7Ci0gICAgdm9pZCBk
ZWxldGVFbXB0eURhdGFiYXNlKCk7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBPcGVuRGF0YWJhc2VQ
YXJhbVR5cGUgewotICAgICAgQ3JlYXRlSWZOb25FeGlzdGVudCwKLSAgICAgIFNraXBJZk5vbkV4
aXN0ZW50Ci0gICAgfTsKLQotICAgIHZvaWQgc3luY1RpbWVyRmlyZWQoKTsKLSAgICB2b2lkIG9w
ZW5EYXRhYmFzZShPcGVuRGF0YWJhc2VQYXJhbVR5cGUgb3BlbmluZ1N0cmF0ZWd5KTsKLSAgICB2
b2lkIHN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
aXRlbXMpOwotCi0gICAgY29uc3QgU3RyaW5nIG1fZGF0YWJhc2VJZGVudGlmaWVyOwotCi0gICAg
TXV0ZXggbV9zeW5jTG9jazsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2l0ZW1zUGVu
ZGluZ1N5bmM7Ci0gICAgYm9vbCBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmc7Ci0gICAgYm9vbCBt
X3N5bmNTY2hlZHVsZWQ7Ci0gICAgYm9vbCBtX3N5bmNJblByb2dyZXNzOwotICAgIGJvb2wgbV9k
YXRhYmFzZU9wZW5GYWlsZWQ7Ci0KLSAgICBib29sIG1fc3luY0Nsb3NlRGF0YWJhc2U7Ci0KLSAg
ICBtdXRhYmxlIE11dGV4IG1faW1wb3J0TG9jazsKLSAgICBUaHJlYWRDb25kaXRpb24gbV9pbXBv
cnRDb25kaXRpb247Ci0gICAgYm9vbCBtX2ltcG9ydENvbXBsZXRlOwotICAgIHZvaWQgbWFya0lt
cG9ydGVkKCk7Ci0gICAgdm9pZCBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFN0b3JhZ2VBcmVhU3luY19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU5ZjExY2JhYjRiMTBlNjE0ZTliODA3YmI1NDYyMjk0
NTY5N2RkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaCIKLQotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhSW1wbC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKLSNpbmNsdWRlICJTdG9y
YWdlU3luY01hbmFnZXIuaCIKLSNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgotI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBIYXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVzcGFjZUltcGwqPiYgbG9jYWxTdG9yYWdl
TmFtZXNwYWNlTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJp
bmcsIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKj4+IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDsKLQot
ICAgIHJldHVybiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7Ci19Ci0KLVJlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlSW1wbD4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNyZWF0ZVNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKHVuc2lnbmVkIHF1b3RhKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rv
cmFnZU5hbWVzcGFjZUltcGwoU2Vzc2lvblN0b3JhZ2UsIFN0cmluZygpLCBxdW90YSkpOwotfQot
Ci1SZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpnZXRP
ckNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwg
dW5zaWduZWQgcXVvdGEpCi17Ci0gICAgQVNTRVJUKCFkYXRhYmFzZVBhdGguaXNOdWxsKCkpOwot
Ci0gICAgYXV0byYgc2xvdCA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmFkZChkYXRhYmFz
ZVBhdGgsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoc2xvdCkKLSAgICAgICAg
cmV0dXJuIHNsb3Q7Ci0KLSAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IHN0b3JhZ2VO
YW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwoTG9jYWxTdG9yYWdl
LCBkYXRhYmFzZVBhdGgsIHF1b3RhKSk7Ci0gICAgc2xvdCA9IHN0b3JhZ2VOYW1lc3BhY2UuZ2V0
KCk7Ci0KLSAgICByZXR1cm4gc3RvcmFnZU5hbWVzcGFjZTsKLX0KLQotU3RvcmFnZU5hbWVzcGFj
ZUltcGw6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBjb25z
dCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3RhKQotICAgIDogbV9zdG9yYWdlVHlwZShzdG9y
YWdlVHlwZSkKLSAgICAsIG1fcGF0aChwYXRoLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9zeW5j
TWFuYWdlcigwKQotICAgICwgbV9xdW90YShxdW90YSkKLSAgICAsIG1faXNTaHV0ZG93bihmYWxz
ZSkKLXsKLSAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UgJiYgIW1fcGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIG1fc3luY01hbmFnZXIgPSBTdG9yYWdlU3luY01hbmFnZXI6OmNy
ZWF0ZShtX3BhdGgpOwotfQotCi1TdG9yYWdlTmFtZXNwYWNlSW1wbDo6flN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1fc3Rv
cmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VO
YW1lc3BhY2VNYXAoKS5nZXQobV9wYXRoKSA9PSB0aGlzKTsKLSAgICAgICAgbG9jYWxTdG9yYWdl
TmFtZXNwYWNlTWFwKCkucmVtb3ZlKG1fcGF0aCk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2lzU2h1
dGRvd24pCi0gICAgICAgIGNsb3NlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFj
ZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoUGFnZSopCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgQVNTRVJUKG1fc3Rv
cmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpOwotCi0gICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsPiBuZXdOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwo
bV9zdG9yYWdlVHlwZSwgbV9wYXRoLCBtX3F1b3RhKSk7Ci0KLSAgICBTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9IGVuZDsg
KytpKQotICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGktPmtleSwg
aS0+dmFsdWUtPmNvcHkoKSk7Ci0gICAgcmV0dXJuIG5ld05hbWVzcGFjZS5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzdG9yYWdl
QXJlYShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4pCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0KLSAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IHBycE9yaWdpbjsKLSAgICBSZWZQdHI8U3RvcmFn
ZUFyZWFJbXBsPiBzdG9yYWdlQXJlYTsKLSAgICBpZiAoKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdl
QXJlYU1hcC5nZXQob3JpZ2luKSkpCi0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNl
KCk7Ci0KLSAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKG1fc3RvcmFn
ZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlciwgbV9xdW90YSk7Ci0gICAgbV9zdG9yYWdlQXJl
YU1hcC5zZXQob3JpZ2luLnJlbGVhc2UoKSwgc3RvcmFnZUFyZWEpOwotICAgIHJldHVybiBzdG9y
YWdlQXJlYS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3Nl
KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faXNTaHV0ZG93
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UncmUgc2Vzc2lvbiBzdG9yYWdlLCB3
ZSBzaG91bGRuJ3QgbmVlZCB0byBkbyBhbnkgd29yayBoZXJlLgotICAgIGlmIChtX3N0b3JhZ2VU
eXBlID09IFNlc3Npb25TdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9zeW5jTWFuYWdlcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjpp
dGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpdC0+dmFsdWUtPmNsb3NlKCk7Ci0KLSAgICBpZiAobV9zeW5jTWFuYWdlcikKLSAg
ICAgICAgbV9zeW5jTWFuYWdlci0+Y2xvc2UoKTsKLQotICAgIG1faXNTaHV0ZG93biA9IHRydWU7
Ci19Ci0KLXZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24o
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVh
TWFwLmdldChvcmlnaW4pOwotICAgIGlmIChzdG9yYWdlQXJlYSkKLSAgICAgICAgc3RvcmFnZUFy
ZWEtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKLX0KLQotdm9pZCBTdG9yYWdlTmFtZXNwYWNl
SW1wbDo6Y2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24oKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdl
QXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1f
c3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+dmFs
dWUtPmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKLX0KLSAgICAKLXZvaWQgU3RvcmFnZU5hbWVz
cGFjZUltcGw6OnN5bmMoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0gICAg
Zm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5zeW5jKCk7Ci19Ci0KLXZv
aWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNsb3NlSWRsZUxvY2FsU3RvcmFnZURhdGFiYXNlcygp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKFN0b3JhZ2VBcmVh
TWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpdC0+dmFsdWUtPmNsb3NlRGF0YWJhc2VJZklkbGUoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTdjYzA4NmIzMzAw
M2I5NGE4OTc2OGIzNDMxMTc3ZTgyYmU1MDMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
X2gKLSNkZWZpbmUgU3RvcmFnZU5hbWVzcGFjZUltcGxfaAotCi0jaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW5IYXNoLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJTdG9yYWdl
TmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgU3RvcmFnZUFyZWFJbXBsOwotCi1jbGFzcyBTdG9yYWdlTmFtZXNwYWNl
SW1wbCA6IHB1YmxpYyBTdG9yYWdlTmFtZXNwYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
UHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1
bnNpZ25lZCBxdW90YSk7Ci0gICAgc3RhdGljIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4g
Z2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBh
dGgsIHVuc2lnbmVkIHF1b3RhKTsKLSAgICB2aXJ0dWFsIH5TdG9yYWdlTmFtZXNwYWNlSW1wbCgp
OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPikgIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KFBhZ2UqIG5ld1BhZ2UpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBjbG9zZSgpIG92ZXJyaWRlOwotCi0gICAgLy8gTm90IHJlbW92aW5nIHRoZSBv
cmlnaW4ncyBTdG9yYWdlQXJlYSBmcm9tIG1fc3RvcmFnZUFyZWFNYXAgYmVjYXVzZQotICAgIC8v
IHdlJ3JlIGp1c3QgZGVsZXRpbmcgdGhlIHVuZGVybHlpbmcgZGIgZmlsZS4gSWYgYW4gaXRlbSBp
cyBhZGRlZCBpbW1lZGlhdGVseQotICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRpb24sIHdlIHdhbnQg
dGhlIHNhbWUgU3RvcmFnZUFyZWEgdG8gZXZlbnR1YWxseSB0cmlnZ2VyCi0gICAgLy8gYSBzeW5j
IGFuZCBmb3IgU3RvcmFnZUFyZWFTeW5jIHRvIHJlY3JlYXRlIHRoZSBiYWNraW5nIGRiIGZpbGUu
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2VjdXJpdHlPcmlnaW4q
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5zRm9yRGVsZXRpb24o
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luYygpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBjbG9zZUlkbGVMb2NhbFN0b3JhZ2VEYXRhYmFzZXMoKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5n
JiBwYXRoLCB1bnNpZ25lZCBxdW90YSk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4+IFN0b3JhZ2VBcmVhTWFwOwot
ICAgIFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFyZWFNYXA7Ci0KLSAgICBTdG9yYWdlVHlwZSBt
X3N0b3JhZ2VUeXBlOwotCi0gICAgLy8gT25seSB1c2VkIGlmIG1fc3RvcmFnZVR5cGUgPT0gTG9j
YWxTdG9yYWdlIGFuZCB0aGUgcGF0aCB3YXMgbm90ICIiIGluIG91ciBjb25zdHJ1Y3Rvci4KLSAg
ICBTdHJpbmcgbV9wYXRoOwotICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01h
bmFnZXI7Ci0KLSAgICAvLyBUaGUgZGVmYXVsdCBxdW90YSBmb3IgZWFjaCBuZXcgc3RvcmFnZSBh
cmVhLgotICAgIHVuc2lnbmVkIG1fcXVvdGE7Ci0KLSAgICBib29sIG1faXNTaHV0ZG93bjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlNzJhMDhiZWRjZWVmYTVhMWRmZDJlY2Q2
MTQ3MDA0ZTU2M2NlNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5j
TWFuYWdlci5oIgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VU
aHJlYWQuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPFN0b3JhZ2VT
eW5jTWFuYWdlcj4gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZVN5bmNNYW5hZ2VyKHBhdGgpKTsK
LX0KLQotU3RvcmFnZVN5bmNNYW5hZ2VyOjpTdG9yYWdlU3luY01hbmFnZXIoY29uc3QgU3RyaW5n
JiBwYXRoKQotICAgIDogbV90aHJlYWQoc3RkOjptYWtlX3VuaXF1ZTxTdG9yYWdlVGhyZWFkPigp
KQotICAgICwgbV9wYXRoKHBhdGguaXNvbGF0ZWRDb3B5KCkpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fcGF0aC5pc0VtcHR5KCkpOwotICAgIG1fdGhyZWFk
LT5zdGFydCgpOwotfQotCi1TdG9yYWdlU3luY01hbmFnZXI6On5TdG9yYWdlU3luY01hbmFnZXIo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX3RocmVhZCk7
Ci19Ci0KLS8vIENhbGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgotU3RyaW5nIFN0b3JhZ2VT
eW5jTWFuYWdlcjo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlk
ZW50aWZpZXIpCi17Ci0gICAgaWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMobV9wYXRoKSkgewotICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZWQgdG8gY3JlYXRlIExvY2FsU3RvcmFnZSBkYXRhYmFzZSBw
YXRoICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3BhdGgsIGRh
dGFiYXNlSWRlbnRpZmllciArICIubG9jYWxzdG9yYWdlIik7Ci19Ci0KLXZvaWQgU3RvcmFnZVN5
bmNNYW5hZ2VyOjpkaXNwYXRjaChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiBmdW5jdGlv
bikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3RocmVhZCk7
Ci0KLSAgICBpZiAobV90aHJlYWQpCi0gICAgICAgIG1fdGhyZWFkLT5kaXNwYXRjaChmdW5jdGlv
bik7Ci19Ci0KLXZvaWQgU3RvcmFnZVN5bmNNYW5hZ2VyOjpjbG9zZSgpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX3RocmVhZCkgewotICAgICAgICBtX3RocmVh
ZC0+dGVybWluYXRlKCk7Ci0gICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VT
eW5jTWFuYWdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODY1MWNhMWQyMzRi
ZTZkNjNlNzkyOGNhMTg3YzgxMzFkOWRmYzBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlU3luY01hbmFnZXJfaAot
I2RlZmluZSBTdG9yYWdlU3luY01hbmFnZXJfaAotCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdG9yYWdlVGhyZWFkOwotY2xhc3MgU3Rv
cmFnZUFyZWFTeW5jOwotCi1jbGFzcyBTdG9yYWdlU3luY01hbmFnZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxTdG9yYWdlU3luY01hbmFnZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOwotICAgIH5T
dG9yYWdlU3luY01hbmFnZXIoKTsKLQotICAgIHZvaWQgZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiYpOwotICAgIHZvaWQgY2xvc2UoKTsKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBTdG9yYWdlU3luY01hbmFnZXIoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKLQotLy8gVGhlIGZvbGxvd2luZyBt
ZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzCi1wdWJs
aWM6Ci0gICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgotICAg
IFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRp
Zmllcik7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fcGF0aDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmVjZGU5NzIwNTk3MjE5YWU1YzM1MzkxZWYwNTRkYWYxZDhjNDA2ZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VUaHJlYWQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU3RvcmFnZVRocmVhZC5oIgotCi0jaW5jbHVkZSA8d3RmL0F1dG9kcmFp
bmVkUG9vbC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIEhhc2hTZXQ8U3RvcmFnZVRocmVhZCo+JiBhY3RpdmVTdG9yYWdlVGhy
ZWFkcygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBERVBSRUNBVEVEX0RF
RklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdG9yYWdlVGhyZWFkKj4sIHRocmVhZHMsICgpKTsK
LSAgICByZXR1cm4gdGhyZWFkczsKLX0KLQotU3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgp
Ci0gICAgOiBtX3RocmVhZElEKDApCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0K
LQotU3RvcmFnZVRocmVhZDo6flN0b3JhZ2VUaHJlYWQoKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX3RocmVhZElEKTsKLX0KLQotYm9vbCBTdG9yYWdlVGhy
ZWFkOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1f
dGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoU3RvcmFnZVRocmVh
ZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9yYWdl
Iik7Ci0gICAgYWN0aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0dXJuIG1f
dGhyZWFkSUQ7Ci19Ci0KLXZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxi
YWNrKHZvaWQqIHRocmVhZCkKLXsKLSAgICBzdGF0aWNfY2FzdDxTdG9yYWdlVGhyZWFkKj4odGhy
ZWFkKS0+dGhyZWFkRW50cnlQb2ludCgpOwotfQotCi12b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVh
ZEVudHJ5UG9pbnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgd2hp
bGUgKGF1dG8gZnVuY3Rpb24gPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKLSAgICAgICAg
QXV0b2RyYWluZWRQb29sIHBvb2w7Ci0gICAgICAgICgqZnVuY3Rpb24pKCk7Ci0gICAgfQotfQot
Ci12b2lkIFN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4mIGZ1bmN0aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJU
KCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAgIG1fcXVldWUuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4oZnVuY3Rpb24pKTsKLX0KLQot
dm9pZCBTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAg
IGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwotICAgIC8vIEV2ZW4gaW4gd2Vp
cmQsIGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhyZWFk
IHRvIHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpmdW5jdGlvbjx2b2lkICgp
Pj4oW3RoaXNdIHsKLSAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwotICAgIH0pKTsKLSAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKLSAgICBBU1NFUlQobV9xdWV1ZS5r
aWxsZWQoKSk7Ci0gICAgbV90aHJlYWRJRCA9IDA7Ci19Ci0KLXZvaWQgU3RvcmFnZVRocmVhZDo6
cGVyZm9ybVRlcm1pbmF0ZSgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAg
bV9xdWV1ZS5raWxsKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZVRocmVhZDo6cmVsZWFzZUZhc3RNYWxs
b2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRzKCkKLXsKLSAgICBIYXNoU2V0PFN0b3JhZ2VUaHJlYWQq
PiYgdGhyZWFkcyA9IGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCk7Ci0KLSAgICBmb3IgKEhhc2hTZXQ8
U3RvcmFnZVRocmVhZCo+OjppdGVyYXRvciBpdCA9IHRocmVhZHMuYmVnaW4oKSwgZW5kID0gdGhy
ZWFkcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+ZGlzcGF0Y2goV1RG
OjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjUyYWM2
MTIxYzg0NjZkNDg2ZTRhNGRjOWVmM2E0ZTI4ODczZmU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRo
cmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RvcmFnZVRocmVhZF9oCi0jZGVm
aW5lIFN0b3JhZ2VUaHJlYWRfaAotCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBTdG9yYWdlQXJlYVN5bmM7Ci1jbGFzcyBTdG9yYWdlVGFzazsK
LQotY2xhc3MgU3RvcmFnZVRocmVhZCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFn
ZVRocmVhZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFN0b3JhZ2VU
aHJlYWQoKTsKLSAgICB+U3RvcmFnZVRocmVhZCgpOwotCi0gICAgYm9vbCBzdGFydCgpOwotICAg
IHZvaWQgdGVybWluYXRlKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiYpOwotCi0gICAgc3RhdGljIHZvaWQgcmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVt
b3J5SW5BbGxUaHJlYWRzKCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQ2FsbGVkIG9uIGJhY2tncm91
bmQgdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnRDYWxsYmFjayh2b2lk
Kik7Ci0gICAgdm9pZCB0aHJlYWRFbnRyeVBvaW50KCk7Ci0KLSAgICAvLyBCYWNrZ3JvdW5kIHRo
cmVhZCBwYXJ0IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJlLgotICAgIHZvaWQgcGVyZm9ybVRl
cm1pbmF0ZSgpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAgIE1lc3Nh
Z2VRdWV1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fcXVldWU7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTdG9yYWdlVGhyZWFkX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhmYTUwOTM3NmNlZDMzYTBhZjU2MmU2ZmQ2YmI5ODk5YmRmMjRlYmEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlVHJhY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgot
Ci0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5o
IgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVRocmVhZC5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGV4dEVuY29k
aW5nLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxzcWxpdGUzX3ByaXZhdGUu
aD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTdG9yYWdlVHJhY2tl
ciogc3RvcmFnZVRyYWNrZXIgPSAwOwotCi0vLyBJZiB0aGVyZSBpcyBubyBkb2N1bWVudCByZWZl
cmVuY2luZyBhIHN0b3JhZ2UgZGF0YWJhc2UsIGNsb3NlIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNl
Ci0vLyBhZnRlciBpdCBoYXMgYmVlbiBpZGxlIGZvciBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRl
cnZhbCBzZWNvbmRzLgotc3RhdGljIGNvbnN0IGRvdWJsZSBEZWZhdWx0U3RvcmFnZURhdGFiYXNl
SWRsZUludGVydmFsID0gMzAwOwotICAgIAotdm9pZCBTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6
ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU3RvcmFnZVRyYWNrZXJDbGllbnQq
IGNsaWVudCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghc3Rv
cmFnZVRyYWNrZXIgfHwgIXN0b3JhZ2VUcmFja2VyLT5tX2NsaWVudCk7Ci0gICAgCi0gICAgaWYg
KCFzdG9yYWdlVHJhY2tlcikKLSAgICAgICAgc3RvcmFnZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRy
YWNrZXIoc3RvcmFnZVBhdGgpOwotICAgIAotICAgIHN0b3JhZ2VUcmFja2VyLT5tX2NsaWVudCA9
IGNsaWVudDsKLSAgICBzdG9yYWdlVHJhY2tlci0+bV9uZWVkc0luaXRpYWxpemF0aW9uID0gdHJ1
ZTsKLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6aW50ZXJuYWxJbml0aWFsaXplKCkKLXsKLSAg
ICBtX25lZWRzSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLQotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGV4dCBlbmNvZGluZyBtYXBzIGhhdmUgYmVlbiBi
dWlsdCBvbiB0aGUgbWFpbiB0aHJlYWQsIGFzIHRoZSBTdG9yYWdlVHJhY2tlciB0aHJlYWQgbWln
aHQgdHJ5IHRvIGRvIGl0IHRoZXJlIGluc3RlYWQuCi0gICAgLy8gRklYTUUgKDxyZGFyOi8vcHJv
YmxlbS85MTI3ODE5Pik6IElzIHRoZXJlIGEgbW9yZSBleHBsaWNpdCB3YXkgb2YgZG9pbmcgdGhp
cyBiZXNpZGVzIGFjY2Vzc2luZyB0aGUgVVRGOEVuY29kaW5nPwotICAgIFVURjhFbmNvZGluZygp
OwotICAgIAotICAgIHN0b3JhZ2VUcmFja2VyLT5zZXRJc0FjdGl2ZSh0cnVlKTsKLSAgICBzdG9y
YWdlVHJhY2tlci0+bV90aHJlYWQtPnN0YXJ0KCk7ICAKLSAgICBzdG9yYWdlVHJhY2tlci0+aW1w
b3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKLX0KLQotU3RvcmFnZVRyYWNrZXImIFN0b3JhZ2VUcmFj
a2VyOjp0cmFja2VyKCkKLXsKLSAgICBpZiAoIXN0b3JhZ2VUcmFja2VyKQotICAgICAgICBzdG9y
YWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tlcigiIik7Ci0gICAgaWYgKHN0b3JhZ2VUcmFj
a2VyLT5tX25lZWRzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHN0b3JhZ2VUcmFja2VyLT5pbnRl
cm5hbEluaXRpYWxpemUoKTsKLSAgICAKLSAgICByZXR1cm4gKnN0b3JhZ2VUcmFja2VyOwotfQot
Ci1TdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0
aCkKLSAgICA6IG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZVBhdGguaXNvbGF0ZWRDb3B5
KCkpCi0gICAgLCBtX2NsaWVudCgwKQotICAgICwgbV90aHJlYWQoc3RkOjptYWtlX3VuaXF1ZTxT
dG9yYWdlVGhyZWFkPigpKQotICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKLSAgICAsIG1fbmVlZHNJ
bml0aWFsaXphdGlvbihmYWxzZSkKLSAgICAsIG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFs
KERlZmF1bHRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpCi17Ci19Ci0KLXZvaWQgU3RvcmFn
ZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCi17
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0KLSAgICBpZiAobV9k
YXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotCi0gICAgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7Ci0KLSAgICB7Ci0gICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsKLSAgICAgICAgbV9vcmln
aW5TZXQuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1faXNBY3RpdmUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Ci19Ci0KLVN0cmluZyBTdG9y
YWdlVHJhY2tlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKTsKLX0KLQotU3RyaW5nIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YWJh
c2VNdXRleC50cnlMb2NrKCkpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgIlN0b3JhZ2VUcmFja2VyLmRiIik7Ci19Ci0KLXN0YXRp
YyBib29sIGVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBi
b29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQotewotICAgIGlmIChjcmVhdGVJZkRvZXNOb3RFeGlz
dCkKLSAgICAgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhkaXJlY3RvcnlOYW1lKGZpbGVO
YW1lKSk7Ci0KLSAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxlTmFtZSk7Ci19Ci0KLXZvaWQgU3Rv
cmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlz
dCkKLXsKLSAgICBBU1NFUlQobV9pc0FjdGl2ZSk7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2Fj
dGlvbkNvdW50ZXI7Ci0KLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOwot
Ci0gICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0aCgpOwotICAgIAotICAg
IGlmICghZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2Vz
Tm90RXhpc3QpKSB7Ci0gICAgICAgIGlmIChjcmVhdGVJZkRvZXNOb3RFeGlzdCkKLSAgICAgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhYmFzZSBmaWxlICclcyciLCBkYXRh
YmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0YWJhc2VQYXRoLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX2RhdGFiYXNl
LmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKLSAgICAKLSAgICBpZiAoIW1fZGF0YWJhc2UudGFi
bGVFeGlzdHMoIk9yaWdpbnMiKSkgewotICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChvcmlnaW4gVEVYVCBVTklRVUUgT04gQ09ORkxJ
Q1QgUkVQTEFDRSwgcGF0aCBURVhUKTsiKSkKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlVHJh
Y2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQoteyAgIAotICAgIGlmICghbV9pc0FjdGl2
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKG1fdGhyZWFkKTsKLQotICAgIG1fdGhyZWFkLT5kaXNwYXRjaChbdGhpc10gewot
ICAgICAgICBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBTdG9yYWdlVHJhY2tlcjo6ZmluaXNoZWRJbXBvcnRpbmdPcmlnaW5JZGVudGlmaWVycygpCi17
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0gICAgaWYgKG1fY2xp
ZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ09yaWdpbnMoKTsKLX0KLQot
dm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCkKLXsKLSAg
ICBBU1NFUlQobV9pc0FjdGl2ZSk7Ci0gICAgCi0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOwot
Ci0gICAgICAgIC8vIERvbid0IGZvcmNlIGNyZWF0aW9uIG9mIFN0b3JhZ2VUcmFja2VyJ3MgZGIg
anVzdCBiZWNhdXNlIGEgdHJhY2tlcgotICAgICAgICAvLyB3YXMgaW5pdGlhbGl6ZWQuIEl0IHdp
bGwgYmUgY3JlYXRlZCBpZiBsb2NhbCBzdG9yYWdlIGRicyBhcmUgZm91bmQKLSAgICAgICAgLy8g
Ynkgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJzZSgpIG9yIHRoZSBuZXh0IHRpbWUgYSBs
b2NhbCBzdG9yYWdlCi0gICAgICAgIC8vIGRiIGlzIGNyZWF0ZWQgYnkgU3RvcmFnZUFyZWFTeW5j
LgotICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKLQotICAgICAgICBpZiAobV9k
YXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICAgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dy
ZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotCi0gICAgICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lu
cyIpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVu
dC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdpblNldE11dGV4
KTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09
IFNRTFJlc3VsdFJvdykKLSAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0g
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBm
cm9tIHRoZSBkYXRhYmFzZS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2Vy
RGF0YWJhc2UoKTsKLSAgICAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Ns
aWVudE11dGV4KTsKLQotICAgICAgICBpZiAobV9jbGllbnQpIHsKLSAgICAgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsKLSAgICAgICAgICAgIE9yaWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7Ci0gICAgICAgICAgICBmb3Ig
KE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5
T3JpZ2luKCppdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKFt0
aGlzXSB7Ci0gICAgICAgIGZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRpZmllcnMoKTsKLSAg
ICB9KTsKLX0KLSAgICAKLXZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJh
Y2tlckRhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIFNR
TGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsK
LQotICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwot
ICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0gICAg
ICAgIHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLCAiKi5sb2Nh
bHN0b3JhZ2UiKTsKLSAgICB9Ci0KLSAgICAvLyBVc2UgYSBjb3B5IG9mIG1fb3JpZ2luU2V0IHRv
IGZpbmQgZXhwaXJlZCBlbnRyaWVzIGFuZCB0byBzY2hlZHVsZSB0aGVpcgotICAgIC8vIGRlbGV0
aW9ucyBmcm9tIGRpc2sgYW5kIGZyb20gbV9vcmlnaW5TZXQuCi0gICAgT3JpZ2luU2V0IG9yaWdp
blNldENvcHk7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRN
dXRleCk7Ci0gICAgICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3Jp
Z2luU2V0LmJlZ2luKCksIGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBvcmlnaW5TZXRDb3B5LmFkZCgoKml0KS5pc29sYXRlZENvcHkoKSk7Ci0g
ICAgfQotICAgIAotICAgIC8vIEFkZCBtaXNzaW5nIFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCi0g
ICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IEFT
Q0lJTGl0ZXJhbCgiLmxvY2Fsc3RvcmFnZSIpOwotCi0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpLCBlbmQgPSBwYXRocy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9ICppdDsKLQotICAg
ICAgICBpZiAocGF0aC5sZW5ndGgoKSA+IGZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgJiYgcGF0aC5l
bmRzV2l0aChmaWxlRXh0ZW5zaW9uLCB0cnVlKSkgewotICAgICAgICAgICAgU3RyaW5nIGZpbGUg
PSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7Ci0gICAgICAgICAgICBTdHJpbmcgb3JpZ2luSWRlbnRp
ZmllciA9IGZpbGUuc3Vic3RyaW5nKDAsIGZpbGUubGVuZ3RoKCkgLSBmaWxlRXh0ZW5zaW9uLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghb3JpZ2luU2V0Q29weS5jb250YWlucyhvcmlnaW5J
ZGVudGlmaWVyKSkKLSAgICAgICAgICAgICAgICBzeW5jU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5J
ZGVudGlmaWVyLCBwYXRoKTsKLQotICAgICAgICAgICAgZm91bmRPcmlnaW5zLmFkZChvcmlnaW5J
ZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERlbGV0ZSBzdGFsZSBTdG9y
YWdlVHJhY2tlciByZWNvcmRzLgotICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG9yaWdpblNldENvcHkuYmVnaW4oKSwgZW5kID0gb3JpZ2luU2V0Q29weS5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciA9
ICppdDsKLSAgICAgICAgaWYgKGZvdW5kT3JpZ2lucy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVy
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlm
aWVyQ29weSA9IG9yaWdpbklkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW3RoaXMsIG9yaWdpbklkZW50aWZpZXJDb3B5XSB7Ci0gICAgICAgICAgICBk
ZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyQ29weSk7Ci0gICAgICAg
IH0pOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxl
KQotewotICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgewotICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0KLSAgICAgICAgaWYg
KG1fb3JpZ2luU2V0LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB9
Ci0KLSAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllckNvcHkgPSBvcmlnaW5JZGVudGlmaWVyLmlz
b2xhdGVkQ29weSgpOwotICAgIFN0cmluZyBkYXRhYmFzZUZpbGVDb3B5ID0gZGF0YWJhc2VGaWxl
Lmlzb2xhdGVkQ29weSgpOwotICAgIGF1dG8gZnVuY3Rpb24gPSBbdGhpcywgb3JpZ2luSWRlbnRp
ZmllckNvcHksIGRhdGFiYXNlRmlsZUNvcHldIHsKLSAgICAgICAgc3luY1NldE9yaWdpbkRldGFp
bHMob3JpZ2luSWRlbnRpZmllckNvcHksIGRhdGFiYXNlRmlsZUNvcHkpOwotICAgIH07Ci0KLSAg
ICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFkKTsKLSAgICAg
ICAgbV90aHJlYWQtPmRpc3BhdGNoKGZ1bmN0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBGSVhNRTogVGhpcyB3ZWlyZCBwaW5nLXBvbmdpbmcgd2FzIGRvbmUgdG8gZml4IGEgZGVhZGxv
Y2suIFdlIHNob3VsZCBmaWd1cmUgb3V0IGEgY2xlYW5lciB3YXkgdG8gYXZvaWQgaXQgaW5zdGVh
ZC4KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgZnVuY3Rpb25dIHsKLSAgICAgICAg
ICAgIG1fdGhyZWFkLT5kaXNwYXRjaChmdW5jdGlvbik7Ci0gICAgICAgIH0pOwotICAgIH0KLX0K
LQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkKLXsKLSAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVz
c0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX2RhdGFiYXNlTXV0ZXgpOwotCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0cnVlKTsKLSAg
ICAKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdp
bnMgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJl
c3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4g
JyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfSAKLSAgICAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwg
b3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlRmls
ZSk7Ci0gICAgCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKLSAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0
cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICB7Ci0gICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsKLSAgICAgICAgaWYgKCFt
X29yaWdpblNldC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKLSAgICAgICAgICAgIG1fb3Jp
Z2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50
aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIHJlc3VsdCkKLXsKLSAgICBBU1NFUlQobV9pc0FjdGl2
ZSk7Ci0gICAgCi0gICAgaWYgKCFtX2lzQWN0aXZlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBN
dXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0KLSAgICBmb3IgKE9yaWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpLCBlbmQgPSBtX29yaWdp
blNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQuYXBwZW5kKFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKCppdCkpOwotfQotCi12b2lk
IFN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKCkKLXsKLSAgICBBU1NFUlQobV9pc0Fj
dGl2ZSk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV90aHJlYWQp
OwotICAgIAotICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgewot
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0gICAgICAgIHdp
bGxEZWxldGVBbGxPcmlnaW5zKCk7Ci0gICAgICAgIG1fb3JpZ2luU2V0LmNsZWFyKCk7Ci0gICAg
fQotCi0gICAgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdpbnMoKTsKLQot
ICAgIG1fdGhyZWFkLT5kaXNwYXRjaChbdGhpc10gewotICAgICAgICBzeW5jRGVsZXRlQWxsT3Jp
Z2lucygpOwotICAgIH0pOwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotc3RhdGljIHZvaWQgdHJ1
bmNhdGVEYXRhYmFzZUZpbGUoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKQotewotICAgIHNxbGl0
ZTNfZmlsZV9jb250cm9sKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgMCwgU1FMSVRFX1RSVU5D
QVRFX0RBVEFCQVNFLCAwKTsKLX0KLSNlbmRpZgotCi12b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5j
RGVsZXRlQWxsT3JpZ2lucygpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50
ZXI7Ci0gICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0gICAg
Ci0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9yaWdpbnMiKTsKLSAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIGlmICghY2FuRGVsZXRlT3Jp
Z2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGRlbGV0ZUZpbGUoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpOwotCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKLSAg
ICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0
Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFz
ZS4iKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0jaWYgUExBVEZPUk0oSU9T
KQotICAgICAgICB0cnVuY2F0ZURhdGFiYXNlRmlsZShtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUo
KSk7Ci0jZW5kaWYKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgIH0KLQotI2lmICFQ
TEFURk9STShJT1MpCi0gICAgaWYgKCFkZWxldGVGaWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSkp
IHsKLSAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGRl
bGV0ZSB0aGUgZGF0YWJhc2UgZmlsZSAoZS5nIHNvbWUgb3RoZXIgcHJvZ3JhbQotICAgICAgICAv
LyBsaWtlIGEgdmlydXMgc2Nhbm5lciBpcyBhY2Nlc3NpbmcgaXQpLCBtYWtlIHN1cmUgdG8gcmVt
b3ZlIGFsbCBlbnRyaWVzLgotICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKLSAg
ICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUg
RlJPTSBPcmlnaW5zIik7Ci0gICAgICAgIGlmIChkZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJl
IGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBhbGwgb3Jp
Z2lucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlbGV0
ZUVtcHR5RGlyZWN0b3J5KG1fc3RvcmFnZURpcmVjdG9yeVBhdGgpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOwot
fQotCi12b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKLXsgICAgCi0gICAgQVNTRVJUKG1faXNBY3RpdmUpOwotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fdGhyZWFkKTsKLSAgICAKLSAgICBpZiAoIW1faXNBY3Rp
dmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEJlZm9yZSBkZWxldGluZyBkYXRhYmFzZSwg
d2UgbmVlZCB0byBjbGVhciBpbi1tZW1vcnkgbG9jYWwgc3RvcmFnZSBkYXRhCi0gICAgLy8gaW4g
U3RvcmFnZUFyZWEsIGFuZCB0byBjbG9zZSB0aGUgU3RvcmFnZUFyZWEgZGIuIEl0J3MgcG9zc2li
bGUgZm9yIGFuCi0gICAgLy8gaXRlbSB0byBiZSBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBjbG9z
aW5nIHRoZSBkYiBhbmQgY2F1c2UgU3RvcmFnZUFyZWFTeW5jCi0gICAgLy8gdG8gcmVvcGVuIHRo
ZSBkYiBiZWZvcmUgdGhlIGRiIGlzIGRlbGV0ZWQgYnkgYSBTdG9yYWdlVHJhY2tlciB0aHJlYWQu
Ci0gICAgLy8gSW4gdGhpcyBjYXNlLCByZW9wZW5pbmcgdGhlIGRiIGluIFN0b3JhZ2VBcmVhU3lu
YyB3aWxsIGNhbmNlbCBhIHBlbmRpbmcKLSAgICAvLyBTdG9yYWdlVHJhY2tlciBkYiBkZWxldGlv
bi4KLSAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKG9yaWdpbik7Ci0K
LSAgICBTdHJpbmcgb3JpZ2luSWQgPSBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOwotICAg
IAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOwot
ICAgICAgICB3aWxsRGVsZXRlT3JpZ2luKG9yaWdpbklkKTsKLSAgICAgICAgbV9vcmlnaW5TZXQu
cmVtb3ZlKG9yaWdpbklkKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgb3JpZ2luSWRDb3B5ID0gb3Jp
Z2luSWQuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgbV90aHJlYWQtPmRpc3BhdGNoKFt0aGlzLCBvcmln
aW5JZENvcHldIHsKLSAgICAgICAgc3luY0RlbGV0ZU9yaWdpbihvcmlnaW5JZENvcHkpOwotICAg
IH0pOwotfQotCi12b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
LQotICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9u
Q291bnRlcjsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOwotICAg
IAotICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiQXR0ZW1wdGVkIHRvIGRlbGV0ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMg
YmVpbmcgY3JlYXRlZFxuIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7
Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
dHJpbmcgcGF0aCA9IGRhdGFiYXNlUGF0aEZvck9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKLSAg
ICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0
IGEgcmVxdWVzdCBmcm9tIHRoZSBBUEkgdG8gZGVsZXRlIHRoZSBzdG9yYWdlIGZvciBhbiBvcmln
aW4gdGhhdAotICAgICAgICAvLyBoYXMgbm8gc3VjaCBzdG9yYWdlLgotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iKTsKLSAgICBpZiAoZGVs
ZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGVs
ZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmICghZGVs
ZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIu
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZGVsZXRlRmls
ZShwYXRoKTsKLSAgICAKLSAgICBib29sIHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IGZhbHNl
OwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOwot
ICAgICAgICBtX29yaWdpblNldC5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAgIHNo
b3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IG1fb3JpZ2luU2V0LmlzRW1wdHkoKTsKLSAgICB9Ci0K
LSAgICBpZiAoc2hvdWxkRGVsZXRlVHJhY2tlckZpbGVzKSB7Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgICAgICB0cnVuY2F0ZURhdGFiYXNlRmlsZShtX2RhdGFiYXNlKTsKLSNlbmRpZgotICAgICAg
ICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgZGVsZXRl
RmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9y
eShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY2xpZW50TXV0ZXgpOwotICAgICAgICBpZiAobV9jbGll
bnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2lu
SWRlbnRpZmllcik7Ci0gICAgfQotfQotICAgIAotdm9pZCBTdG9yYWdlVHJhY2tlcjo6d2lsbERl
bGV0ZUFsbE9yaWdpbnMoKQotewotICAgIEFTU0VSVCghbV9vcmlnaW5TZXRNdXRleC50cnlMb2Nr
KCkpOwotCi0gICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5l
bmQoKTsKLSAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRl
ZC5hZGQoKCppdCkuaXNvbGF0ZWRDb3B5KCkpOwotfQotCi12b2lkIFN0b3JhZ2VUcmFja2VyOjp3
aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9vcmlnaW5TZXRNdXRleC50cnlM
b2NrKCkpOwotCi0gICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFkZChvcmlnaW5JZGVudGlmaWVy
KTsKLX0KLSAgICAKLWJvb2wgU3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlTXV0ZXgu
dHJ5TG9jaygpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0g
ICAgcmV0dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVy
KTsKLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4oY29uc3Qg
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQotewotICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0gICAg
ICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
b3JpZ2luc0JlaW5nRGVsZXRlZC5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgfQotfQot
Ci1ib29sIFN0b3JhZ2VUcmFja2VyOjppc0FjdGl2ZSgpCi17Ci0gICAgcmV0dXJuIG1faXNBY3Rp
dmU7Ci19Ci0KLXZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldElzQWN0aXZlKGJvb2wgZmxhZykKLXsK
LSAgICBtX2lzQWN0aXZlID0gZmxhZzsKLX0KLSAgICAKLVN0cmluZyBTdG9yYWdlVHJhY2tlcjo6
ZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsK
LSAgICBBU1NFUlQoIW1fZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOwotICAgIEFTU0VSVChtX2lz
QWN0aXZlKTsKLSAgICAKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3Vu
dGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRoU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8i
KTsKLSAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Ig
b3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIH0KLSAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbklkZW50aWZpZXIpOwotICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsK
LSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKLX0KLSAgICAK
LWxvbmcgbG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlza1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCi17Ci0gICAgaWYgKCFtX2lzQWN0aXZlKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOwotCi0gICAgU3RyaW5n
IHBhdGggPSBkYXRhYmFzZVBhdGhGb3JPcmlnaW4ob3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGxv
bmcgbG9uZyBzaXplOwotICAgIHJldHVybiBnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSA/IHNpemUg
OiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VUcmFja2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNmFjNzc4MjNm
ZmYyNGE0ZWM4ZTgyN2Y5OTg1ZDM0MDJhMWYzNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFN0b3JhZ2VUcmFja2VyX2gKLSNkZWZpbmUgU3RvcmFnZVRyYWNrZXJfaAotCi0jaW5jbHVkZSAi
U1FMaXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU3Rv
cmFnZVRhc2s7Ci1jbGFzcyBTdG9yYWdlVGhyZWFkOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1j
bGFzcyBTdG9yYWdlVHJhY2tlckNsaWVudDsgICAgCi0KLWNsYXNzIFN0b3JhZ2VUcmFja2VyIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU3RvcmFnZVRyYWNr
ZXJDbGllbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RvcmFnZVRyYWNrZXImIHRy
YWNrZXIoKTsKLQotICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmlu
ZyYpOwotICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25zdDsKLQotICAgIHZv
aWQgc2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VGaWxlKTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRl
bGV0ZUFsbE9yaWdpbnMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZU9yaWdpbihT
ZWN1cml0eU9yaWdpbiopOwotICAgIHZvaWQgZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG9y
aWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+JiByZXN1bHQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIGxvbmcgbG9uZyBkaXNrVXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsK
LSAgICAKLSAgICB2b2lkIGNhbmNlbERlbGV0aW5nT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcik7Ci0gICAgCi0gICAgYm9vbCBpc0FjdGl2ZSgpOwotCi0gICAgZG91YmxlIHN0
b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgpIHsgcmV0dXJuIG1fU3RvcmFnZURhdGFiYXNlSWRs
ZUludGVydmFsOyB9Ci0gICAgdm9pZCBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91
YmxlIGludGVydmFsKSB7IG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsID0gaW50ZXJ2YWw7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0
YWJhc2UoKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTdG9yYWdlVHJhY2tlcihjb25zdCBT
dHJpbmcmIHN0b3JhZ2VQYXRoKTsKLQotICAgIHZvaWQgaW50ZXJuYWxJbml0aWFsaXplKCk7Ci0K
LSAgICBTdHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpOwotICAgIHZvaWQgb3BlblRyYWNrZXJE
YXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKLQotICAgIHZvaWQgaW1wb3J0T3Jp
Z2luSWRlbnRpZmllcnMoKTsKLSAgICB2b2lkIGZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRp
ZmllcnMoKTsKLSAgICAKLSAgICB2b2lkIGRlbGV0ZVRyYWNrZXJGaWxlcygpOwotICAgIFN0cmlu
ZyBkYXRhYmFzZVBhdGhGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsK
LQotICAgIGJvb2wgY2FuRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cik7Ci0gICAgdm9pZCB3aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
Zmllcik7Ci0gICAgdm9pZCB3aWxsRGVsZXRlQWxsT3JpZ2lucygpOwotCi0gICAgdm9pZCBvcmln
aW5GaWxlUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKLSAgICAKLSAgICB2b2lkIHNldElz
QWN0aXZlKGJvb2wpOwotCi0gICAgLy8gU3luYyB0byBkaXNrIG9uIGJhY2tncm91bmQgdGhyZWFk
LgotICAgIHZvaWQgc3luY0RlbGV0ZUFsbE9yaWdpbnMoKTsKLSAgICB2b2lkIHN5bmNEZWxldGVP
cmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB2b2lkIHN5bmNTZXRP
cmlnaW5EZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZUZpbGUpOwotICAgIHZvaWQgc3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7
Ci0KLSAgICAvLyBNdXRleCBmb3IgbV9kYXRhYmFzZSBhbmQgbV9zdG9yYWdlRGlyZWN0b3J5UGF0
aC4KLSAgICBNdXRleCBtX2RhdGFiYXNlTXV0ZXg7Ci0gICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRh
YmFzZTsKLSAgICBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKLQotICAgIE11dGV4IG1f
Y2xpZW50TXV0ZXg7Ci0gICAgU3RvcmFnZVRyYWNrZXJDbGllbnQqIG1fY2xpZW50OwotCi0gICAg
Ly8gR3VhcmQgZm9yIG1fb3JpZ2luU2V0IGFuZCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuCi0gICAg
TXV0ZXggbV9vcmlnaW5TZXRNdXRleDsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nPiBPcmln
aW5TZXQ7Ci0gICAgT3JpZ2luU2V0IG1fb3JpZ2luU2V0OwotICAgIE9yaWdpblNldCBtX29yaWdp
bnNCZWluZ0RlbGV0ZWQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZVRocmVhZD4gbV90
aHJlYWQ7Ci0gICAgCi0gICAgYm9vbCBtX2lzQWN0aXZlOwotICAgIGJvb2wgbV9uZWVkc0luaXRp
YWxpemF0aW9uOwotICAgIGRvdWJsZSBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDsKLX07
Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTdG9yYWdlVHJhY2tl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTYwMjlmYTU0OTYzYjFlNjA4MzJjYmM0NzYw
ZmIwYTNlMTVmOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0gCi0jaWZuZGVmIFN0b3JhZ2VUcmFj
a2VyQ2xpZW50X2gKLSNkZWZpbmUgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAotCi0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdG9yYWdlVHJh
Y2tlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3RvcmFnZVRyYWNrZXJDbGllbnQo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdPcmlnaW5zKCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gU3RvcmFnZVRyYWNrZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
dG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzk0N2JiYWUxMDRlNmNiNzc4NWU5M2VlMGRkZTk5
ZGNmMGNkMTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3Jh
Z2VBcmVhSW1wbC5jcHAKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCisKKyNp
bmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIu
aCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTdG9yYWdlQXJlYUltcGw6On5TdG9yYWdlQXJlYUltcGwoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Cit9CisKK2lubGluZSBTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1w
bChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3Jp
Z2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIsIHVuc2lnbmVk
IHF1b3RhKQorICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJp
dHlPcmlnaW4ob3JpZ2luKQorICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZShx
dW90YSkpCisgICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKKyNpZm5kZWYg
TkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWNjZXNz
Q291bnQoMCkKKyAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlzLCAmU3RvcmFnZUFyZWFJ
bXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zdG9yYWdl
TWFwKTsKKyAgICAKKyAgICAvLyBBY2Nlc3NpbmcgdGhlIHNoYXJlZCBnbG9iYWwgU3RvcmFnZVRy
YWNrZXIgd2hlbiBhIFN0b3JhZ2VBcmVhIGlzIGNyZWF0ZWQgCisgICAgLy8gZW5zdXJlcyB0aGF0
IHRoZSB0cmFja2VyIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnlvbmUgYWN0dWFs
bHkgbmVlZHMgdG8gdXNlIGl0LgorICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCk7Cit9CisK
K1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIsIHVuc2lnbmVkIHF1b3Rh
KQoreworICAgIFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IGFyZWEgPSBhZG9wdFJlZihuZXcgU3Rv
cmFnZUFyZWFJbXBsKHN0b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyLCBxdW90YSkpOwor
CisgICAgLy8gRklYTUU6IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0
b3JhZ2UsIHRoZSBkZWZhdWx0IFdlYktpdCBiZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2
YXRlIGJyb3dzaW5nLAorICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmluZyBpdC4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0CisgICAgaWYgKGFyZWEtPm1fc3Rv
cmFnZVN5bmNNYW5hZ2VyKSB7CisgICAgICAgIGFyZWEtPm1fc3RvcmFnZUFyZWFTeW5jID0gU3Rv
cmFnZUFyZWFTeW5jOjpjcmVhdGUoYXJlYS0+bV9zdG9yYWdlU3luY01hbmFnZXIsIGFyZWEuZ2V0
KCksIGFyZWEtPm1fc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAg
ICAgQVNTRVJUKGFyZWEtPm1fc3RvcmFnZUFyZWFTeW5jKTsKKyAgICB9CisKKyAgICByZXR1cm4g
YXJlYS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBTdG9yYWdl
QXJlYUltcGw6OmNvcHkoKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VBcmVhSW1wbCh0aGlzKSk7Cit9CisKK1N0b3JhZ2VBcmVh
SW1wbDo6U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhSW1wbCogYXJlYSkKKyAgICA6IG1fc3Rv
cmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4oYXJl
YS0+bV9zZWN1cml0eU9yaWdpbikKKyAgICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VN
YXApCisgICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihhcmVhLT5tX3N0b3JhZ2VTeW5jTWFuYWdl
cikKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24oYXJlYS0+bV9pc1NodXRkb3du
KQorI2VuZGlmCisgICAgLCBtX2FjY2Vzc0NvdW50KDApCisgICAgLCBtX2Nsb3NlRGF0YWJhc2VU
aW1lcigqdGhpcywgJlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9zZWN1cml0eU9yaWdp
bik7CisgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OworfQorCitib29sIFN0b3JhZ2VBcmVhSW1wbDo6Y2FuQWNjZXNzU3RvcmFnZShGcmFtZSogZnJh
bWUpCit7CisgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5wYWdlKCk7Cit9CisKK1N0b3JhZ2VU
eXBlIFN0b3JhZ2VBcmVhSW1wbDo6c3RvcmFnZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3N0b3JhZ2VUeXBlOworfQorCit1bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCgpCit7
CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpOworCisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7Cit9CisKK1N0cmluZyBT
dG9yYWdlQXJlYUltcGw6OmtleSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICByZXR1cm4g
bV9zdG9yYWdlTWFwLT5rZXkoaW5kZXgpOworfQorCitTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjpp
dGVtKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAg
ICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAt
PmdldEl0ZW0oa2V5KTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oRnJhbWUq
IHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9v
bCYgcXVvdGFFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIEFT
U0VSVCghdmFsdWUuaXNOdWxsKCkpOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwor
CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdNYXAgPSBt
X3N0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9u
KTsKKyAgICBpZiAobmV3TWFwKQorICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFz
ZSgpOworCisgICAgaWYgKHF1b3RhRXhjZXB0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAob2xkVmFsdWUgPT0gdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0b3Jh
Z2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5
bmMoa2V5LCB2YWx1ZSk7CisKKyAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVl
LCB2YWx1ZSwgc291cmNlRnJhbWUpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3Zl
SXRlbShGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAg
IFN0cmluZyBvbGRWYWx1ZTsKKyAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbmV3TWFwID0gbV9zdG9y
YWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIGlmIChuZXdNYXApCisgICAg
ICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7CisKKyAgICBpZiAob2xkVmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykK
KyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBTdHJp
bmcoKSk7CisKKyAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJpbmco
KSwgc291cmNlRnJhbWUpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUq
IHNvdXJjZUZyYW1lKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1Vu
dGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIGlmICghbV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgcXVvdGEgPSBtX3N0b3JhZ2VNYXAtPnF1
b3RhKCk7CisgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3RhKTsKKwor
ICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNj
aGVkdWxlQ2xlYXIoKTsKKworICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJp
bmcoKSwgU3RyaW5nKCksIHNvdXJjZUZyYW1lKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYUltcGw6
OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKworICAgIHJldHVybiBtX3N0b3Jh
Z2VNYXAtPmNvbnRhaW5zKGtleSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjppbXBvcnRJ
dGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMpCit7CisgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOworCisgICAgbV9zdG9yYWdlTWFwLT5pbXBvcnRJdGVtcyhpdGVtcyk7
Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZSgpCit7CisgICAgaWYgKG1fc3RvcmFn
ZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVGaW5hbFN5bmMo
KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX2lzU2h1dGRvd24gPSB0cnVlOworI2VuZGlmCit9
CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdpbkRlbGV0aW9uKCkKK3sKKyAg
ICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7
CisgICAgCisgICAgaWYgKG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCkpIHsKKyAgICAgICAgdW5zaWdu
ZWQgcXVvdGEgPSBtX3N0b3JhZ2VNYXAtPnF1b3RhKCk7CisgICAgICAgIG1fc3RvcmFnZU1hcCA9
IFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSk7CisgICAgfQorCisgICAgaWYgKG1fc3RvcmFnZUFy
ZWFTeW5jKSB7CisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7Cisg
ICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsb3NlRGF0YWJhc2UoKTsKKyAgICB9
Cit9CisgICAgCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c3luYygpCit7CisgICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAorICAg
IGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVk
dWxlU3luYygpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6YmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1f
c3RvcmFnZUFyZWFTeW5jLT5ibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKK30KKworc2l6ZV90
IFN0b3JhZ2VBcmVhSW1wbDo6bWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgpCit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjppbmNyZW1lbnRBY2Nlc3NDb3VudCgpCit7
CisgICAgbV9hY2Nlc3NDb3VudCsrOworCisgICAgaWYgKG1fY2xvc2VEYXRhYmFzZVRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0b3AoKTsKK30KKwordm9p
ZCBTdG9yYWdlQXJlYUltcGw6OmRlY3JlbWVudEFjY2Vzc0NvdW50KCkKK3sKKyAgICBBU1NFUlQo
bV9hY2Nlc3NDb3VudCk7CisgICAgLS1tX2FjY2Vzc0NvdW50OworCisgICAgaWYgKCFtX2FjY2Vz
c0NvdW50KSB7CisgICAgICAgIGlmIChtX2Nsb3NlRGF0YWJhc2VUaW1lci5pc0FjdGl2ZSgpKQor
ICAgICAgICAgICAgbV9jbG9zZURhdGFiYXNlVGltZXIuc3RvcCgpOworICAgICAgICBtX2Nsb3Nl
RGF0YWJhc2VUaW1lci5zdGFydE9uZVNob3QoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5zdG9y
YWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoKSk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VBcmVh
SW1wbDo6Y2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoKQoreworICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOworICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdl
QXJlYVN5bmMtPnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworfQorCit2b2lkIFN0b3JhZ2VBcmVh
SW1wbDo6Y2xvc2VEYXRhYmFzZUlmSWRsZSgpCit7CisgICAgaWYgKG1fY2xvc2VEYXRhYmFzZVRp
bWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2FjY2Vzc0NvdW50KTsKKyAgICAg
ICAgbV9jbG9zZURhdGFiYXNlVGltZXIuc3RvcCgpOworCisgICAgICAgIGNsb3NlRGF0YWJhc2VU
aW1lckZpcmVkKCk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGlzcGF0Y2hT
dG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKK3sKKyAgICBpZiAobV9z
dG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UpCisgICAgICAgIFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzKGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBt
X3NlY3VyaXR5T3JpZ2luLmdldCgpLCBzb3VyY2VGcmFtZSk7CisgICAgZWxzZQorICAgICAgICBT
dG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzKGtleSwg
b2xkVmFsdWUsIG5ld1ZhbHVlLCBtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCBzb3VyY2VGcmFtZSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjlkNzJhOWU4OTNjOTgzM2NiMmEyNWYzMDExNzBmMTAz
NzU2M2JjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VB
cmVhSW1wbC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VBcmVhSW1wbF9oCisjZGVmaW5lIFN0b3Jh
Z2VBcmVhSW1wbF9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VBcmVhLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTdG9yYWdlTWFwOworY2xh
c3MgU3RvcmFnZUFyZWFTeW5jOworCitjbGFzcyBTdG9yYWdlQXJlYUltcGwgOiBwdWJsaWMgU3Rv
cmFnZUFyZWEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1w
bD4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUGFzc1Jl
ZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+LCB1bnNpZ25lZCBxdW90YSk7CisgICAgdmlydHVhbCB+
U3RvcmFnZUFyZWFJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBTdHJpbmcgaXRlbShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldEl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291cmNl
RnJhbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcm
IGtleSkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQWNjZXNzU3RvcmFnZShGcmFt
ZSogc291cmNlRnJhbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgU3RvcmFnZVR5cGUgc3RvcmFn
ZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUJ5dGVz
VXNlZEJ5Q2FjaGUoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRBY2Nl
c3NDb3VudCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWNyZW1lbnRBY2Nlc3NDb3VudCgpOworICAg
IHZpcnR1YWwgdm9pZCBjbG9zZURhdGFiYXNlSWZJZGxlKCk7CisKKyAgICBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhSW1wbD4gY29weSgpOworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIC8vIE9ubHkg
Y2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICB2b2lkIGltcG9ydEl0ZW1zKGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcyk7CisKKyAgICAvLyBVc2VkIHRvIGNs
ZWFyIGEgU3RvcmFnZUFyZWEgYW5kIGNsb3NlIGRiIGJlZm9yZSBiYWNraW5nIGRiIGZpbGUgaXMg
ZGVsZXRlZC4KKyAgICB2b2lkIGNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKTsKKworICAgIHZvaWQg
c3luYygpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwg
dW5zaWduZWQgcXVvdGEpOworICAgIGV4cGxpY2l0IFN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJl
YUltcGwqKTsKKworICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7Cisg
ICAgdm9pZCBjbG9zZURhdGFiYXNlVGltZXJGaXJlZCgpOworCisgICAgdm9pZCBkaXNwYXRjaFN0
b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKworICAgIFN0b3JhZ2VU
eXBlIG1fc3RvcmFnZVR5cGU7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5
T3JpZ2luOworICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBtX3N0b3JhZ2VNYXA7CisKKyAgICBSZWZQ
dHI8U3RvcmFnZUFyZWFTeW5jPiBtX3N0b3JhZ2VBcmVhU3luYzsKKyAgICBSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5jTWFuYWdlcjsKKworI2lmbmRlZiBOREVCVUcKKyAg
ICBib29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgorICAgIHVuc2lnbmVkIG1fYWNjZXNzQ291bnQ7
CisgICAgVGltZXIgbV9jbG9zZURhdGFiYXNlVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9yYWdlQXJlYUltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZUFyZWFTeW5jLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDYxMmYzMmJkYzM2NTcyZDMwNjE0
YTQ1MTU5ZjU3YWU2Nzg5MmJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TdG9y
YWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFTeW5jLmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0
YWJhc2VUcmFja2VyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
dWRkZW5UZXJtaW5hdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gSWYgdGhlIFN0b3JhZ2VBcmVhIHVuZGVyZ29lcyByYXBpZCBj
aGFuZ2VzLCBkb24ndCBzeW5jIGVhY2ggY2hhbmdlIHRvIGRpc2suCisvLyBJbnN0ZWFkLCBxdWV1
ZSB1cCBhIGJhdGNoIG9mIGl0ZW1zIHRvIHN5bmMgYW5kIGFjdHVhbGx5IGRvIHRoZSBzeW5jIGF0
IHRoZSBmb2xsb3dpbmcgaW50ZXJ2YWwuCitzdGF0aWMgY29uc3QgZG91YmxlIFN0b3JhZ2VTeW5j
SW50ZXJ2YWwgPSAxLjA7CisKKy8vIEEgc2FuZSBsaW1pdCBvbiBob3cgbWFueSBpdGVtcyB3ZSds
bCBzY2hlZHVsZSB0byBzeW5jIGFsbCBhdCBvbmNlLiAgVGhpcyBtYWtlcyBpdAorLy8gbXVjaCBo
YXJkZXIgdG8gc3RhcnZlIHRoZSByZXN0IG9mIExvY2FsU3RvcmFnZSBhbmQgdGhlIE9TJ3MgSU8g
c3Vic3lzdGVtIGluIGdlbmVyYWwuCitzdGF0aWMgY29uc3QgaW50IE1heGl1bUl0ZW1zVG9TeW5j
ID0gMTAwOworCitpbmxpbmUgU3RvcmFnZUFyZWFTeW5jOjpTdG9yYWdlQXJlYVN5bmMoUGFzc1Jl
ZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwgUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRp
ZmllcikKKyAgICA6IG1fc3luY1RpbWVyKCp0aGlzLCAmU3RvcmFnZUFyZWFTeW5jOjpzeW5jVGlt
ZXJGaXJlZCkKKyAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQorICAgICwgbV9maW5hbFN5bmNT
Y2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX3N0b3JhZ2VBcmVhKHN0b3JhZ2VBcmVhKQorICAgICwg
bV9zeW5jTWFuYWdlcihzdG9yYWdlU3luY01hbmFnZXIpCisgICAgLCBtX2RhdGFiYXNlSWRlbnRp
ZmllcihkYXRhYmFzZUlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2NsZWFySXRl
bXNXaGlsZVN5bmNpbmcoZmFsc2UpCisgICAgLCBtX3N5bmNTY2hlZHVsZWQoZmFsc2UpCisgICAg
LCBtX3N5bmNJblByb2dyZXNzKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZU9wZW5GYWlsZWQoZmFs
c2UpCisgICAgLCBtX3N5bmNDbG9zZURhdGFiYXNlKGZhbHNlKQorICAgICwgbV9pbXBvcnRDb21w
bGV0ZShmYWxzZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCht
X3N0b3JhZ2VBcmVhKTsKKyAgICBBU1NFUlQobV9zeW5jTWFuYWdlcik7CisKKyAgICAvLyBGSVhN
RTogSWYgaXQgY2FuJ3QgaW1wb3J0LCB0aGVuIHRoZSBkZWZhdWx0IFdlYktpdCBiZWhhdmlvciBz
aG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5nLAorICAgIC8vIG5vdCBzaWxlbnRseSBp
Z25vcmluZyBpdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODk0
CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gcHJvdGVjdG9yKHRoaXMpOworICAgIG1fc3lu
Y01hbmFnZXItPmRpc3BhdGNoKFtwcm90ZWN0b3JdIHsKKyAgICAgICAgcHJvdGVjdG9yLT5wZXJm
b3JtSW1wb3J0KCk7CisgICAgfSk7Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBT
dG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3Rv
cmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQoreworICAgIFJlZlB0cjxTdG9yYWdl
QXJlYVN5bmM+IGFyZWEgPSBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWFTeW5jKHN0b3JhZ2VTeW5j
TWFuYWdlciwgc3RvcmFnZUFyZWEsIGRhdGFiYXNlSWRlbnRpZmllcikpOworCisgICAgcmV0dXJu
IGFyZWEucmVsZWFzZSgpOworfQorCitTdG9yYWdlQXJlYVN5bmM6On5TdG9yYWdlQXJlYVN5bmMo
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX3N5bmNUaW1l
ci5pc0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQobV9maW5hbFN5bmNTY2hlZHVsZWQpOworfQorCit2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVGaW5hbFN5bmMoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgLy8gRklYTUU6IFdlIGRvIHRoaXMgdG8gYXZvaWQgcmFjZXMs
IGJ1dCBpdCdkIGJlIGJldHRlciB0byBtYWtlIHRoaW5ncyBzYWZlIHdpdGhvdXQgYmxvY2tpbmcu
CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgbV9zdG9yYWdlQXJlYSA9IDA7
ICAvLyBUaGlzIGlzIGRvbmUgaW4gYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgYnV0IHRoaXMg
aXMgaGVyZSBhcyBhIGZvcm0gb2YgZG9jdW1lbnRhdGlvbiB0aGF0IHdlIG11c3QgYmUgYWJzb2x1
dGVseSBzdXJlIHRoZSByZWYgY291bnQgY3ljbGUgaXMgYnJva2VuLgorCisgICAgaWYgKG1fc3lu
Y1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBl
bmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQg
ZnVuY3Rpb24uCisgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBzeW5jaHJvbm91cy4gV2Ugc2hvdWxkIGRvIGl0IG9uIHRoZSBi
YWNrZ3JvdW5kIHByb2Nlc3MsIGJ1dAorICAgIC8vIHdlIHNob3VsZCBkbyBpdCBzYWZlbHkuCisg
ICAgbV9maW5hbFN5bmNTY2hlZHVsZWQgPSB0cnVlOworICAgIHN5bmNUaW1lckZpcmVkKCk7CisK
KyAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBwcm90ZWN0b3IodGhpcyk7CisgICAgbV9zeW5j
TWFuYWdlci0+ZGlzcGF0Y2goW3Byb3RlY3Rvcl0geworICAgICAgICBwcm90ZWN0b3ItPmRlbGV0
ZUVtcHR5RGF0YWJhc2UoKTsKKyAgICB9KTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNj
aGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fZmluYWxTeW5j
U2NoZWR1bGVkKTsKKworICAgIG1fY2hhbmdlZEl0ZW1zLnNldChrZXksIHZhbHVlKTsKKyAgICBp
ZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRP
bmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOworCisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcg
aXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhl
CisgICAgICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgorICAgICAgICBkaXNhYmxlU3Vk
ZGVuVGVybWluYXRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hl
ZHVsZUNsZWFyKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCgh
bV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKKyAg
ICBtX2l0ZW1zQ2xlYXJlZCA9IHRydWU7CisgICAgaWYgKCFtX3N5bmNUaW1lci5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFs
KTsKKworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRv
IGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAgICAgICAvLyBzeW5jVGltZXJGaXJl
ZCBmdW5jdGlvbi4KKyAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAgfQor
fQorCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURhdGFiYXNlKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVs
ZWQpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3N5bmNDbG9zZURhdGFiYXNlID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fc3luY1Rp
bWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3Jh
Z2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBi
YWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAg
ICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIGRpc2FibGVTdWRkZW5U
ZXJtaW5hdGlvbigpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1l
ckZpcmVkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgYm9vbCBwYXJ0
aWFsU3luYyA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3lu
Y0xvY2spOworCisgICAgICAgIC8vIERvIG5vdCBzY2hlZHVsZSBhbm90aGVyIHN5bmMgaWYgd2Un
cmUgc3RpbGwgdHJ5aW5nIHRvIGNvbXBsZXRlIHRoZQorICAgICAgICAvLyBwcmV2aW91cyBvbmUu
ICBCdXQsIGlmIHdlJ3JlIHNodXR0aW5nIGRvd24sIHNjaGVkdWxlIGl0IGFueXdheS4KKyAgICAg
ICAgaWYgKG1fc3luY0luUHJvZ3Jlc3MgJiYgIW1fZmluYWxTeW5jU2NoZWR1bGVkKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgbV9z
eW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1faXRlbXNDbGVhcmVkKSB7CisgICAg
ICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY2xlYXJJ
dGVtc1doaWxlU3luY2luZyA9IHRydWU7CisgICAgICAgICAgICBtX2l0ZW1zQ2xlYXJlZCA9IGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJh
dG9yIGNoYW5nZWRfaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdpbigpOworICAgICAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgY2hhbmdlZF9lbmQgPSBtX2NoYW5nZWRJdGVtcy5l
bmQoKTsKKyAgICAgICAgZm9yIChpbnQgY291bnQgPSAwOyBjaGFuZ2VkX2l0ICE9IGNoYW5nZWRf
ZW5kOyArK2NvdW50LCArK2NoYW5nZWRfaXQpIHsKKyAgICAgICAgICAgIGlmIChjb3VudCA+PSBN
YXhpdW1JdGVtc1RvU3luYyAmJiAhbV9maW5hbFN5bmNTY2hlZHVsZWQpIHsKKyAgICAgICAgICAg
ICAgICBwYXJ0aWFsU3luYyA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGNoYW5nZWRfaXQtPmtl
eS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7CisgICAgICAgICAgICAvLyBXZSBj
YW4ndCBkbyB0aGUgZmFzdCBwYXRoIG9mIHNpbXBseSBjbGVhcmluZyBhbGwgaXRlbXMsIHNvIHdl
J2xsIG5lZWQgdG8gbWFudWFsbHkKKyAgICAgICAgICAgIC8vIHJlbW92ZSB0aGVtIG9uZSBieSBv
bmUuICBEb25lIHVuZGVyIGxvY2sgc2luY2UgbV9pdGVtc1BlbmRpbmdTeW5jIGlzIG1vZGlmaWVk
IGJ5CisgICAgICAgICAgICAvLyB0aGUgYmFja2dyb3VuZCB0aHJlYWQuCisgICAgICAgICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgcGVuZGluZ19pdCA9IG1faXRlbXNQZW5k
aW5nU3luYy5iZWdpbigpOworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0
ZXJhdG9yIHBlbmRpbmdfZW5kID0gbV9pdGVtc1BlbmRpbmdTeW5jLmVuZCgpOworICAgICAgICAg
ICAgZm9yICg7IHBlbmRpbmdfaXQgIT0gcGVuZGluZ19lbmQ7ICsrcGVuZGluZ19pdCkKKyAgICAg
ICAgICAgICAgICBtX2NoYW5nZWRJdGVtcy5yZW1vdmUocGVuZGluZ19pdC0+a2V5KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghbV9zeW5jU2NoZWR1bGVkKSB7CisgICAgICAgICAgICBtX3N5
bmNTY2hlZHVsZWQgPSB0cnVlOworCisgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJh
bGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAg
ICAgICAgICAgLy8gcGVyZm9ybVN5bmMgZnVuY3Rpb24uCisgICAgICAgICAgICBkaXNhYmxlU3Vk
ZGVuVGVybWluYXRpb24oKTsKKworICAgICAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4g
cHJvdGVjdG9yKHRoaXMpOworICAgICAgICAgICAgbV9zeW5jTWFuYWdlci0+ZGlzcGF0Y2goW3By
b3RlY3Rvcl0geworICAgICAgICAgICAgICAgIHByb3RlY3Rvci0+cGVyZm9ybVN5bmMoKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBhcnRpYWxTeW5jKSB7
CisgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5pc2ggc3luY2luZywgdGhlbiB3ZSBuZWVkIHRv
IGZpbmlzaCB0aGUgam9iIGxhdGVyLgorICAgICAgICBBU1NFUlQoIW1fc3luY1RpbWVyLmlzQWN0
aXZlKCkpOworICAgICAgICBtX3N5bmNUaW1lci5zdGFydE9uZVNob3QoU3RvcmFnZVN5bmNJbnRl
cnZhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNl
ZCBieSB0aGUgY2FsbHMgdG8gZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAgICAg
ICAvLyBzY2hlZHVsZUl0ZW1Gb3JTeW5jLCBzY2hlZHVsZUNsZWFyLCBhbmQgc2NoZWR1bGVGaW5h
bFN5bmMgZnVuY3Rpb25zLgorICAgICAgICBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOworCisg
ICAgICAgIG1fY2hhbmdlZEl0ZW1zLmNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIFN0b3JhZ2VB
cmVhU3luYzo6b3BlbkRhdGFiYXNlKE9wZW5EYXRhYmFzZVBhcmFtVHlwZSBvcGVuaW5nU3RyYXRl
Z3kpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2RhdGFi
YXNlLmlzT3BlbigpKTsKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VPcGVuRmFpbGVkKTsKKworICAg
IFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRl
cjsKKworICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERh
dGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOworCisgICAgaWYgKCFmaWxlRXhp
c3RzKGRhdGFiYXNlRmlsZW5hbWUpICYmIG9wZW5pbmdTdHJhdGVneSA9PSBTa2lwSWZOb25FeGlz
dGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRhdGFiYXNlRmlsZW5hbWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIExPR19FUlJPUigiRmlsZW5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgZGF0
YWJhc2UgaXMgZW1wdHkgLSBjYW5ub3Qgb3BlbiBmb3IgcGVyc2lzdGVudCBzdG9yYWdlIik7Cisg
ICAgICAgIG1hcmtJbXBvcnRlZCgpOworICAgICAgICBtX2RhdGFiYXNlT3BlbkZhaWxlZCA9IHRy
dWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBIFN0b3JhZ2VUcmFja2VyIHRo
cmVhZCBtYXkgaGF2ZSBiZWVuIHNjaGVkdWxlZCB0byBkZWxldGUgdGhlIGRiIHdlJ3JlCisgICAg
Ly8gcmVvcGVuaW5nLCBzbyBjYW5jZWwgcG9zc2libGUgZGVsZXRpb24uCisgICAgU3RvcmFnZVRy
YWNrZXI6OnRyYWNrZXIoKS5jYW5jZWxEZWxldGluZ09yaWdpbihtX2RhdGFiYXNlSWRlbnRpZmll
cik7CisKKyAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZUZpbGVuYW1lKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIGxvY2Fs
IHN0b3JhZ2UiLCBkYXRhYmFzZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtYXJr
SW1wb3J0ZWQoKTsKKyAgICAgICAgbV9kYXRhYmFzZU9wZW5GYWlsZWQgPSB0cnVlOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7CisKKyAg
ICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ
U1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVl
IEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKSkgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Cisg
ICAgICAgIG1hcmtJbXBvcnRlZCgpOworICAgICAgICBtX2RhdGFiYXNlT3BlbkZhaWxlZCA9IHRy
dWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLnNldE9yaWdpbkRldGFpbHMobV9kYXRhYmFzZUlkZW50aWZpZXIsIGRhdGFiYXNlRmlsZW5h
bWUpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVk
KCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkl0ZW1UYWJsZSIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2Rh
dGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIExJTUlUIDEiKTsKKyAgICAgICAg
Ly8gdGhpcyBxdWVyeSBpc24ndCBldmVyIGV4ZWN1dGVkLgorICAgICAgICBpZiAocXVlcnkuaXND
b2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBhbHRlciB0YWJsZSBmb3IgYmFja3dhcmQgY29tcGxpYW5jZSwgY2hhbmdlIHRoZSB2YWx1
ZSB0eXBlIGZyb20gVEVYVCB0byBCTE9CLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5k
c1tdID0geworICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSXRlbVRhYmxlMiIsCisgICAg
ICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNU
IFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiLAorICAgICAg
ICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBmcm9tIEl0ZW1UYWJsZSIsCisgICAg
ICAgICJEUk9QIFRBQkxFIEl0ZW1UYWJsZSIsCisgICAgICAgICJBTFRFUiBUQUJMRSBJdGVtVGFi
bGUyIFJFTkFNRSBUTyBJdGVtVGFibGUiLAorICAgICAgICAwLAorICAgIH07CisKKyAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlLCBmYWxzZSk7CisgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgY29tbWFuZHNbaV07ICsraSkg
eworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY29tbWFuZHNbaV0pKSB7
CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtaWdyYXRlIHRhYmxlIEl0ZW1UYWJs
ZSBmb3IgbG9jYWwgc3RvcmFnZSB3aGVuIGV4ZWN1dGluZzogJXMiLCBjb21tYW5kc1tpXSk7Cisg
ICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygpOworCisgICAgICAgICAgICAvLyBmaW5h
bGx5IGl0IHdpbGwgdHJ5IHRvIGtlZXAgYSBiYWNrdXAgb2YgSXRlbVRhYmxlIGZvciB0aGUgZnV0
dXJlIHJlc3RvcmF0aW9uLgorICAgICAgICAgICAgLy8gTk9USUNFOiB0aGlzIHdpbGwgZXNzZW50
aWFsbHkgREVMRVRFIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBidXQgdGhhdCdzIGJldHRlcgorICAg
ICAgICAgICAgLy8gdGhhbiBjb250aW51YWxseSBoaXR0aW5nIHRoaXMgY2FzZSBhbmQgbmV2ZXIg
YmVpbmcgYWJsZSB0byB1c2UgdGhlIGxvY2FsIHN0b3JhZ2UuCisgICAgICAgICAgICAvLyBpZiB0
aGlzIGlzIGV2ZXIgaGl0LCBpdCdzIGRlZmluaXRlbHkgYSBidWcuCisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZCgiQUxURVIgVEFCTEUgSXRlbVRhYmxlIFJFTkFNRSBUTyBCYWNrdXBfSXRlbVRhYmxlIikp
CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2F2ZSBJdGVtVGFibGUgYWZ0
ZXIgbWlncmF0aW9uIGpvYiBmYWlsZWQuIik7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKK30KKwordm9pZCBTdG9yYWdl
QXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CisKKyAgICBvcGVuRGF0YWJhc2Uo
U2tpcElmTm9uRXhpc3RlbnQpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkgeworICAg
ICAgICBtYXJrSW1wb3J0ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVt
VGFibGUiKTsKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0ZW1UYWJsZSBmb3Ig
bG9jYWwgc3RvcmFnZSIpOworICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1NYXA7CisKKyAgICBp
bnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0
Um93KSB7CisgICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRleHQoMCksIHF1ZXJ5
LmdldENvbHVtbkJsb2JBc1N0cmluZygxKSk7CisgICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAo
KTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciByZWFkaW5nIGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CisgICAgICAgIG1hcmtJbXBvcnRlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbXMoaXRlbU1hcCk7CisKKyAgICBtYXJr
SW1wb3J0ZWQoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6Om1hcmtJbXBvcnRlZCgpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7CisgICAgbV9pbXBvcnRDb21w
bGV0ZSA9IHRydWU7CisgICAgbV9pbXBvcnRDb25kaXRpb24uc2lnbmFsKCk7Cit9CisKKy8vIEZJ
WE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYWxsb3cgdXNlIG9mIFN0b3JhZ2VBcmVhcyB3
aGlsZSBpdCdzIGltcG9ydGluZyAod2hlbiBzYWZlIHRvIGRvIHNvKS4KKy8vIEJsb2NraW5nIGV2
ZXJ5dGhpbmcgdW50aWwgdGhlIGltcG9ydCBpcyBjb21wbGV0ZSBpcyBieSBmYXIgdGhlIHNpbXBs
ZXN0IGFuZCBzYWZlc3QgdGhpbmcgdG8gZG8sIGJ1dAorLy8gdGhlcmUgaXMgY2VydGFpbmx5IHJv
b20gZm9yIHNhZmUgb3B0aW1pemF0aW9uOiBLZXkvbGVuZ3RoIHdpbGwgbmV2ZXIgYmUgYWJsZSB0
byBtYWtlIHVzZSBvZiBzdWNoIGFuCisvLyBvcHRpbWl6YXRpb24gKHNpbmNlIHRoZSBvcmRlciBv
ZiBpdGVyYXRpb24gY2FuIGNoYW5nZSBhcyBpdGVtcyBhcmUgYmVpbmcgYWRkZWQpLiBHZXQgY2Fu
IHJldHVybiBhbnkKKy8vIGl0ZW0gY3VycmVudGx5IGluIHRoZSBtYXAuIEdldC9yZW1vdmUgY2Fu
IHdvcmsgd2hldGhlciBvciBub3QgaXQncyBpbiB0aGUgbWFwLCBidXQgd2UnbGwgbmVlZCBhIGxp
c3QKKy8vIG9mIGl0ZW1zIHRoZSBpbXBvcnQgc2hvdWxkIG5vdCBvdmVyd3JpdGUuIENsZWFyIGNh
biBhbHNvIHdvcmssIGJ1dCBpdCdsbCBuZWVkIHRvIGtpbGwgdGhlIGltcG9ydAorLy8gam9iIGZp
cnN0Lgordm9pZCBTdG9yYWdlQXJlYVN5bmM6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZhc3QgcGF0aC4gIFdlIHNl
dCBtX3N0b3JhZ2VBcmVhIHRvIDAgb25seSBhZnRlciBtX2ltcG9ydENvbXBsZXRlIGJlaW5nIHRy
dWUuCisgICAgaWYgKCFtX3N0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKKyAgICB3aGlsZSAoIW1faW1wb3J0Q29tcGxl
dGUpCisgICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndhaXQobV9pbXBvcnRMb2NrKTsKKyAgICBt
X3N0b3JhZ2VBcmVhID0gMDsKK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBj
bGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMpCit7CisgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoaXRlbXMuaXNFbXB0eSgpICYmICFj
bGVhckl0ZW1zICYmICFtX3N5bmNDbG9zZURhdGFiYXNlKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fZGF0YWJhc2VPcGVuRmFpbGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
ZGF0YWJhc2UuaXNPcGVuKCkgJiYgbV9zeW5jQ2xvc2VEYXRhYmFzZSkgeworICAgICAgICBtX3N5
bmNDbG9zZURhdGFiYXNlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIG9wZW5EYXRhYmFzZShDcmVhdGVJZk5v
bkV4aXN0ZW50KTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIENsb3NpbmcgdGhpcyBkYiBiZWNhdXNlIGl0IGlzIGFib3V0IHRvIGJlIGRl
bGV0ZWQgYnkgU3RvcmFnZVRyYWNrZXIuCisgICAgLy8gVGhlIGRlbGV0ZSB3aWxsIGJlIGNhbmNl
bGxlZCBpZiBTdG9yYWdlQXJlYVN5bmMgbmVlZHMgdG8gcmVvcGVuIHRoZSBkYgorICAgIC8vIHRv
IHdyaXRlIG5ldyBpdGVtcyBjcmVhdGVkIGFmdGVyIHRoZSByZXF1ZXN0IHRvIGRlbGV0ZSB0aGUg
ZGIuCisgICAgaWYgKG1fc3luY0Nsb3NlRGF0YWJhc2UpIHsKKyAgICAgICAgbV9zeW5jQ2xvc2VE
YXRhYmFzZSA9IGZhbHNlOworICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0Nv
dW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworCisgICAgLy8gSWYgdGhlIGNsZWFyIGZsYWcgaXMg
c2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdlIHdyaXRlIGFueSBuZXcg
b25lcyBpbi4KKyAgICBpZiAoY2xlYXJJdGVtcykgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
Y2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOworICAgICAgICBpZiAo
Y2xlYXIucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNsZWFy
IGFsbCBpdGVtcyBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRl
bWVudCBpbnNlcnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8s
ID8pIik7CisgICAgaWYgKGluc2VydC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90
IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmUobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9N
IEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOworICAgIGlmIChyZW1vdmUucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgZGVsZXRl
IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gaXRlbXMuZW5kKCk7CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxsLW5l
c3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnNl
cnQgb3IgYSBkZWxldGUuCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+dmFs
dWUuaXNOdWxsKCkgPyByZW1vdmUgOiBpbnNlcnQ7CisKKyAgICAgICAgcXVlcnkuYmluZFRleHQo
MSwgaXQtPmtleSk7CisKKyAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBub24t
bnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2YWx1ZS4KKyAg
ICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBxdWVyeS5iaW5kQmxv
YigyLCBpdC0+dmFsdWUpOworCisgICAgICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Ug
LSAlaSIsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHF1ZXJ5LnJlc2V0KCk7CisgICAgfQorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworfQorCit2
b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybVN5bmMoKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworCisgICAgYm9vbCBjbGVhckl0ZW1zOworICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGl0ZW1zOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3luY0xv
Y2spOworCisgICAgICAgIEFTU0VSVChtX3N5bmNTY2hlZHVsZWQpOworCisgICAgICAgIGNsZWFy
SXRlbXMgPSBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmc7CisgICAgICAgIG1faXRlbXNQZW5kaW5n
U3luYy5zd2FwKGl0ZW1zKTsKKworICAgICAgICBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmcgPSBm
YWxzZTsKKyAgICAgICAgbV9zeW5jU2NoZWR1bGVkID0gZmFsc2U7CisgICAgICAgIG1fc3luY0lu
UHJvZ3Jlc3MgPSB0cnVlOworICAgIH0KKworICAgIHN5bmMoY2xlYXJJdGVtcywgaXRlbXMpOwor
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zeW5jTG9jayk7CisgICAgICAg
IG1fc3luY0luUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgZm9sbG93aW5n
IGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0
aGUKKyAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KKyAgICBlbmFibGVTdWRkZW5UZXJt
aW5hdGlvbigpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFz
ZSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYXRhYmFzZSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIGlmIChx
dWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gY291bnQgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3Rl
cCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIExPR19FUlJP
UigiTm8gcmVzdWx0cyB3aGVuIGNvdW50aW5nIG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJsZSBm
b3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGNv
dW50ID0gcXVlcnkuZ2V0Q29sdW1uSW50KDApOworICAgIGlmICghY291bnQpIHsKKyAgICAgICAg
cXVlcnkuZmluYWxpemUoKTsKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOworICAgICAgICBp
ZiAoU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5pc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICBT
dHJpbmdJbXBsKiBkYXRhYmFzZUlkZW50aWZpZXJDb3B5ID0gJm1fZGF0YWJhc2VJZGVudGlmaWVy
LmltcGwoKS0+aXNvbGF0ZWRDb3B5KCkubGVha1JlZigpOworICAgICAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbZGF0YWJhc2VJZGVudGlmaWVyQ29weV0geworICAgICAgICAgICAgICAgIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoZGF0YWJhc2VJ
ZGVudGlmaWVyQ29weSk7CisgICAgICAgICAgICAgICAgZGF0YWJhc2VJZGVudGlmaWVyQ29weS0+
ZGVyZWYoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
U3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxl
bmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7CisgICAgICAgICAgICBpZiAoIWRlbGV0ZUZpbGUo
ZGF0YWJhc2VGaWxlbmFtZSkpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
ZGVsZXRlIGRhdGFiYXNlIGZpbGUgJXNcbiIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVs
ZVN5bmMoKQoreworICAgIHN5bmNUaW1lckZpcmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMu
aCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NDg4MzQ0Mzk3Mzk2OWI3ZDNkNjEzMzU4NTg0NjU2YjRjMjNiNGJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCkBAIC0wLDAgKzEsMTA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTdG9yYWdlQXJlYVN5bmNfaAorI2RlZmluZSBTdG9yYWdlQXJlYVN5bmNf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvVGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2Ns
YXNzIFN0b3JhZ2VBcmVhSW1wbDsKK2NsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKKworY2xhc3Mg
U3RvcmFnZUFyZWFTeW5jIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VBcmVh
U3luYz4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4g
Y3JlYXRlKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CisgICAgflN0b3Jh
Z2VBcmVhU3luYygpOworCisgICAgdm9pZCBzY2hlZHVsZUZpbmFsU3luYygpOworICAgIHZvaWQg
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICB2b2lkIHNjaGVkdWxlSXRlbUZvclN5
bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgc2No
ZWR1bGVDbGVhcigpOworICAgIHZvaWQgc2NoZWR1bGVDbG9zZURhdGFiYXNlKCk7CisKKyAgICB2
b2lkIHNjaGVkdWxlU3luYygpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiwg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOworCisgICAgVGltZXIgbV9zeW5jVGlt
ZXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9jaGFuZ2VkSXRlbXM7CisgICAgYm9v
bCBtX2l0ZW1zQ2xlYXJlZDsKKworICAgIGJvb2wgbV9maW5hbFN5bmNTY2hlZHVsZWQ7CisKKyAg
ICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBtX3N0b3JhZ2VBcmVhOworICAgIFJlZlB0cjxTdG9y
YWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CisKKyAgICAvLyBUaGUgZGF0YWJhc2UgaGFu
ZGxlIHdpbGwgb25seSBldmVyIGJlIG9wZW5lZCBhbmQgdXNlZCBvbiB0aGUgYmFja2dyb3VuZCB0
aHJlYWQuCisgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKworICAgIC8vIFRoZSBmb2xs
b3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hyb25pemF0aW9uIGlzc3Vl
cy4KK3B1YmxpYzoKKyAgICAvLyBDYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQKKyAg
ICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsKKyAgICB2b2lkIHBlcmZvcm1TeW5jKCk7CisgICAgdm9p
ZCBkZWxldGVFbXB0eURhdGFiYXNlKCk7CisKK3ByaXZhdGU6CisgICAgZW51bSBPcGVuRGF0YWJh
c2VQYXJhbVR5cGUgeworICAgICAgICBDcmVhdGVJZk5vbkV4aXN0ZW50LAorICAgICAgICBTa2lw
SWZOb25FeGlzdGVudAorICAgIH07CisKKyAgICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7CisgICAg
dm9pZCBvcGVuRGF0YWJhc2UoT3BlbkRhdGFiYXNlUGFyYW1UeXBlIG9wZW5pbmdTdHJhdGVneSk7
CisgICAgdm9pZCBzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGl0ZW1zKTsKKworICAgIGNvbnN0IFN0cmluZyBtX2RhdGFiYXNlSWRlbnRpZmllcjsK
KworICAgIE11dGV4IG1fc3luY0xvY2s7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9p
dGVtc1BlbmRpbmdTeW5jOworICAgIGJvb2wgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nOworICAg
IGJvb2wgbV9zeW5jU2NoZWR1bGVkOworICAgIGJvb2wgbV9zeW5jSW5Qcm9ncmVzczsKKyAgICBi
b29sIG1fZGF0YWJhc2VPcGVuRmFpbGVkOworCisgICAgYm9vbCBtX3N5bmNDbG9zZURhdGFiYXNl
OworCisgICAgbXV0YWJsZSBNdXRleCBtX2ltcG9ydExvY2s7CisgICAgVGhyZWFkQ29uZGl0aW9u
IG1faW1wb3J0Q29uZGl0aW9uOworICAgIGJvb2wgbV9pbXBvcnRDb21wbGV0ZTsKKyAgICB2b2lk
IG1hcmtJbXBvcnRlZCgpOworICAgIHZvaWQgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9yYWdlQXJlYVN5bmNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGUzOTIzNTkxZTNjZGMxZmJiMjllNDc2MzIyNWIzYzJkZDU0ZmZhMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUltcGwuaCIKKworI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhSW1wbC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bkhhc2guaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
SGFzaE1hcDxTdHJpbmcsIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKj4mIGxvY2FsU3RvcmFnZU5hbWVz
cGFjZU1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBT
dG9yYWdlTmFtZXNwYWNlSW1wbCo+PiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7CisKKyAgICBy
ZXR1cm4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOworfQorCitSZWZQdHI8U3RvcmFnZU5hbWVz
cGFjZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZSh1bnNpZ25lZCBxdW90YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsKFNlc3Npb25TdG9yYWdlLCBTdHJpbmcoKSwgcXVvdGEpKTsKK30KKworUmVm
UHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Z2V0T3JDcmVh
dGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgsIHVuc2ln
bmVkIHF1b3RhKQoreworICAgIEFTU0VSVCghZGF0YWJhc2VQYXRoLmlzTnVsbCgpKTsKKworICAg
IGF1dG8mIHNsb3QgPSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5hZGQoZGF0YWJhc2VQYXRo
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKHNsb3QpCisgICAgICAgIHJldHVy
biBzbG90OworCisgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBzdG9yYWdlTmFtZXNw
YWNlID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKExvY2FsU3RvcmFnZSwgZGF0
YWJhc2VQYXRoLCBxdW90YSkpOworICAgIHNsb3QgPSBzdG9yYWdlTmFtZXNwYWNlLmdldCgpOwor
CisgICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2U7Cit9CisKK1N0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYXRoLCB1bnNpZ25lZCBxdW90YSkKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5
cGUpCisgICAgLCBtX3BhdGgocGF0aC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fc3luY01hbmFn
ZXIoMCkKKyAgICAsIG1fcXVvdGEocXVvdGEpCisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCit7
CisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlICYmICFtX3BhdGguaXNFbXB0
eSgpKQorICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUo
bV9wYXRoKTsKK30KKworU3RvcmFnZU5hbWVzcGFjZUltcGw6On5TdG9yYWdlTmFtZXNwYWNlSW1w
bCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX3N0b3JhZ2VU
eXBlID09IExvY2FsU3RvcmFnZSkgeworICAgICAgICBBU1NFUlQobG9jYWxTdG9yYWdlTmFtZXNw
YWNlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7CisgICAgICAgIGxvY2FsU3RvcmFnZU5hbWVz
cGFjZU1hcCgpLnJlbW92ZShtX3BhdGgpOworICAgIH0KKworICAgIGlmICghbV9pc1NodXRkb3du
KQorICAgICAgICBjbG9zZSgpOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KFBhZ2UqKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIEFTU0VSVChtX3N0b3JhZ2VU
eXBlID09IFNlc3Npb25TdG9yYWdlKTsKKworICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlSW1w
bD4gbmV3TmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKG1fc3Rv
cmFnZVR5cGUsIG1fcGF0aCwgbV9xdW90YSkpOworCisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1h
cDo6aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkK
KyAgICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5rZXksIGktPnZh
bHVlLT5jb3B5KCkpOworICAgIHJldHVybiBuZXdOYW1lc3BhY2UucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEo
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworCisgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBwcnBPcmlnaW47CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVh
SW1wbD4gc3RvcmFnZUFyZWE7CisgICAgaWYgKChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFN
YXAuZ2V0KG9yaWdpbikpKQorICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwor
CisgICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShtX3N0b3JhZ2VUeXBl
LCBvcmlnaW4sIG1fc3luY01hbmFnZXIsIG1fcXVvdGEpOworICAgIG1fc3RvcmFnZUFyZWFNYXAu
c2V0KG9yaWdpbi5yZWxlYXNlKCksIHN0b3JhZ2VBcmVhKTsKKyAgICByZXR1cm4gc3RvcmFnZUFy
ZWEucmVsZWFzZSgpOworfQorCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2lzU2h1dGRvd24pCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHdlJ3JlIHNlc3Npb24gc3RvcmFnZSwgd2Ugc2hv
dWxkbid0IG5lZWQgdG8gZG8gYW55IHdvcmsgaGVyZS4KKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9
PSBTZXNzaW9uU3RvcmFnZSkgeworICAgICAgICBBU1NFUlQoIW1fc3luY01hbmFnZXIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgaXQtPnZhbHVlLT5jbG9zZSgpOworCisgICAgaWYgKG1fc3luY01hbmFnZXIpCisgICAgICAg
IG1fc3luY01hbmFnZXItPmNsb3NlKCk7CisKKyAgICBtX2lzU2h1dGRvd24gPSB0cnVlOworfQor
Cit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5n
ZXQob3JpZ2luKTsKKyAgICBpZiAoc3RvcmFnZUFyZWEpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5j
bGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cit9CisKK3ZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6
OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFN
YXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLT5j
bGVhckZvck9yaWdpbkRlbGV0aW9uKCk7Cit9CisgICAgCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsOjpzeW5jKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAo
U3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+c3luYygpOworfQorCit2b2lkIFN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZUlkbGVMb2NhbFN0b3JhZ2VEYXRhYmFzZXMoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgaXQtPnZhbHVlLT5jbG9zZURhdGFiYXNlSWZJZGxlKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODU5YjU2NTlhZjlmMWI1Y2Y0Y2YzNzZmNjg1MjM2Zjc5NTJiOGZl
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VOYW1lc3BhY2VJbXBsX2gKKyNkZWZpbmUg
U3RvcmFnZU5hbWVzcGFjZUltcGxfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlQXJlYS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5IYXNoLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TdG9yYWdlTmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RvcmFnZUFyZWFJbXBsOworCitjbGFzcyBTdG9y
YWdlTmFtZXNwYWNlSW1wbCA6IHB1YmxpYyBTdG9yYWdlTmFtZXNwYWNlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBjcmVhdGVTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSk7CisgICAgc3RhdGljIFJlZlB0cjxTdG9yYWdlTmFt
ZXNwYWNlSW1wbD4gZ2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5n
JiBkYXRhYmFzZVBhdGgsIHVuc2lnbmVkIHF1b3RhKTsKKyAgICB2aXJ0dWFsIH5TdG9yYWdlTmFt
ZXNwYWNlSW1wbCgpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9y
YWdlQXJlYShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPikgIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KFBhZ2UqIG5ld1BhZ2UpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIG92ZXJyaWRlOworCisgICAgLy8gTm90IHJl
bW92aW5nIHRoZSBvcmlnaW4ncyBTdG9yYWdlQXJlYSBmcm9tIG1fc3RvcmFnZUFyZWFNYXAgYmVj
YXVzZQorICAgIC8vIHdlJ3JlIGp1c3QgZGVsZXRpbmcgdGhlIHVuZGVybHlpbmcgZGIgZmlsZS4g
SWYgYW4gaXRlbSBpcyBhZGRlZCBpbW1lZGlhdGVseQorICAgIC8vIGFmdGVyIGZpbGUgZGVsZXRp
b24sIHdlIHdhbnQgdGhlIHNhbWUgU3RvcmFnZUFyZWEgdG8gZXZlbnR1YWxseSB0cmlnZ2VyCisg
ICAgLy8gYSBzeW5jIGFuZCBmb3IgU3RvcmFnZUFyZWFTeW5jIHRvIHJlY3JlYXRlIHRoZSBiYWNr
aW5nIGRiIGZpbGUuCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3JpZ2luRm9yRGVsZXRpb24oU2Vj
dXJpdHlPcmlnaW4qKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxPcmlnaW5z
Rm9yRGVsZXRpb24oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luYygpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBjbG9zZUlkbGVMb2NhbFN0b3JhZ2VEYXRhYmFzZXMoKSBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZSwg
Y29uc3QgU3RyaW5nJiBwYXRoLCB1bnNpZ25lZCBxdW90YSk7CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4+IFN0b3Jh
Z2VBcmVhTWFwOworICAgIFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFyZWFNYXA7CisKKyAgICBT
dG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworCisgICAgLy8gT25seSB1c2VkIGlmIG1fc3RvcmFn
ZVR5cGUgPT0gTG9jYWxTdG9yYWdlIGFuZCB0aGUgcGF0aCB3YXMgbm90ICIiIGluIG91ciBjb25z
dHJ1Y3Rvci4KKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IG1fc3luY01hbmFnZXI7CisKKyAgICAvLyBUaGUgZGVmYXVsdCBxdW90YSBmb3IgZWFjaCBu
ZXcgc3RvcmFnZSBhcmVhLgorICAgIHVuc2lnbmVkIG1fcXVvdGE7CisKKyAgICBib29sIG1faXNT
aHV0ZG93bjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9y
YWdlU3luY01hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYzNDhiMzdlNjlmM2EzYTJmMzhiYzhkN2YxZTkzNDFmMmVk
M2YwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisKKyNp
bmNsdWRlICJTdG9yYWdlVGhyZWFkLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VTeW5jTWFuYWdlcihwYXRoKSk7Cit9CisKK1N0
b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5bmNNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCkK
KyAgICA6IG1fdGhyZWFkKHN0ZDo6bWFrZV91bmlxdWU8U3RvcmFnZVRocmVhZD4oKSkKKyAgICAs
IG1fcGF0aChwYXRoLmlzb2xhdGVkQ29weSgpKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgQVNTRVJUKCFtX3BhdGguaXNFbXB0eSgpKTsKKyAgICBtX3RocmVhZC0+c3RhcnQo
KTsKK30KKworU3RvcmFnZVN5bmNNYW5hZ2VyOjp+U3RvcmFnZVN5bmNNYW5hZ2VyKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV90aHJlYWQpOworfQorCisv
LyBDYWxsZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KK1N0cmluZyBTdG9yYWdlU3luY01hbmFn
ZXI6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVy
KQoreworICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKG1fcGF0aCkpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGVkIHRvIGNyZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIs
IG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0K
KworICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBkYXRhYmFzZUlk
ZW50aWZpZXIgKyAiLmxvY2Fsc3RvcmFnZSIpOworfQorCit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdl
cjo6ZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYgZnVuY3Rpb24pCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworCisgICAg
aWYgKG1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZC0+ZGlzcGF0Y2goZnVuY3Rpb24pOworfQor
Cit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y2xvc2UoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPnRlcm1p
bmF0ZSgpOworICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVN5bmNNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDg2NTFjYTFkMjM0YmU2ZDYzZTc5MjhjYTE4N2M4MTMxZDlkZmMwYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlU3luY01hbmFn
ZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTdG9yYWdlU3luY01hbmFnZXJfaAorI2RlZmluZSBTdG9yYWdl
U3luY01hbmFnZXJfaAorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTdG9yYWdlVGhyZWFkOworY2xhc3MgU3RvcmFnZUFyZWFTeW5jOwor
CitjbGFzcyBTdG9yYWdlU3luY01hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlU3lu
Y01hbmFnZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01h
bmFnZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIH5TdG9yYWdlU3luY01hbmFn
ZXIoKTsKKworICAgIHZvaWQgZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYp
OworICAgIHZvaWQgY2xvc2UoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTdG9yYWdlU3lu
Y01hbmFnZXIoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9y
YWdlVGhyZWFkPiBtX3RocmVhZDsKKworLy8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBzdWJq
ZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzCitwdWJsaWM6CisgICAgLy8gVG8g
YmUgY2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgorICAgIFN0cmluZyBmdWxsRGF0
YWJhc2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CisKK3ByaXZh
dGU6CisgICAgU3RyaW5nIG1fcGF0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA1YzFkZjFlODI5ZjA5NmEwNTg4NDk2ODZhMGMxYzZh
NDhiZDQxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
VGhyZWFkLmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJTdG9yYWdlVGhyZWFkLmgiCisKKyNpbmNsdWRl
IDx3dGYvQXV0b2RyYWluZWRQb29sLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgSGFzaFNldDxTdG9yYWdlVGhyZWFkKj4mIGFj
dGl2ZVN0b3JhZ2VUaHJlYWRzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0b3JhZ2VUaHJlYWQqPiwg
dGhyZWFkcywgKCkpOworICAgIHJldHVybiB0aHJlYWRzOworfQorCitTdG9yYWdlVGhyZWFkOjpT
dG9yYWdlVGhyZWFkKCkKKyAgICA6IG1fdGhyZWFkSUQoMCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworfQorCitTdG9yYWdlVGhyZWFkOjp+U3RvcmFnZVRocmVhZCgpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkSUQpOworfQorCiti
b29sIFN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGlmICghbV90aHJlYWRJRCkKKyAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVh
ZChTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3Jl
OiBMb2NhbFN0b3JhZ2UiKTsKKyAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygpLmFkZCh0aGlzKTsK
KyAgICByZXR1cm4gbV90aHJlYWRJRDsKK30KKwordm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRF
bnRyeVBvaW50Q2FsbGJhY2sodm9pZCogdGhyZWFkKQoreworICAgIHN0YXRpY19jYXN0PFN0b3Jh
Z2VUaHJlYWQqPih0aHJlYWQpLT50aHJlYWRFbnRyeVBvaW50KCk7Cit9CisKK3ZvaWQgU3RvcmFn
ZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludCgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisKKyAgICB3aGlsZSAoYXV0byBmdW5jdGlvbiA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2Uo
KSkgeworICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKKyAgICAgICAgKCpmdW5jdGlvbiko
KTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2goY29uc3Qgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgbV9x
dWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PihmdW5j
dGlvbikpOworfQorCit2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90
aHJlYWRJRCk7CisgICAgYWN0aXZlU3RvcmFnZVRocmVhZHMoKS5yZW1vdmUodGhpcyk7CisgICAg
Ly8gRXZlbiBpbiB3ZWlyZCwgZXhjZXB0aW9uYWwgY2FzZXMsIGRvbid0IHdhaXQgb24gYSBub25l
eGlzdGVudCB0aHJlYWQgdG8gdGVybWluYXRlLgorICAgIGlmICghbV90aHJlYWRJRCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+PihbdGhpc10geworICAgICAgICBwZXJmb3JtVGVybWluYXRlKCk7Cisg
ICAgfSkpOworICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOworICAgIEFT
U0VSVChtX3F1ZXVlLmtpbGxlZCgpKTsKKyAgICBtX3RocmVhZElEID0gMDsKK30KKwordm9pZCBT
dG9yYWdlVGhyZWFkOjpwZXJmb3JtVGVybWluYXRlKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKyAgICBtX3F1ZXVlLmtpbGwoKTsKK30KKwordm9pZCBTdG9yYWdlVGhyZWFkOjpy
ZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHMoKQoreworICAgIEhhc2hTZXQ8
U3RvcmFnZVRocmVhZCo+JiB0aHJlYWRzID0gYWN0aXZlU3RvcmFnZVRocmVhZHMoKTsKKworICAg
IGZvciAoSGFzaFNldDxTdG9yYWdlVGhyZWFkKj46Oml0ZXJhdG9yIGl0ID0gdGhyZWFkcy5iZWdp
bigpLCBlbmQgPSB0aHJlYWRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQp
LT5kaXNwYXRjaChXVEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmggYi9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNTJhYzYxMjFjODQ2
NmQ0ODZlNGE0ZGM5ZWYzYTRlMjg4NzNmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VUaHJlYWRf
aAorI2RlZmluZSBTdG9yYWdlVGhyZWFkX2gKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RvcmFnZUFyZWFTeW5jOworY2xhc3MgU3RvcmFn
ZVRhc2s7CisKK2NsYXNzIFN0b3JhZ2VUaHJlYWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFN0b3JhZ2VUaHJlYWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBT
dG9yYWdlVGhyZWFkKCk7CisgICAgflN0b3JhZ2VUaHJlYWQoKTsKKworICAgIGJvb2wgc3RhcnQo
KTsKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgdm9pZCBkaXNwYXRjaChjb25zdCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4mKTsKKworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VGYXN0TWFsbG9j
RnJlZU1lbW9yeUluQWxsVGhyZWFkcygpOworCitwcml2YXRlOgorICAgIC8vIENhbGxlZCBvbiBi
YWNrZ3JvdW5kIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50Q2FsbGJh
Y2sodm9pZCopOworICAgIHZvaWQgdGhyZWFkRW50cnlQb2ludCgpOworCisgICAgLy8gQmFja2dy
b3VuZCB0aHJlYWQgcGFydCBvZiB0aGUgdGVybWluYXRlIHByb2NlZHVyZS4KKyAgICB2b2lkIHBl
cmZvcm1UZXJtaW5hdGUoKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAg
ICBNZXNzYWdlUXVldWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX3F1ZXVlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRocmVhZF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dl
YktpdC9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODM4NmNmYTU2OTVl
MjRmMjYzZDYwYmJiY2ZkZTQyZDc0MjRiNGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcApAQCAtMCwwICsxLDY1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorCisjaW5jbHVkZSAiU3RvcmFnZVRo
cmVhZC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29kaW5nLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlIDxzcWxpdGUzX3ByaXZhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBTdG9yYWdlVHJhY2tlciogc3RvcmFnZVRyYWNrZXIgPSAwOworCisvLyBJ
ZiB0aGVyZSBpcyBubyBkb2N1bWVudCByZWZlcmVuY2luZyBhIHN0b3JhZ2UgZGF0YWJhc2UsIGNs
b3NlIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlCisvLyBhZnRlciBpdCBoYXMgYmVlbiBpZGxlIGZv
ciBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCBzZWNvbmRzLgorc3RhdGljIGNvbnN0IGRv
dWJsZSBEZWZhdWx0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsID0gMzAwOworICAgIAordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdl
UGF0aCwgU3RvcmFnZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIEFTU0VSVCghc3RvcmFnZVRyYWNrZXIgfHwgIXN0b3JhZ2VUcmFja2Vy
LT5tX2NsaWVudCk7CisgICAgCisgICAgaWYgKCFzdG9yYWdlVHJhY2tlcikKKyAgICAgICAgc3Rv
cmFnZVRyYWNrZXIgPSBuZXcgU3RvcmFnZVRyYWNrZXIoc3RvcmFnZVBhdGgpOworICAgIAorICAg
IHN0b3JhZ2VUcmFja2VyLT5tX2NsaWVudCA9IGNsaWVudDsKKyAgICBzdG9yYWdlVHJhY2tlci0+
bV9uZWVkc0luaXRpYWxpemF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6
aW50ZXJuYWxJbml0aWFsaXplKCkKK3sKKyAgICBtX25lZWRzSW5pdGlhbGl6YXRpb24gPSBmYWxz
ZTsKKworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGV4
dCBlbmNvZGluZyBtYXBzIGhhdmUgYmVlbiBidWlsdCBvbiB0aGUgbWFpbiB0aHJlYWQsIGFzIHRo
ZSBTdG9yYWdlVHJhY2tlciB0aHJlYWQgbWlnaHQgdHJ5IHRvIGRvIGl0IHRoZXJlIGluc3RlYWQu
CisgICAgLy8gRklYTUUgKDxyZGFyOi8vcHJvYmxlbS85MTI3ODE5Pik6IElzIHRoZXJlIGEgbW9y
ZSBleHBsaWNpdCB3YXkgb2YgZG9pbmcgdGhpcyBiZXNpZGVzIGFjY2Vzc2luZyB0aGUgVVRGOEVu
Y29kaW5nPworICAgIFVURjhFbmNvZGluZygpOworICAgIAorICAgIHN0b3JhZ2VUcmFja2VyLT5z
ZXRJc0FjdGl2ZSh0cnVlKTsKKyAgICBzdG9yYWdlVHJhY2tlci0+bV90aHJlYWQtPnN0YXJ0KCk7
ICAKKyAgICBzdG9yYWdlVHJhY2tlci0+aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKK30KKwor
U3RvcmFnZVRyYWNrZXImIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkKK3sKKyAgICBpZiAoIXN0
b3JhZ2VUcmFja2VyKQorICAgICAgICBzdG9yYWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tl
cigiIik7CisgICAgaWYgKHN0b3JhZ2VUcmFja2VyLT5tX25lZWRzSW5pdGlhbGl6YXRpb24pCisg
ICAgICAgIHN0b3JhZ2VUcmFja2VyLT5pbnRlcm5hbEluaXRpYWxpemUoKTsKKyAgICAKKyAgICBy
ZXR1cm4gKnN0b3JhZ2VUcmFja2VyOworfQorCitTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNr
ZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCkKKyAgICA6IG1fc3RvcmFnZURpcmVjdG9yeVBh
dGgoc3RvcmFnZVBhdGguaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2NsaWVudCgwKQorICAgICwg
bV90aHJlYWQoc3RkOjptYWtlX3VuaXF1ZTxTdG9yYWdlVGhyZWFkPigpKQorICAgICwgbV9pc0Fj
dGl2ZShmYWxzZSkKKyAgICAsIG1fbmVlZHNJbml0aWFsaXphdGlvbihmYWxzZSkKKyAgICAsIG1f
U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKERlZmF1bHRTdG9yYWdlRGF0YWJhc2VJZGxlSW50
ZXJ2YWwpCit7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0
YWJhc2VNdXRleCk7CisKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOworCisgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGguaXNv
bGF0ZWRDb3B5KCk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdp
blNldE11dGV4KTsKKyAgICAgICAgbV9vcmlnaW5TZXQuY2xlYXIoKTsKKyAgICB9CisKKyAgICBp
ZiAoIW1faXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIGltcG9ydE9yaWdpbklkZW50
aWZpZXJzKCk7Cit9CisKK1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5pc29sYXRl
ZENvcHkoKTsKK30KKworU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRo
KCkKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOworICAgIHJldHVy
biBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgIlN0b3Jh
Z2VUcmFja2VyLmRiIik7Cit9CisKK3N0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRmlsZUV4aXN0
cyhjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQorewor
ICAgIGlmIChjcmVhdGVJZkRvZXNOb3RFeGlzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VBbGxEaXJl
Y3RvcmllcyhkaXJlY3RvcnlOYW1lKGZpbGVOYW1lKSk7CisKKyAgICByZXR1cm4gZmlsZUV4aXN0
cyhmaWxlTmFtZSk7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJh
c2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7
CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbklu
UHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisKKyAgICBBU1NFUlQoIW1f
ZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOworCisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tl
ckRhdGFiYXNlUGF0aCgpOworICAgIAorICAgIGlmICghZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3Rz
KGRhdGFiYXNlUGF0aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKSB7CisgICAgICAgIGlmIChjcmVh
dGVJZkRvZXNOb3RFeGlzdCkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0
ZSBkYXRhYmFzZSBmaWxlICclcyciLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFi
YXNlUGF0aCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBh
dGggJXMuIiwgZGF0YWJhc2VQYXRoLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBtX2RhdGFiYXNlLmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKyAg
ICAKKyAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIk9yaWdpbnMiKSkgeworICAgICAg
ICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChv
cmlnaW4gVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgcGF0aCBURVhUKTsiKSkKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOwor
ICAgIH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMo
KQoreyAgIAorICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKworICAgIG1f
dGhyZWFkLT5kaXNwYXRjaChbdGhpc10geworICAgICAgICBzeW5jSW1wb3J0T3JpZ2luSWRlbnRp
ZmllcnMoKTsKKyAgICB9KTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZmluaXNoZWRJbXBv
cnRpbmdPcmlnaW5JZGVudGlmaWVycygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0
YWJhc2VNdXRleCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkRmlu
aXNoTG9hZGluZ09yaWdpbnMoKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9y
dE9yaWdpbklkZW50aWZpZXJzKCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgCisg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOworCisgICAgICAgIC8vIERvbid0IGZvcmNlIGNyZWF0
aW9uIG9mIFN0b3JhZ2VUcmFja2VyJ3MgZGIganVzdCBiZWNhdXNlIGEgdHJhY2tlcgorICAgICAg
ICAvLyB3YXMgaW5pdGlhbGl6ZWQuIEl0IHdpbGwgYmUgY3JlYXRlZCBpZiBsb2NhbCBzdG9yYWdl
IGRicyBhcmUgZm91bmQKKyAgICAgICAgLy8gYnkgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0
YWJzZSgpIG9yIHRoZSBuZXh0IHRpbWUgYSBsb2NhbCBzdG9yYWdlCisgICAgICAgIC8vIGRiIGlz
IGNyZWF0ZWQgYnkgU3RvcmFnZUFyZWFTeW5jLgorICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNl
KGZhbHNlKTsKKworICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgeworICAgICAgICAg
ICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3Vu
dGVyOworCisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJTRUxFQ1Qgb3JpZ2luIEZST00gT3JpZ2lucyIpOworICAgICAgICAgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCByZXN1bHQ7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrT3JpZ2lucyhtX29yaWdpblNldE11dGV4KTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgICAgICAg
ICAgICAgbV9vcmlnaW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVk
Q29weSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKKworICAgICAgICBpZiAobV9j
bGllbnQpIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4
KTsKKyAgICAgICAgICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5T
ZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAg
bV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKCppdCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgIGZpbmlzaGVkSW1wb3J0
aW5nT3JpZ2luSWRlbnRpZmllcnMoKTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRy
YWNrZXI6OnN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9D
b3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZGF0YWJhc2VNdXRleCk7CisgICAgICAgIHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0
b3JhZ2VEaXJlY3RvcnlQYXRoLCAiKi5sb2NhbHN0b3JhZ2UiKTsKKyAgICB9CisKKyAgICAvLyBV
c2UgYSBjb3B5IG9mIG1fb3JpZ2luU2V0IHRvIGZpbmQgZXhwaXJlZCBlbnRyaWVzIGFuZCB0byBz
Y2hlZHVsZSB0aGVpcgorICAgIC8vIGRlbGV0aW9ucyBmcm9tIGRpc2sgYW5kIGZyb20gbV9vcmln
aW5TZXQuCisgICAgT3JpZ2luU2V0IG9yaWdpblNldENvcHk7CisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7CisgICAgICAgIGZvciAoT3JpZ2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCksIGVuZCA9IG1fb3JpZ2lu
U2V0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBvcmlnaW5TZXRDb3B5LmFk
ZCgoKml0KS5pc29sYXRlZENvcHkoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFkZCBtaXNzaW5n
IFN0b3JhZ2VUcmFja2VyIHJlY29yZHMuCisgICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKKyAg
ICBTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IEFTQ0lJTGl0ZXJhbCgiLmxvY2Fsc3RvcmFnZSIpOwor
CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdp
bigpLCBlbmQgPSBwYXRocy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgcGF0aCA9ICppdDsKKworICAgICAgICBpZiAocGF0aC5sZW5ndGgoKSA+IGZpbGVF
eHRlbnNpb24ubGVuZ3RoKCkgJiYgcGF0aC5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uLCB0cnVlKSkg
eworICAgICAgICAgICAgU3RyaW5nIGZpbGUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CisgICAg
ICAgICAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllciA9IGZpbGUuc3Vic3RyaW5nKDAsIGZpbGUu
bGVuZ3RoKCkgLSBmaWxlRXh0ZW5zaW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICghb3Jp
Z2luU2V0Q29weS5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICBz
eW5jU2V0T3JpZ2luRGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsKKworICAgICAgICAg
ICAgZm91bmRPcmlnaW5zLmFkZChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIERlbGV0ZSBzdGFsZSBTdG9yYWdlVHJhY2tlciByZWNvcmRzLgorICAgIGZvciAo
T3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG9yaWdpblNldENvcHkuYmVnaW4oKSwgZW5k
ID0gb3JpZ2luU2V0Q29weS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciA9ICppdDsKKyAgICAgICAgaWYgKGZvdW5kT3JpZ2lu
cy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyQ29weSA9IG9yaWdpbklkZW50aWZpZXIuaXNv
bGF0ZWRDb3B5KCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIG9yaWdpbklkZW50
aWZpZXJDb3B5XSB7CisgICAgICAgICAgICBkZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihvcmln
aW5JZGVudGlmaWVyQ29weSk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBTdG9yYWdl
VHJhY2tlcjo6c2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKQoreworICAgIGlmICghbV9pc0FjdGl2ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmln
aW5TZXRNdXRleCk7CisKKyAgICAgICAgaWYgKG1fb3JpZ2luU2V0LmNvbnRhaW5zKG9yaWdpbklk
ZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fb3JpZ2luU2V0LmFk
ZChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmll
ckNvcHkgPSBvcmlnaW5JZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOworICAgIFN0cmluZyBkYXRh
YmFzZUZpbGVDb3B5ID0gZGF0YWJhc2VGaWxlLmlzb2xhdGVkQ29weSgpOworICAgIGF1dG8gZnVu
Y3Rpb24gPSBbdGhpcywgb3JpZ2luSWRlbnRpZmllckNvcHksIGRhdGFiYXNlRmlsZUNvcHldIHsK
KyAgICAgICAgc3luY1NldE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllckNvcHksIGRhdGFi
YXNlRmlsZUNvcHkpOworICAgIH07CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAg
ICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICAgICAgbV90aHJlYWQtPmRpc3BhdGNoKGZ1bmN0aW9u
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogVGhpcyB3ZWlyZCBwaW5nLXBvbmdp
bmcgd2FzIGRvbmUgdG8gZml4IGEgZGVhZGxvY2suIFdlIHNob3VsZCBmaWd1cmUgb3V0IGEgY2xl
YW5lciB3YXkgdG8gYXZvaWQgaXQgaW5zdGVhZC4KKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
dGhpcywgZnVuY3Rpb25dIHsKKyAgICAgICAgICAgIG1fdGhyZWFkLT5kaXNwYXRjaChmdW5jdGlv
bik7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1Nl
dE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRmlsZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAg
IFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRl
cjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOworCisgICAgb3Bl
blRyYWNrZXJEYXRhYmFzZSh0cnVlKTsKKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVu
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9k
YXRhYmFzZSwgIklOU0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOworICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGVzdGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklk
ZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfSAKKyAgICAK
KyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGVt
ZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0
YWJsaXNoIG9yaWdpbiAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2Np
aSgpLmRhdGEoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdp
blNldE11dGV4KTsKKyAgICAgICAgaWYgKCFtX29yaWdpblNldC5jb250YWlucyhvcmlnaW5JZGVu
dGlmaWVyKSkKKyAgICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NsaWVudE11dGV4
KTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNo
RGlkTW9kaWZ5T3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBTdG9y
YWdlVHJhY2tlcjo6b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIHJlc3Vs
dCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgCisgICAgaWYgKCFtX2lzQWN0aXZl
KQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRN
dXRleCk7CisKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdp
blNldC5iZWdpbigpLCBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICByZXN1bHQuYXBwZW5kKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJ
ZGVudGlmaWVyKCppdCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmln
aW5zKCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQpOworICAgIAorICAgIGlmICghbV9pc0FjdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9v
cmlnaW5TZXRNdXRleCk7CisgICAgICAgIHdpbGxEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgICAg
IG1fb3JpZ2luU2V0LmNsZWFyKCk7CisgICAgfQorCisgICAgUGFnZUdyb3VwOjpjbGVhckxvY2Fs
U3RvcmFnZUZvckFsbE9yaWdpbnMoKTsKKworICAgIG1fdGhyZWFkLT5kaXNwYXRjaChbdGhpc10g
eworICAgICAgICBzeW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIH0pOworfQorCisjaWYgUExB
VEZPUk0oSU9TKQorc3RhdGljIHZvaWQgdHJ1bmNhdGVEYXRhYmFzZUZpbGUoU1FMaXRlRGF0YWJh
c2UmIGRhdGFiYXNlKQoreworICAgIHNxbGl0ZTNfZmlsZV9jb250cm9sKGRhdGFiYXNlLnNxbGl0
ZTNIYW5kbGUoKSwgMCwgU1FMSVRFX1RSVU5DQVRFX0RBVEFCQVNFLCAwKTsKK30KKyNlbmRpZgor
Cit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZGF0YWJhc2VNdXRleCk7CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxz
ZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdp
biwgcGF0aCBGUk9NIE9yaWdpbnMiKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRl
bWVudC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzdWx0Owor
ICAgIHdoaWxlICgocmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7
CisgICAgICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRlbGV0ZUZpbGUoc3RhdGVtZW50
LmdldENvbHVtblRleHQoMSkpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2NsaWVudE11dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBh
bGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKworICAgIGlmIChtX2RhdGFiYXNlLmlz
T3BlbigpKSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB0cnVuY2F0ZURhdGFiYXNlRmls
ZShtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSk7CisjZW5kaWYKKyAgICAgICAgbV9kYXRhYmFz
ZS5jbG9zZSgpOworICAgIH0KKworI2lmICFQTEFURk9STShJT1MpCisgICAgaWYgKCFkZWxldGVG
aWxlKHRyYWNrZXJEYXRhYmFzZVBhdGgoKSkpIHsKKyAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hl
cmUgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlbGV0ZSB0aGUgZGF0YWJhc2UgZmlsZSAoZS5nIHNv
bWUgb3RoZXIgcHJvZ3JhbQorICAgICAgICAvLyBsaWtlIGEgdmlydXMgc2Nhbm5lciBpcyBhY2Nl
c3NpbmcgaXQpLCBtYWtlIHN1cmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzLgorICAgICAgICBvcGVu
VHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBPcmlnaW5zIik7CisgICAgICAgIGlmIChk
ZWxldGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZWxldGVTdGF0ZW1l
bnQuZXhlY3V0ZUNvbW1hbmQoKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
ZXhlY3V0ZSBkZWxldGlvbiBvZiBhbGwgb3JpZ2lucyIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAgIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KG1fc3RvcmFnZURpcmVj
dG9yeVBhdGgpOworI2VuZGlmCit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OmRlbGV0ZU9yaWdp
bldpdGhJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBk
ZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIo
b3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxl
dGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sgICAgCisgICAgQVNTRVJUKG1faXNB
Y3RpdmUpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFk
KTsKKyAgICAKKyAgICBpZiAoIW1faXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEJlZm9yZSBkZWxldGluZyBkYXRhYmFzZSwgd2UgbmVlZCB0byBjbGVhciBpbi1tZW1vcnkgbG9j
YWwgc3RvcmFnZSBkYXRhCisgICAgLy8gaW4gU3RvcmFnZUFyZWEsIGFuZCB0byBjbG9zZSB0aGUg
U3RvcmFnZUFyZWEgZGIuIEl0J3MgcG9zc2libGUgZm9yIGFuCisgICAgLy8gaXRlbSB0byBiZSBh
ZGRlZCBpbW1lZGlhdGVseSBhZnRlciBjbG9zaW5nIHRoZSBkYiBhbmQgY2F1c2UgU3RvcmFnZUFy
ZWFTeW5jCisgICAgLy8gdG8gcmVvcGVuIHRoZSBkYiBiZWZvcmUgdGhlIGRiIGlzIGRlbGV0ZWQg
YnkgYSBTdG9yYWdlVHJhY2tlciB0aHJlYWQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCByZW9wZW5p
bmcgdGhlIGRiIGluIFN0b3JhZ2VBcmVhU3luYyB3aWxsIGNhbmNlbCBhIHBlbmRpbmcKKyAgICAv
LyBTdG9yYWdlVHJhY2tlciBkYiBkZWxldGlvbi4KKyAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxT
dG9yYWdlRm9yT3JpZ2luKG9yaWdpbik7CisKKyAgICBTdHJpbmcgb3JpZ2luSWQgPSBvcmlnaW4t
PmRhdGFiYXNlSWRlbnRpZmllcigpOworICAgIAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOworICAgICAgICB3aWxsRGVsZXRlT3JpZ2luKG9yaWdp
bklkKTsKKyAgICAgICAgbV9vcmlnaW5TZXQucmVtb3ZlKG9yaWdpbklkKTsKKyAgICB9CisKKyAg
ICBTdHJpbmcgb3JpZ2luSWRDb3B5ID0gb3JpZ2luSWQuaXNvbGF0ZWRDb3B5KCk7CisgICAgbV90
aHJlYWQtPmRpc3BhdGNoKFt0aGlzLCBvcmlnaW5JZENvcHldIHsKKyAgICAgICAgc3luY0RlbGV0
ZU9yaWdpbihvcmlnaW5JZENvcHkpOworICAgIH0pOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2Vy
OjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9n
cmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2RhdGFiYXNlTXV0ZXgpOworICAgIAorICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKG9y
aWdpbklkZW50aWZpZXIpKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdGVkIHRvIGRlbGV0
ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMgYmVpbmcgY3JlYXRlZFxuIiwgb3JpZ2luSWRlbnRp
Zmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
b3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgcGF0aCA9IGRhdGFiYXNlUGF0aEZvck9y
aWdpbihvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0IGEgcmVxdWVzdCBmcm9tIHRoZSBBUEkgdG8gZGVs
ZXRlIHRoZSBzdG9yYWdlIGZvciBhbiBvcmlnaW4gdGhhdAorICAgICAgICAvLyBoYXMgbm8gc3Vj
aCBzdG9yYWdlLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFNRTGl0ZVN0YXRl
bWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hl
cmUgb3JpZ2luPT8iKTsKKyAgICBpZiAoZGVsZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxS
ZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9u
IG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgZGVsZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdp
bklkZW50aWZpZXIpOworICAgIGlmICghZGVsZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmln
aW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZGVsZXRlRmlsZShwYXRoKTsKKyAgICAKKyAgICBib29sIHNob3Vs
ZERlbGV0ZVRyYWNrZXJGaWxlcyA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOworICAgICAgICBtX29yaWdpblNldC5yZW1vdmUob3Jp
Z2luSWRlbnRpZmllcik7CisgICAgICAgIHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IG1fb3Jp
Z2luU2V0LmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkRGVsZXRlVHJhY2tlckZp
bGVzKSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB0cnVuY2F0ZURhdGFiYXNlRmlsZSht
X2RhdGFiYXNlKTsKKyNlbmRpZgorICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisjaWYgIVBM
QVRGT1JNKElPUykKKyAgICAgICAgZGVsZXRlRmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOwor
ICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyNl
bmRpZgorICAgIH0KKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY2xpZW50
TXV0ZXgpOworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7CisgICAgfQorfQorICAgIAor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VS
VCghbV9vcmlnaW5TZXRNdXRleC50cnlMb2NrKCkpOworCisgICAgT3JpZ2luU2V0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQoKCppdCkuaXNvbGF0ZWRDb3B5KCkpOwor
fQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjp3aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVCghbV9vcmlnaW5TZXRNdXRleC50cnlMb2NrKCkpOworCisgICAgbV9vcmlnaW5zQmVpbmdE
ZWxldGVkLmFkZChvcmlnaW5JZGVudGlmaWVyKTsKK30KKyAgICAKK2Jvb2wgU3RvcmFnZVRyYWNr
ZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7Cisg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlTXV0ZXgudHJ5TG9jaygpKTsKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9vcmlnaW5TZXRNdXRleCk7CisgICAgcmV0dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRl
ZC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6
Y2FuY2VsRGVsZXRpbmdPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorewor
ICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9vcmlnaW5TZXRNdXRleCk7CisgICAgICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVk
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5yZW1vdmUob3Jp
Z2luSWRlbnRpZmllcik7CisgICAgfQorfQorCitib29sIFN0b3JhZ2VUcmFja2VyOjppc0FjdGl2
ZSgpCit7CisgICAgcmV0dXJuIG1faXNBY3RpdmU7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6
OnNldElzQWN0aXZlKGJvb2wgZmxhZykKK3sKKyAgICBtX2lzQWN0aXZlID0gZmxhZzsKK30KKyAg
ICAKK1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6ZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VNdXRleC50
cnlMb2NrKCkpOworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKyAgICAKKyAgICBpZiAoIW1fZGF0
YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFNRTGl0ZVRy
YW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKworICAg
IFNRTGl0ZVN0YXRlbWVudCBwYXRoU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBG
Uk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKKyAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJl
cGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Igb3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVy
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICBw
YXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGludCByZXN1
bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJv
dykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKTsKK30KKyAgICAKK2xvbmcgbG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlz
a1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgaWYgKCFtX2lz
QWN0aXZlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Rh
dGFiYXNlTXV0ZXgpOworCisgICAgU3RyaW5nIHBhdGggPSBkYXRhYmFzZVBhdGhGb3JPcmlnaW4o
b3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGxvbmcgbG9uZyBzaXplOworICAgIHJldHVybiBnZXRG
aWxlU2l6ZShwYXRoLCBzaXplKSA/IHNpemUgOiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBi
L1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3NzA1
OTM3ZWYxNzhlNmY5N2QxYjZiZTc5YjdjYzQxMjFkMTA4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaApAQCAtMCwwICsxLDEyMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgU3RvcmFnZVRyYWNrZXJfaAorI2RlZmluZSBTdG9yYWdlVHJh
Y2tlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0b3JhZ2VUYXNrOworY2xhc3MgU3RvcmFnZVRocmVh
ZDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3MgU3RvcmFnZVRyYWNrZXJDbGllbnQ7ICAg
IAorCitjbGFzcyBTdG9yYWdlVHJhY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Rv
cmFnZVRyYWNrZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmlu
ZyYgc3RvcmFnZVBhdGgsIFN0b3JhZ2VUcmFja2VyQ2xpZW50Kik7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0cmFja2VyKCk7CisKKyAgICB2b2lkIHNldERhdGFi
YXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAg
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVBbGxPcmlnaW5zKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2b2lkIGRl
bGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+PiYgcmVzdWx0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBsb25nIGxvbmcgZGlza1VzYWdl
Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CisgICAgCisgICAgdm9pZCBjYW5jZWxEZWxldGlu
Z09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIAorICAgIGJvb2wg
aXNBY3RpdmUoKTsKKworICAgIGRvdWJsZSBzdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoKSB7
IHJldHVybiBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDsgfQorICAgIHZvaWQgc2V0U3Rv
cmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkgeyBtX1N0b3JhZ2VEYXRh
YmFzZUlkbGVJbnRlcnZhbCA9IGludGVydmFsOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCk7CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgU3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCk7CisKKyAgICB2
b2lkIGludGVybmFsSW5pdGlhbGl6ZSgpOworCisgICAgU3RyaW5nIHRyYWNrZXJEYXRhYmFzZVBh
dGgoKTsKKyAgICB2b2lkIG9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RF
eGlzdCk7CisKKyAgICB2b2lkIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBm
aW5pc2hlZEltcG9ydGluZ09yaWdpbklkZW50aWZpZXJzKCk7CisgICAgCisgICAgdm9pZCBkZWxl
dGVUcmFja2VyRmlsZXMoKTsKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisKKyAgICBib29sIGNhbkRlbGV0ZU9yaWdpbihj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZU9yaWdp
bihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZUFs
bE9yaWdpbnMoKTsKKworICAgIHZvaWQgb3JpZ2luRmlsZVBhdGhzKFZlY3RvcjxTdHJpbmc+JiBw
YXRocyk7CisgICAgCisgICAgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsKKworICAgIC8vIFN5bmMg
dG8gZGlzayBvbiBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICB2b2lkIHN5bmNEZWxldGVBbGxPcmln
aW5zKCk7CisgICAgdm9pZCBzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgdm9pZCBzeW5jU2V0T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VGaWxlKTsKKyAgICB2b2lkIHN5
bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygpOworCisgICAgLy8gTXV0ZXggZm9yIG1fZGF0YWJh
c2UgYW5kIG1fc3RvcmFnZURpcmVjdG9yeVBhdGguCisgICAgTXV0ZXggbV9kYXRhYmFzZU11dGV4
OworICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CisgICAgU3RyaW5nIG1fc3RvcmFnZURp
cmVjdG9yeVBhdGg7CisKKyAgICBNdXRleCBtX2NsaWVudE11dGV4OworICAgIFN0b3JhZ2VUcmFj
a2VyQ2xpZW50KiBtX2NsaWVudDsKKworICAgIC8vIEd1YXJkIGZvciBtX29yaWdpblNldCBhbmQg
bV9vcmlnaW5zQmVpbmdEZWxldGVkLgorICAgIE11dGV4IG1fb3JpZ2luU2V0TXV0ZXg7CisgICAg
dHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3JpZ2luU2V0OworICAgIE9yaWdpblNldCBtX29yaWdp
blNldDsKKyAgICBPcmlnaW5TZXQgbV9vcmlnaW5zQmVpbmdEZWxldGVkOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOworICAgIAorICAgIGJvb2wgbV9pc0Fj
dGl2ZTsKKyAgICBib29sIG1fbmVlZHNJbml0aWFsaXphdGlvbjsKKyAgICBkb3VibGUgbV9TdG9y
YWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2Uv
U3RvcmFnZVRyYWNrZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MWE2MDI5ZmE1NDk2M2IxZTYwODMy
Y2JjNDc2MGZiMGEzZTE1ZjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TdG9y
YWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisg
CisjaWZuZGVmIFN0b3JhZ2VUcmFja2VyQ2xpZW50X2gKKyNkZWZpbmUgU3RvcmFnZVRyYWNrZXJD
bGllbnRfaAorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTdG9yYWdlVHJhY2tlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
U3RvcmFnZVRyYWNrZXJDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRN
b2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdPcmlnaW5zKCkgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNrZXJDbGllbnRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNw
cAppbmRleCBmNmM1YmViZTdlMGRmNzZlODNkYTUxOThmY2Y2M2E5YzNmNjQ1OTMwLi5hMTUwODlm
NzI2MGY4MWFmM2ExMTYwZmYxMjcxYzg1ZDI0YjA5OGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcApAQCAtMjUsNyAr
MjUsNyBAQAogCiAjaW5jbHVkZSAiV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiCiAKLSNp
bmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmg+CisjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZUltcGwuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHBy
b2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCmluZGV4IDdmZTU1YTJlMGEwZjBhYjZkMzlmZTg4MWFi
ZGM5ZTExNWJjOTEyZmEuLjk2N2IwN2ZiMTg0N2VmZWM5ZGNiODY4MTRlNTBiYzE2ZjRmNjg4ZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52
Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52
Y3hwcm9qCkBAIC0yODUsNiArMjg1LDEyIEBACiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0
aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxT
dG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlwuLlxTdG9yYWdlXFN0b3JhZ2VBcmVhU3luYy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZVRocmVhZC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUcmFja2Vy
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFn
ZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u
XGNmXFdlYkNvcmVTdXBwb3J0XFdlYkluc3BlY3RvckNsaWVudENGLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5jcHAiIC8+CkBAIC00MTks
NiArNDI1LDEzIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cV2ViV29ya2Vy
c1ByaXZhdGUuY3BwIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VBcmVhU3luYy5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlSW1w
bC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlU3lu
Y01hbmFnZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3Rv
cmFnZVRocmVhZC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxT
dG9yYWdlVHJhY2tlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFn
ZVxTdG9yYWdlVHJhY2tlckNsaWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cU3RvcmFnZVxXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVEb2N1bWVudC5oIiAvPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmls
dGVycyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9q
LmZpbHRlcnMKaW5kZXggMzU2YjUwZDI0NjRhZWViMGE5ZjI1MzdkNjliYWI1MjAwNGJmY2NlYS4u
MzE2MGFmZjQ4NzljMzg0ZDdkODE2NTY3Yzk0YTNkMmM0ODRlZTQ2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycwor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5m
aWx0ZXJzCkBAIC0yMTcsNiArMjE3LDI0IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu
Llx3aW5cV2ViU2VyaWFsaXplZEpTVmFsdWUuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c
U3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmls
dGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3Rv
cmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVy
PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFn
ZVxTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0
ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9y
YWdlXFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0
ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9y
YWdlXFN0b3JhZ2VUaHJlYWQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgor
ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxT
dG9yYWdlVHJhY2tlci5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAg
PC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYlN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC00OTksNiArNTE3LDI3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cV2ViU2VyaWFsaXplZEpTVmFsdWUuaCI+CiAgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuaCI+CisgICAgICA8Rmls
dGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZUFyZWFTeW5jLmgiPgorICAgICAgPEZpbHRlcj5T
b3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiPgorICAgICAgPEZpbHRlcj5T
b3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VTeW5jTWFuYWdlci5oIj4KKyAgICAgIDxGaWx0ZXI+U291
cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cLi5cU3RvcmFnZVxTdG9yYWdlVGhyZWFkLmgiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxT
dG9yYWdlXFN0b3JhZ2VUcmFja2VyLmgiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+
CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdl
XFN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+
CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdl
XFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIj4KICAgICAgIDxGaWx0ZXI+U291cmNlczwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2JiNWE2ZGQ5ZTk4ZTUyYzcyNDIyYzQ4YjUyNzlm
NmVhNzU2YmIxOS4uNjQyM2JhZTliZDMzOTUyNTA4MDA5YzVkYmM1ZGRlZDk2M2RmNjVmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02
OCw2ICs2OCwxOSBAQAogCQkxQUVBNjZEOTBEQzZCMjA5MDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQ
bHVnaW5FdmVudEhhbmRsZXJDYXJib24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUVBNjZENzBEQzZCMjA5MDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQ
bHVnaW5FdmVudEhhbmRsZXJDYXJib24ubW0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdT
ID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiOyB9OyB9OwogCQkxQUVBNkE1MDBEQzhD
RTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFQTZBNEUwREM4Q0Uy
RjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29jb2EuaCAqLzsgfTsK
IAkJMUFFQTZBNTEwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5k
bGVyQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUVBNkE0RjBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRs
ZXJDb2NvYS5tbSAqLzsgfTsKKwkJMUFGN0FGQjQxQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VB
cmVhSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUY3QUZBNzFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCAqLzsgfTsK
KwkJMUFGN0FGQjUxQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGN0FGQTgxQTNBMkRGQjAw
QzhFNEU3IC8qIFN0b3JhZ2VBcmVhSW1wbC5oICovOyB9OworCQkxQUY3QUZCNjFBM0EyREZCMDBD
OEU0RTcgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjdBRkE5MUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlQXJl
YVN5bmMuY3BwICovOyB9OworCQkxQUY3QUZCNzFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZUFy
ZWFTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUY3QUZBQTFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZUFyZWFTeW5jLmggKi87IH07CisJCTFB
RjdBRkI4MUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUY3QUZBQjFBM0EyREZC
MDBDOEU0RTcgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9OworCQkxQUY3QUZCOTFB
M0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjdBRkFDMUEzQTJERkIwMEM4RTRFNyAv
KiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICovOyB9OworCQkxQUY3QUZCQTFBM0EyREZCMDBDOEU0
RTcgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjdBRkFEMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlU3lu
Y01hbmFnZXIuY3BwICovOyB9OworCQkxQUY3QUZCQjFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFn
ZVN5bmNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUY3QUZBRTFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi87
IH07CisJCTFBRjdBRkJDMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVGhyZWFkLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjdBRkFGMUEzQTJE
RkIwMEM4RTRFNyAvKiBTdG9yYWdlVGhyZWFkLmNwcCAqLzsgfTsKKwkJMUFGN0FGQkQxQTNBMkRG
QjAwQzhFNEU3IC8qIFN0b3JhZ2VUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjdBRkIwMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVGhy
ZWFkLmggKi87IH07CisJCTFBRjdBRkJFMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVHJhY2tl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUY3
QUZCMTFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovOyB9OworCQkxQUY3
QUZCRjFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjdBRkIyMUEzQTJERkIwMEM4RTRFNyAv
KiBTdG9yYWdlVHJhY2tlci5oICovOyB9OworCQkxQUY3QUZDMDFBM0EyREZCMDBDOEU0RTcgLyog
U3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBRjdBRkIzMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVHJhY2tlckNs
aWVudC5oICovOyB9OwogCQkxQzBENDA4NzBBQzFDOEY0MDAwOUMxMTMgLyogV2ViS2l0VmVyc2lv
bkNoZWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUMwRDQwODUwQUMxQzhGNDAwMDlDMTEzIC8qIFdlYktpdFZlcnNpb25DaGVja3MuaCAqLzsgfTsK
IAkJMUMwRDQwODgwQUMxQzhGNDAwMDlDMTEzIC8qIFdlYktpdFZlcnNpb25DaGVja3MubSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMEQ0MDg2MEFDMUM4
RjQwMDA5QzExMyAvKiBXZWJLaXRWZXJzaW9uQ2hlY2tzLm0gKi87IH07CiAJCTFDNjhGNjZGMDk1
QjVGQzEwMEMyOTg0RSAvKiBXZWJOb2RlSGlnaGxpZ2h0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzY4RjY2MzA5NUI1RkMxMDBDMjk4NEUgLyogV2Vi
Tm9kZUhpZ2hsaWdodC5oICovOyB9OwpAQCAtNTE1LDYgKzUyOCwxOSBAQAogCQkxQUVBNjZENzBE
QzZCMjA5MDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDYXJib24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJOZXRzY2FwZVBsdWdp
bkV2ZW50SGFuZGxlckNhcmJvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFF
QTZBNEUwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ29j
b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTmV0c2NhcGVQbHVnaW5F
dmVudEhhbmRsZXJDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUVBNkE0
RjBEQzhDRTJGMDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRsZXJDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYk5ldHNjYXBlUGx1
Z2luRXZlbnRIYW5kbGVyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFB
RjdBRkE3MUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlQXJlYUltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RvcmFnZUFyZWFJbXBsLmNwcDsgcGF0aCA9IFN0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9Owor
CQkxQUY3QUZBODFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZUFyZWFJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0b3JhZ2VBcmVhSW1wbC5oOyBwYXRoID0gU3RvcmFn
ZS9TdG9yYWdlQXJlYUltcGwuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQkxQUY3
QUZBOTFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3JhZ2VBcmVhU3luYy5jcHA7IHBhdGggPSBTdG9y
YWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
MUFGN0FGQUExQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlQXJlYVN5bmMuaDsgcGF0aCA9IFN0b3JhZ2Uv
U3RvcmFnZUFyZWFTeW5jLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMUFGN0FG
QUIxQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDsgcGF0
aCA9IFN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CisJCTFBRjdBRkFDMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlTmFtZXNwYWNl
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlTmFtZXNwYWNl
SW1wbC5oOyBwYXRoID0gU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CisJCTFBRjdBRkFEMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdl
U3luY01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3Rv
cmFnZVN5bmNNYW5hZ2VyLmNwcDsgcGF0aCA9IFN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQkxQUY3QUZBRTFBM0EyREZCMDBDOEU0
RTcgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBwYXRoID0gU3RvcmFnZS9TdG9yYWdlU3luY01hbmFn
ZXIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQkxQUY3QUZBRjFBM0EyREZCMDBD
OEU0RTcgLyogU3RvcmFnZVRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTdG9yYWdlVGhyZWFkLmNwcDsgcGF0aCA9IFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5j
cHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMUFGN0FGQjAxQTNBMkRGQjAwQzhF
NEU3IC8qIFN0b3JhZ2VUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
U3RvcmFnZVRocmVhZC5oOyBwYXRoID0gU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMUFGN0FGQjExQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3Jh
Z2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3Jh
Z2VUcmFja2VyLmNwcDsgcGF0aCA9IFN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTFBRjdBRkIyMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9y
YWdlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlVHJh
Y2tlci5oOyBwYXRoID0gU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CisJCTFBRjdBRkIzMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVHJhY2tl
ckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlVHJhY2tl
ckNsaWVudC5oOyBwYXRoID0gU3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTFDMEQ0MDg1MEFDMUM4RjQwMDA5QzExMyAvKiBXZWJL
aXRWZXJzaW9uQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktp
dFZlcnNpb25DaGVja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwRDQwODYw
QUMxQzhGNDAwMDlDMTEzIC8qIFdlYktpdFZlcnNpb25DaGVja3MubSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViS2l0VmVyc2lvbkNoZWNrcy5tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzY4RjY2MzA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hs
aWdodC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYk5vZGVIaWdobGlnaHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IHdyYXBzTGluZXMgPSAwOyB9OwpAQCAtMTE5NSw2ICsxMjIxLDE5IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUExMEMxRDNGMTgyMDJG
REMwMDM2ODgzQSAvKiBpb3MgKi8sCisJCQkJMUFGN0FGQTcxQTNBMkRGQjAwQzhFNEU3IC8qIFN0
b3JhZ2VBcmVhSW1wbC5jcHAgKi8sCisJCQkJMUFGN0FGQTgxQTNBMkRGQjAwQzhFNEU3IC8qIFN0
b3JhZ2VBcmVhSW1wbC5oICovLAorCQkJCTFBRjdBRkE5MUEzQTJERkIwMEM4RTRFNyAvKiBTdG9y
YWdlQXJlYVN5bmMuY3BwICovLAorCQkJCTFBRjdBRkFBMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9y
YWdlQXJlYVN5bmMuaCAqLywKKwkJCQkxQUY3QUZBQjFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwICovLAorCQkJCTFBRjdBRkFDMUEzQTJERkIwMEM4RTRFNyAvKiBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5oICovLAorCQkJCTFBRjdBRkFEMUEzQTJERkIwMEM4RTRFNyAv
KiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovLAorCQkJCTFBRjdBRkFFMUEzQTJERkIwMEM4RTRF
NyAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCAqLywKKwkJCQkxQUY3QUZBRjFBM0EyREZCMDBDOEU0
RTcgLyogU3RvcmFnZVRocmVhZC5jcHAgKi8sCisJCQkJMUFGN0FGQjAxQTNBMkRGQjAwQzhFNEU3
IC8qIFN0b3JhZ2VUaHJlYWQuaCAqLywKKwkJCQkxQUY3QUZCMTFBM0EyREZCMDBDOEU0RTcgLyog
U3RvcmFnZVRyYWNrZXIuY3BwICovLAorCQkJCTFBRjdBRkIyMUEzQTJERkIwMEM4RTRFNyAvKiBT
dG9yYWdlVHJhY2tlci5oICovLAorCQkJCTFBRjdBRkIzMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9y
YWdlVHJhY2tlckNsaWVudC5oICovLAogCQkJCTUxMUYzRkQxMENFQ0M4OEYwMDg1MjU2NSAvKiBX
ZWJEYXRhYmFzZU1hbmFnZXIubW0gKi8sCiAJCQkJNTExRjNGRDMwQ0VDQzg4RjAwODUyNTY1IC8q
IFdlYkRhdGFiYXNlTWFuYWdlckNsaWVudC5oICovLAogCQkJCTUxMUYzRkQ0MENFQ0M4OEYwMDg1
MjU2NSAvKiBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQubW0gKi8sCkBAIC0xNjkxLDYgKzE3MzAs
NyBAQAogCQkJCTkzOTgxMDY2MDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25XaW5kb3dDb250ZW50
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNjcwODI0QkYwMTAwOERGMDM4IC8qIENh
cmJvbldpbmRvd0ZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODI5NThEMzEzMjcwN0QwMDAw
RDBFNzkgLyogQ29ycmVjdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQUY3QUZCRDFB
M0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2
MDUxOTQxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOTgxMDY4MDgyNEJGMDEwMDhERjAzOCAvKiBISVZpZXdBZGFwdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTZBMjA4RTE4ODYxNTQ2MDBFNTBGNUYgLyogV2ViUHJvZ3Jlc3NU
cmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE3NDMsNiArMTc4Myw3IEBACiAJCQkJ
OTM5ODEwNzYwODI0QkYwMTAwOERGMDM4IC8qIFdlYkRlZmF1bHRVSURlbGVnYXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzU0MkM0MjBGRDc3NjZGMDBEOEFCNUQgLyogV2ViRGVsZWdhdGVJbXBs
ZW1lbnRhdGlvbkNhY2hpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5OEFEOTIwMTIwMUNGMDcw
MEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUFG
N0FGQkIxQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTk4QUQ5MUExMjAxQ0VDOTAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9u
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1OThBRDkyNDEyMDFDRjE5MDBBQkFFNEUgLyog
V2ViRGV2aWNlT3JpZW50YXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3QTEx
QjExODBEQzg0ODAwRTU0OThDIC8qIFdlYlBsdWdpblBhY2thZ2VQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTE3NTksNiArMTgwMCw3IEBACiAJCQkJOTM5ODEwNzcwODI0QkYwMTAwOERGMDM4
IC8qIFdlYkRvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkRERjIwRDA4RUIwRERDMDAx
RTEyNDEgLyogV2ViRG93bmxvYWRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwOTM2
QUYwQjU2MDhEQzAwQ0RCNDhFIC8qIFdlYkRyYWdDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTFBRjdBRkJGMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVHJhY2tlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5ODEwNTEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkR5bmFtaWNTY3JvbGxCYXJz
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0QzExNjcwRDg3MTBCQjAwQzMyQUJEIC8qIFdl
YkR5bmFtaWNTY3JvbGxCYXJzVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTA5RTA4MjRCRjAxMDA4REYwMzggLyogV2ViRWRpdGluZ0RlbGVnYXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTE3NjgsNiArMTgxMCw3IEBACiAJCQkJREQ4OTY4MjAwOUFBODcyNDAwOTdFN0YwIC8q
IFdlYkVsZW1lbnREaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA1MjA4MjRC
RjAxMDA4REYwMzggLyogV2ViRm9ybURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTA2NDA4MjRCRjAxMDA4REYwMzggLyogV2ViRm9ybURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMUFGN0FGQjcxQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VBcmVhU3luYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNTMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBDMUQxQTE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVm
YXVsdEZyYW1lTG9hZERlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA5QzA4MjRC
RjAxMDA4REYwMzggLyogV2ViRnJhbWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzk2
LDYgKzE4MzksNyBAQAogCQkJCTkzOTgxMDU1MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIVE1MUmVw
cmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDU2MDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTA1NzA4MjRCRjAxMDA4REYwMzggLyogV2ViSFRNTFZpZXcuaCBpbiBIZWFkZXJzICovLAor
CQkJCTFBRjdBRkMwMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwQTEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxWaWV3
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDU4MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJIVE1MVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDE4MDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTgwMyw2
ICsxODQ3LDcgQEAKIAkJCQk1MUIyQTEwMDBBREIxNUQwMDAyQTlCRUUgLyogV2ViSWNvbkRhdGFi
YXNlRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDRCMzAwMEIwMjM0MTUwMEY3ODUw
RCAvKiBXZWJJY29uRGF0YWJhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEw
MTkwODI0QkYwMTAwOERGMDM4IC8qIFdlYkljb25EYXRhYmFzZVByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTFBRjdBRkI1MUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlQXJlYUltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCUExMEMxRDY0MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJDaHJvbWVD
bGllbnRJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTVEN0JGODE0MEMyQTFEOTAwMDhDRTA2RCAv
KiBXZWJJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NjkzRERDMEJGQkE4NTIwMDIx
NjA3MiAvKiBXZWJJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTg4OSw2ICsx
OTM0LDcgQEAKIAkJCQk5Mzk4MTBCMDA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luQ29udGFp
bmVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNzE3NkYxQTI2NTY4QTAwMkUzMTE1
IC8qIFdlYlZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDM3MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkxQUY3QUZCOTFBM0EyREZCMDBDOEU0RTcgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdDMUZCM0MyMTg0NkU4RTEwMDFBMDNEOCAvKiBXZWJBbGxvd0RlbnlQ
b2xpY3lMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMzgwODI0QkYwMTAwOERG
MDM4IC8qIFdlYlBsdWdpbkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTAzOTA4
MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luUGFja2FnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MTg5LDYgKzIyMzUsNyBAQAogCQkJCTkzOTgxMTBBMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJEZWZh
dWx0VUlEZWxlZ2F0ZS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NDJDNDMwRkQ3NzY2RjAwRDhB
QjVEIC8qIFdlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTk4QUQ5MjIxMjAxQ0YxMDAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJMUFGN0FGQjYxQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VB
cmVhU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTZBMjA4RDE4ODYxNTQ2MDBFNTBGNUYg
LyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTk4QUQ5
MUUxMjAxQ0VDRjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTk4QUQ5MjgxMjAxQ0YzMjAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVu
dGF0aW9uUHJvdmlkZXJNb2NrLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yMjIxLDExICsyMjY4LDEz
IEBACiAJCQkJNTE0OTRDRDcwQzdFQkRFMDAwNDE3OEM1IC8qIFdlYkljb25EYXRhYmFzZUNsaWVu
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVEN0JGODE1MEMyQTFEOTAwMDhDRTA2RCAvKiBXZWJJ
bnNwZWN0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNjY5M0RERDBCRkJBODUyMDAyMTYwNzIg
LyogV2ViSW5zcGVjdG9yQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUFGN0FGQjQxQTNB
MkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VBcmVhSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QzdCMEM2NjBFQjI0NjREMDBBMjg1MDIgLyogV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjgwNDE3NzAxMjE3QTgzMTAwNDY2QkFFIC8qIFdlYkluc3BlY3RvckZy
b250ZW5kLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFEMTkxODIwMkY5QzAwMzY4ODNBIC8q
IFdlYkRlZmF1bHRGb3JtRGVsZWdhdGUubSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEU0MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwubSBpbiBTb3VyY2Vz
ICovLAogCQkJCUExMEMxRDhCMTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3SU9TLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUFGN0FGQkExQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VTeW5j
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0QxRENBOTEwNjU5MjhDMDA2OEY3RUYg
LyogV2ViSlNQREZEb2MubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTExNzA4MjRCRjAxMDA4
REYwMzggLyogV2ViS2V5R2VuZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMDMw
ODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdEVycm9ycy5tIGluIFNvdXJjZXMgKi8sCkBAIC0yMjYy
LDYgKzIzMTEsNyBAQAogCQkJCTMxMkUyRkU2MTRFNDgxODIwMDdDQ0ExOCAvKiBXZWJOb3RpZmlj
YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUMxMUE2RjE0NzY1NTJFMDA0OUE0Q0MgLyog
V2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRURFOTgzODEwQkNE
RjVGRTAwRkRBRTI4IC8qIFdlYk5TQXJyYXlFeHRyYXMubSBpbiBTb3VyY2VzICovLAorCQkJCTFB
RjdBRkJDMUEzQTJERkIwMEM4RTRFNyAvKiBTdG9yYWdlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1NjA5NDY3MTREOEFEMjYwMDc5OUE4QSAvKiBXZWJJbmRpY2F0ZUxheWVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQzYwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TQ29udHJv
bEV4dHJhcy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMTUwODI0QkYwMTAwOERGMDM4IC8q
IFdlYk5TRGF0YUV4dHJhcy5tIGluIFNvdXJjZXMgKi8sCkBAIC0yMzA5LDEyICsyMzU5LDE0IEBA
CiAJCQkJOTM2QTJERTgwRkQyRDA4MDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0aW9uQ29udHJv
bGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExMEMxRDNFMTgyMDJGQzUwMDM2ODgzQSAvKiBX
ZWJVSUtpdFN1cHBvcnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTc0QTI4RjBGNEY3NTQwMDA4
MkUyMjggLyogV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUFGN0FGQjgxQTNBMkRGQjAwQzhFNEU3IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY4MzRBQUQ4MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRl
cmF0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQxRDE4MjAyRjlDMDAzNjg4M0EgLyog
V2ViRGVmYXVsdFJlc291cmNlTG9hZERlbGVnYXRlLm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4
MTBCRTA4MjRCRjAxMDA4REYwMzggLyogV2ViVVJMc1dpdGhUaXRsZXMubSBpbiBTb3VyY2VzICov
LAogCQkJCUMwQzVCM0VGMTE3N0E0QTAwMDJCMEFFRiAvKiBXZWJVc2VyQ29udGVudFVSTFBhdHRl
cm4ubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUIxREFDMTE4QkMwMjMyMDA0QjZBOUYgLyogV2Vi
Vmlld0dyb3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMDcwODI0QkYwMTAwOERGMDM4
IC8qIFdlYlZpZXcubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQUY3QUZCRTFBM0EyREZCMDBDOEU0
RTcgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRTQ2NEUwRkQ4
QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktp
dC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQppbmRleCBiZjBlOTEyM2YxNTk1ODgz
ZjEzMTNhMTlhYTExOGVmOGNkNzhmMWYxLi5hZjkyZDc2Yjg3NDk4YmY0NjUyODFkNGI2YTA1YTc3
Y2I0ODhmNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3Jh
Z2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1h
bmFnZXIubW0KQEAgLTIzLDE0ICsyMywxMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViU3RvcmFnZU1h
bmFnZXJJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKIAor
I2ltcG9ydCAiU3RvcmFnZVRyYWNrZXIuaCIKKyNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCiAjaW1wb3J0IDxX
ZWJDb3JlL1BhZ2VHcm91cC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgot
I2ltcG9ydCA8V2ViQ29yZS9TdG9yYWdlVHJhY2tlci5oPgogI2ltcG9ydCA8cHRocmVhZC5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXJJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9tYWMv
U3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgKaW5kZXggNjg4YjRiYzczYzAxZWU2
ZWE3YzRhZGNiMWQyZTEzMzhhZTFiNTYyYi4uYmQzMWRiMjgxZjgwNzY5YWFmM2UwZDVlODVjYzQ1
NGE2YjNiZGNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9y
YWdlTWFuYWdlckludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJT
dG9yYWdlTWFuYWdlckludGVybmFsLmgKQEAgLTIyLDUgKzIyLDcgQEAKICAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwotIAorCisjaW1wb3J0
ICJXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCIKKwogdm9pZCBXZWJLaXRJbml0aWFsaXplU3Rv
cmFnZUlmTmVjZXNzYXJ5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dl
YlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgKaW5kZXggZmU4YTNmY2RiZjE2NmFiYmIzMTMzYWJkNzZi
NjA2MGJiNGYxZmQxNS4uMDQ4NzllYjc3Y2ZhZDk1OTA4MGVlNGE4MjM2N2FhYzM1ZjQ4YWUzMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlVHJhY2tlckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJD
bGllbnQuaApAQCAtMjMsOCArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAgCisjaW1wb3J0ICJTdG9yYWdlVHJhY2tlckNsaWVudC5oIgogI2ltcG9ydCA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9TdG9yYWdlVHJhY2tl
ckNsaWVudC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCmluZGV4IDQwOWRmNDk5OTIzYjIxZmZmZTgzNzcwZTZkYzA1MWM4MGYx
NjI3NDEuLmEwNjE5MTEzY2U1MGYyYTQ3NTk5MDZkNmVmOWYwYWMwYWYwOGQ0OGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgIkRP
TU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2ltcG9ydCAi
RGljdGlvbmFyeVBvcHVwSW5mby5oIgorI2ltcG9ydCAiU3RvcmFnZVRocmVhZC5oIgogI2ltcG9y
dCAiV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmgiCiAjaW1wb3J0ICJXZWJBcHBsaWNhdGlvbkNh
Y2hlLmgiCiAjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oIgpAQCAtMTc1LDcg
KzE3Niw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUaHJlYWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQ
cm9wZXJ0aWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRSZXNvdXJjZURlY29kZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVGhyZWFkQ2hlY2suaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCmluZGV4IDRhMjhlNTZjNjZlMDM1NjQ2NjY3NThlOTc3YmQzYWJmZWU5N2Jk
ZTQuLmQ3OGMzYzEyMGIzZjc3NzcyMGQ4MWM2YTIyNjYyNTY4MmExMTMyODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtODQsNyArODQsNiBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvU3RvcmFnZVRyYWNrZXIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243808</attachid>
            <date>2014-12-29 12:55:10 -0800</date>
            <delta_ts>2014-12-30 01:37:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139558-20141229125516.patch</filename>
            <type>text/plain</type>
            <size>231719</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3ODExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNlNGE2NTlhMDc4YmVk
MTc2YTlmNTM0YzE3YTQyMWJhYzQ5ZDI0ZC4uNmYzNjU2ZDA4ZjUxNzA3YWFlM2NhNzZkMGMwYjIx
YzNiOTkyYjhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTEyLTI5ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBzdG9yYWdl
IGNvZGUgZnJvbSBXZWJDb3JlIHRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NTU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDoK
KwogMjAxNC0xMi0yOSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbkBjZW50cmljdWxhci5j
b20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gUmV3cml0ZSBNZWRpYVNvdXJjZSBpbXBsZW1lbnRh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCA5OTJkNWY4ZDA1NjE2NDQwMThmYTY5ZDdjMGVmOGUyNDg5N2ZjZWFm
Li4yNjZhNjhjZDM4ZjEwMjJmOWI0MGI0ZmI4ODZkNTc2NjcwMzg3MjJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzMCBAQAorMjAxNC0xMi0yOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgorCisgICAgICAgIE1vdmUgc3RvcmFnZSBjb2RlIGZyb20gV2ViQ29yZSB0byBXZWJL
aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTU1
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJ
bXBsOjp+U3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1w
bDo6U3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNhbkFjY2Vzc1N0b3JhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpzdG9yYWdlVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
QXJlYUltcGw6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6Oml0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVh
SW1wbDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjppbXBv
cnRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNsb3NlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnN5bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZUFyZWFJbXBsOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjptZW1vcnlCeXRlc1VzZWRCeUNhY2hlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6aW5jcmVtZW50QWNjZXNzQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpkZWNyZW1lbnRBY2Nlc3NDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNsb3NlRGF0YWJhc2VUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFzZUlm
SWRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFn
ZUV2ZW50KToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaC4KKyAgICAgICAgKiBT
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5
bmM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6On5TdG9yYWdl
QXJlYVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUZp
bmFsU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlSXRl
bUZvclN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbG9zZURh
dGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6bWFya0ltcG9ydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6c3luYyk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1TeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhU3luYzo6ZGVsZXRlRW1wdHlEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlU3luYyk6CisgICAgICAgICogU3RvcmFnZS9TdG9yYWdl
QXJlYVN5bmMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFTeW5jLmguCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmdldE9yQ3Jl
YXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1l
c3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNwYWNlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6flN0b3JhZ2VOYW1lc3BhY2VJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpzdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
TmFtZXNwYWNlSW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFj
ZUltcGw6OmNsZWFyT3JpZ2luRm9yRGVsZXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZU5hbWVzcGFjZUltcGw6OmNsZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZUlkbGVMb2NhbFN0b3JhZ2VEYXRhYmFzZXMpOgorICAg
ICAgICAqIFN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaC4KKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
U3luY01hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFn
ZXI6OlN0b3JhZ2VTeW5jTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01h
bmFnZXI6On5TdG9yYWdlU3luY01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5
bmNNYW5hZ2VyOjpmdWxsRGF0YWJhc2VGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlU3luY01hbmFnZXI6OmRpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5j
TWFuYWdlcjo6Y2xvc2UpOgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
LgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
YWN0aXZlU3RvcmFnZVRocmVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6
U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp+U3RvcmFn
ZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpzdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRo
cmVhZDo6cGVyZm9ybVRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFk
OjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHMpOgorICAgICAgICAqIFN0
b3JhZ2UvU3RvcmFnZVRocmVhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlVGhyZWFkLmguCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6aW50ZXJuYWxJbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpTdG9yYWdlVHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXJEYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjppbXBvcnRPcmlnaW5JZGVudGlmaWVycyk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6ZmluaXNoZWRJbXBvcnRpbmdPcmlnaW5JZGVudGlmaWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRmlsZVN5c3RlbUFuZFRy
YWNrZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0T3Jp
Z2luRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9y
aWdpbkRldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6Om9yaWdpbnMp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmRlbGV0ZUFsbE9yaWdpbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6dHJ1bmNhdGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVRyYWNrZXI6OnN5bmNEZWxldGVBbGxPcmlnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VUcmFja2VyOjp3aWxsRGVsZXRlQWxsT3JpZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlVHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUcmFja2VyOjpjYW5jZWxEZWxldGluZ09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVHJhY2tlcjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6
OnNldElzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjpkYXRhYmFz
ZVBhdGhGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OmRpc2tV
c2FnZUZvck9yaWdpbik6CisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oLgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXI6OnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6c2V0U3RvcmFnZURhdGFiYXNlSWRs
ZUludGVydmFsKToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmgu
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVudDo6flN0b3JhZ2VUcmFja2Vy
Q2xpZW50KToKKyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5j
cHA6CisgICAgICAgICogV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qOgorICAg
ICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzOgorICAg
ICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE0LTEyLTIyICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIEJ1aWxk
IGZpeCBhZnRlciByMTc3NjY4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGNiOTIwNGVkMGEyZTdjMDdm
YTAzMTFhOGM3YjY2ZGYwMGFmMjcxZjUuLmNlMmFkMDIxM2JkNzg2MWJlNTkyNzgwMWY4ZjQxMWYx
MjgyNzg4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0xMi0yOSAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgc3Rv
cmFnZSBjb2RlIGZyb20gV2ViQ29yZSB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTU1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbToK
KyAgICAgICAgKiBTdG9yYWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lmg6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorCiAyMDE0LTEyLTI2ICBEYW4gQmVybnN0ZWluICA8bWl0ekBh
cHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE5MzQ4MjA4PiBSRUdSRVNTSU9O
IChyMTc3MDI3KTogaU9TIGJ1aWxkcyB1c2UgdGhlIHdyb25nIHRvb2xjaGFpbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGYxNzNmNTVkMWYyNmI5MzI4ODdiZGEyNGRiNzQ2NmI5MzlmZWYxOWQuLjVkYTYwNGJjOTg4
YTAwYTQ3ZTQ3MGMxNzlkNWZmMGIyYmZkY2MyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNCBA
QAogMjAxNC0xMi0yOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCisg
ICAgICAgIE1vdmUgc3RvcmFnZSBjb2RlIGZyb20gV2ViQ29yZSB0byBXZWJLaXQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTU1OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcDoKKworMjAxNC0xMi0yOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgorCiAgICAgICAgIEFub3RoZXIgaU9TIGJ1aWxkIGZpeC4KIAogICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5k
ZXggYzUyOWU3MWQxMTdmNDcyODY2YTg2MjU3NDQ0MDA0NmY4ZDEwMGVhMS4uODhlZTEyNTU5NDBm
OTMyZGU2ODFjZThiNTA1YmJjMzlhZjBhZjZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTE5
OSw2ICsxOTksNyBAQCBfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5NmNyZWF0ZUVSTlMwXzZDbGll
bnRFTlMwXzExT3ZlcmxheVR5cGVFCiBfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5OHNldEZyYW1l
RU5TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTFTUUxSZXN1bHRPa0UKIF9fWk43V2ViQ29yZTEx
VVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCitfX1pON1dlYkNvcmUxMWdldEZpbGVTaXplRVJL
TjNXVEY2U3RyaW5nRVJ4CiBfX1pON1dlYkNvcmUxMWdldFVSTEJ5dGVzRVBLN19fQ0ZVUkxSTjNX
VEY2VmVjdG9ySWNMbTUxMkVOUzNfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTEx
Z2V0VVJMQnl0ZXNFUEs3X19DRlVSTFJOM1dURjdDU3RyaW5nRQogX19aTjdXZWJDb3JlMTFpQmVh
bUN1cnNvckV2CkBAIC0zMzYsNyArMzM3LDYgQEAgX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9y
QzFFUDdOU0Vycm9yCiBfX1pON1dlYkNvcmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgog
X19aTjdXZWJDb3JlMTNTUUxSZXN1bHREb25lRQogX19aTjdXZWJDb3JlMTNTZWxlY3Rpb25SZWN0
QzFFUktOU183SW50UmVjdEViaQotX19aTjdXZWJDb3JlMTNTdG9yYWdlVGhyZWFkMzlyZWxlYXNl
RmFzdE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHNFdgogX19aTjdXZWJDb3JlMTNTdHlsZWRF
bGVtZW50MjJzZXRJbmxpbmVTdHlsZVByb3BlcnR5RU5TXzEzQ1NTUHJvcGVydHlJREVSS04zV1RG
NlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxM1N0eWxlZEVsZW1lbnQyMnNldElubGluZVN0eWxlUHJv
cGVydHlFTlNfMTNDU1NQcm9wZXJ0eUlERWROU18xN0NTU1ByaW1pdGl2ZVZhbHVlOVVuaXRUeXBl
c0ViCiBfX1pON1dlYkNvcmUxM1RleHRJbmRpY2F0b3I2Y3JlYXRlRVJLTlNfMTdUZXh0SW5kaWNh
dG9yRGF0YUUKQEAgLTQ1OSwxMyArNDU5LDYgQEAgX19aTjdXZWJDb3JlMTRTZWN1cml0eVBvbGlj
eTIyZ2VuZXJhdGVSZWZlcnJlckhlYWRlckVOU18xNFJlZmVycmVyUG9saWN5RVJLTlNfM1UKIF9f
Wk43V2ViQ29yZTE0U2VjdXJpdHlQb2xpY3kyN3Jlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0c0V2
CiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5UG9saWN5MjlhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeUVSS05TXzE0U2VjdXJpdHlPcmlnaW5FUktOM1dURjZTdHJpbmdFUzdfYgogX19aTjdXZWJD
b3JlMTRTZWN1cml0eVBvbGljeTMycmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlFUktO
U18xNFNlY3VyaXR5T3JpZ2luRVJLTjNXVEY2U3RyaW5nRVM3X2IKLV9fWk43V2ViQ29yZTE0U3Rv
cmFnZVRyYWNrZXIxMmRlbGV0ZU9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKLV9fWk43V2Vi
Q29yZTE0U3RvcmFnZVRyYWNrZXIxNmRlbGV0ZUFsbE9yaWdpbnNFdgotX19aTjdXZWJDb3JlMTRT
dG9yYWdlVHJhY2tlcjE3aW5pdGlhbGl6ZVRyYWNrZXJFUktOM1dURjZTdHJpbmdFUE5TXzIwU3Rv
cmFnZVRyYWNrZXJDbGllbnRFCi1fX1pON1dlYkNvcmUxNFN0b3JhZ2VUcmFja2VyMThkaXNrVXNh
Z2VGb3JPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmlnaW5FCi1fX1pON1dlYkNvcmUxNFN0b3JhZ2VU
cmFja2VyMzJzeW5jRmlsZVN5c3RlbUFuZFRyYWNrZXJEYXRhYmFzZUV2Ci1fX1pON1dlYkNvcmUx
NFN0b3JhZ2VUcmFja2VyN29yaWdpbnNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU18xNFNl
Y3VyaXR5T3JpZ2luRUVFTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQotX19aTjdXZWJDb3Jl
MTRTdG9yYWdlVHJhY2tlcjd0cmFja2VyRXYKIF9fWk43V2ViQ29yZTE0U3ViZnJhbWVMb2FkZXIx
MmFsbG93UGx1Z2luc0VOU18yOFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnNFCiBfX1pON1dl
YkNvcmUxNFRpbGVDb250cm9sbGVyMTRzZXRUaWxlc09wYXF1ZUViCiBfX1pON1dlYkNvcmUxNFRp
bGVDb250cm9sbGVyMTVjb250YWluZXJMYXllcnNFdgpAQCAtNjUzLDYgKzY0Niw3IEBAIF9fWk43
V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50N3ByZXBhcmVFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVT
dGF0ZW1lbnQ4YmluZEJsb2JFaVBLdmkKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJp
bmRCbG9iRWlSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJp
bmRUZXh0RWlSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGZp
bmFsaXplRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OWJpbmRJbnQ2NEVpeAogX19a
TjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnRDMUVSTlNfMTRTUUxpdGVEYXRhYmFzZUVSS04zV1RG
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50RDFFdgpAQCAtOTA0LDggKzg5
OCw2IEBAIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2UyNHNldEV4cGVjdGVkQ29u
dGVudExlbmd0aEV4CiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlNnNldFVSTEVS
S05TXzNVUkxFCiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlOXNldFNvdXJjZUVO
UzBfNlNvdXJjZUUKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2VDMkV2Ci1fX1pO
N1dlYkNvcmUyMFN0b3JhZ2VOYW1lc3BhY2VJbXBsMjljcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZUVqCi1fX1pON1dlYkNvcmUyMFN0b3JhZ2VOYW1lc3BhY2VJbXBsMzJnZXRPckNyZWF0ZUxv
Y2FsU3RvcmFnZU5hbWVzcGFjZUVSS04zV1RGNlN0cmluZ0VqCiBfX1pON1dlYkNvcmUyMFRyYW5z
Zm9ybWF0aW9uTWF0cml4NXNjYWxlRWQKIF9fWk43V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRy
aXg5dHJhbnNsYXRlRWRkCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yN3Nfc3Rh
dGVFCkBAIC05NTYsNiArOTQ4LDggQEAgX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIzMm5vdGlmeURpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RVBOU18xNFJlc28KIF9fWk43V2Vi
Q29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyNnJlbW92ZUVQTlNfMTRSZXNvdXJjZUxvYWRlckUK
IF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyQzJFdgogX19aTjdXZWJDb3JlMjFS
ZXNvdXJjZUxvYWRTY2hlZHVsZXJEMkV2CitfX1pON1dlYkNvcmUyMVNRTGl0ZURhdGFiYXNlVHJh
Y2tlcjM1ZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRFdgorX19aTjdXZWJDb3Jl
MjFTUUxpdGVEYXRhYmFzZVRyYWNrZXIzNWluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0Nv
dW50RXYKIF9fWk43V2ViQ29yZTIxU1FMaXRlRGF0YWJhc2VUcmFja2VyOXNldENsaWVudEVQTlNf
MjdTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnRFCiBfX1pON1dlYkNvcmUyMVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTExZGVzZXJpYWxpemVFUEsxNU9wYXF1ZUpTQ29udGV4dFBQSzEzT3BhcXVlSlNW
YWx1ZQogX19aTjdXZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWUxMWRlc2VyaWFsaXplRVBO
M0pTQzlFeGVjU3RhdGVFUE5TMV8xNEpTR2xvYmFsT2JqZWN0RVBOM1dURjZWZWN0b3JJTlM2XzZS
ZWZQdHJJTlNfMTFNZXNzYWdlUG9ydEVFRUxtMUVOUzZfMTVDcmFzaE9uT3ZlcmZsb3dFRUVOU18y
MlNlcmlhbGl6YXRpb25FcnJvck1vZGVFCkBAIC0xMDA3LDYgKzEwMDEsOCBAQCBfX1pON1dlYkNv
cmUyMlBsYXRmb3JtQ0FBbmltYXRpb25NYWM2Y3JlYXRlRVAxOUNBUHJvcGVydHlBbmltYXRpb24K
IF9fWk43V2ViQ29yZTIyUnVudGltZUVuYWJsZWRGZWF0dXJlczE0c2hhcmVkRmVhdHVyZXNFdgog
X19aTjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0MjZjYW5TdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0V2CiBfX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQydm1FdgorX19a
TjdXZWJDb3JlMjJTdG9yYWdlRXZlbnREaXNwYXRjaGVyMjZkaXNwYXRjaExvY2FsU3RvcmFnZUV2
ZW50c0VSS04zV1RGNlN0cmluZ0VTNF9TNF9QTlNfMTRTZWN1cml0eU9yaWdpbkVQTlNfNUZyYW1l
RQorX19aTjdXZWJDb3JlMjJTdG9yYWdlRXZlbnREaXNwYXRjaGVyMjhkaXNwYXRjaFNlc3Npb25T
dG9yYWdlRXZlbnRzRVJLTjNXVEY2U3RyaW5nRVM0X1M0X1BOU18xNFNlY3VyaXR5T3JpZ2luRVBO
U181RnJhbWVFCiBfX1pON1dlYkNvcmUyMlN0b3JhZ2VFdmVudERpc3BhdGNoZXIzNGRpc3BhdGNo
TG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXNFUk5TXzlQYWdlR3JvdXBFUktOM1dURjZWZWN0b3JJ
TlMzXzZSZWZQdHJJTlNfNUZyYW1lRUVFTG0wRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRVJLTlMz
XzZTdHJpbmdFU0VfU0VfU0VfUE5TXzE0U2VjdXJpdHlPcmlnaW5FCiBfX1pON1dlYkNvcmUyMlVS
TEJ5Q2Fub25pY2FsaXppbmdVUkxFUDVOU1VSTAogX19aTjdXZWJDb3JlMjJVUkxXaXRoVXNlclR5
cGVkU3RyaW5nRVA4TlNTdHJpbmdQNU5TVVJMCkBAIC0xNTY0LDYgKzE1NjAsOCBAQCBfX1pON1dl
YkNvcmU5UGFnZUNhY2hlMzNtYXJrUGFnZXNGb3JWaXN0ZWRMaW5rU3R5bGVSZWNhbGNFdgogX19a
TjdXZWJDb3JlOVBhZ2VDYWNoZTZyZW1vdmVFUE5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNv
cmU5UGFnZUdyb3VwMTZzeW5jTG9jYWxTdG9yYWdlRXYKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXAx
N2Nsb3NlTG9jYWxTdG9yYWdlRXYKK19fWk43V2ViQ29yZTlQYWdlR3JvdXAyNmNsZWFyTG9jYWxT
dG9yYWdlRm9yT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlOVBhZ2VH
cm91cDMwY2xlYXJMb2NhbFN0b3JhZ2VGb3JBbGxPcmlnaW5zRXYKIF9fWk43V2ViQ29yZTlQYWdl
R3JvdXAzMGNsb3NlSWRsZUxvY2FsU3RvcmFnZURhdGFiYXNlc0V2CiBfX1pON1dlYkNvcmU5UGFn
ZUdyb3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTlTY3JvbGxiYXIx
MW1vdXNlRXhpdGVkRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCmluZGV4IDkxNjQzNzViODNlNDVhNDliYzYzZThjOWFiN2Y5YjgzMmJlOTljYzgu
LjIwODY4N2FiZTk4ZDQ0ODFmYzhkZjJlZDc2NzZhZjBjMTY5YTMwYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMTc4ODUsMTYgKzE3
ODg1LDEwIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoaXN0b3J5XEhpc3RvcnlJdGVt
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhpc3RvcnlcUGFnZUNhY2hlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VBcmVhU3luYy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VFdmVudC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VFdmVudERp
c3BhdGNoZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9y
YWdlTWFwLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3RvcmFn
ZVxTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cc3RvcmFnZVxTdG9yYWdlU3luY01hbmFnZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlVGhyZWFkLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3R5bGVcSW5saW5lVGV4dEJveFN0eWxlLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHN0eWxlXFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3R5bGVcU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQu
Y3BwIiAvPgpAQCAtMjEyOTMsMTcgKzIxMjg3LDExIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoaXN0b3J5XFBhZ2VDYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
c3RvcmFnZVxTdG9yYWdlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdl
XFN0b3JhZ2VBcmVhLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0
b3JhZ2VBcmVhSW1wbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxT
dG9yYWdlQXJlYVN5bmMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0b3JhZ2Vc
U3RvcmFnZUV2ZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0
b3JhZ2VFdmVudERpc3BhdGNoZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN0
b3JhZ2VcU3RvcmFnZU1hcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFn
ZVxTdG9yYWdlTmFtZXNwYWNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9y
YWdlXFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzdG9yYWdlXFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlU3luY01hbmFnZXIuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRocmVhZC5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlVHJhY2tlci5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cc3R5bGVcSW5saW5lVGV4dEJveFN0eWxlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxzdHlsZVxTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdHlsZVxTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIiAv
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvai5maWx0ZXJzCmluZGV4IDNhOTQ0MjU1YzY3ZmFlYTI1NTNkMzQ2MjcyMjc2NzNmMDAxYTZh
YTUuLmIxYWYyMTc3MjFmOWI3OWYyMDZmNmYyMzQ0MmM2MmFjOTk4MjYwNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMKQEAgLTQ2ODYsMTIgKzQ2ODYsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Rv
cmFnZVxTdG9yYWdlLmNwcCI+CiAgICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZUFy
ZWFJbXBsLmNwcCI+Ci0gICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZUFyZWFTeW5j
LmNwcCI+Ci0gICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZUV2ZW50LmNwcCI+CiAg
ICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTQ3MDEs
MjEgKzQ2OTUsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdl
TWFwLmNwcCI+CiAgICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwIj4KLSAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlUHJv
dmlkZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlU3luY01hbmFn
ZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlVGhyZWFkLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnN0b3JhZ2U8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZVRyYWNrZXIuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnJpZGdlXGpzY1xCcmlkZ2VKU0MuY3BwIj4KICAgICAgIDxGaWx0ZXI+
YnJpZGdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMjQxNywxMiArMTIzOTksNiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYS5oIj4KICAg
ICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuaCI+Ci0gICAgICA8Rmls
dGVyPnN0b3JhZ2U8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZUFyZWFTeW5jLmgiPgotICAgICAgPEZpbHRlcj5zdG9y
YWdlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzdG9yYWdlXFN0b3JhZ2VFdmVudC5oIj4KICAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTI0MzUsMTggKzEyNDExLDYgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZS5oIj4KICAgICAgIDxGaWx0
ZXI+c3RvcmFnZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIj4KLSAgICAgIDxGaWx0ZXI+
c3RvcmFnZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cc3RvcmFnZVxTdG9yYWdlU3luY01hbmFnZXIuaCI+Ci0gICAgICA8RmlsdGVyPnN0b3Jh
Z2U8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHN0b3JhZ2VcU3RvcmFnZVRocmVhZC5oIj4KLSAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxT
dG9yYWdlVHJhY2tlci5oIj4KLSAgICAgIDxGaWx0ZXI+c3RvcmFnZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnJpZGdlXEJyaWRnZS5oIj4K
ICAgICAgIDxGaWx0ZXI+YnJpZGdlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzFh
ZDZkZGZiYTM3ZTdlOWNkZjAzMjg2OTdjMTRjNmViYjhjNGM2NS4uOWZmOWZkZTkwYzIxYmFkZWVm
MTE0YzY5MTU0ZDdhNGNkNDI2Y2NhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OCw5ICsxMzg4LDYgQEAKIAkJMzdGODE4
RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1
IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZFMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJM
UmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9
OwogCQkzN0ZENDI5ODExODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RkQ0Mjk3MTE4MzY4NDYw
MDkzQzAyOSAvKiBUcmVlRGVwdGhMaW1pdC5oICovOyB9OwotCQkzQUIwMkQyQTEyRDRGOTE2MDBG
QkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDNBQjAyRDI4MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTNB
QjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkQyOTEyRDRGOTE2MDBGQkI2
OTQgLyogU3RvcmFnZVRyYWNrZXIuY3BwICovOyB9OwotCQkzQUMzNjgwMDEyRUY3QTA5MDA2QTNE
NkYgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzM2N0ZFMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJh
Y2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNBQzY0OEIyMTI5RTE0NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQzY0OEIxMTI5RTE0
NjUwMEMzRUIyNSAvKiBFZGl0aW5nQm91bmRhcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gM0MyNDRGRTRBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzQzI0NEZFQkEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQzI0NEZFNUEz
NzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgKi87IH07CkBAIC0x
ODUyLDggKzE4NDksNiBAQAogCQk1MTFFRjJDRjE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJBbnlD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTExRUYyQ0MxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCQW55Q3VzdG9tLmNwcCAqLzsgfTsKIAkJ
NTExRUYyRDAxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCRGF0YWJhc2VDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRUYyQ0QxN0YwRkRG
MTAwRTRGQTE2IC8qIEpTSURCRGF0YWJhc2VDdXN0b20uY3BwICovOyB9OwogCQk1MTFFRjJEMTE3
RjBGREYxMDBFNEZBMTYgLyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjJDRTE3RjBGREYxMDBFNEZB
MTYgLyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgKi87IH07Ci0JCTUxMUYyMzE5MERDMTYw
REEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUYyMzE1MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdl
VGhyZWFkLmNwcCAqLzsgfTsKLQkJNTExRjIzMUEwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VU
aHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MUYyMzE2MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyM0FGMTgxODkwQTRDQTAwMzFD
REM5IC8qIElEQktleVJhbmdlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTIzQUYxNjE4OTBBNENBMDAzMUNEQzkgLyogSURCS2V5UmFuZ2VE
YXRhLmNwcCAqLzsgfTsKIAkJNTEyM0FGMTkxODkwQTRDQTAwMzFDREM5IC8qIElEQktleVJhbmdl
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
M0FGMTcxODkwQTRDQTAwMzFDREM5IC8qIElEQktleVJhbmdlRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMjNBRjFEMTg5MThBRTQwMDMx
Q0RDOSAvKiBJREJHZXRSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMjNBRjFDMTg5MThBRTQwMDMxQ0RDOSAvKiBJREJHZXRSZXN1bHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTU0Nywy
MCArNTU0MiwxMiBAQAogCQlDNTBCNTYxNjEyMTE5RDIzMDA4QjQ2RTAgLyogR3JvdXBTZXR0aW5n
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTBC
NTYxNDEyMTE5RDIzMDA4QjQ2RTAgLyogR3JvdXBTZXR0aW5ncy5jcHAgKi87IH07CiAJCUM1MEI1
NjE3MTIxMTlEMjMwMDhCNDZFMCAvKiBHcm91cFNldHRpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTBCNTYxNTEyMTE5RDIzMDA4QjQ2RTAgLyog
R3JvdXBTZXR0aW5ncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTBEMEU4MTBG
RjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUM1MTAyRDk0MEZEOUFBMkQwMEZBRkYwNCAv
KiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM1MTAyRDkyMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFn
ZXIuaCAqLzsgfTsKLQkJQzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLzsgfTsK
LQkJQzUxMDJFQ0YwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJFQ0QwRkQ5RUY4QzAw
RkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovOyB9OwotCQlDNTEwMkVEMDBGRDlFRjhDMDBG
QUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRUNFMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJl
YVN5bmMuY3BwICovOyB9OwogCQlDNTEzN0NGMjExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJp
bmdMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1MTM3Q0YwMTFBNTgzNzgwMDRBREI5OSAvKiBKU0RPTVN0cmluZ0xpc3QuY3BwICovOyB9Owog
CQlDNTEzN0NGMzExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEzN0NGMTExQTU4Mzc4MDA0
QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggKi87IH07Ci0JCUM1MTYwRUVBMTAwNDU0M0EwMEE3
Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzUxNjBFRTgxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVh
SW1wbC5jcHAgKi87IH07Ci0JCUM1MTYwRUVCMTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJl
YUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
MTYwRUU5MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLzsgfTsKIAkJQzUy
NzhCMEMxN0YyMTJFQTAwM0EyOTk4IC8qIFBsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1Mjc4QjBCMTdGMjEyRUEw
MDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gKi87IH07CiAJCUM1NDQyNzRCMTFB
NTdFN0EwMDYzQTc0OSAvKiBET01TdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3Ry
aW5nTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUM1NTYxMEYxMTFBNzA0RUIwMEI4MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTYxMEYwMTFBNzA0RUIw
MEI4MkQyNyAvKiBET01TdHJpbmdMaXN0LmNwcCAqLzsgfTsKIAkJQzU1QzdCQTExNzE4QUZCQTAw
MTMyN0U0IC8qIFJlbmRlclRoZW1lSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzU1QzdCQTAxNzE4QUZCQTAwMTMyN0U0IC8qIFJlbmRlclRoZW1l
SU9TLm1tICovOyB9OwotCQlDNTVFMzhCRjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVz
cGFjZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUM1NUUzOEMwMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIg
LyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovOyB9OwogCQlDNTcyRUUxRjEyMDFDOUJDMDA3
RDhGODIgLyogSlNJREJJbmRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzU3MkVFMUQxMjAxQzlCQzAwN0Q4RjgyIC8qIEpTSURCSW5kZXguaCAqLzsg
fTsKIAkJQzU3RkVERTExMjEyRUU5QzAwOTdCRTY1IC8qIEZpbGVTeXN0ZW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3RkVERTAxMjEyRUU5QzAw
OTdCRTY1IC8qIEZpbGVTeXN0ZW0uY3BwICovOyB9OwogCQlDNTgzNjFBOTE3NDQ1MjNGMDAxNzM1
MTEgLyogRm9udFNlcnZpY2VzSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNTgzNjFBNzE3NDQ1MjNGMDAxNzM1MTEgLyogRm9udFNlcnZpY2VzSU9T
LmggKi87IH07CkBAIC04NDUzLDkgKzg0NDAsNiBAQAogCQkzN0Y4MThGQzBENjU3NjA2MDA1RTFG
MDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNSb290SW5s
aW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYWlsaW5nRmxvYXRz
Um9vdElubGluZUJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0ZENDI5NzEx
ODM2ODQ2MDA5M0MwMjkgLyogVHJlZURlcHRoTGltaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHJlZURlcHRoTGltaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlVHJhY2tl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTNBQzM2N0ZFMTJFRjdBMDkwMDZB
M0Q2RiAvKiBTdG9yYWdlVHJhY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdG9yYWdlVHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzQUM2NDhCMTEyOUUxNDY1MDBDM0VCMjUgLyogRWRpdGluZ0JvdW5kYXJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCb3VuZGFyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzQzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJM
YXllck1vZGVsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNDMjQ0RkU1
QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODk3OSw4ICs4OTYzLDYgQEAKIAkJNTExRUYy
Q0MxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCQW55Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCQW55Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTExRUYyQ0QxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCRGF0YWJhc2VD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJEYXRh
YmFzZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUVGMkNFMTdG
MEZERjEwMEU0RkExNiAvKiBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogU3Rv
cmFnZVRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9y
YWdlVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTExRjIzMTYwREMx
NjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RvcmFnZVRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTIzQUYxNjE4OTBBNENBMDAzMUNEQzkgLyogSURCS2V5UmFuZ2VEYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQktleVJhbmdlRGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjNBRjE3MTg5MEE0Q0EwMDMxQ0RDOSAvKiBJREJLZXlS
YW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCS2V5UmFuZ2VE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjNBRjFDMTg5MThBRTQwMDMx
Q0RDOSAvKiBJREJHZXRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SURCR2V0UmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzAyMiwyMSAr
MTMwMDQsMTMgQEAKIAkJQzUwQjU2MTQxMjExOUQyMzAwOEI0NkUwIC8qIEdyb3VwU2V0dGluZ3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JvdXBTZXR0aW5ncy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MEI1NjE1MTIxMTlEMjMwMDhCNDZF
MCAvKiBHcm91cFNldHRpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
b3VwU2V0dGluZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUwRDBFODEwRkY0
MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3Rv
cmFnZVN5bmNNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1
MTAyRUNEMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM1MTAyRUNFMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFTeW5j
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxMzdDRjAxMUE1ODM3ODAwNEFE
Qjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RPTVN0cmluZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTEzN0NGMTExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NU3RyaW5nTGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDNTE2MEVFODEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJ
bXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVh
SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1MTYwRUU5MTAwNDU0M0Ew
MEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3RvcmFnZUFyZWFJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1
Mjc4QjBCMTdGMjEyRUEwMDNBMjk5OCAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybVBhc3RlYm9hcmRJT1Mu
bW07IHBhdGggPSBpb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNTQ0Mjc0OTExQTU3RTdBMDA2M0E3NDkgLyogRE9NU3RyaW5nTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHJpbmdMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NDQyNzRBMTFBNTdFN0EwMDYzQTc0OSAvKiBET01T
dHJpbmdMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01TdHJpbmdMaXN0LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1NjEwRjAxMUE3MDRFQjAwQjgyRDI3IC8q
IERPTVN0cmluZ0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RE9NU3RyaW5nTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NUM3QkEw
MTcxOEFGQkEwMDEzMjdFNCAvKiBSZW5kZXJUaGVtZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbmRlclRoZW1lSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFj
ZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzU1RTM4QkMxMDA0MEQ1RDAw
QTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzU3MkVFMUQxMjAxQzlCQzAwN0Q4RjgyIC8qIEpTSURCSW5kZXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJJbmRleC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDNTdGRURFMDEyMTJFRTlDMDA5N0JFNjUgLyogRmlsZVN5c3Rl
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3lzdGVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4MzYxQTcxNzQ0NTIzRjAwMTczNTEx
IC8qIEZvbnRTZXJ2aWNlc0lPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b250U2VydmljZXNJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MTQ2LDEw
ICsxNTEyMCw2IEBACiAJCQkJNTFFM0Y5QzQwREEwNTlEQzAwMjUwOTExIC8qIFN0b3JhZ2UuaCAq
LywKIAkJCQk1MUUzRjlEMTBEQTA1RDcxMDAyNTA5MTEgLyogU3RvcmFnZS5pZGwgKi8sCiAJCQkJ
NTFCRTM3REUwREFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggKi8sCi0JCQkJQzUxNjBF
RTgxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5jcHAgKi8sCi0JCQkJQzUxNjBF
RTkxMDA0NTQzQTAwQTdDRUUyIC8qIFN0b3JhZ2VBcmVhSW1wbC5oICovLAotCQkJCUM1MTAyRUNF
MEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuY3BwICovLAotCQkJCUM1MTAyRUNE
MEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuaCAqLywKIAkJCQk1MUUwQkFCQTBE
QTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmNwcCAqLywKIAkJCQk1MUUwQkFCOTBEQTU1
NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmggKi8sCiAJCQkJNTFFMEJBQkQwREE1NTQ4NDAw
QTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCkBAIC0xNTE1OCwxNyArMTUxMjgsOCBAQAog
CQkJCTUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCAqLywKIAkJCQk1
MUUwQkIzNjBEQTVBQ0I2MDBBOUU0MTcgLyogU3RvcmFnZU1hcC5oICovLAogCQkJCUM1MEQwRTgx
MEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggKi8sCi0JCQkJQzU1RTM4QkMx
MDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLywKLQkJCQlDNTVF
MzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAqLywKIAkJCQkx
QTM3NjM2OTFBMkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCAq
LywKIAkJCQkxQTM3NjM2QTFBMkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3Zp
ZGVyLmggKi8sCi0JCQkJQzUxMDJEOTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFu
YWdlci5jcHAgKi8sCi0JCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5j
TWFuYWdlci5oICovLAotCQkJCTUxMUYyMzE1MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhy
ZWFkLmNwcCAqLywKLQkJCQk1MTFGMjMxNjBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVh
ZC5oICovLAotCQkJCTNBQjAyRDI5MTJENEY5MTYwMEZCQjY5NCAvKiBTdG9yYWdlVHJhY2tlci5j
cHAgKi8sCi0JCQkJM0FCMDJEMjgxMkQ0RjkxNjAwRkJCNjk0IC8qIFN0b3JhZ2VUcmFja2VyLmgg
Ki8sCi0JCQkJM0FDMzY3RkUxMkVGN0EwOTAwNkEzRDZGIC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50
LmggKi8sCiAJCQkpOwogCQkJaW5kZW50V2lkdGggPSA0OwogCQkJcGF0aCA9IHN0b3JhZ2U7CkBA
IC0yNjIwOSwxNyArMjYxNzAsMTAgQEAKIAkJCQlBNUFGQjM1MDExNTE1MUE3MDBCMDQ1Q0IgLyog
U3RlcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMyRDg0NTE3MTczNEExMDA2NTJGQzAg
LyogU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFCRTM3RTAwREFFRTAwRTAwMTA4NUZD
IC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTE2MEVFQjEwMDQ1NDNBMDBB
N0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTEwMkVDRjBG
RDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUUwQkFCQjBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDNUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMEJCMzgwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9y
YWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNTVFMzhCRjEwMDQwRDVEMDBBNTZC
REIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCUM1MTAyRDk0
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUxMUYyMzFBMERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkzQUIwMkQyQTEyRDRGOTE2MDBGQkI2OTQgLyogU3RvcmFnZVRyYWNrZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTNBQzM2ODAwMTJFRjdBMDkwMDZBM0Q2RiAvKiBTdG9yYWdlVHJh
Y2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzZDMzYxMzFDNTdEMzAwMDlBN0Uw
IC8qIFN0cmluZ0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjM1NDBGMzBEMDA3ODJF
MDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjZDNDE1
MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTYzMCwxNSArMjk1ODQsOSBAQAogCQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAv
KiBTdGF0aWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUFGQjM0RjExNTE1MUE3
MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTNGOUM3MERB
MDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1MTYwRUVB
MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQzUxMDJFRDAwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUUwQkFCQzBEQTU1NDcxMDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUM1RTlCNjc3MTA2OTdFMTMwMEM3QkIxQSAvKiBTdG9yYWdl
RXZlbnREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQjM5MERBNUFDQjYw
MEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUM1NUUzOEMwMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTUxMUYyMzE5MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTNBQjAyRDJCMTJENEY5MTYwMEZCQjY5NCAvKiBT
dG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MTAyQzU4ODEzMjVCQjExMDBE
REU2N0EgLyogU3RyaW5nQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIzNTQwRjIw
RDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzVFQjZBMjBFODFEQzRGMDBCMjU5NjUgLyogU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVBy
ZXNzdXJlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuY3BwCmluZGV4IDY4OTI4M2VlMDI3NDcyMWY0ZWE3MjNiYjU2OTM3ZWRhOGJjNWZj
NTguLjE2YTRjYTRiM2Q5YmM0OWY4YzYyMjNhNDBkNzU3ZjhiN2I1ZDEyYzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcApAQCAtMzYs
NyArMzYsNiBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNp
bmNsdWRlICJTY3JvbGxpbmdUaHJlYWQuaCIKLSNpbmNsdWRlICJTdG9yYWdlVGhyZWFkLmgiCiAj
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3YmJiYmFhMTkw
MzYzZjJjYjgzYzEyMjczYWI1MzY1MDU4MjY0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTdG9yYWdlQXJlYUltcGwuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKLSNpbmNsdWRlICJT
dG9yYWdlRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgotI2luY2x1
ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCi0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdG9y
YWdlQXJlYUltcGw6On5TdG9yYWdlQXJlYUltcGwoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci19Ci0KLWlubGluZSBTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIsIHVuc2lnbmVkIHF1b3Rh
KQotICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKLSAgICAsIG1fc2VjdXJpdHlPcmln
aW4ob3JpZ2luKQotICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSkp
Ci0gICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fYWNjZXNzQ291bnQo
MCkKLSAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlzLCAmU3RvcmFnZUFyZWFJbXBsOjpj
bG9zZURhdGFiYXNlVGltZXJGaXJlZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKLSAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsK
LSAgICAKLSAgICAvLyBBY2Nlc3NpbmcgdGhlIHNoYXJlZCBnbG9iYWwgU3RvcmFnZVRyYWNrZXIg
d2hlbiBhIFN0b3JhZ2VBcmVhIGlzIGNyZWF0ZWQgCi0gICAgLy8gZW5zdXJlcyB0aGF0IHRoZSB0
cmFja2VyIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnlvbmUgYWN0dWFsbHkgbmVl
ZHMgdG8gdXNlIGl0LgotICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCk7Ci19Ci0KLVJlZjxT
dG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3Jh
Z2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlciwgdW5zaWduZWQgcXVvdGEpCi17Ci0gICAgUmVm
PFN0b3JhZ2VBcmVhSW1wbD4gYXJlYSA9IGFkb3B0UmVmKCpuZXcgU3RvcmFnZUFyZWFJbXBsKHN0
b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyLCBxdW90YSkpOwotCi0gICAgLy8gRklYTUU6
IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2UsIHRoZSBkZWZh
dWx0IFdlYktpdCBiZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5nLAot
ICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmluZyBpdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1ODk0Ci0gICAgaWYgKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2Vy
KSB7Ci0gICAgICAgIGFyZWEtPm1fc3RvcmFnZUFyZWFTeW5jID0gU3RvcmFnZUFyZWFTeW5jOjpj
cmVhdGUoYXJlYS0+bV9zdG9yYWdlU3luY01hbmFnZXIsIGFyZWEucHRyKCksIGFyZWEtPm1fc2Vj
dXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAgQVNTRVJUKGFyZWEt
Pm1fc3RvcmFnZUFyZWFTeW5jKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJlYTsKLX0KLQotUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y29weSgpCi17Ci0gICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFy
ZWFJbXBsKHRoaXMpKTsKLX0KLQotU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3Rv
cmFnZUFyZWFJbXBsKiBhcmVhKQotICAgIDogbV9zdG9yYWdlVHlwZShhcmVhLT5tX3N0b3JhZ2VU
eXBlKQotICAgICwgbV9zZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3VyaXR5T3JpZ2luKQotICAg
ICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKLSAgICAsIG1fc3RvcmFnZVN5bmNN
YW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQotI2lmbmRlZiBOREVCVUcKLSAgICAs
IG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCi0jZW5kaWYKLSAgICAsIG1fYWNjZXNz
Q291bnQoMCkKLSAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlzLCAmU3RvcmFnZUFyZWFJ
bXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKLSAgICBBU1NFUlQobV9zdG9yYWdl
TWFwKTsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci19Ci0KLWJvb2wgU3RvcmFnZUFyZWFJ
bXBsOjpjYW5BY2Nlc3NTdG9yYWdlKEZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1cm4gZnJhbWUg
JiYgZnJhbWUtPnBhZ2UoKTsKLX0KLQotU3RvcmFnZVR5cGUgU3RvcmFnZUFyZWFJbXBsOjpzdG9y
YWdlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RvcmFnZVR5cGU7Ci19Ci0KLXVuc2ln
bmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICByZXR1cm4gbV9zdG9y
YWdlTWFwLT5sZW5ndGgoKTsKLX0KLQotU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6a2V5KHVuc2ln
bmVkIGluZGV4KQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKLSAgICBibG9ja1VudGls
SW1wb3J0Q29tcGxldGUoKTsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmtleShpbmRleCk7
Ci19Ci0KLVN0cmluZyBTdG9yYWdlQXJlYUltcGw6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCi17
Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOwotfQotCi12b2lk
IFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKLXsKLSAg
ICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7Ci0g
ICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0KLSAgICBTdHJpbmcgb2xkVmFsdWU7Ci0g
ICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXks
IHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwotICAgIGlmIChuZXdNYXApCi0gICAg
ICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7Ci0KLSAgICBpZiAocXVvdGFFeGNl
cHRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChvbGRWYWx1ZSA9PSB2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0
b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIHZhbHVlKTsKLQotICAgIGRp
c3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBzb3VyY2VGcmFtZSk7Ci19
Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJs
b2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0gICAgU3RyaW5nIG9sZFZhbHVlOwotICAgIFJl
ZlB0cjxTdG9yYWdlTWFwPiBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBv
bGRWYWx1ZSk7Ci0gICAgaWYgKG5ld01hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFw
LnJlbGVhc2UoKTsKLQotICAgIGlmIChvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3lu
Yy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKLQotICAgIGRpc3BhdGNoU3Rv
cmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Ci19Ci0KLXZv
aWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotCi0g
ICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1
bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKLSAgICBtX3N0b3JhZ2VNYXAg
PSBTdG9yYWdlTWFwOjpjcmVhdGUocXVvdGEpOwotCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5j
KQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwotCi0gICAgZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJh
bWUpOwotfQotCi1ib29sIFN0b3JhZ2VBcmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXkpCi17Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKLX0K
LQotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmltcG9ydEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiBpdGVtcykKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0KLSAgICBt
X3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKGl0ZW1zKTsKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUlt
cGw6OmNsb3NlKCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3Rv
cmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOwotCi0jaWZuZGVmIE5ERUJVRwotICAg
IG1faXNTaHV0ZG93biA9IHRydWU7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdG9yYWdlQXJlYUltcGw6
OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQotewotICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
LSAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKLSAgICAKLSAgICBpZiAobV9zdG9yYWdl
TWFwLT5sZW5ndGgoKSkgewotICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+
cXVvdGEoKTsKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3Rh
KTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKLSAgICAgICAgbV9zdG9y
YWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOwotICAgIH0KLX0KLSAgICAKLXZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjpzeW5jKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Ci0gICAgYmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCk7Ci0gICAgCi0gICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQot
ICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVTeW5jKCk7Ci19Ci0KLXZvaWQgU3Rv
cmFnZUFyZWFJbXBsOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdAotewotICAgIGlm
IChtX3N0b3JhZ2VBcmVhU3luYykKLSAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpOwotfQotCi1zaXplX3QgU3RvcmFnZUFyZWFJbXBsOjptZW1vcnlC
eXRlc1VzZWRCeUNhY2hlKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBTdG9yYWdlQXJl
YUltcGw6OmluY3JlbWVudEFjY2Vzc0NvdW50KCkKLXsKLSAgICBtX2FjY2Vzc0NvdW50Kys7Ci0K
LSAgICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9jbG9z
ZURhdGFiYXNlVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGVjcmVt
ZW50QWNjZXNzQ291bnQoKQotewotICAgIEFTU0VSVChtX2FjY2Vzc0NvdW50KTsKLSAgICAtLW1f
YWNjZXNzQ291bnQ7Ci0KLSAgICBpZiAoIW1fYWNjZXNzQ291bnQpIHsKLSAgICAgICAgaWYgKG1f
Y2xvc2VEYXRhYmFzZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2Nsb3NlRGF0YWJh
c2VUaW1lci5zdG9wKCk7Ci0gICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0YXJ0T25lU2hv
dChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJG
aXJlZCgpCi17Ci0gICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Ci0gICAgaWYgKG1fc3Rv
cmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbG9zZURh
dGFiYXNlKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlSWZJZGxl
KCkKLXsKLSAgICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAg
ICBBU1NFUlQoIW1fYWNjZXNzQ291bnQpOwotICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5z
dG9wKCk7Ci0KLSAgICAgICAgY2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJh
bWUqIHNvdXJjZUZyYW1lKQotewotICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFn
ZSkKLSAgICAgICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VF
dmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIHNv
dXJjZUZyYW1lKTsKLSAgICBlbHNlCi0gICAgICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG1fc2Vj
dXJpdHlPcmlnaW4uZ2V0KCksIHNvdXJjZUZyYW1lKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDg5NzYxYTFiNDZkNGY2MDA0YzZmYjBmMWM4NmMyNjhkNjY0NWQy
MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBTdG9yYWdlQXJlYUltcGxfaAotI2RlZmluZSBTdG9yYWdlQXJlYUltcGxfaAotCi0j
aW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTZWN1cml0eU9yaWdp
bjsKLWNsYXNzIFN0b3JhZ2VNYXA7Ci1jbGFzcyBTdG9yYWdlQXJlYVN5bmM7Ci0KLWNsYXNzIFN0
b3JhZ2VBcmVhSW1wbCA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxTdG9yYWdlQXJlYUltcGw+IGNyZWF0ZShTdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgdW5zaWduZWQgcXVv
dGEpOwotICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVhSW1wbCgpOwotCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBsZW5ndGgoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFN0cmluZyBrZXkodW5zaWduZWQg
aW5kZXgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhj
ZXB0aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShGcmFtZSogc291
cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGNh
bkFjY2Vzc1N0b3JhZ2UoRnJhbWUqIHNvdXJjZUZyYW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgaW5jcmVtZW50QWNjZXNzQ291bnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50
QWNjZXNzQ291bnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VEYXRhYmFzZUlmSWRsZSgpOwot
Ci0gICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IGNvcHkoKTsKLSAgICB2b2lkIGNsb3Nl
KCk7Ci0KLSAgICAvLyBPbmx5IGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQuCi0gICAg
dm9pZCBpbXBvcnRJdGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMpOwot
Ci0gICAgLy8gVXNlZCB0byBjbGVhciBhIFN0b3JhZ2VBcmVhIGFuZCBjbG9zZSBkYiBiZWZvcmUg
YmFja2luZyBkYiBmaWxlIGlzIGRlbGV0ZWQuCi0gICAgdm9pZCBjbGVhckZvck9yaWdpbkRlbGV0
aW9uKCk7Ci0KLSAgICB2b2lkIHN5bmMoKTsKLQotcHJpdmF0ZToKLSAgICBTdG9yYWdlQXJlYUlt
cGwoU3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0
b3JhZ2VTeW5jTWFuYWdlcj4sIHVuc2lnbmVkIHF1b3RhKTsKLSAgICBleHBsaWNpdCBTdG9yYWdl
QXJlYUltcGwoU3RvcmFnZUFyZWFJbXBsKik7Ci0KLSAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpIGNvbnN0OwotICAgIHZvaWQgY2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoKTsKLQot
ICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSk7Ci0KLSAgICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOwotICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKLSAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9y
YWdlTWFwOwotCi0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gbV9zdG9yYWdlQXJlYVN5bmM7
Ci0gICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zdG9yYWdlU3luY01hbmFnZXI7Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2lzU2h1dGRvd247Ci0jZW5kaWYKLSAgICB1bnNp
Z25lZCBtX2FjY2Vzc0NvdW50OwotICAgIFRpbWVyIG1fY2xvc2VEYXRhYmFzZVRpbWVyOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU3RvcmFnZUFyZWFJbXBsX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDYwMmQ4ZjVlZjllNGRlMDhkYTI1MjIzMDIzYmE0ODlkODg5MDdm
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYVN5
bmMuaCIKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFz
ZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTUUxp
dGVUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgotI2luY2x1ZGUg
IlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCi0jaW5j
bHVkZSAiU3VkZGVuVGVybWluYXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIElmIHRoZSBTdG9yYWdlQXJlYSB1bmRlcmdvZXMg
cmFwaWQgY2hhbmdlcywgZG9uJ3Qgc3luYyBlYWNoIGNoYW5nZSB0byBkaXNrLgotLy8gSW5zdGVh
ZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBpdGVtcyB0byBzeW5jIGFuZCBhY3R1YWxseSBkbyB0aGUg
c3luYyBhdCB0aGUgZm9sbG93aW5nIGludGVydmFsLgotc3RhdGljIGNvbnN0IGRvdWJsZSBTdG9y
YWdlU3luY0ludGVydmFsID0gMS4wOwotCi0vLyBBIHNhbmUgbGltaXQgb24gaG93IG1hbnkgaXRl
bXMgd2UnbGwgc2NoZWR1bGUgdG8gc3luYyBhbGwgYXQgb25jZS4gIFRoaXMgbWFrZXMgaXQKLS8v
IG11Y2ggaGFyZGVyIHRvIHN0YXJ2ZSB0aGUgcmVzdCBvZiBMb2NhbFN0b3JhZ2UgYW5kIHRoZSBP
UydzIElPIHN1YnN5c3RlbSBpbiBnZW5lcmFsLgotc3RhdGljIGNvbnN0IGludCBNYXhpdW1JdGVt
c1RvU3luYyA9IDEwMDsKLQotaW5saW5lIFN0b3JhZ2VBcmVhU3luYzo6U3RvcmFnZUFyZWFTeW5j
KFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NS
ZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUlkZW50aWZpZXIpCi0gICAgOiBtX3N5bmNUaW1lcigqdGhpcywgJlN0b3JhZ2VBcmVhU3luYzo6
c3luY1RpbWVyRmlyZWQpCi0gICAgLCBtX2l0ZW1zQ2xlYXJlZChmYWxzZSkKLSAgICAsIG1fZmlu
YWxTeW5jU2NoZWR1bGVkKGZhbHNlKQotICAgICwgbV9zdG9yYWdlQXJlYShzdG9yYWdlQXJlYSkK
LSAgICAsIG1fc3luY01hbmFnZXIoc3RvcmFnZVN5bmNNYW5hZ2VyKQotICAgICwgbV9kYXRhYmFz
ZUlkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9j
bGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNlKQotICAgICwgbV9zeW5jU2NoZWR1bGVkKGZhbHNl
KQotICAgICwgbV9zeW5jSW5Qcm9ncmVzcyhmYWxzZSkKLSAgICAsIG1fZGF0YWJhc2VPcGVuRmFp
bGVkKGZhbHNlKQotICAgICwgbV9zeW5jQ2xvc2VEYXRhYmFzZShmYWxzZSkKLSAgICAsIG1faW1w
b3J0Q29tcGxldGUoZmFsc2UpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBB
U1NFUlQobV9zdG9yYWdlQXJlYSk7Ci0gICAgQVNTRVJUKG1fc3luY01hbmFnZXIpOwotCi0gICAg
Ly8gRklYTUU6IElmIGl0IGNhbid0IGltcG9ydCwgdGhlbiB0aGUgZGVmYXVsdCBXZWJLaXQgYmVo
YXZpb3Igc2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywKLSAgICAvLyBub3Qgc2ls
ZW50bHkgaWdub3JpbmcgaXQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNTg5NAotICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IHByb3RlY3Rvcih0aGlzKTsKLSAg
ICBtX3N5bmNNYW5hZ2VyLT5kaXNwYXRjaChbcHJvdGVjdG9yXSB7Ci0gICAgICAgIHByb3RlY3Rv
ci0+cGVyZm9ybUltcG9ydCgpOwotICAgIH0pOwotfQotCi1SZWY8U3RvcmFnZUFyZWFTeW5jPiBT
dG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3Rv
cmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gc3RvcmFnZUFyZWEs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFN0b3JhZ2VBcmVhU3luYyhzdG9yYWdlU3luY01hbmFnZXIsIHN0b3JhZ2VBcmVhLCBk
YXRhYmFzZUlkZW50aWZpZXIpKTsKLX0KLQotU3RvcmFnZUFyZWFTeW5jOjp+U3RvcmFnZUFyZWFT
eW5jKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9zeW5j
VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKG1fZmluYWxTeW5jU2NoZWR1bGVkKTsKLX0K
LQotdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlRmluYWxTeW5jKCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIC8vIEZJWE1FOiBXZSBkbyB0aGlzIHRvIGF2b2lkIHJh
Y2VzLCBidXQgaXQnZCBiZSBiZXR0ZXIgdG8gbWFrZSB0aGluZ3Mgc2FmZSB3aXRob3V0IGJsb2Nr
aW5nLgotICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwotICAgIG1fc3RvcmFnZUFyZWEg
PSAwOyAgLy8gVGhpcyBpcyBkb25lIGluIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGJ1dCB0
aGlzIGlzIGhlcmUgYXMgYSBmb3JtIG9mIGRvY3VtZW50YXRpb24gdGhhdCB3ZSBtdXN0IGJlIGFi
c29sdXRlbHkgc3VyZSB0aGUgcmVmIGNvdW50IGN5Y2xlIGlzIGJyb2tlbi4KLQotICAgIGlmICht
X3N5bmNUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3N5bmNUaW1lci5zdG9wKCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwg
dG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCi0gICAgICAgIC8vIHN5bmNUaW1lckZp
cmVkIGZ1bmN0aW9uLgotICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKLSAgICB9
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgc3luY2hyb25vdXMuICBXZSBzaG91bGQgZG8gaXQgb24g
dGhlIGJhY2tncm91bmQgcHJvY2VzcywgYnV0Ci0gICAgLy8gd2Ugc2hvdWxkIGRvIGl0IHNhZmVs
eS4KLSAgICBtX2ZpbmFsU3luY1NjaGVkdWxlZCA9IHRydWU7Ci0gICAgc3luY1RpbWVyRmlyZWQo
KTsKLQotICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBt
X3N5bmNNYW5hZ2VyLT5kaXNwYXRjaChbcHJvdGVjdG9yXSB7Ci0gICAgICAgIHByb3RlY3Rvci0+
ZGVsZXRlRW1wdHlEYXRhYmFzZSgpOwotICAgIH0pOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6c2NoZWR1bGVJdGVtRm9yU3luYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9maW5h
bFN5bmNTY2hlZHVsZWQpOwotCi0gICAgbV9jaGFuZ2VkSXRlbXMuc2V0KGtleSwgdmFsdWUpOwot
ICAgIGlmICghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBtX3N5bmNUaW1lci5z
dGFydE9uZVNob3QoU3RvcmFnZVN5bmNJbnRlcnZhbCk7Ci0KLSAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBp
biB0aGUKLSAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCi0gICAgICAgIGRpc2Fi
bGVTdWRkZW5UZXJtaW5hdGlvbigpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYVN5bmM6
OnNjaGVkdWxlQ2xlYXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKCFtX2ZpbmFsU3luY1NjaGVkdWxlZCk7Ci0KLSAgICBtX2NoYW5nZWRJdGVtcy5jbGVhcigp
OwotICAgIG1faXRlbXNDbGVhcmVkID0gdHJ1ZTsKLSAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0
aXZlKCkpIHsKLSAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50
ZXJ2YWwpOwotCi0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNh
bGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCi0gICAgICAgIC8vIHN5bmNUaW1l
ckZpcmVkIGZ1bmN0aW9uLgotICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsb3NlRGF0YWJhc2UoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2ZpbmFsU3luY1Nj
aGVkdWxlZCk7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc3luY0Nsb3NlRGF0YWJhc2UgPSB0cnVlOwotICAgIAotICAgIGlmICghbV9z
eW5jVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICBtX3N5bmNUaW1lci5zdGFydE9uZVNob3Qo
U3RvcmFnZVN5bmNJbnRlcnZhbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgZm9sbG93aW5n
IGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRo
ZQotICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KLSAgICAgICAgZGlzYWJsZVN1
ZGRlblRlcm1pbmF0aW9uKCk7Ci0gICAgfQotfQotCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3lu
Y1RpbWVyRmlyZWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBib29s
IHBhcnRpYWxTeW5jID0gZmFsc2U7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9zeW5jTG9jayk7Ci0KLSAgICAgICAgLy8gRG8gbm90IHNjaGVkdWxlIGFub3RoZXIgc3luYyBp
ZiB3ZSdyZSBzdGlsbCB0cnlpbmcgdG8gY29tcGxldGUgdGhlCi0gICAgICAgIC8vIHByZXZpb3Vz
IG9uZS4gIEJ1dCwgaWYgd2UncmUgc2h1dHRpbmcgZG93biwgc2NoZWR1bGUgaXQgYW55d2F5Lgot
ICAgICAgICBpZiAobV9zeW5jSW5Qcm9ncmVzcyAmJiAhbV9maW5hbFN5bmNTY2hlZHVsZWQpIHsK
LSAgICAgICAgICAgIEFTU0VSVCghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgICAgICAg
ICBtX3N5bmNUaW1lci5zdGFydE9uZVNob3QoU3RvcmFnZVN5bmNJbnRlcnZhbCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9pdGVtc0NsZWFyZWQpIHsK
LSAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5jbGVhcigpOwotICAgICAgICAgICAgbV9j
bGVhckl0ZW1zV2hpbGVTeW5jaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIG1faXRlbXNDbGVhcmVk
ID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6
aXRlcmF0b3IgY2hhbmdlZF9pdCA9IG1fY2hhbmdlZEl0ZW1zLmJlZ2luKCk7Ci0gICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBjaGFuZ2VkX2VuZCA9IG1fY2hhbmdlZEl0
ZW1zLmVuZCgpOwotICAgICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNoYW5nZWRfaXQgIT0gY2hh
bmdlZF9lbmQ7ICsrY291bnQsICsrY2hhbmdlZF9pdCkgewotICAgICAgICAgICAgaWYgKGNvdW50
ID49IE1heGl1bUl0ZW1zVG9TeW5jICYmICFtX2ZpbmFsU3luY1NjaGVkdWxlZCkgewotICAgICAg
ICAgICAgICAgIHBhcnRpYWxTeW5jID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zZXQoY2hhbmdlZF9p
dC0+a2V5Lmlzb2xhdGVkQ29weSgpLCBjaGFuZ2VkX2l0LT52YWx1ZS5pc29sYXRlZENvcHkoKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGFydGlhbFN5bmMpIHsKLSAgICAgICAgICAgIC8v
IFdlIGNhbid0IGRvIHRoZSBmYXN0IHBhdGggb2Ygc2ltcGx5IGNsZWFyaW5nIGFsbCBpdGVtcywg
c28gd2UnbGwgbmVlZCB0byBtYW51YWxseQotICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZW0gb25l
IGJ5IG9uZS4gIERvbmUgdW5kZXIgbG9jayBzaW5jZSBtX2l0ZW1zUGVuZGluZ1N5bmMgaXMgbW9k
aWZpZWQgYnkKLSAgICAgICAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kIHRocmVhZC4KLSAgICAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwZW5kaW5nX2l0ID0gbV9pdGVt
c1BlbmRpbmdTeW5jLmJlZ2luKCk7Ci0gICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6aXRlcmF0b3IgcGVuZGluZ19lbmQgPSBtX2l0ZW1zUGVuZGluZ1N5bmMuZW5kKCk7Ci0gICAg
ICAgICAgICBmb3IgKDsgcGVuZGluZ19pdCAhPSBwZW5kaW5nX2VuZDsgKytwZW5kaW5nX2l0KQot
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5kaW5nX2l0LT5rZXkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKLSAgICAgICAgICAg
IG1fc3luY1NjaGVkdWxlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcg
aXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhl
Ci0gICAgICAgICAgICAvLyBwZXJmb3JtU3luYyBmdW5jdGlvbi4KLSAgICAgICAgICAgIGRpc2Fi
bGVTdWRkZW5UZXJtaW5hdGlvbigpOwotCi0gICAgICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWFT
eW5jPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgICAgICAgICBtX3N5bmNNYW5hZ2VyLT5kaXNwYXRj
aChbcHJvdGVjdG9yXSB7Ci0gICAgICAgICAgICAgICAgcHJvdGVjdG9yLT5wZXJmb3JtU3luYygp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocGFydGlhbFN5
bmMpIHsKLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmlzaCBzeW5jaW5nLCB0aGVuIHdlIG5l
ZWQgdG8gZmluaXNoIHRoZSBqb2IgbGF0ZXIuCi0gICAgICAgIEFTU0VSVCghbV9zeW5jVGltZXIu
aXNBY3RpdmUoKSk7Ci0gICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3lu
Y0ludGVydmFsKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJh
bGFuY2VkIGJ5IHRoZSBjYWxscyB0byBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCi0g
ICAgICAgIC8vIHNjaGVkdWxlSXRlbUZvclN5bmMsIHNjaGVkdWxlQ2xlYXIsIGFuZCBzY2hlZHVs
ZUZpbmFsU3luYyBmdW5jdGlvbnMuCi0gICAgICAgIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7
Ci0KLSAgICAgICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkRhdGFiYXNlUGFyYW1UeXBlIG9wZW5pbmdT
dHJhdGVneSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1f
ZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgIEFTU0VSVCghbV9kYXRhYmFzZU9wZW5GYWlsZWQpOwot
Ci0gICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25D
b3VudGVyOwotCi0gICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5m
dWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7Ci0KLSAgICBpZiAoIWZp
bGVFeGlzdHMoZGF0YWJhc2VGaWxlbmFtZSkgJiYgb3BlbmluZ1N0cmF0ZWd5ID09IFNraXBJZk5v
bkV4aXN0ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZGF0YWJhc2VGaWxlbmFtZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGaWxlbmFtZSBmb3IgbG9jYWwgc3RvcmFn
ZSBkYXRhYmFzZSBpcyBlbXB0eSAtIGNhbm5vdCBvcGVuIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2Ui
KTsKLSAgICAgICAgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIG1fZGF0YWJhc2VPcGVuRmFpbGVk
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEEgU3RvcmFnZVRyYWNr
ZXIgdGhyZWFkIG1heSBoYXZlIGJlZW4gc2NoZWR1bGVkIHRvIGRlbGV0ZSB0aGUgZGIgd2UncmUK
LSAgICAvLyByZW9wZW5pbmcsIHNvIGNhbmNlbCBwb3NzaWJsZSBkZWxldGlvbi4KLSAgICBTdG9y
YWdlVHJhY2tlcjo6dHJhY2tlcigpLmNhbmNlbERlbGV0aW5nT3JpZ2luKG1fZGF0YWJhc2VJZGVu
dGlmaWVyKTsKLQotICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlRmlsZW5hbWUpKSB7
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3Ig
bG9jYWwgc3RvcmFnZSIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IG1hcmtJbXBvcnRlZCgpOwotICAgICAgICBtX2RhdGFiYXNlT3BlbkZhaWxlZCA9IHRydWU7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsK
LQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5P
VCBFWElTVFMgSXRlbVRhYmxlIChrZXkgVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwg
dmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0YWJsZSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2Ui
KTsKLSAgICAgICAgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIG1fZGF0YWJhc2VPcGVuRmFpbGVk
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0b3JhZ2VUcmFja2VyOjp0
cmFja2VyKCkuc2V0T3JpZ2luRGV0YWlscyhtX2RhdGFiYXNlSWRlbnRpZmllciwgZGF0YWJhc2VG
aWxlbmFtZSk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFTeW5jOjptaWdyYXRlSXRlbVRhYmxlSWZO
ZWVkZWQoKQotewotICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOwotICAg
ICAgICAvLyB0aGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChxdWVy
eS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIGFsdGVyIHRhYmxlIGZvciBiYWNrd2FyZCBjb21wbGlhbmNlLCBjaGFuZ2UgdGhl
IHZhbHVlIHR5cGUgZnJvbSBURVhUIHRvIEJMT0IuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNv
bW1hbmRzW10gPSB7Ci0gICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBJdGVtVGFibGUyIiwK
LSAgICAgICAgIkNSRUFURSBUQUJMRSBJdGVtVGFibGUyIChrZXkgVEVYVCBVTklRVUUgT04gQ09O
RkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIsCi0g
ICAgICAgICJJTlNFUlQgSU5UTyBJdGVtVGFibGUyIFNFTEVDVCAqIGZyb20gSXRlbVRhYmxlIiwK
LSAgICAgICAgIkRST1AgVEFCTEUgSXRlbVRhYmxlIiwKLSAgICAgICAgIkFMVEVSIFRBQkxFIEl0
ZW1UYWJsZTIgUkVOQU1FIFRPIEl0ZW1UYWJsZSIsCi0gICAgICAgIDAsCi0gICAgfTsKLQotICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UsIGZhbHNlKTsKLSAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBjb21tYW5kc1tpXTsg
KytpKSB7Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjb21tYW5kc1tp
XSkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1pZ3JhdGUgdGFibGUgSXRl
bVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIHdoZW4gZXhlY3V0aW5nOiAlcyIsIGNvbW1hbmRzW2ld
KTsKLSAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0KLSAgICAgICAgICAgIC8v
IGZpbmFsbHkgaXQgd2lsbCB0cnkgdG8ga2VlcCBhIGJhY2t1cCBvZiBJdGVtVGFibGUgZm9yIHRo
ZSBmdXR1cmUgcmVzdG9yYXRpb24uCi0gICAgICAgICAgICAvLyBOT1RJQ0U6IHRoaXMgd2lsbCBl
c3NlbnRpYWxseSBERUxFVEUgdGhlIGN1cnJlbnQgZGF0YWJhc2UsIGJ1dCB0aGF0J3MgYmV0dGVy
Ci0gICAgICAgICAgICAvLyB0aGFuIGNvbnRpbnVhbGx5IGhpdHRpbmcgdGhpcyBjYXNlIGFuZCBu
ZXZlciBiZWluZyBhYmxlIHRvIHVzZSB0aGUgbG9jYWwgc3RvcmFnZS4KLSAgICAgICAgICAgIC8v
IGlmIHRoaXMgaXMgZXZlciBoaXQsIGl0J3MgZGVmaW5pdGVseSBhIGJ1Zy4KLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKCJBTFRFUiBUQUJMRSBJdGVtVGFibGUgUkVOQU1FIFRPIEJhY2t1cF9JdGVtVGFi
bGUiKSkKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzYXZlIEl0ZW1UYWJs
ZSBhZnRlciBtaWdyYXRpb24gam9iIGZhaWxlZC4iKTsKLQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotfQotCi12b2lkIFN0
b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsKLQotICAgIG9wZW5EYXRh
YmFzZShTa2lwSWZOb25FeGlzdGVudCk7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKSB7
Ci0gICAgICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9N
IEl0ZW1UYWJsZSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxl
IGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbU1hcDsKLQot
ICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7Ci0gICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxS
ZXN1bHRSb3cpIHsKLSAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwg
cXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKLSAgICAgICAgcmVzdWx0ID0gcXVlcnku
c3RlcCgpOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAg
ICAgICBMT0dfRVJST1IoIkVycm9yIHJlYWRpbmcgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxv
Y2FsIHN0b3JhZ2UiKTsKLSAgICAgICAgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtcyhpdGVtTWFwKTsKLQotICAg
IG1hcmtJbXBvcnRlZCgpOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6bWFya0ltcG9ydGVk
KCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKLSAgICBtX2ltcG9y
dENvbXBsZXRlID0gdHJ1ZTsKLSAgICBtX2ltcG9ydENvbmRpdGlvbi5zaWduYWwoKTsKLX0KLQot
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhbGxvdyB1c2Ugb2YgU3RvcmFnZUFy
ZWFzIHdoaWxlIGl0J3MgaW1wb3J0aW5nICh3aGVuIHNhZmUgdG8gZG8gc28pLgotLy8gQmxvY2tp
bmcgZXZlcnl0aGluZyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlIGlzIGJ5IGZhciB0aGUg
c2ltcGxlc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbywgYnV0Ci0vLyB0aGVyZSBpcyBjZXJ0YWlu
bHkgcm9vbSBmb3Igc2FmZSBvcHRpbWl6YXRpb246IEtleS9sZW5ndGggd2lsbCBuZXZlciBiZSBh
YmxlIHRvIG1ha2UgdXNlIG9mIHN1Y2ggYW4KLS8vIG9wdGltaXphdGlvbiAoc2luY2UgdGhlIG9y
ZGVyIG9mIGl0ZXJhdGlvbiBjYW4gY2hhbmdlIGFzIGl0ZW1zIGFyZSBiZWluZyBhZGRlZCkuIEdl
dCBjYW4gcmV0dXJuIGFueQotLy8gaXRlbSBjdXJyZW50bHkgaW4gdGhlIG1hcC4gR2V0L3JlbW92
ZSBjYW4gd29yayB3aGV0aGVyIG9yIG5vdCBpdCdzIGluIHRoZSBtYXAsIGJ1dCB3ZSdsbCBuZWVk
IGEgbGlzdAotLy8gb2YgaXRlbXMgdGhlIGltcG9ydCBzaG91bGQgbm90IG92ZXJ3cml0ZS4gQ2xl
YXIgY2FuIGFsc28gd29yaywgYnV0IGl0J2xsIG5lZWQgdG8ga2lsbCB0aGUgaW1wb3J0Ci0vLyBq
b2IgZmlyc3QuCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRl
KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRmFzdCBwYXRoLiAg
V2Ugc2V0IG1fc3RvcmFnZUFyZWEgdG8gMCBvbmx5IGFmdGVyIG1faW1wb3J0Q29tcGxldGUgYmVp
bmcgdHJ1ZS4KLSAgICBpZiAoIW1fc3RvcmFnZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2ltcG9ydExvY2spOwotICAgIHdoaWxlICghbV9pbXBvcnRD
b21wbGV0ZSkKLSAgICAgICAgbV9pbXBvcnRDb25kaXRpb24ud2FpdChtX2ltcG9ydExvY2spOwot
ICAgIG1fc3RvcmFnZUFyZWEgPSAwOwotfQotCi12b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luYyhi
b29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcykKLXsK
LSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkg
JiYgIWNsZWFySXRlbXMgJiYgIW1fc3luY0Nsb3NlRGF0YWJhc2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAobV9kYXRhYmFzZU9wZW5GYWlsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSAmJiBtX3N5bmNDbG9zZURhdGFiYXNlKSB7Ci0gICAgICAg
IG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgb3BlbkRhdGFiYXNlKENyZWF0
ZUlmTm9uRXhpc3RlbnQpOwotICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gQ2xvc2luZyB0aGlzIGRiIGJlY2F1c2UgaXQgaXMgYWJvdXQgdG8g
YmUgZGVsZXRlZCBieSBTdG9yYWdlVHJhY2tlci4KLSAgICAvLyBUaGUgZGVsZXRlIHdpbGwgYmUg
Y2FuY2VsbGVkIGlmIFN0b3JhZ2VBcmVhU3luYyBuZWVkcyB0byByZW9wZW4gdGhlIGRiCi0gICAg
Ly8gdG8gd3JpdGUgbmV3IGl0ZW1zIGNyZWF0ZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgdG8gZGVsZXRl
IHRoZSBkYi4KLSAgICBpZiAobV9zeW5jQ2xvc2VEYXRhYmFzZSkgewotICAgICAgICBtX3N5bmND
bG9zZURhdGFiYXNlID0gZmFsc2U7Ci0gICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0KLSAgICAvLyBJZiB0aGUgY2xlYXIgZmxh
ZyBpcyBzZXQsIHRoZW4gd2UgY2xlYXIgYWxsIGl0ZW1zIG91dCBiZWZvcmUgd2Ugd3JpdGUgYW55
IG5ldyBvbmVzIGluLgotICAgIGlmIChjbGVhckl0ZW1zKSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBjbGVhcihtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIik7Ci0gICAgICAg
IGlmIChjbGVhci5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgY2xlYXIgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGludCByZXN1bHQgPSBjbGVhci5zdGVwKCk7Ci0gICAgICAgIGlmIChyZXN1
bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
Y2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU1FMaXRl
U3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVF
UyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBj
YW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZShtX2RhdGFiYXNlLCAiREVMRVRF
IEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7Ci0gICAgaWYgKHJlbW92ZS5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBk
ZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Ui
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVtcy5lbmQoKTsKLQotICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0g
ICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpdGVt
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgLy8gQmFzZWQgb24gdGhlIG51
bGwtbmVzcyBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBkZWNpZGUgd2hldGhlciB0aGlzIGlzIGFu
IGluc2VydCBvciBhIGRlbGV0ZS4KLSAgICAgICAgU1FMaXRlU3RhdGVtZW50JiBxdWVyeSA9IGl0
LT52YWx1ZS5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsKLQotICAgICAgICBxdWVyeS5iaW5k
VGV4dCgxLCBpdC0+a2V5KTsKLQotICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlz
IG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhlIHZhbHVl
LgotICAgICAgICBpZiAoIWl0LT52YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHF1ZXJ5LmJp
bmRCbG9iKDIsIGl0LT52YWx1ZSk7Ci0KLSAgICAgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAo
KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRh
YmFzZSAtICVpIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcXVlcnkucmVzZXQoKTsKLSAgICB9Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7Ci19
Ci0KLXZvaWQgU3RvcmFnZUFyZWFTeW5jOjpwZXJmb3JtU3luYygpCi17Ci0gICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICBib29sIGNsZWFySXRlbXM7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gaXRlbXM7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9z
eW5jTG9jayk7Ci0KLSAgICAgICAgQVNTRVJUKG1fc3luY1NjaGVkdWxlZCk7Ci0KLSAgICAgICAg
Y2xlYXJJdGVtcyA9IG1fY2xlYXJJdGVtc1doaWxlU3luY2luZzsKLSAgICAgICAgbV9pdGVtc1Bl
bmRpbmdTeW5jLnN3YXAoaXRlbXMpOwotCi0gICAgICAgIG1fY2xlYXJJdGVtc1doaWxlU3luY2lu
ZyA9IGZhbHNlOwotICAgICAgICBtX3N5bmNTY2hlZHVsZWQgPSBmYWxzZTsKLSAgICAgICAgbV9z
eW5jSW5Qcm9ncmVzcyA9IHRydWU7Ci0gICAgfQotCi0gICAgc3luYyhjbGVhckl0ZW1zLCBpdGVt
cyk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N5bmNMb2NrKTsKLSAg
ICAgICAgbV9zeW5jSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9u
IGluIHRoZQotICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgotICAgIGVuYWJsZVN1ZGRl
blRlcm1pbmF0aW9uKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZUFyZWFTeW5jOjpkZWxldGVFbXB0eURh
dGFiYXNlKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fZGF0
YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBx
dWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIik7Ci0gICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBjb3VudCBudW1iZXIgb2Ygcm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0
b3JhZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCByZXN1bHQgPSBxdWVy
eS5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJObyByZXN1bHRzIHdoZW4gY291bnRpbmcgbnVtYmVyIG9mIHJvd3MgaW4gSXRlbVRh
YmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
bnQgY291bnQgPSBxdWVyeS5nZXRDb2x1bW5JbnQoMCk7Ci0gICAgaWYgKCFjb3VudCkgewotICAg
ICAgICBxdWVyeS5maW5hbGl6ZSgpOwotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAg
ICAgIGlmIChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAg
ICAgIFN0cmluZ0ltcGwqIGRhdGFiYXNlSWRlbnRpZmllckNvcHkgPSAmbV9kYXRhYmFzZUlkZW50
aWZpZXIuaW1wbCgpLT5pc29sYXRlZENvcHkoKS5sZWFrUmVmKCk7Ci0gICAgICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtkYXRhYmFzZUlkZW50aWZpZXJDb3B5XSB7Ci0gICAgICAgICAgICAgICAg
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihkYXRh
YmFzZUlkZW50aWZpZXJDb3B5KTsKLSAgICAgICAgICAgICAgICBkYXRhYmFzZUlkZW50aWZpZXJD
b3B5LT5kZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFz
ZUZpbGVuYW1lKG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGlmICghZGVsZXRl
RmlsZShkYXRhYmFzZUZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBkZWxldGUgZGF0YWJhc2UgZmlsZSAlc1xuIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNj
aGVkdWxlU3luYygpCi17Ci0gICAgc3luY1RpbWVyRmlyZWQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YVN5bmMuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZWFhYzcwYTI4NzUwZTg5YjQ3NDI4ZGIzYWUyNjli
YzAzMWU4ODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQXJlYVN5bmNfaAotI2RlZmluZSBTdG9y
YWdlQXJlYVN5bmNfaAotCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJU
aW1lci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lOwotY2xhc3Mg
U3RvcmFnZUFyZWFJbXBsOwotY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwotCi1jbGFzcyBTdG9y
YWdlQXJlYVN5bmMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZUFyZWFTeW5j
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdG9yYWdlQXJlYVN5bmM+IGNyZWF0ZShQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiwg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOwotICAgIH5TdG9yYWdlQXJlYVN5bmMo
KTsKLQotICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKLSAgICB2b2lkIGJsb2NrVW50aWxJ
bXBvcnRDb21wbGV0ZSgpOwotCi0gICAgdm9pZCBzY2hlZHVsZUl0ZW1Gb3JTeW5jKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHNjaGVkdWxlQ2xlYXIo
KTsKLSAgICB2b2lkIHNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOwotCi0gICAgdm9pZCBzY2hlZHVs
ZVN5bmMoKTsKLQotcHJpdmF0ZToKLSAgICBTdG9yYWdlQXJlYVN5bmMoUGFzc1JlZlB0cjxTdG9y
YWdlU3luY01hbmFnZXI+LCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4sIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJZGVudGlmaWVyKTsKLQotICAgIFRpbWVyIG1fc3luY1RpbWVyOwotICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fY2hhbmdlZEl0ZW1zOwotICAgIGJvb2wgbV9pdGVtc0Ns
ZWFyZWQ7Ci0KLSAgICBib29sIG1fZmluYWxTeW5jU2NoZWR1bGVkOwotCi0gICAgUmVmUHRyPFN0
b3JhZ2VBcmVhSW1wbD4gbV9zdG9yYWdlQXJlYTsKLSAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBtX3N5bmNNYW5hZ2VyOwotCi0gICAgLy8gVGhlIGRhdGFiYXNlIGhhbmRsZSB3aWxsIG9u
bHkgZXZlciBiZSBvcGVuZWQgYW5kIHVzZWQgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkLgotICAg
IFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJl
cnMgYXJlIHN1YmplY3QgdG8gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuCi1wdWJsaWM6
Ci0gICAgLy8gQ2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgdm9pZCBwZXJm
b3JtSW1wb3J0KCk7Ci0gICAgdm9pZCBwZXJmb3JtU3luYygpOwotICAgIHZvaWQgZGVsZXRlRW1w
dHlEYXRhYmFzZSgpOwotCi1wcml2YXRlOgotICAgIGVudW0gT3BlbkRhdGFiYXNlUGFyYW1UeXBl
IHsKLSAgICAgIENyZWF0ZUlmTm9uRXhpc3RlbnQsCi0gICAgICBTa2lwSWZOb25FeGlzdGVudAot
ICAgIH07Ci0KLSAgICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBvcGVuRGF0YWJh
c2UoT3BlbkRhdGFiYXNlUGFyYW1UeXBlIG9wZW5pbmdTdHJhdGVneSk7Ci0gICAgdm9pZCBzeW5j
KGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zKTsK
LQotICAgIGNvbnN0IFN0cmluZyBtX2RhdGFiYXNlSWRlbnRpZmllcjsKLQotICAgIE11dGV4IG1f
c3luY0xvY2s7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9pdGVtc1BlbmRpbmdTeW5j
OwotICAgIGJvb2wgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nOwotICAgIGJvb2wgbV9zeW5jU2No
ZWR1bGVkOwotICAgIGJvb2wgbV9zeW5jSW5Qcm9ncmVzczsKLSAgICBib29sIG1fZGF0YWJhc2VP
cGVuRmFpbGVkOwotCi0gICAgYm9vbCBtX3N5bmNDbG9zZURhdGFiYXNlOwotCi0gICAgbXV0YWJs
ZSBNdXRleCBtX2ltcG9ydExvY2s7Ci0gICAgVGhyZWFkQ29uZGl0aW9uIG1faW1wb3J0Q29uZGl0
aW9uOwotICAgIGJvb2wgbV9pbXBvcnRDb21wbGV0ZTsKLSAgICB2b2lkIG1hcmtJbXBvcnRlZCgp
OwotICAgIHZvaWQgbWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKCk7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTdG9yYWdlQXJlYVN5bmNfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZGM1OWYxMWNiYWI0YjEwZTYxNGU5YjgwN2JiNTQ2MjI5NDU2OTdkZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgi
Ci0KLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJl
YUltcGwuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVN5bmNN
YW5hZ2VyLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFz
aE1hcDxTdHJpbmcsIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKj4mIGxvY2FsU3RvcmFnZU5hbWVzcGFj
ZU1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBTdG9y
YWdlTmFtZXNwYWNlSW1wbCo+PiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7Ci0KLSAgICByZXR1
cm4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwOwotfQotCi1SZWZQdHI8U3RvcmFnZU5hbWVzcGFj
ZUltcGw+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSh1bnNpZ25lZCBxdW90YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1l
c3BhY2VJbXBsKFNlc3Npb25TdG9yYWdlLCBTdHJpbmcoKSwgcXVvdGEpKTsKLX0KLQotUmVmUHRy
PFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Z2V0T3JDcmVhdGVM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgsIHVuc2lnbmVk
IHF1b3RhKQotewotICAgIEFTU0VSVCghZGF0YWJhc2VQYXRoLmlzTnVsbCgpKTsKLQotICAgIGF1
dG8mIHNsb3QgPSBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5hZGQoZGF0YWJhc2VQYXRoLCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKHNsb3QpCi0gICAgICAgIHJldHVybiBz
bG90OwotCi0gICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBzdG9yYWdlTmFtZXNwYWNl
ID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKExvY2FsU3RvcmFnZSwgZGF0YWJh
c2VQYXRoLCBxdW90YSkpOwotICAgIHNsb3QgPSBzdG9yYWdlTmFtZXNwYWNlLmdldCgpOwotCi0g
ICAgcmV0dXJuIHN0b3JhZ2VOYW1lc3BhY2U7Ci19Ci0KLVN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpT
dG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5n
JiBwYXRoLCB1bnNpZ25lZCBxdW90YSkKLSAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUp
Ci0gICAgLCBtX3BhdGgocGF0aC5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fc3luY01hbmFnZXIo
MCkKLSAgICAsIG1fcXVvdGEocXVvdGEpCi0gICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCi17Ci0g
ICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlICYmICFtX3BhdGguaXNFbXB0eSgp
KQotICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUobV9w
YXRoKTsKLX0KLQotU3RvcmFnZU5hbWVzcGFjZUltcGw6On5TdG9yYWdlTmFtZXNwYWNlSW1wbCgp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX3N0b3JhZ2VUeXBl
ID09IExvY2FsU3RvcmFnZSkgewotICAgICAgICBBU1NFUlQobG9jYWxTdG9yYWdlTmFtZXNwYWNl
TWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0gICAgICAgIGxvY2FsU3RvcmFnZU5hbWVzcGFj
ZU1hcCgpLnJlbW92ZShtX3BhdGgpOwotICAgIH0KLQotICAgIGlmICghbV9pc1NodXRkb3duKQot
ICAgICAgICBjbG9zZSgpOwotfQotCi1QYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjb3B5KFBhZ2UqKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotICAgIEFTU0VSVChtX3N0b3JhZ2VUeXBl
ID09IFNlc3Npb25TdG9yYWdlKTsKLQotICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4g
bmV3TmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKG1fc3RvcmFn
ZVR5cGUsIG1fcGF0aCwgbV9xdW90YSkpOwotCi0gICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0gICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgaSA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAg
ICAgICAgbmV3TmFtZXNwYWNlLT5tX3N0b3JhZ2VBcmVhTWFwLnNldChpLT5rZXksIGktPnZhbHVl
LT5jb3B5KCkpOwotICAgIHJldHVybiBuZXdOYW1lc3BhY2UucmVsZWFzZSgpOwotfQotCi1QYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEoUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwotCi0gICAgUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBvcmlnaW4gPSBwcnBPcmlnaW47Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhSW1w
bD4gc3RvcmFnZUFyZWE7Ci0gICAgaWYgKChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAu
Z2V0KG9yaWdpbikpKQotICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotCi0g
ICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShtX3N0b3JhZ2VUeXBlLCBv
cmlnaW4sIG1fc3luY01hbmFnZXIsIG1fcXVvdGEpOwotICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0
KG9yaWdpbi5yZWxlYXNlKCksIHN0b3JhZ2VBcmVhKTsKLSAgICByZXR1cm4gc3RvcmFnZUFyZWEu
cmVsZWFzZSgpOwotfQotCi12b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbG9zZSgpCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2lzU2h1dGRvd24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlJ3JlIHNlc3Npb24gc3RvcmFnZSwgd2Ugc2hvdWxk
bid0IG5lZWQgdG8gZG8gYW55IHdvcmsgaGVyZS4KLSAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBT
ZXNzaW9uU3RvcmFnZSkgewotICAgICAgICBBU1NFUlQoIW1fc3luY01hbmFnZXIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
c3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0gICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnZhbHVlLT5jbG9zZSgpOwotCi0gICAgaWYgKG1fc3luY01hbmFnZXIpCi0gICAgICAgIG1f
c3luY01hbmFnZXItPmNsb3NlKCk7Ci0KLSAgICBtX2lzU2h1dGRvd24gPSB0cnVlOwotfQotCi12
b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIFJl
ZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQo
b3JpZ2luKTsKLSAgICBpZiAoc3RvcmFnZUFyZWEpCi0gICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVh
ckZvck9yaWdpbkRlbGV0aW9uKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNs
ZWFyQWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAu
ZW5kKCk7Ci0gICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5jbGVh
ckZvck9yaWdpbkRlbGV0aW9uKCk7Ci19Ci0gICAgCi12b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBs
OjpzeW5jKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFN0b3JhZ2VBcmVh
TWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZvciAoU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS0+c3luYygpOwotfQotCi12b2lkIFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsOjpjbG9zZUlkbGVMb2NhbFN0b3JhZ2VEYXRhYmFzZXMoKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7Ci0gICAgZm9yIChTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnZhbHVlLT5jbG9zZURhdGFiYXNlSWZJZGxlKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5h
bWVzcGFjZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiYzUwNTBjODBkMjExODkzNTE4
NmY1YjUzNGNiZTgyMzhmN2FkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlTmFtZXNwYWNlSW1wbF9oCi0jZGVm
aW5lIFN0b3JhZ2VOYW1lc3BhY2VJbXBsX2gKLQotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFz
aC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFj
ZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFN0b3JhZ2VBcmVhSW1wbDsKLQotY2xhc3MgU3RvcmFnZU5hbWVzcGFjZUltcGwgOiBw
dWJsaWMgU3RvcmFnZU5hbWVzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gY3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UodW5zaWduZWQgcXVvdGEpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8
U3RvcmFnZU5hbWVzcGFjZUltcGw+IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCB1bnNpZ25lZCBxdW90YSk7Ci0gICAgdmlydHVhbCB+
U3RvcmFnZU5hbWVzcGFjZUltcGwoKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYT4gc3RvcmFnZUFyZWEoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pICBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weShQYWdlKiBuZXdQ
YWdlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBvdmVycmlkZTsKLQotICAg
IC8vIE5vdCByZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0b3JhZ2VB
cmVhTWFwIGJlY2F1c2UKLSAgICAvLyB3ZSdyZSBqdXN0IGRlbGV0aW5nIHRoZSB1bmRlcmx5aW5n
IGRiIGZpbGUuIElmIGFuIGl0ZW0gaXMgYWRkZWQgaW1tZWRpYXRlbHkKLSAgICAvLyBhZnRlciBm
aWxlIGRlbGV0aW9uLCB3ZSB3YW50IHRoZSBzYW1lIFN0b3JhZ2VBcmVhIHRvIGV2ZW50dWFsbHkg
dHJpZ2dlcgotICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VBcmVhU3luYyB0byByZWNyZWF0
ZSB0aGUgYmFja2luZyBkYiBmaWxlLgotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9yaWdpbkZvckRl
bGV0aW9uKFNlY3VyaXR5T3JpZ2luKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
QWxsT3JpZ2luc0ZvckRlbGV0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmMo
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJZGxlTG9jYWxTdG9yYWdlRGF0YWJh
c2VzKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3Rv
cmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpOwotCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYUlt
cGw+PiBTdG9yYWdlQXJlYU1hcDsKLSAgICBTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFw
OwotCi0gICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKLQotICAgIC8vIE9ubHkgdXNlZCBp
ZiBtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSBhbmQgdGhlIHBhdGggd2FzIG5vdCAiIiBp
biBvdXIgY29uc3RydWN0b3IuCi0gICAgU3RyaW5nIG1fcGF0aDsKLSAgICBSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOwotCi0gICAgLy8gVGhlIGRlZmF1bHQgcXVvdGEg
Zm9yIGVhY2ggbmV3IHN0b3JhZ2UgYXJlYS4KLSAgICB1bnNpZ25lZCBtX3F1b3RhOwotCi0gICAg
Ym9vbCBtX2lzU2h1dGRvd247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBTdG9yYWdlTmFtZXNwYWNlSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VTeW5jTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzN2E0
OWY3YTY2NWVmYjQ3NTViYjk1M2Q5Y2I3OWRmYjZmZDJmNzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
U3luY01hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0u
aCIKLSNpbmNsdWRlICJTdG9yYWdlVGhyZWFkLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotUmVmPFN0b3JhZ2VTeW5jTWFuYWdlcj4gU3RvcmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VTeW5j
TWFuYWdlcihwYXRoKSk7Ci19Ci0KLVN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5bmNNYW5h
Z2VyKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IG1fdGhyZWFkKHN0ZDo6bWFrZV91bmlxdWU8
U3RvcmFnZVRocmVhZD4oKSkKLSAgICAsIG1fcGF0aChwYXRoLmlzb2xhdGVkQ29weSgpKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX3BhdGguaXNFbXB0eSgp
KTsKLSAgICBtX3RocmVhZC0+c3RhcnQoKTsKLX0KLQotU3RvcmFnZVN5bmNNYW5hZ2VyOjp+U3Rv
cmFnZVN5bmNNYW5hZ2VyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFT
U0VSVCghbV90aHJlYWQpOwotfQotCi0vLyBDYWxsZWQgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4K
LVN0cmluZyBTdG9yYWdlU3luY01hbmFnZXI6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQotewotICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVz
KG1fcGF0aCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNyZWF0ZSBMb2NhbFN0
b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIH0KLQotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQobV9wYXRoLCBkYXRhYmFzZUlkZW50aWZpZXIgKyAiLmxvY2Fsc3RvcmFnZSIpOwotfQot
Ci12b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6ZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiYgZnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBB
U1NFUlQobV90aHJlYWQpOwotCi0gICAgaWYgKG1fdGhyZWFkKQotICAgICAgICBtX3RocmVhZC0+
ZGlzcGF0Y2goZnVuY3Rpb24pOwotfQotCi12b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y2xvc2Uo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV90aHJlYWQpIHsK
LSAgICAgICAgbV90aHJlYWQtPnRlcm1pbmF0ZSgpOwotICAgICAgICBtX3RocmVhZCA9IG51bGxw
dHI7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDI4NzcyMTA1ZjIyZGEzMjk1MDMwNTNkOWRiYjU0MWI5M2Y3OTM5OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VTeW5jTWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RvcmFn
ZVN5bmNNYW5hZ2VyX2gKLSNkZWZpbmUgU3RvcmFnZVN5bmNNYW5hZ2VyX2gKLQotI2luY2x1ZGUg
PGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU3RvcmFnZVRo
cmVhZDsKLWNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKLQotY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2Vy
IDogcHVibGljIFJlZkNvdW50ZWQ8U3RvcmFnZVN5bmNNYW5hZ2VyPiB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgp
OwotICAgIH5TdG9yYWdlU3luY01hbmFnZXIoKTsKLQotICAgIHZvaWQgZGlzcGF0Y2goY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiYpOwotICAgIHZvaWQgY2xvc2UoKTsKLQotcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBTdG9yYWdlU3luY01hbmFnZXIoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKLQotLy8gVGhlIGZv
bGxvd2luZyBtZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6YXRpb24gaXNz
dWVzCi1wdWJsaWM6Ci0gICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhy
ZWFkOgotICAgIFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGRhdGFi
YXNlSWRlbnRpZmllcik7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fcGF0aDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNmVjZGU5NzIwNTk3MjE5YWU1YzM1MzkxZWYwNTRkYWYxZDhjNDA2ZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVRocmVhZC5oIgotCi0jaW5jbHVkZSA8d3Rm
L0F1dG9kcmFpbmVkUG9vbC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIEhhc2hTZXQ8U3RvcmFnZVRocmVhZCo+JiBhY3RpdmVT
dG9yYWdlVGhyZWFkcygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdG9yYWdlVGhyZWFkKj4sIHRocmVh
ZHMsICgpKTsKLSAgICByZXR1cm4gdGhyZWFkczsKLX0KLQotU3RvcmFnZVRocmVhZDo6U3RvcmFn
ZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLX0KLQotU3RvcmFnZVRocmVhZDo6flN0b3JhZ2VUaHJlYWQoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX3RocmVhZElEKTsKLX0KLQotYm9vbCBT
dG9yYWdlVGhyZWFkOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoU3Rv
cmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9j
YWxTdG9yYWdlIik7Ci0gICAgYWN0aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAg
cmV0dXJuIG1fdGhyZWFkSUQ7Ci19Ci0KLXZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQ
b2ludENhbGxiYWNrKHZvaWQqIHRocmVhZCkKLXsKLSAgICBzdGF0aWNfY2FzdDxTdG9yYWdlVGhy
ZWFkKj4odGhyZWFkKS0+dGhyZWFkRW50cnlQb2ludCgpOwotfQotCi12b2lkIFN0b3JhZ2VUaHJl
YWQ6OnRocmVhZEVudHJ5UG9pbnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgd2hpbGUgKGF1dG8gZnVuY3Rpb24gPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsK
LSAgICAgICAgQXV0b2RyYWluZWRQb29sIHBvb2w7Ci0gICAgICAgICgqZnVuY3Rpb24pKCk7Ci0g
ICAgfQotfQotCi12b2lkIFN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKGNvbnN0IHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4mIGZ1bmN0aW9uKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAgIG1fcXVldWUu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4oZnVuY3Rpb24p
KTsKLX0KLQotdm9pZCBTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUoKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFk
SUQpOwotICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwotICAgIC8vIEV2
ZW4gaW4gd2VpcmQsIGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3Rl
bnQgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpmdW5jdGlv
bjx2b2lkICgpPj4oW3RoaXNdIHsKLSAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwotICAgIH0p
KTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKLSAgICBBU1NFUlQo
bV9xdWV1ZS5raWxsZWQoKSk7Ci0gICAgbV90aHJlYWRJRCA9IDA7Ci19Ci0KLXZvaWQgU3RvcmFn
ZVRocmVhZDo6cGVyZm9ybVRlcm1pbmF0ZSgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0gICAgbV9xdWV1ZS5raWxsKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZVRocmVhZDo6cmVsZWFz
ZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRzKCkKLXsKLSAgICBIYXNoU2V0PFN0b3Jh
Z2VUaHJlYWQqPiYgdGhyZWFkcyA9IGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCk7Ci0KLSAgICBmb3Ig
KEhhc2hTZXQ8U3RvcmFnZVRocmVhZCo+OjppdGVyYXRvciBpdCA9IHRocmVhZHMuYmVnaW4oKSwg
ZW5kID0gdGhyZWFkcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+ZGlz
cGF0Y2goV1RGOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkpOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkZjUyYWM2MTIxYzg0NjZkNDg2ZTRhNGRjOWVmM2E0ZTI4ODczZmU1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RvcmFnZVRocmVh
ZF9oCi0jZGVmaW5lIFN0b3JhZ2VUaHJlYWRfaAotCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdG9yYWdlQXJlYVN5bmM7Ci1jbGFzcyBTdG9y
YWdlVGFzazsKLQotY2xhc3MgU3RvcmFnZVRocmVhZCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU3RvcmFnZVRocmVhZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IFN0b3JhZ2VUaHJlYWQoKTsKLSAgICB+U3RvcmFnZVRocmVhZCgpOwotCi0gICAgYm9vbCBzdGFy
dCgpOwotICAgIHZvaWQgdGVybWluYXRlKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiYpOwotCi0gICAgc3RhdGljIHZvaWQgcmVsZWFzZUZhc3RNYWxs
b2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRzKCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQ2FsbGVkIG9u
IGJhY2tncm91bmQgdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnRDYWxs
YmFjayh2b2lkKik7Ci0gICAgdm9pZCB0aHJlYWRFbnRyeVBvaW50KCk7Ci0KLSAgICAvLyBCYWNr
Z3JvdW5kIHRocmVhZCBwYXJ0IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJlLgotICAgIHZvaWQg
cGVyZm9ybVRlcm1pbmF0ZSgpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwot
ICAgIE1lc3NhZ2VRdWV1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fcXVldWU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTdG9yYWdlVGhyZWFkX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRiNmE5NDRhMjMwNDY4YzFkYTg1MmMxZDgxYTgzMWRkNDMxZjkxMGUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdG9yYWdlVHJh
Y2tlci5oIgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5o
IgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIlNRTGl0ZVN0
YXRlbWVudC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3RvcmFn
ZVRocmVhZC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxzcWxpdGUz
X3ByaXZhdGUuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTdG9y
YWdlVHJhY2tlciogc3RvcmFnZVRyYWNrZXIgPSAwOwotCi0vLyBJZiB0aGVyZSBpcyBubyBkb2N1
bWVudCByZWZlcmVuY2luZyBhIHN0b3JhZ2UgZGF0YWJhc2UsIGNsb3NlIHRoZSB1bmRlcmx5aW5n
IGRhdGFiYXNlCi0vLyBhZnRlciBpdCBoYXMgYmVlbiBpZGxlIGZvciBtX1N0b3JhZ2VEYXRhYmFz
ZUlkbGVJbnRlcnZhbCBzZWNvbmRzLgotc3RhdGljIGNvbnN0IGRvdWJsZSBEZWZhdWx0U3RvcmFn
ZURhdGFiYXNlSWRsZUludGVydmFsID0gMzAwOwotICAgIAotdm9pZCBTdG9yYWdlVHJhY2tlcjo6
aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU3RvcmFnZVRyYWNr
ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFT
U0VSVCghc3RvcmFnZVRyYWNrZXIgfHwgIXN0b3JhZ2VUcmFja2VyLT5tX2NsaWVudCk7Ci0gICAg
Ci0gICAgaWYgKCFzdG9yYWdlVHJhY2tlcikKLSAgICAgICAgc3RvcmFnZVRyYWNrZXIgPSBuZXcg
U3RvcmFnZVRyYWNrZXIoc3RvcmFnZVBhdGgpOwotICAgIAotICAgIHN0b3JhZ2VUcmFja2VyLT5t
X2NsaWVudCA9IGNsaWVudDsKLSAgICBzdG9yYWdlVHJhY2tlci0+bV9uZWVkc0luaXRpYWxpemF0
aW9uID0gdHJ1ZTsKLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6aW50ZXJuYWxJbml0aWFsaXpl
KCkKLXsKLSAgICBtX25lZWRzSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLQotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGV4dCBlbmNvZGluZyBtYXBzIGhh
dmUgYmVlbiBidWlsdCBvbiB0aGUgbWFpbiB0aHJlYWQsIGFzIHRoZSBTdG9yYWdlVHJhY2tlciB0
aHJlYWQgbWlnaHQgdHJ5IHRvIGRvIGl0IHRoZXJlIGluc3RlYWQuCi0gICAgLy8gRklYTUUgKDxy
ZGFyOi8vcHJvYmxlbS85MTI3ODE5Pik6IElzIHRoZXJlIGEgbW9yZSBleHBsaWNpdCB3YXkgb2Yg
ZG9pbmcgdGhpcyBiZXNpZGVzIGFjY2Vzc2luZyB0aGUgVVRGOEVuY29kaW5nPwotICAgIFVURjhF
bmNvZGluZygpOwotICAgIAotICAgIHN0b3JhZ2VUcmFja2VyLT5zZXRJc0FjdGl2ZSh0cnVlKTsK
LSAgICBzdG9yYWdlVHJhY2tlci0+bV90aHJlYWQtPnN0YXJ0KCk7ICAKLSAgICBzdG9yYWdlVHJh
Y2tlci0+aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKLX0KLQotU3RvcmFnZVRyYWNrZXImIFN0
b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkKLXsKLSAgICBpZiAoIXN0b3JhZ2VUcmFja2VyKQotICAg
ICAgICBzdG9yYWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tlcigiIik7Ci0gICAgaWYgKHN0
b3JhZ2VUcmFja2VyLT5tX25lZWRzSW5pdGlhbGl6YXRpb24pCi0gICAgICAgIHN0b3JhZ2VUcmFj
a2VyLT5pbnRlcm5hbEluaXRpYWxpemUoKTsKLSAgICAKLSAgICByZXR1cm4gKnN0b3JhZ2VUcmFj
a2VyOwotfQotCi1TdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBz
dG9yYWdlUGF0aCkKLSAgICA6IG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZVBhdGguaXNv
bGF0ZWRDb3B5KCkpCi0gICAgLCBtX2NsaWVudCgwKQotICAgICwgbV90aHJlYWQoc3RkOjptYWtl
X3VuaXF1ZTxTdG9yYWdlVGhyZWFkPigpKQotICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKLSAgICAs
IG1fbmVlZHNJbml0aWFsaXphdGlvbihmYWxzZSkKLSAgICAsIG1fU3RvcmFnZURhdGFiYXNlSWRs
ZUludGVydmFsKERlZmF1bHRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpCi17Ci19Ci0KLXZv
aWQgU3RvcmFnZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0KLSAg
ICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwot
Ci0gICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7Ci0KLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsKLSAgICAg
ICAgbV9vcmlnaW5TZXQuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1faXNBY3RpdmUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Ci19Ci0KLVN0
cmluZyBTdG9yYWdlVHJhY2tlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKTsKLX0KLQotU3Ry
aW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkKLXsKLSAgICBBU1NFUlQo
IW1fZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOwotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgIlN0b3JhZ2VUcmFja2VyLmRiIik7Ci19
Ci0KLXN0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQotewotICAgIGlmIChjcmVhdGVJZkRv
ZXNOb3RFeGlzdCkKLSAgICAgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhkaXJlY3RvcnlO
YW1lKGZpbGVOYW1lKSk7Ci0KLSAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxlTmFtZSk7Ci19Ci0K
LXZvaWQgU3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRv
ZXNOb3RFeGlzdCkKLXsKLSAgICBBU1NFUlQobV9pc0FjdGl2ZSk7Ci0gICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRl
ciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0KLSAgICBBU1NFUlQoIW1fZGF0YWJhc2VNdXRleC50cnlM
b2NrKCkpOwotCi0gICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0aCgpOwot
ICAgIAotICAgIGlmICghZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3Jl
YXRlSWZEb2VzTm90RXhpc3QpKSB7Ci0gICAgICAgIGlmIChjcmVhdGVJZkRvZXNOb3RFeGlzdCkK
LSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhYmFzZSBmaWxlICcl
cyciLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0YWJhc2VQ
YXRoLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBt
X2RhdGFiYXNlLmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKLSAgICAKLSAgICBpZiAoIW1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIk9yaWdpbnMiKSkgewotICAgICAgICBpZiAoIW1fZGF0YWJhc2Uu
ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChvcmlnaW4gVEVYVCBVTklRVUUg
T04gQ09ORkxJQ1QgUkVQTEFDRSwgcGF0aCBURVhUKTsiKSkKLSAgICAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOwotICAgIH0KLX0KLQotdm9pZCBT
dG9yYWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQoteyAgIAotICAgIGlmICgh
bV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKG1fdGhyZWFkKTsKLQotICAgIG1fdGhyZWFkLT5kaXNwYXRjaChb
dGhpc10gewotICAgICAgICBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6ZmluaXNoZWRJbXBvcnRpbmdPcmlnaW5JZGVudGlm
aWVycygpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0gICAg
aWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ09yaWdpbnMo
KTsKLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJz
KCkKLXsKLSAgICBBU1NFUlQobV9pc0FjdGl2ZSk7Ci0gICAgCi0gICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNl
TXV0ZXgpOwotCi0gICAgICAgIC8vIERvbid0IGZvcmNlIGNyZWF0aW9uIG9mIFN0b3JhZ2VUcmFj
a2VyJ3MgZGIganVzdCBiZWNhdXNlIGEgdHJhY2tlcgotICAgICAgICAvLyB3YXMgaW5pdGlhbGl6
ZWQuIEl0IHdpbGwgYmUgY3JlYXRlZCBpZiBsb2NhbCBzdG9yYWdlIGRicyBhcmUgZm91bmQKLSAg
ICAgICAgLy8gYnkgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJzZSgpIG9yIHRoZSBuZXh0
IHRpbWUgYSBsb2NhbCBzdG9yYWdlCi0gICAgICAgIC8vIGRiIGlzIGNyZWF0ZWQgYnkgU3RvcmFn
ZUFyZWFTeW5jLgotICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKLQotICAgICAg
ICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICAgICAgU1FMaXRlVHJhbnNhY3Rp
b25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotCi0gICAgICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3JpZ2luIEZS
T00gT3JpZ2lucyIpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
UmVzdWx0T2spIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJl
IHN0YXRlbWVudC4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyhtX29yaWdp
blNldE11dGV4KTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5z
dGVwKCkpID09IFNRTFJlc3VsdFJvdykKLSAgICAgICAgICAgICAgICAgICAgbV9vcmlnaW5TZXQu
YWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRE
b25lKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwg
b3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3luY0ZpbGVTeXN0ZW1B
bmRUcmFja2VyRGF0YWJhc2UoKTsKLSAgICAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2NsaWVudE11dGV4KTsKLQotICAgICAgICBpZiAobV9jbGllbnQpIHsKLSAgICAgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsKLSAgICAgICAgICAgIE9y
aWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7Ci0gICAgICAg
ICAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNo
RGlkTW9kaWZ5T3JpZ2luKCppdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgIGZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRpZmll
cnMoKTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNGaWxlU3lz
dGVtQW5kVHJhY2tlckRhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
LQotICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9u
Q291bnRlcjsKLQotICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+
IHBhdGhzOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRl
eCk7Ci0gICAgICAgIHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRo
LCAiKi5sb2NhbHN0b3JhZ2UiKTsKLSAgICB9Ci0KLSAgICAvLyBVc2UgYSBjb3B5IG9mIG1fb3Jp
Z2luU2V0IHRvIGZpbmQgZXhwaXJlZCBlbnRyaWVzIGFuZCB0byBzY2hlZHVsZSB0aGVpcgotICAg
IC8vIGRlbGV0aW9ucyBmcm9tIGRpc2sgYW5kIGZyb20gbV9vcmlnaW5TZXQuCi0gICAgT3JpZ2lu
U2V0IG9yaWdpblNldENvcHk7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9v
cmlnaW5TZXRNdXRleCk7Ci0gICAgICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fb3JpZ2luU2V0LmJlZ2luKCksIGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICBvcmlnaW5TZXRDb3B5LmFkZCgoKml0KS5pc29sYXRlZENv
cHkoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBtaXNzaW5nIFN0b3JhZ2VUcmFja2VyIHJl
Y29yZHMuCi0gICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKLSAgICBTdHJpbmcgZmlsZUV4dGVu
c2lvbiA9IEFTQ0lJTGl0ZXJhbCgiLmxvY2Fsc3RvcmFnZSIpOwotCi0gICAgZm9yIChWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpLCBlbmQgPSBwYXRocy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9ICpp
dDsKLQotICAgICAgICBpZiAocGF0aC5sZW5ndGgoKSA+IGZpbGVFeHRlbnNpb24ubGVuZ3RoKCkg
JiYgcGF0aC5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uLCB0cnVlKSkgewotICAgICAgICAgICAgU3Ry
aW5nIGZpbGUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7Ci0gICAgICAgICAgICBTdHJpbmcgb3Jp
Z2luSWRlbnRpZmllciA9IGZpbGUuc3Vic3RyaW5nKDAsIGZpbGUubGVuZ3RoKCkgLSBmaWxlRXh0
ZW5zaW9uLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghb3JpZ2luU2V0Q29weS5jb250YWlu
cyhvcmlnaW5JZGVudGlmaWVyKSkKLSAgICAgICAgICAgICAgICBzeW5jU2V0T3JpZ2luRGV0YWls
cyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsKLQotICAgICAgICAgICAgZm91bmRPcmlnaW5zLmFk
ZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERlbGV0ZSBz
dGFsZSBTdG9yYWdlVHJhY2tlciByZWNvcmRzLgotICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG9yaWdpblNldENvcHkuYmVnaW4oKSwgZW5kID0gb3JpZ2luU2V0Q29weS5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciA9ICppdDsKLSAgICAgICAgaWYgKGZvdW5kT3JpZ2lucy5jb250YWlucyhvcmlnaW5J
ZGVudGlmaWVyKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZyBvcmln
aW5JZGVudGlmaWVyQ29weSA9IG9yaWdpbklkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCk7Ci0gICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIG9yaWdpbklkZW50aWZpZXJDb3B5XSB7Ci0gICAg
ICAgICAgICBkZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyQ29weSk7
Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0T3JpZ2lu
RGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VGaWxlKQotewotICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0KLSAg
ICAgICAgaWYgKG1fb3JpZ2luU2V0LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVy
KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllckNvcHkgPSBvcmlnaW5JZGVu
dGlmaWVyLmlzb2xhdGVkQ29weSgpOwotICAgIFN0cmluZyBkYXRhYmFzZUZpbGVDb3B5ID0gZGF0
YWJhc2VGaWxlLmlzb2xhdGVkQ29weSgpOwotICAgIGF1dG8gZnVuY3Rpb24gPSBbdGhpcywgb3Jp
Z2luSWRlbnRpZmllckNvcHksIGRhdGFiYXNlRmlsZUNvcHldIHsKLSAgICAgICAgc3luY1NldE9y
aWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllckNvcHksIGRhdGFiYXNlRmlsZUNvcHkpOwotICAg
IH07Ci0KLSAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fdGhyZWFk
KTsKLSAgICAgICAgbV90aHJlYWQtPmRpc3BhdGNoKGZ1bmN0aW9uKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBGSVhNRTogVGhpcyB3ZWlyZCBwaW5nLXBvbmdpbmcgd2FzIGRvbmUgdG8gZml4
IGEgZGVhZGxvY2suIFdlIHNob3VsZCBmaWd1cmUgb3V0IGEgY2xlYW5lciB3YXkgdG8gYXZvaWQg
aXQgaW5zdGVhZC4KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgZnVuY3Rpb25dIHsK
LSAgICAgICAgICAgIG1fdGhyZWFkLT5kaXNwYXRjaChmdW5jdGlvbik7Ci0gICAgICAgIH0pOwot
ICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFpbHMoY29u
c3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRmlsZSkK
LXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIFNRTGl0ZVRyYW5zYWN0aW9u
SW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLQotICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOwotCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZSh0
cnVlKTsKLSAgICAKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlz
aCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWkoKS5k
YXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfSAKLSAgICAKLSAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7Ci0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRh
dGFiYXNlRmlsZSk7Ci0gICAgCi0gICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMUmVzdWx0
RG9uZSkKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdpbiAnJXMn
IGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsKLSAgICAg
ICAgaWYgKCFtX29yaWdpblNldC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKLSAgICAgICAg
ICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKLSAgICAgICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9y
aWdpbklkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6b3JpZ2lu
cyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIHJlc3VsdCkKLXsKLSAgICBBU1NFUlQo
bV9pc0FjdGl2ZSk7Ci0gICAgCi0gICAgaWYgKCFtX2lzQWN0aXZlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0KLSAgICBmb3Ig
KE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigpLCBlbmQg
PSBtX29yaWdpblNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQuYXBw
ZW5kKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKCppdCkpOwot
fQotCi12b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKCkKLXsKLSAgICBBU1NF
UlQobV9pc0FjdGl2ZSk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
bV90aHJlYWQpOwotICAgIAotICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0g
ICAgICAgIHdpbGxEZWxldGVBbGxPcmlnaW5zKCk7Ci0gICAgICAgIG1fb3JpZ2luU2V0LmNsZWFy
KCk7Ci0gICAgfQotCi0gICAgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFsbE9yaWdp
bnMoKTsKLQotICAgIG1fdGhyZWFkLT5kaXNwYXRjaChbdGhpc10gewotICAgICAgICBzeW5jRGVs
ZXRlQWxsT3JpZ2lucygpOwotICAgIH0pOwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotc3RhdGlj
IHZvaWQgdHJ1bmNhdGVEYXRhYmFzZUZpbGUoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKQotewot
ICAgIHNxbGl0ZTNfZmlsZV9jb250cm9sKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgMCwgU1FM
SVRFX1RSVU5DQVRFX0RBVEFCQVNFLCAwKTsKLX0KLSNlbmRpZgotCi12b2lkIFN0b3JhZ2VUcmFj
a2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2Fj
dGlvbkNvdW50ZXI7Ci0gICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRl
eCk7Ci0gICAgCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7Ci0gICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9NIE9yaWdp
bnMiKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpbnQgcmVzdWx0OwotICAgIHdoaWxlICgocmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIGlmICghY2Fu
RGVsZXRlT3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGRlbGV0ZUZpbGUoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkp
OwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NsaWVudE11
dGV4KTsKLSAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBmcm9tIHRo
ZSBkYXRhYmFzZS4iKTsKLQotICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0jaWYgUExB
VEZPUk0oSU9TKQotICAgICAgICB0cnVuY2F0ZURhdGFiYXNlRmlsZShtX2RhdGFiYXNlKTsKLSNl
bmRpZgotICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7Ci0gICAgfQotCi0jaWYgIVBMQVRGT1JN
KElPUykKLSAgICBpZiAoIWRlbGV0ZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKSkgewotICAg
ICAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSBpdCBpcyBub3QgcG9zc2libGUgdG8gZGVsZXRlIHRo
ZSBkYXRhYmFzZSBmaWxlIChlLmcgc29tZSBvdGhlciBwcm9ncmFtCi0gICAgICAgIC8vIGxpa2Ug
YSB2aXJ1cyBzY2FubmVyIGlzIGFjY2Vzc2luZyBpdCksIG1ha2Ugc3VyZSB0byByZW1vdmUgYWxs
IGVudHJpZXMuCi0gICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOwotICAgICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIE9y
aWdpbnMiKTsKLSAgICAgICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVz
dWx0T2spIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgZGVsZXRp
b24gb2YgYWxsIG9yaWdpbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGFsbCBvcmlnaW5zIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVsZXRlRW1wdHlE
aXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdG9y
YWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKQotewotICAgIGRlbGV0ZU9yaWdpbigmU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOwotfQotCi12
b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
LXsgICAgCi0gICAgQVNTRVJUKG1faXNBY3RpdmUpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKG1fdGhyZWFkKTsKLSAgICAKLSAgICBpZiAoIW1faXNBY3RpdmUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEJlZm9yZSBkZWxldGluZyBkYXRhYmFzZSwgd2UgbmVl
ZCB0byBjbGVhciBpbi1tZW1vcnkgbG9jYWwgc3RvcmFnZSBkYXRhCi0gICAgLy8gaW4gU3RvcmFn
ZUFyZWEsIGFuZCB0byBjbG9zZSB0aGUgU3RvcmFnZUFyZWEgZGIuIEl0J3MgcG9zc2libGUgZm9y
IGFuCi0gICAgLy8gaXRlbSB0byBiZSBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBjbG9zaW5nIHRo
ZSBkYiBhbmQgY2F1c2UgU3RvcmFnZUFyZWFTeW5jCi0gICAgLy8gdG8gcmVvcGVuIHRoZSBkYiBi
ZWZvcmUgdGhlIGRiIGlzIGRlbGV0ZWQgYnkgYSBTdG9yYWdlVHJhY2tlciB0aHJlYWQuCi0gICAg
Ly8gSW4gdGhpcyBjYXNlLCByZW9wZW5pbmcgdGhlIGRiIGluIFN0b3JhZ2VBcmVhU3luYyB3aWxs
IGNhbmNlbCBhIHBlbmRpbmcKLSAgICAvLyBTdG9yYWdlVHJhY2tlciBkYiBkZWxldGlvbi4KLSAg
ICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKG9yaWdpbik7Ci0KLSAgICBT
dHJpbmcgb3JpZ2luSWQgPSBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOwotICAgIAotICAg
IHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOwotICAgICAg
ICB3aWxsRGVsZXRlT3JpZ2luKG9yaWdpbklkKTsKLSAgICAgICAgbV9vcmlnaW5TZXQucmVtb3Zl
KG9yaWdpbklkKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgb3JpZ2luSWRDb3B5ID0gb3JpZ2luSWQu
aXNvbGF0ZWRDb3B5KCk7Ci0gICAgbV90aHJlYWQtPmRpc3BhdGNoKFt0aGlzLCBvcmlnaW5JZENv
cHldIHsKLSAgICAgICAgc3luY0RlbGV0ZU9yaWdpbihvcmlnaW5JZENvcHkpOwotICAgIH0pOwot
fQotCi12b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAg
IFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRl
cjsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOwotICAgIAotICAg
IGlmICghY2FuRGVsZXRlT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQXR0ZW1wdGVkIHRvIGRlbGV0ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMgYmVpbmcg
Y3JlYXRlZFxuIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7Ci0gICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcg
cGF0aCA9IGRhdGFiYXNlUGF0aEZvck9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0IGEgcmVx
dWVzdCBmcm9tIHRoZSBBUEkgdG8gZGVsZXRlIHRoZSBzdG9yYWdlIGZvciBhbiBvcmlnaW4gdGhh
dAotICAgICAgICAvLyBoYXMgbm8gc3VjaCBzdG9yYWdlLgotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
IkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iKTsKLSAgICBpZiAoZGVsZXRlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRlbnRpZmll
ci5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGVsZXRlU3Rh
dGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmICghZGVsZXRlU3Rh
dGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
ZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIuYXNjaWko
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZGVsZXRlRmlsZShwYXRo
KTsKLSAgICAKLSAgICBib29sIHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IGZhbHNlOwotICAg
IHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOwotICAgICAg
ICBtX29yaWdpblNldC5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAgIHNob3VsZERl
bGV0ZVRyYWNrZXJGaWxlcyA9IG1fb3JpZ2luU2V0LmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoc2hvdWxkRGVsZXRlVHJhY2tlckZpbGVzKSB7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAg
ICB0cnVuY2F0ZURhdGFiYXNlRmlsZShtX2RhdGFiYXNlKTsKLSNlbmRpZgotICAgICAgICBtX2Rh
dGFiYXNlLmNsb3NlKCk7Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgZGVsZXRlRmlsZSh0
cmFja2VyRGF0YWJhc2VQYXRoKCkpOwotICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9yeShtX3N0
b3JhZ2VEaXJlY3RvcnlQYXRoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fY2xpZW50TXV0ZXgpOwotICAgICAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luSWRlbnRp
Zmllcik7Ci0gICAgfQotfQotICAgIAotdm9pZCBTdG9yYWdlVHJhY2tlcjo6d2lsbERlbGV0ZUFs
bE9yaWdpbnMoKQotewotICAgIEFTU0VSVCghbV9vcmlnaW5TZXRNdXRleC50cnlMb2NrKCkpOwot
Ci0gICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsK
LSAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQo
KCppdCkuaXNvbGF0ZWRDb3B5KCkpOwotfQotCi12b2lkIFN0b3JhZ2VUcmFja2VyOjp3aWxsRGVs
ZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9vcmlnaW5TZXRNdXRleC50cnlMb2NrKCkp
OwotCi0gICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFkZChvcmlnaW5JZGVudGlmaWVyKTsKLX0K
LSAgICAKLWJvb2wgU3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcm
IG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlTXV0ZXgudHJ5TG9j
aygpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0gICAgcmV0
dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKTsKLX0K
LQotdm9pZCBTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4oY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKQotewotICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Ci0gICAgewot
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Ci0gICAgICAgIGlm
ICghbV9vcmlnaW5zQmVpbmdEZWxldGVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fb3JpZ2lu
c0JlaW5nRGVsZXRlZC5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgfQotfQotCi1ib29s
IFN0b3JhZ2VUcmFja2VyOjppc0FjdGl2ZSgpCi17Ci0gICAgcmV0dXJuIG1faXNBY3RpdmU7Ci19
Ci0KLXZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldElzQWN0aXZlKGJvb2wgZmxhZykKLXsKLSAgICBt
X2lzQWN0aXZlID0gZmxhZzsKLX0KLSAgICAKLVN0cmluZyBTdG9yYWdlVHJhY2tlcjo6ZGF0YWJh
c2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICBB
U1NFUlQoIW1fZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOwotICAgIEFTU0VSVChtX2lzQWN0aXZl
KTsKLSAgICAKLSAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRy
YW5zYWN0aW9uQ291bnRlcjsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRoU3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8iKTsKLSAg
ICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Igb3JpZ2lu
ICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIH0KLSAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklk
ZW50aWZpZXIpOwotICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsKLSAgICBp
ZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKLX0KLSAgICAKLWxvbmcg
bG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlza1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4pCi17Ci0gICAgaWYgKCFtX2lzQWN0aXZlKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOwotCi0gICAgU3RyaW5nIHBhdGgg
PSBkYXRhYmFzZVBhdGhGb3JPcmlnaW4ob3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0g
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGxvbmcgbG9u
ZyBzaXplOwotICAgIHJldHVybiBnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSA/IHNpemUgOiAwOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VU
cmFja2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNmFjNzc4MjNmZmYyNGE0
ZWM4ZTgyN2Y5OTg1ZDM0MDJhMWYzNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0b3Jh
Z2VUcmFja2VyX2gKLSNkZWZpbmUgU3RvcmFnZVRyYWNrZXJfaAotCi0jaW5jbHVkZSAiU1FMaXRl
RGF0YWJhc2UuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU3RvcmFnZVRh
c2s7Ci1jbGFzcyBTdG9yYWdlVGhyZWFkOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBT
dG9yYWdlVHJhY2tlckNsaWVudDsgICAgCi0KLWNsYXNzIFN0b3JhZ2VUcmFja2VyIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlVHJhY2tlcik7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU3RvcmFnZVRyYWNrZXJDbGll
bnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RvcmFnZVRyYWNrZXImIHRyYWNrZXIo
KTsKLQotICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYpOwot
ICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0
T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VGaWxlKTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZUFs
bE9yaWdpbnMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRlbGV0ZU9yaWdpbihTZWN1cml0
eU9yaWdpbiopOwotICAgIHZvaWQgZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG9yaWdpbnMo
VmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+JiByZXN1bHQpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIGxvbmcgbG9uZyBkaXNrVXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKLSAgICAK
LSAgICB2b2lkIGNhbmNlbERlbGV0aW5nT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
Zmllcik7Ci0gICAgCi0gICAgYm9vbCBpc0FjdGl2ZSgpOwotCi0gICAgZG91YmxlIHN0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbCgpIHsgcmV0dXJuIG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVy
dmFsOyB9Ci0gICAgdm9pZCBzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoZG91YmxlIGlu
dGVydmFsKSB7IG1fU3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsID0gaW50ZXJ2YWw7IH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJhc2Uo
KTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTdG9yYWdlVHJhY2tlcihjb25zdCBTdHJpbmcm
IHN0b3JhZ2VQYXRoKTsKLQotICAgIHZvaWQgaW50ZXJuYWxJbml0aWFsaXplKCk7Ci0KLSAgICBT
dHJpbmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpOwotICAgIHZvaWQgb3BlblRyYWNrZXJEYXRhYmFz
ZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKLQotICAgIHZvaWQgaW1wb3J0T3JpZ2luSWRl
bnRpZmllcnMoKTsKLSAgICB2b2lkIGZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRlbnRpZmllcnMo
KTsKLSAgICAKLSAgICB2b2lkIGRlbGV0ZVRyYWNrZXJGaWxlcygpOwotICAgIFN0cmluZyBkYXRh
YmFzZVBhdGhGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKLQotICAg
IGJvb2wgY2FuRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7Ci0g
ICAgdm9pZCB3aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7
Ci0gICAgdm9pZCB3aWxsRGVsZXRlQWxsT3JpZ2lucygpOwotCi0gICAgdm9pZCBvcmlnaW5GaWxl
UGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKLSAgICAKLSAgICB2b2lkIHNldElzQWN0aXZl
KGJvb2wpOwotCi0gICAgLy8gU3luYyB0byBkaXNrIG9uIGJhY2tncm91bmQgdGhyZWFkLgotICAg
IHZvaWQgc3luY0RlbGV0ZUFsbE9yaWdpbnMoKTsKLSAgICB2b2lkIHN5bmNEZWxldGVPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKLSAgICB2b2lkIHN5bmNTZXRPcmlnaW5E
ZXRhaWxzKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZUZpbGUpOwotICAgIHZvaWQgc3luY0ltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Ci0KLSAg
ICAvLyBNdXRleCBmb3IgbV9kYXRhYmFzZSBhbmQgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC4KLSAg
ICBNdXRleCBtX2RhdGFiYXNlTXV0ZXg7Ci0gICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsK
LSAgICBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKLQotICAgIE11dGV4IG1fY2xpZW50
TXV0ZXg7Ci0gICAgU3RvcmFnZVRyYWNrZXJDbGllbnQqIG1fY2xpZW50OwotCi0gICAgLy8gR3Vh
cmQgZm9yIG1fb3JpZ2luU2V0IGFuZCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuCi0gICAgTXV0ZXgg
bV9vcmlnaW5TZXRNdXRleDsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nPiBPcmlnaW5TZXQ7
Ci0gICAgT3JpZ2luU2V0IG1fb3JpZ2luU2V0OwotICAgIE9yaWdpblNldCBtX29yaWdpbnNCZWlu
Z0RlbGV0ZWQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZVRocmVhZD4gbV90aHJlYWQ7
Ci0gICAgCi0gICAgYm9vbCBtX2lzQWN0aXZlOwotICAgIGJvb2wgbV9uZWVkc0luaXRpYWxpemF0
aW9uOwotICAgIGRvdWJsZSBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbDsKLX07Ci0gICAg
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTdG9yYWdlVHJhY2tlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTYwMjlmYTU0OTYzYjFlNjA4MzJjYmM0NzYwZmIwYTNl
MTVmOGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlckNsaWVudC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0gCi0jaWZuZGVmIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50X2gKLSNkZWZpbmUgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAotCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdG9yYWdlVHJhY2tlckNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3RvcmFnZVRyYWNrZXJDbGllbnQoKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdP
cmlnaW5zKCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
U3RvcmFnZVRyYWNrZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZUFyZWFJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wOGVhMTY3NmVjNjZjZjRmNTZhZDE4YjVjNGY0OWRkZGI3OWZj
YTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VBcmVh
SW1wbC5jcHAKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCisKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYVN5bmMuaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKKyNp
bmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdG9y
YWdlQXJlYUltcGw6On5TdG9yYWdlQXJlYUltcGwoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Cit9CisKK2lubGluZSBTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIsIHVuc2lnbmVkIHF1b3Rh
KQorICAgIDogbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJpdHlPcmln
aW4ob3JpZ2luKQorICAgICwgbV9zdG9yYWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSkp
CisgICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKKyNpZm5kZWYgTkRFQlVH
CisgICAgLCBtX2lzU2h1dGRvd24oZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWNjZXNzQ291bnQo
MCkKKyAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlzLCAmU3RvcmFnZUFyZWFJbXBsOjpj
bG9zZURhdGFiYXNlVGltZXJGaXJlZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsK
KyAgICAKKyAgICAvLyBBY2Nlc3NpbmcgdGhlIHNoYXJlZCBnbG9iYWwgU3RvcmFnZVRyYWNrZXIg
d2hlbiBhIFN0b3JhZ2VBcmVhIGlzIGNyZWF0ZWQgCisgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSB0
cmFja2VyIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnlvbmUgYWN0dWFsbHkgbmVl
ZHMgdG8gdXNlIGl0LgorICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCk7Cit9CisKK1JlZjxT
dG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3Jh
Z2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlciwgdW5zaWduZWQgcXVvdGEpCit7CisgICAgUmVm
PFN0b3JhZ2VBcmVhSW1wbD4gYXJlYSA9IGFkb3B0UmVmKCpuZXcgU3RvcmFnZUFyZWFJbXBsKHN0
b3JhZ2VUeXBlLCBvcmlnaW4sIHN5bmNNYW5hZ2VyLCBxdW90YSkpOworCisgICAgLy8gRklYTUU6
IElmIHRoZXJlJ3Mgbm8gYmFja2luZyBzdG9yYWdlIGZvciBMb2NhbFN0b3JhZ2UsIHRoZSBkZWZh
dWx0IFdlYktpdCBiZWhhdmlvciBzaG91bGQgYmUgdGhhdCBvZiBwcml2YXRlIGJyb3dzaW5nLAor
ICAgIC8vIG5vdCBzaWxlbnRseSBpZ25vcmluZyBpdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1ODk0CisgICAgaWYgKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2Vy
KSB7CisgICAgICAgIGFyZWEtPm1fc3RvcmFnZUFyZWFTeW5jID0gU3RvcmFnZUFyZWFTeW5jOjpj
cmVhdGUoYXJlYS0+bV9zdG9yYWdlU3luY01hbmFnZXIsIGFyZWEucHRyKCksIGFyZWEtPm1fc2Vj
dXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgQVNTRVJUKGFyZWEt
Pm1fc3RvcmFnZUFyZWFTeW5jKTsKKyAgICB9CisKKyAgICByZXR1cm4gYXJlYTsKK30KKworUGFz
c1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IFN0b3JhZ2VBcmVhSW1wbDo6Y29weSgpCit7CisgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFy
ZWFJbXBsKHRoaXMpKTsKK30KKworU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3Rv
cmFnZUFyZWFJbXBsKiBhcmVhKQorICAgIDogbV9zdG9yYWdlVHlwZShhcmVhLT5tX3N0b3JhZ2VU
eXBlKQorICAgICwgbV9zZWN1cml0eU9yaWdpbihhcmVhLT5tX3NlY3VyaXR5T3JpZ2luKQorICAg
ICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKKyAgICAsIG1fc3RvcmFnZVN5bmNN
YW5hZ2VyKGFyZWEtPm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVCVUcKKyAgICAs
IG1faXNTaHV0ZG93bihhcmVhLT5tX2lzU2h1dGRvd24pCisjZW5kaWYKKyAgICAsIG1fYWNjZXNz
Q291bnQoMCkKKyAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlzLCAmU3RvcmFnZUFyZWFJ
bXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zdG9yYWdl
TWFwKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7Cit9CisKK2Jvb2wgU3RvcmFnZUFyZWFJ
bXBsOjpjYW5BY2Nlc3NTdG9yYWdlKEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gZnJhbWUg
JiYgZnJhbWUtPnBhZ2UoKTsKK30KKworU3RvcmFnZVR5cGUgU3RvcmFnZUFyZWFJbXBsOjpzdG9y
YWdlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcmFnZVR5cGU7Cit9CisKK3Vuc2ln
bmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICByZXR1cm4gbV9zdG9y
YWdlTWFwLT5sZW5ndGgoKTsKK30KKworU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6a2V5KHVuc2ln
bmVkIGluZGV4KQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKKyAgICBibG9ja1VudGls
SW1wb3J0Q29tcGxldGUoKTsKKworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmtleShpbmRleCk7
Cit9CisKK1N0cmluZyBTdG9yYWdlQXJlYUltcGw6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7
CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpOworCisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShrZXkpOworfQorCit2b2lk
IFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKK3sKKyAg
ICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7Cisg
ICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICBTdHJpbmcgb2xkVmFsdWU7Cisg
ICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShrZXks
IHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOworICAgIGlmIChuZXdNYXApCisgICAg
ICAgIG1fc3RvcmFnZU1hcCA9IG5ld01hcC5yZWxlYXNlKCk7CisKKyAgICBpZiAocXVvdGFFeGNl
cHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChvbGRWYWx1ZSA9PSB2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0
b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIHZhbHVlKTsKKworICAgIGRp
c3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBzb3VyY2VGcmFtZSk7Cit9
CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJs
b2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIFJl
ZlB0cjxTdG9yYWdlTWFwPiBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBv
bGRWYWx1ZSk7CisgICAgaWYgKG5ld01hcCkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFw
LnJlbGVhc2UoKTsKKworICAgIGlmIChvbGRWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3lu
Yy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0cmluZygpKTsKKworICAgIGRpc3BhdGNoU3Rv
cmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Cit9CisKK3Zv
aWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSogc291cmNlRnJhbWUpCit7CisgICAgQVNT
RVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworCisg
ICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1
bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKKyAgICBtX3N0b3JhZ2VNYXAg
PSBTdG9yYWdlTWFwOjpjcmVhdGUocXVvdGEpOworCisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5j
KQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOworCisgICAgZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJh
bWUpOworfQorCitib29sIFN0b3JhZ2VBcmVhSW1wbDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXkpCit7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOworICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOworCisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKK30K
Kwordm9pZCBTdG9yYWdlQXJlYUltcGw6OmltcG9ydEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiBpdGVtcykKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisKKyAgICBt
X3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKGl0ZW1zKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUlt
cGw6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3Rv
cmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOworCisjaWZuZGVmIE5ERUJVRworICAg
IG1faXNTaHV0ZG93biA9IHRydWU7CisjZW5kaWYKK30KKwordm9pZCBTdG9yYWdlQXJlYUltcGw6
OmNsZWFyRm9yT3JpZ2luRGVsZXRpb24oKQoreworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
KyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKKyAgICBpZiAobV9zdG9yYWdl
TWFwLT5sZW5ndGgoKSkgeworICAgICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+
cXVvdGEoKTsKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3Rh
KTsKKyAgICB9CisKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKKyAgICAgICAgbV9zdG9y
YWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMt
PnNjaGVkdWxlQ2xvc2VEYXRhYmFzZSgpOworICAgIH0KK30KKyAgICAKK3ZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjpzeW5jKCkKK3sKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisgICAgYmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCisgICAgaWYgKG1fc3RvcmFnZUFyZWFTeW5jKQor
ICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVTeW5jKCk7Cit9CisKK3ZvaWQgU3Rv
cmFnZUFyZWFJbXBsOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdAoreworICAgIGlm
IChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpOworfQorCitzaXplX3QgU3RvcmFnZUFyZWFJbXBsOjptZW1vcnlC
eXRlc1VzZWRCeUNhY2hlKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBTdG9yYWdlQXJl
YUltcGw6OmluY3JlbWVudEFjY2Vzc0NvdW50KCkKK3sKKyAgICBtX2FjY2Vzc0NvdW50Kys7CisK
KyAgICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9jbG9z
ZURhdGFiYXNlVGltZXIuc3RvcCgpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6ZGVjcmVt
ZW50QWNjZXNzQ291bnQoKQoreworICAgIEFTU0VSVChtX2FjY2Vzc0NvdW50KTsKKyAgICAtLW1f
YWNjZXNzQ291bnQ7CisKKyAgICBpZiAoIW1fYWNjZXNzQ291bnQpIHsKKyAgICAgICAgaWYgKG1f
Y2xvc2VEYXRhYmFzZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2Nsb3NlRGF0YWJh
c2VUaW1lci5zdG9wKCk7CisgICAgICAgIG1fY2xvc2VEYXRhYmFzZVRpbWVyLnN0YXJ0T25lU2hv
dChTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCgp
KTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJG
aXJlZCgpCit7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgaWYgKG1fc3Rv
cmFnZUFyZWFTeW5jKQorICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbG9zZURh
dGFiYXNlKCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlSWZJZGxl
KCkKK3sKKyAgICBpZiAobV9jbG9zZURhdGFiYXNlVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAg
ICBBU1NFUlQoIW1fYWNjZXNzQ291bnQpOworICAgICAgICBtX2Nsb3NlRGF0YWJhc2VUaW1lci5z
dG9wKCk7CisKKyAgICAgICAgY2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJh
bWUqIHNvdXJjZUZyYW1lKQoreworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFn
ZSkKKyAgICAgICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VF
dmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIHNv
dXJjZUZyYW1lKTsKKyAgICBlbHNlCisgICAgICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG1fc2Vj
dXJpdHlPcmlnaW4uZ2V0KCksIHNvdXJjZUZyYW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5o
IGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBl
ZDkyZTc1YzFjYWYyOTIyMmU2NmFhODMwZDI4ZDdhOTRhMTViNTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKQEAgLTAsMCArMSw5OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U3RvcmFnZUFyZWFJbXBsX2gKKyNkZWZpbmUgU3RvcmFnZUFyZWFJbXBsX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZUFyZWEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZWN1cml0
eU9yaWdpbjsKK2NsYXNzIFN0b3JhZ2VNYXA7CitjbGFzcyBTdG9yYWdlQXJlYVN5bmM7CisKK2Ns
YXNzIFN0b3JhZ2VBcmVhSW1wbCA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxTdG9yYWdlQXJlYUltcGw+IGNyZWF0ZShTdG9yYWdlVHlwZSwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgdW5zaWdu
ZWQgcXVvdGEpOworICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVhSW1wbCgpOworCisgICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFN0cmluZyBrZXkodW5z
aWduZWQgaW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKEZyYW1lKiBzb3Vy
Y2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1
b3RhRXhjZXB0aW9uKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShGcmFt
ZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBi
b29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqIHNvdXJjZUZyYW1lKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCkgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgaW5jcmVtZW50QWNjZXNzQ291bnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVj
cmVtZW50QWNjZXNzQ291bnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VEYXRhYmFzZUlmSWRs
ZSgpOworCisgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+IGNvcHkoKTsKKyAgICB2b2lk
IGNsb3NlKCk7CisKKyAgICAvLyBPbmx5IGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQu
CisgICAgdm9pZCBpbXBvcnRJdGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRl
bXMpOworCisgICAgLy8gVXNlZCB0byBjbGVhciBhIFN0b3JhZ2VBcmVhIGFuZCBjbG9zZSBkYiBi
ZWZvcmUgYmFja2luZyBkYiBmaWxlIGlzIGRlbGV0ZWQuCisgICAgdm9pZCBjbGVhckZvck9yaWdp
bkRlbGV0aW9uKCk7CisKKyAgICB2b2lkIHN5bmMoKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdl
QXJlYUltcGwoU3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVm
UHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIHVuc2lnbmVkIHF1b3RhKTsKKyAgICBleHBsaWNpdCBT
dG9yYWdlQXJlYUltcGwoU3RvcmFnZUFyZWFJbXBsKik7CisKKyAgICB2b2lkIGJsb2NrVW50aWxJ
bXBvcnRDb21wbGV0ZSgpIGNvbnN0OworICAgIHZvaWQgY2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQo
KTsKKworICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSk7CisKKyAgICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKKyAgICBSZWZQdHI8U3RvcmFnZU1hcD4g
bV9zdG9yYWdlTWFwOworCisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gbV9zdG9yYWdlQXJl
YVN5bmM7CisgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zdG9yYWdlU3luY01hbmFn
ZXI7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBtX2lzU2h1dGRvd247CisjZW5kaWYKKyAg
ICB1bnNpZ25lZCBtX2FjY2Vzc0NvdW50OworICAgIFRpbWVyIG1fY2xvc2VEYXRhYmFzZVRpbWVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZUFyZWFJ
bXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMu
Y3BwIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDFkOWU5MmY1YjE2NWRlNGRkYmM0YzkzZWIyNjBkM2Q0ODNjZTM5YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC0wLDAg
KzEsNTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgorCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFJbXBsLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiU3RvcmFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VkZGVuVGVybWluYXRpb24uaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIElmIHRoZSBTdG9y
YWdlQXJlYSB1bmRlcmdvZXMgcmFwaWQgY2hhbmdlcywgZG9uJ3Qgc3luYyBlYWNoIGNoYW5nZSB0
byBkaXNrLgorLy8gSW5zdGVhZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBpdGVtcyB0byBzeW5jIGFu
ZCBhY3R1YWxseSBkbyB0aGUgc3luYyBhdCB0aGUgZm9sbG93aW5nIGludGVydmFsLgorc3RhdGlj
IGNvbnN0IGRvdWJsZSBTdG9yYWdlU3luY0ludGVydmFsID0gMS4wOworCisvLyBBIHNhbmUgbGlt
aXQgb24gaG93IG1hbnkgaXRlbXMgd2UnbGwgc2NoZWR1bGUgdG8gc3luYyBhbGwgYXQgb25jZS4g
IFRoaXMgbWFrZXMgaXQKKy8vIG11Y2ggaGFyZGVyIHRvIHN0YXJ2ZSB0aGUgcmVzdCBvZiBMb2Nh
bFN0b3JhZ2UgYW5kIHRoZSBPUydzIElPIHN1YnN5c3RlbSBpbiBnZW5lcmFsLgorc3RhdGljIGNv
bnN0IGludCBNYXhpdW1JdGVtc1RvU3luYyA9IDEwMDsKKworaW5saW5lIFN0b3JhZ2VBcmVhU3lu
Yzo6U3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdl
U3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpCisgICAgOiBtX3N5bmNUaW1lcigqdGhpcywg
JlN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQpCisgICAgLCBtX2l0ZW1zQ2xlYXJlZChm
YWxzZSkKKyAgICAsIG1fZmluYWxTeW5jU2NoZWR1bGVkKGZhbHNlKQorICAgICwgbV9zdG9yYWdl
QXJlYShzdG9yYWdlQXJlYSkKKyAgICAsIG1fc3luY01hbmFnZXIoc3RvcmFnZVN5bmNNYW5hZ2Vy
KQorICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyLmlzb2xhdGVk
Q29weSgpKQorICAgICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNlKQorICAgICwgbV9z
eW5jU2NoZWR1bGVkKGZhbHNlKQorICAgICwgbV9zeW5jSW5Qcm9ncmVzcyhmYWxzZSkKKyAgICAs
IG1fZGF0YWJhc2VPcGVuRmFpbGVkKGZhbHNlKQorICAgICwgbV9zeW5jQ2xvc2VEYXRhYmFzZShm
YWxzZSkKKyAgICAsIG1faW1wb3J0Q29tcGxldGUoZmFsc2UpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9zdG9yYWdlQXJlYSk7CisgICAgQVNTRVJUKG1fc3lu
Y01hbmFnZXIpOworCisgICAgLy8gRklYTUU6IElmIGl0IGNhbid0IGltcG9ydCwgdGhlbiB0aGUg
ZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2lu
ZywKKyAgICAvLyBub3Qgc2lsZW50bHkgaWdub3JpbmcgaXQuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg5NAorICAgIFJlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IHBy
b3RlY3Rvcih0aGlzKTsKKyAgICBtX3N5bmNNYW5hZ2VyLT5kaXNwYXRjaChbcHJvdGVjdG9yXSB7
CisgICAgICAgIHByb3RlY3Rvci0+cGVyZm9ybUltcG9ydCgpOworICAgIH0pOworfQorCitSZWY8
U3RvcmFnZUFyZWFTeW5jPiBTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShQYXNzUmVmUHRyPFN0b3Jh
Z2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
SW1wbD4gc3RvcmFnZUFyZWEsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VBcmVhU3luYyhzdG9yYWdlU3luY01hbmFn
ZXIsIHN0b3JhZ2VBcmVhLCBkYXRhYmFzZUlkZW50aWZpZXIpKTsKK30KKworU3RvcmFnZUFyZWFT
eW5jOjp+U3RvcmFnZUFyZWFTeW5jKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKG1fZmluYWxT
eW5jU2NoZWR1bGVkKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlRmluYWxT
eW5jKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8vIEZJWE1FOiBXZSBk
byB0aGlzIHRvIGF2b2lkIHJhY2VzLCBidXQgaXQnZCBiZSBiZXR0ZXIgdG8gbWFrZSB0aGluZ3Mg
c2FmZSB3aXRob3V0IGJsb2NraW5nLgorICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwor
ICAgIG1fc3RvcmFnZUFyZWEgPSAwOyAgLy8gVGhpcyBpcyBkb25lIGluIGJsb2NrVW50aWxJbXBv
cnRDb21wbGV0ZSgpIGJ1dCB0aGlzIGlzIGhlcmUgYXMgYSBmb3JtIG9mIGRvY3VtZW50YXRpb24g
dGhhdCB3ZSBtdXN0IGJlIGFic29sdXRlbHkgc3VyZSB0aGUgcmVmIGNvdW50IGN5Y2xlIGlzIGJy
b2tlbi4KKworICAgIGlmIChtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3N5bmNU
aW1lci5zdG9wKCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFs
YW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCisgICAg
ICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgorICAgICAgICBkaXNhYmxlU3VkZGVuVGVy
bWluYXRpb24oKTsKKyAgICB9CisgICAgLy8gRklYTUU6IFRoaXMgaXMgc3luY2hyb25vdXMuIFdl
IHNob3VsZCBkbyBpdCBvbiB0aGUgYmFja2dyb3VuZCBwcm9jZXNzLCBidXQKKyAgICAvLyB3ZSBz
aG91bGQgZG8gaXQgc2FmZWx5LgorICAgIG1fZmluYWxTeW5jU2NoZWR1bGVkID0gdHJ1ZTsKKyAg
ICBzeW5jVGltZXJGaXJlZCgpOworCisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gcHJvdGVj
dG9yKHRoaXMpOworICAgIG1fc3luY01hbmFnZXItPmRpc3BhdGNoKFtwcm90ZWN0b3JdIHsKKyAg
ICAgICAgcHJvdGVjdG9yLT5kZWxldGVFbXB0eURhdGFiYXNlKCk7CisgICAgfSk7Cit9CisKK3Zv
aWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUl0ZW1Gb3JTeW5jKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKCFtX2ZpbmFsU3luY1NjaGVkdWxlZCk7CisKKyAgICBtX2NoYW5nZWRJdGVtcy5z
ZXQoa2V5LCB2YWx1ZSk7CisgICAgaWYgKCFtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAg
ICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKKworICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1
ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlv
bi4KKyAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAgfQorfQorCit2b2lk
IFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbGVhcigpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fZmluYWxTeW5jU2NoZWR1bGVkKTsKKworICAgIG1fY2hh
bmdlZEl0ZW1zLmNsZWFyKCk7CisgICAgbV9pdGVtc0NsZWFyZWQgPSB0cnVlOworICAgIGlmICgh
bV9zeW5jVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX3N5bmNUaW1lci5zdGFydE9uZVNo
b3QoU3RvcmFnZVN5bmNJbnRlcnZhbCk7CisKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBi
YWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAg
ICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIGRpc2FibGVTdWRkZW5U
ZXJtaW5hdGlvbigpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxl
Q2xvc2VEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NF
UlQoIW1fZmluYWxTeW5jU2NoZWR1bGVkKTsKKworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4o
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IHRydWU7Cisg
ICAgCisgICAgaWYgKCFtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIG1fc3luY1Rp
bWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVu
VGVybWluYXRpb24gaW4gdGhlCisgICAgICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgor
ICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgU3Rv
cmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGJvb2wgcGFydGlhbFN5bmMgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3N5bmNMb2NrKTsKKworICAgICAgICAvLyBEbyBub3Qgc2NoZWR1
bGUgYW5vdGhlciBzeW5jIGlmIHdlJ3JlIHN0aWxsIHRyeWluZyB0byBjb21wbGV0ZSB0aGUKKyAg
ICAgICAgLy8gcHJldmlvdXMgb25lLiBCdXQsIGlmIHdlJ3JlIHNodXR0aW5nIGRvd24sIHNjaGVk
dWxlIGl0IGFueXdheS4KKyAgICAgICAgaWYgKG1fc3luY0luUHJvZ3Jlc3MgJiYgIW1fZmluYWxT
eW5jU2NoZWR1bGVkKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fc3luY1RpbWVyLmlzQWN0aXZl
KCkpOworICAgICAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVTaG90KFN0b3JhZ2VTeW5jSW50
ZXJ2YWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
aXRlbXNDbGVhcmVkKSB7CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuY2xlYXIoKTsK
KyAgICAgICAgICAgIG1fY2xlYXJJdGVtc1doaWxlU3luY2luZyA9IHRydWU7CisgICAgICAgICAg
ICBtX2l0ZW1zQ2xlYXJlZCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGNoYW5nZWRfaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdp
bigpOworICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgY2hhbmdlZF9l
bmQgPSBtX2NoYW5nZWRJdGVtcy5lbmQoKTsKKyAgICAgICAgZm9yIChpbnQgY291bnQgPSAwOyBj
aGFuZ2VkX2l0ICE9IGNoYW5nZWRfZW5kOyArK2NvdW50LCArK2NoYW5nZWRfaXQpIHsKKyAgICAg
ICAgICAgIGlmIChjb3VudCA+PSBNYXhpdW1JdGVtc1RvU3luYyAmJiAhbV9maW5hbFN5bmNTY2hl
ZHVsZWQpIHsKKyAgICAgICAgICAgICAgICBwYXJ0aWFsU3luYyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5
bmMuc2V0KGNoYW5nZWRfaXQtPmtleS5pc29sYXRlZENvcHkoKSwgY2hhbmdlZF9pdC0+dmFsdWUu
aXNvbGF0ZWRDb3B5KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnRpYWxTeW5jKSB7
CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBkbyB0aGUgZmFzdCBwYXRoIG9mIHNpbXBseSBjbGVh
cmluZyBhbGwgaXRlbXMsIHNvIHdlJ2xsIG5lZWQgdG8gbWFudWFsbHkKKyAgICAgICAgICAgIC8v
IHJlbW92ZSB0aGVtIG9uZSBieSBvbmUuIERvbmUgdW5kZXIgbG9jayBzaW5jZSBtX2l0ZW1zUGVu
ZGluZ1N5bmMgaXMgbW9kaWZpZWQgYnkKKyAgICAgICAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kIHRo
cmVhZC4KKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBwZW5k
aW5nX2l0ID0gbV9pdGVtc1BlbmRpbmdTeW5jLmJlZ2luKCk7CisgICAgICAgICAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgcGVuZGluZ19lbmQgPSBtX2l0ZW1zUGVuZGluZ1N5
bmMuZW5kKCk7CisgICAgICAgICAgICBmb3IgKDsgcGVuZGluZ19pdCAhPSBwZW5kaW5nX2VuZDsg
KytwZW5kaW5nX2l0KQorICAgICAgICAgICAgICAgIG1fY2hhbmdlZEl0ZW1zLnJlbW92ZShwZW5k
aW5nX2l0LT5rZXkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQp
IHsKKyAgICAgICAgICAgIG1fc3luY1NjaGVkdWxlZCA9IHRydWU7CisKKyAgICAgICAgICAgIC8v
IFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVy
bWluYXRpb24gaW4gdGhlCisgICAgICAgICAgICAvLyBwZXJmb3JtU3luYyBmdW5jdGlvbi4KKyAg
ICAgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworCisgICAgICAgICAgICBSZWZQ
dHI8U3RvcmFnZUFyZWFTeW5jPiBwcm90ZWN0b3IodGhpcyk7CisgICAgICAgICAgICBtX3N5bmNN
YW5hZ2VyLT5kaXNwYXRjaChbcHJvdGVjdG9yXSB7CisgICAgICAgICAgICAgICAgcHJvdGVjdG9y
LT5wZXJmb3JtU3luYygpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocGFydGlhbFN5bmMpIHsKKyAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmlzaCBzeW5j
aW5nLCB0aGVuIHdlIG5lZWQgdG8gZmluaXNoIHRoZSBqb2IgbGF0ZXIuCisgICAgICAgIEFTU0VS
VCghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSk7CisgICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0T25l
U2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGUg
Zm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxscyB0byBkaXNhYmxlU3VkZGVuVGVybWlu
YXRpb24gaW4gdGhlCisgICAgICAgIC8vIHNjaGVkdWxlSXRlbUZvclN5bmMsIHNjaGVkdWxlQ2xl
YXIsIGFuZCBzY2hlZHVsZUZpbmFsU3luYyBmdW5jdGlvbnMuCisgICAgICAgIGVuYWJsZVN1ZGRl
blRlcm1pbmF0aW9uKCk7CisKKyAgICAgICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKKyAgICB9
Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3BlbkRhdGFiYXNlUGFy
YW1UeXBlIG9wZW5pbmdTdHJhdGVneSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgIEFTU0VSVCghbV9kYXRhYmFz
ZU9wZW5GYWlsZWQpOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50
ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworCisgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBt
X3N5bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShtX2RhdGFiYXNlSWRlbnRpZmllcik7
CisKKyAgICBpZiAoIWZpbGVFeGlzdHMoZGF0YWJhc2VGaWxlbmFtZSkgJiYgb3BlbmluZ1N0cmF0
ZWd5ID09IFNraXBJZk5vbkV4aXN0ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGF0
YWJhc2VGaWxlbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGaWxlbmFtZSBm
b3IgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSBpcyBlbXB0eSAtIGNhbm5vdCBvcGVuIGZvciBwZXJz
aXN0ZW50IHN0b3JhZ2UiKTsKKyAgICAgICAgbWFya0ltcG9ydGVkKCk7CisgICAgICAgIG1fZGF0
YWJhc2VPcGVuRmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEEgU3RvcmFnZVRyYWNrZXIgdGhyZWFkIG1heSBoYXZlIGJlZW4gc2NoZWR1bGVkIHRvIGRlbGV0
ZSB0aGUgZGIgd2UncmUKKyAgICAvLyByZW9wZW5pbmcsIHNvIGNhbmNlbCBwb3NzaWJsZSBkZWxl
dGlvbi4KKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmNhbmNlbERlbGV0aW5nT3JpZ2lu
KG1fZGF0YWJhc2VJZGVudGlmaWVyKTsKKworICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFi
YXNlRmlsZW5hbWUpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJh
c2UgZmlsZSAlcyBmb3IgbG9jYWwgc3RvcmFnZSIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIG1hcmtJbXBvcnRlZCgpOworICAgICAgICBtX2RhdGFiYXNlT3BlbkZh
aWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtaWdyYXRlSXRlbVRh
YmxlSWZOZWVkZWQoKTsKKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSXRlbVRhYmxlIChrZXkgVEVYVCBVTklRVUUgT04gQ09O
RkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpKSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0YWJsZSBJdGVtVGFibGUgZm9y
IGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgbWFya0ltcG9ydGVkKCk7CisgICAgICAgIG1fZGF0
YWJhc2VPcGVuRmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0
b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc2V0T3JpZ2luRGV0YWlscyhtX2RhdGFiYXNlSWRlbnRp
ZmllciwgZGF0YWJhc2VGaWxlbmFtZSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjptaWdy
YXRlSXRlbVRhYmxlSWZOZWVkZWQoKQoreworICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0
cygiSXRlbVRhYmxlIikpCisgICAgICAgIHJldHVybjsKKworICAgIHsKKyAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUg
TElNSVQgMSIpOworICAgICAgICAvLyB0aGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQuCisg
ICAgICAgIGlmIChxdWVyeS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIGFsdGVyIHRhYmxlIGZvciBiYWNrd2FyZCBjb21wbGlh
bmNlLCBjaGFuZ2UgdGhlIHZhbHVlIHR5cGUgZnJvbSBURVhUIHRvIEJMT0IuCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7CisgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNU
UyBJdGVtVGFibGUyIiwKKyAgICAgICAgIkNSRUFURSBUQUJMRSBJdGVtVGFibGUyIChrZXkgVEVY
VCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05G
TElDVCBGQUlMKSIsCisgICAgICAgICJJTlNFUlQgSU5UTyBJdGVtVGFibGUyIFNFTEVDVCAqIGZy
b20gSXRlbVRhYmxlIiwKKyAgICAgICAgIkRST1AgVEFCTEUgSXRlbVRhYmxlIiwKKyAgICAgICAg
IkFMVEVSIFRBQkxFIEl0ZW1UYWJsZTIgUkVOQU1FIFRPIEl0ZW1UYWJsZSIsCisgICAgICAgIDAs
CisgICAgfTsKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Us
IGZhbHNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBjb21tYW5kc1tpXTsgKytpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZChjb21tYW5kc1tpXSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1p
Z3JhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIHdoZW4gZXhlY3V0aW5nOiAl
cyIsIGNvbW1hbmRzW2ldKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CisK
KyAgICAgICAgICAgIC8vIGZpbmFsbHkgaXQgd2lsbCB0cnkgdG8ga2VlcCBhIGJhY2t1cCBvZiBJ
dGVtVGFibGUgZm9yIHRoZSBmdXR1cmUgcmVzdG9yYXRpb24uCisgICAgICAgICAgICAvLyBOT1RJ
Q0U6IHRoaXMgd2lsbCBlc3NlbnRpYWxseSBERUxFVEUgdGhlIGN1cnJlbnQgZGF0YWJhc2UsIGJ1
dCB0aGF0J3MgYmV0dGVyCisgICAgICAgICAgICAvLyB0aGFuIGNvbnRpbnVhbGx5IGhpdHRpbmcg
dGhpcyBjYXNlIGFuZCBuZXZlciBiZWluZyBhYmxlIHRvIHVzZSB0aGUgbG9jYWwgc3RvcmFnZS4K
KyAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgZXZlciBoaXQsIGl0J3MgZGVmaW5pdGVseSBhIGJ1
Zy4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgaWYgKCFt
X2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJBTFRFUiBUQUJMRSBJdGVtVGFibGUgUkVOQU1FIFRP
IEJhY2t1cF9JdGVtVGFibGUiKSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBzYXZlIEl0ZW1UYWJsZSBhZnRlciBtaWdyYXRpb24gam9iIGZhaWxlZC4iKTsKKworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgp
OworfQorCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsK
KworICAgIG9wZW5EYXRhYmFzZShTa2lwSWZOb25FeGlzdGVudCk7CisgICAgaWYgKCFtX2RhdGFi
YXNlLmlzT3BlbigpKSB7CisgICAgICAgIG1hcmtJbXBvcnRlZCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
a2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gc2VsZWN0IGl0ZW1z
IGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CisgICAgICAgIG1hcmtJbXBvcnRl
ZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gaXRlbU1hcDsKKworICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgd2hpbGUg
KHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0
Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKKyAgICAgICAg
cmVzdWx0ID0gcXVlcnkuc3RlcCgpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0RG9uZSkgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJlYWRpbmcgaXRlbXMgZnJvbSBJ
dGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgbWFya0ltcG9ydGVkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3N0b3JhZ2VBcmVhLT5pbXBvcnRJdGVtcyhp
dGVtTWFwKTsKKworICAgIG1hcmtJbXBvcnRlZCgpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhU3lu
Yzo6bWFya0ltcG9ydGVkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2Nr
KTsKKyAgICBtX2ltcG9ydENvbXBsZXRlID0gdHJ1ZTsKKyAgICBtX2ltcG9ydENvbmRpdGlvbi5z
aWduYWwoKTsKK30KKworLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhbGxvdyB1
c2Ugb2YgU3RvcmFnZUFyZWFzIHdoaWxlIGl0J3MgaW1wb3J0aW5nICh3aGVuIHNhZmUgdG8gZG8g
c28pLgorLy8gQmxvY2tpbmcgZXZlcnl0aGluZyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRl
IGlzIGJ5IGZhciB0aGUgc2ltcGxlc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbywgYnV0CisvLyB0
aGVyZSBpcyBjZXJ0YWlubHkgcm9vbSBmb3Igc2FmZSBvcHRpbWl6YXRpb246IEtleS9sZW5ndGgg
d2lsbCBuZXZlciBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHN1Y2ggYW4KKy8vIG9wdGltaXphdGlv
biAoc2luY2UgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBjYW4gY2hhbmdlIGFzIGl0ZW1zIGFyZSBi
ZWluZyBhZGRlZCkuIEdldCBjYW4gcmV0dXJuIGFueQorLy8gaXRlbSBjdXJyZW50bHkgaW4gdGhl
IG1hcC4gR2V0L3JlbW92ZSBjYW4gd29yayB3aGV0aGVyIG9yIG5vdCBpdCdzIGluIHRoZSBtYXAs
IGJ1dCB3ZSdsbCBuZWVkIGEgbGlzdAorLy8gb2YgaXRlbXMgdGhlIGltcG9ydCBzaG91bGQgbm90
IG92ZXJ3cml0ZS4gQ2xlYXIgY2FuIGFsc28gd29yaywgYnV0IGl0J2xsIG5lZWQgdG8ga2lsbCB0
aGUgaW1wb3J0CisvLyBqb2IgZmlyc3QuCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6YmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAg
Ly8gRmFzdCBwYXRoLiBXZSBzZXQgbV9zdG9yYWdlQXJlYSB0byAwIG9ubHkgYWZ0ZXIgbV9pbXBv
cnRDb21wbGV0ZSBiZWluZyB0cnVlLgorICAgIGlmICghbV9zdG9yYWdlQXJlYSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7CisgICAgd2hp
bGUgKCFtX2ltcG9ydENvbXBsZXRlKQorICAgICAgICBtX2ltcG9ydENvbmRpdGlvbi53YWl0KG1f
aW1wb3J0TG9jayk7CisgICAgbV9zdG9yYWdlQXJlYSA9IDA7Cit9CisKK3ZvaWQgU3RvcmFnZUFy
ZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGl0ZW1zKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGl0
ZW1zLmlzRW1wdHkoKSAmJiAhY2xlYXJJdGVtcyAmJiAhbV9zeW5jQ2xvc2VEYXRhYmFzZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX2RhdGFiYXNlT3BlbkZhaWxlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpICYmIG1fc3luY0Nsb3NlRGF0YWJh
c2UpIHsKKyAgICAgICAgbV9zeW5jQ2xvc2VEYXRhYmFzZSA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBvcGVu
RGF0YWJhc2UoQ3JlYXRlSWZOb25FeGlzdGVudCk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbG9zaW5nIHRoaXMgZGIgYmVjYXVzZSBp
dCBpcyBhYm91dCB0byBiZSBkZWxldGVkIGJ5IFN0b3JhZ2VUcmFja2VyLgorICAgIC8vIFRoZSBk
ZWxldGUgd2lsbCBiZSBjYW5jZWxsZWQgaWYgU3RvcmFnZUFyZWFTeW5jIG5lZWRzIHRvIHJlb3Bl
biB0aGUgZGIKKyAgICAvLyB0byB3cml0ZSBuZXcgaXRlbXMgY3JlYXRlZCBhZnRlciB0aGUgcmVx
dWVzdCB0byBkZWxldGUgdGhlIGRiLgorICAgIGlmIChtX3N5bmNDbG9zZURhdGFiYXNlKSB7Cisg
ICAgICAgIG1fc3luY0Nsb3NlRGF0YWJhc2UgPSBmYWxzZTsKKyAgICAgICAgbV9kYXRhYmFzZS5j
bG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKworICAgIC8vIElm
IHRoZSBjbGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9y
ZSB3ZSB3cml0ZSBhbnkgbmV3IG9uZXMgaW4uCisgICAgaWYgKGNsZWFySXRlbXMpIHsKKyAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFi
bGUiKTsKKyAgICAgICAgaWYgKGNsZWFyLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBj
YW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHJlc3VsdCA9IGNsZWFyLnN0ZXAoKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBjbGVhciBhbGwgaXRlbXMgaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJh
c2UgLSAlaSIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBJ
dGVtVGFibGUgVkFMVUVTICg/LCA/KSIpOworICAgIGlmIChpbnNlcnQucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgaW5zZXJ0
IHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlKG1fZGF0
YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iKTsKKyAgICBpZiAocmVt
b3ZlLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBwcmVwYXJlIGRlbGV0ZSBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3Rv
cmFnZSBkYXRhYmFzZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGl0ZW1zLmVuZCgpOworCisgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBC
YXNlZCBvbiB0aGUgbnVsbC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0
aGVyIHRoaXMgaXMgYW4gaW5zZXJ0IG9yIGEgZGVsZXRlLgorICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQmIHF1ZXJ5ID0gaXQtPnZhbHVlLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OworCisgICAg
ICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5rZXkpOworCisgICAgICAgIC8vIElmIHRoZSBzZWNv
bmQgYXJndW1lbnQgaXMgbm9uLW51bGwsIHdlJ3JlIGRvaW5nIGFuIGluc2VydCwgc28gYmluZCBp
dCBhcyB0aGUgdmFsdWUuCisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcXVlcnkuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKworICAgICAgICBpbnQgcmVzdWx0
ID0gcXVlcnkuc3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2Nh
bCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBxdWVyeS5yZXNldCgpOworICAgIH0KKyAgICB0cmFuc2FjdGlv
bi5jb21taXQoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1TeW5jKCkKK3sK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGJvb2wgY2xlYXJJdGVtczsKKyAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtczsKKyAgICB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3N5bmNMb2NrKTsKKworICAgICAgICBBU1NFUlQobV9zeW5jU2NoZWR1bGVk
KTsKKworICAgICAgICBjbGVhckl0ZW1zID0gbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nOworICAg
ICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc3dhcChpdGVtcyk7CisKKyAgICAgICAgbV9jbGVhckl0
ZW1zV2hpbGVTeW5jaW5nID0gZmFsc2U7CisgICAgICAgIG1fc3luY1NjaGVkdWxlZCA9IGZhbHNl
OworICAgICAgICBtX3N5bmNJblByb2dyZXNzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzeW5jKGNs
ZWFySXRlbXMsIGl0ZW1zKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
c3luY0xvY2spOworICAgICAgICBtX3N5bmNJblByb2dyZXNzID0gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBkaXNhYmxlU3Vk
ZGVuVGVybWluYXRpb24gaW4gdGhlCisgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisg
ICAgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6
OmRlbGV0ZUVtcHR5RGF0YWJhc2UoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FM
aXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJdGVt
VGFibGUiKTsKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNvdW50IG51bWJlciBvZiByb3dzIGluIEl0ZW1UYWJs
ZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50
IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJvdykg
eworICAgICAgICBMT0dfRVJST1IoIk5vIHJlc3VsdHMgd2hlbiBjb3VudGluZyBudW1iZXIgb2Yg
cm93cyBpbiBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGludCBjb3VudCA9IHF1ZXJ5LmdldENvbHVtbkludCgwKTsKKyAgICBpZiAo
IWNvdW50KSB7CisgICAgICAgIHF1ZXJ5LmZpbmFsaXplKCk7CisgICAgICAgIG1fZGF0YWJhc2Uu
Y2xvc2UoKTsKKyAgICAgICAgaWYgKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuaXNBY3RpdmUo
KSkgeworICAgICAgICAgICAgU3RyaW5nSW1wbCogZGF0YWJhc2VJZGVudGlmaWVyQ29weSA9ICZt
X2RhdGFiYXNlSWRlbnRpZmllci5pbXBsKCktPmlzb2xhdGVkQ29weSgpLmxlYWtSZWYoKTsKKyAg
ICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2RhdGFiYXNlSWRlbnRpZmllckNvcHldIHsKKyAg
ICAgICAgICAgICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZU9yaWdpbldpdGhJ
ZGVudGlmaWVyKGRhdGFiYXNlSWRlbnRpZmllckNvcHkpOworICAgICAgICAgICAgICAgIGRhdGFi
YXNlSWRlbnRpZmllckNvcHktPmRlcmVmKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdl
ci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUobV9kYXRhYmFzZUlkZW50aWZpZXIpOworICAgICAgICAg
ICAgaWYgKCFkZWxldGVGaWxlKGRhdGFiYXNlRmlsZW5hbWUpKQorICAgICAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSBkYXRhYmFzZSBmaWxlICVzXG4iLCBkYXRhYmFzZUZp
bGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN0b3Jh
Z2VBcmVhU3luYzo6c2NoZWR1bGVTeW5jKCkKK3sKKyAgICBzeW5jVGltZXJGaXJlZCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZUFyZWFTeW5jLmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGZiZjc1YmEyNmZiZTU3Yzk3ZDBmMGQ2YWIxMGY3ZTkxMjk3YWE1
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlQXJlYVN5
bmMuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3RvcmFnZUFyZWFTeW5jX2gKKyNkZWZp
bmUgU3RvcmFnZUFyZWFTeW5jX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2Uu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRnJhbWU7CitjbGFzcyBTdG9yYWdlQXJlYUltcGw7CitjbGFzcyBTdG9yYWdlU3lu
Y01hbmFnZXI7CisKK2NsYXNzIFN0b3JhZ2VBcmVhU3luYyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxTdG9yYWdlQXJlYVN5bmM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0b3Jh
Z2VBcmVhU3luYz4gY3JlYXRlKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiwgUGFzc1Jl
ZlB0cjxTdG9yYWdlQXJlYUltcGw+LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7
CisgICAgflN0b3JhZ2VBcmVhU3luYygpOworCisgICAgdm9pZCBzY2hlZHVsZUZpbmFsU3luYygp
OworICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisKKyAgICB2b2lkIHNjaGVk
dWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwor
ICAgIHZvaWQgc2NoZWR1bGVDbGVhcigpOworICAgIHZvaWQgc2NoZWR1bGVDbG9zZURhdGFiYXNl
KCk7CisKKyAgICB2b2lkIHNjaGVkdWxlU3luYygpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VB
cmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4sIFBhc3NSZWZQdHI8U3RvcmFn
ZUFyZWFJbXBsPiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpOworCisgICAgVGlt
ZXIgbV9zeW5jVGltZXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9jaGFuZ2VkSXRl
bXM7CisgICAgYm9vbCBtX2l0ZW1zQ2xlYXJlZDsKKworICAgIGJvb2wgbV9maW5hbFN5bmNTY2hl
ZHVsZWQ7CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBtX3N0b3JhZ2VBcmVhOworICAg
IFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CisKKyAgICAvLyBUaGUg
ZGF0YWJhc2UgaGFuZGxlIHdpbGwgb25seSBldmVyIGJlIG9wZW5lZCBhbmQgdXNlZCBvbiB0aGUg
YmFja2dyb3VuZCB0aHJlYWQuCisgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKworICAg
IC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hyb25p
emF0aW9uIGlzc3Vlcy4KK3B1YmxpYzoKKyAgICAvLyBDYWxsZWQgZnJvbSB0aGUgYmFja2dyb3Vu
ZCB0aHJlYWQKKyAgICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsKKyAgICB2b2lkIHBlcmZvcm1TeW5j
KCk7CisgICAgdm9pZCBkZWxldGVFbXB0eURhdGFiYXNlKCk7CisKK3ByaXZhdGU6CisgICAgZW51
bSBPcGVuRGF0YWJhc2VQYXJhbVR5cGUgeworICAgICAgICBDcmVhdGVJZk5vbkV4aXN0ZW50LAor
ICAgICAgICBTa2lwSWZOb25FeGlzdGVudAorICAgIH07CisKKyAgICB2b2lkIHN5bmNUaW1lckZp
cmVkKCk7CisgICAgdm9pZCBvcGVuRGF0YWJhc2UoT3BlbkRhdGFiYXNlUGFyYW1UeXBlIG9wZW5p
bmdTdHJhdGVneSk7CisgICAgdm9pZCBzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zKTsKKworICAgIGNvbnN0IFN0cmluZyBtX2RhdGFiYXNl
SWRlbnRpZmllcjsKKworICAgIE11dGV4IG1fc3luY0xvY2s7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbV9pdGVtc1BlbmRpbmdTeW5jOworICAgIGJvb2wgbV9jbGVhckl0ZW1zV2hpbGVT
eW5jaW5nOworICAgIGJvb2wgbV9zeW5jU2NoZWR1bGVkOworICAgIGJvb2wgbV9zeW5jSW5Qcm9n
cmVzczsKKyAgICBib29sIG1fZGF0YWJhc2VPcGVuRmFpbGVkOworCisgICAgYm9vbCBtX3N5bmND
bG9zZURhdGFiYXNlOworCisgICAgbXV0YWJsZSBNdXRleCBtX2ltcG9ydExvY2s7CisgICAgVGhy
ZWFkQ29uZGl0aW9uIG1faW1wb3J0Q29uZGl0aW9uOworICAgIGJvb2wgbV9pbXBvcnRDb21wbGV0
ZTsKKyAgICB2b2lkIG1hcmtJbXBvcnRlZCgpOworICAgIHZvaWQgbWlncmF0ZUl0ZW1UYWJsZUlm
TmVlZGVkKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9y
YWdlQXJlYVN5bmNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRkYTRkMTdmOGFlNTQ4MWYzMDlmMzA3ZmMwYjk3ZTkxN2Zm
NDNlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUltcGwuaCIK
KworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFu
YWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9T
dG9yYWdlTWFwLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdG9yYWdlTmFtZXNw
YWNlSW1wbCo+JiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgU3RvcmFnZU5hbWVzcGFjZUltcGwqPj4gbG9jYWxT
dG9yYWdlTmFtZXNwYWNlTWFwOworCisgICAgcmV0dXJuIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1h
cDsKK30KKworUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2VJbXBsPiBTdG9yYWdlTmFtZXNwYWNlSW1w
bDo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGEpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChTZXNzaW9uU3RvcmFnZSwg
U3RyaW5nKCksIHF1b3RhKSk7Cit9CisKK1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gU3Rv
cmFnZU5hbWVzcGFjZUltcGw6OmdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VQYXRoLCB1bnNpZ25lZCBxdW90YSkKK3sKKyAgICBBU1NFUlQoIWRh
dGFiYXNlUGF0aC5pc051bGwoKSk7CisKKyAgICBhdXRvJiBzbG90ID0gbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlTWFwKCkuYWRkKGRhdGFiYXNlUGF0aCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwor
ICAgIGlmIChzbG90KQorICAgICAgICByZXR1cm4gc2xvdDsKKworICAgIFJlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlSW1wbD4gc3RvcmFnZU5hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFt
ZXNwYWNlSW1wbChMb2NhbFN0b3JhZ2UsIGRhdGFiYXNlUGF0aCwgcXVvdGEpKTsKKyAgICBzbG90
ID0gc3RvcmFnZU5hbWVzcGFjZS5nZXQoKTsKKworICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNl
OworfQorCitTdG9yYWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpCisg
ICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQorICAgICwgbV9wYXRoKHBhdGguaXNvbGF0
ZWRDb3B5KCkpCisgICAgLCBtX3N5bmNNYW5hZ2VyKDApCisgICAgLCBtX3F1b3RhKHF1b3RhKQor
ICAgICwgbV9pc1NodXRkb3duKGZhbHNlKQoreworICAgIGlmIChtX3N0b3JhZ2VUeXBlID09IExv
Y2FsU3RvcmFnZSAmJiAhbV9wYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zeW5jTWFuYWdlciA9
IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1fcGF0aCk7Cit9CisKK1N0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjp+U3RvcmFnZU5hbWVzcGFjZUltcGwoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UpIHsKKyAgICAg
ICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpLmdldChtX3BhdGgpID09IHRoaXMp
OworICAgICAgICBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5yZW1vdmUobV9wYXRoKTsKKyAg
ICB9CisKKyAgICBpZiAoIW1faXNTaHV0ZG93bikKKyAgICAgICAgY2xvc2UoKTsKK30KKworUGFz
c1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weShQYWdl
KikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9pc1NodXRk
b3duKTsKKyAgICBBU1NFUlQobV9zdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSk7CisKKyAg
ICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZUltcGw+IG5ld05hbWVzcGFjZSA9IGFkb3B0UmVmKG5l
dyBTdG9yYWdlTmFtZXNwYWNlSW1wbChtX3N0b3JhZ2VUeXBlLCBtX3BhdGgsIG1fcXVvdGEpKTsK
KworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVu
ZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGkgPSBtX3N0b3JhZ2VBcmVh
TWFwLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgICAgIG5ld05hbWVzcGFjZS0+bV9zdG9y
YWdlQXJlYU1hcC5zZXQoaS0+a2V5LCBpLT52YWx1ZS0+Y29weSgpKTsKKyAgICByZXR1cm4gbmV3
TmFtZXNwYWNlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFn
ZU5hbWVzcGFjZUltcGw6OnN0b3JhZ2VBcmVhKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBy
cE9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKKworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gcHJwT3Jp
Z2luOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+IHN0b3JhZ2VBcmVhOworICAgIGlmICgo
c3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKSkKKyAgICAgICAgcmV0
dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKKworICAgIHN0b3JhZ2VBcmVhID0gU3RvcmFnZUFy
ZWFJbXBsOjpjcmVhdGUobV9zdG9yYWdlVHlwZSwgb3JpZ2luLCBtX3N5bmNNYW5hZ2VyLCBtX3F1
b3RhKTsKKyAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4ucmVsZWFzZSgpLCBzdG9yYWdl
QXJlYSk7CisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKK30KKwordm9pZCBTdG9y
YWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBpZiAobV9pc1NodXRkb3duKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3
ZSdyZSBzZXNzaW9uIHN0b3JhZ2UsIHdlIHNob3VsZG4ndCBuZWVkIHRvIGRvIGFueSB3b3JrIGhl
cmUuCisgICAgaWYgKG1fc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpIHsKKyAgICAgICAg
QVNTRVJUKCFtX3N5bmNNYW5hZ2VyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAg
IGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+Y2xvc2UoKTsKKworICAg
IGlmIChtX3N5bmNNYW5hZ2VyKQorICAgICAgICBtX3N5bmNNYW5hZ2VyLT5jbG9zZSgpOworCisg
ICAgbV9pc1NodXRkb3duID0gdHJ1ZTsKK30KKwordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6
Y2xlYXJPcmlnaW5Gb3JEZWxldGlvbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbik7CisgICAgaWYgKHN0b3JhZ2VB
cmVhKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQor
Cit2b2lkIFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjbGVhckFsbE9yaWdpbnNGb3JEZWxldGlvbigp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFy
ZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+Y2xlYXJGb3JPcmlnaW5EZWxldGlvbigpOworfQor
ICAgIAordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3luYygpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9y
YWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9
IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+
dmFsdWUtPnN5bmMoKTsKK30KKwordm9pZCBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y2xvc2VJZGxl
TG9jYWxTdG9yYWdlRGF0YWJhc2VzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgp
OworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+Y2xvc2VEYXRh
YmFzZUlmSWRsZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlZThiMWNhYTZm
YmUxYzQ2ZjBiNTQyYzg2ZjhkODkxZDQ2ZmI3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaApAQCAtMCwwICsxLDc5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdG9y
YWdlTmFtZXNwYWNlSW1wbF9oCisjZGVmaW5lIFN0b3JhZ2VOYW1lc3BhY2VJbXBsX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5IYXNoLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
dG9yYWdlQXJlYS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU5hbWVzcGFjZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0
b3JhZ2VBcmVhSW1wbDsKKworY2xhc3MgU3RvcmFnZU5hbWVzcGFjZUltcGwgOiBwdWJsaWMgU3Rv
cmFnZU5hbWVzcGFjZSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlSW1wbD4gY3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5z
aWduZWQgcXVvdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U3RvcmFnZU5h
bWVzcGFjZUltcGw+IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VQYXRoLCB1bnNpZ25lZCBxdW90YSk7CisgICAgdmlydHVhbCB+U3RvcmFnZU5h
bWVzcGFjZUltcGwoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pICBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gY29weShQYWdlKiBuZXdQYWdlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBvdmVycmlkZTsKKworICAgIC8vIE5vdCBy
ZW1vdmluZyB0aGUgb3JpZ2luJ3MgU3RvcmFnZUFyZWEgZnJvbSBtX3N0b3JhZ2VBcmVhTWFwIGJl
Y2F1c2UKKyAgICAvLyB3ZSdyZSBqdXN0IGRlbGV0aW5nIHRoZSB1bmRlcmx5aW5nIGRiIGZpbGUu
IElmIGFuIGl0ZW0gaXMgYWRkZWQgaW1tZWRpYXRlbHkKKyAgICAvLyBhZnRlciBmaWxlIGRlbGV0
aW9uLCB3ZSB3YW50IHRoZSBzYW1lIFN0b3JhZ2VBcmVhIHRvIGV2ZW50dWFsbHkgdHJpZ2dlcgor
ICAgIC8vIGEgc3luYyBhbmQgZm9yIFN0b3JhZ2VBcmVhU3luYyB0byByZWNyZWF0ZSB0aGUgYmFj
a2luZyBkYiBmaWxlLgorICAgIHZpcnR1YWwgdm9pZCBjbGVhck9yaWdpbkZvckRlbGV0aW9uKFNl
Y3VyaXR5T3JpZ2luKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsT3JpZ2lu
c0ZvckRlbGV0aW9uKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN5bmMoKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJZGxlTG9jYWxTdG9yYWdlRGF0YWJhc2VzKCkgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUs
IGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpOworCisgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYUltcGw+PiBTdG9y
YWdlQXJlYU1hcDsKKyAgICBTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOworCisgICAg
U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKKworICAgIC8vIE9ubHkgdXNlZCBpZiBtX3N0b3Jh
Z2VUeXBlID09IExvY2FsU3RvcmFnZSBhbmQgdGhlIHBhdGggd2FzIG5vdCAiIiBpbiBvdXIgY29u
c3RydWN0b3IuCisgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBtX3N5bmNNYW5hZ2VyOworCisgICAgLy8gVGhlIGRlZmF1bHQgcXVvdGEgZm9yIGVhY2gg
bmV3IHN0b3JhZ2UgYXJlYS4KKyAgICB1bnNpZ25lZCBtX3F1b3RhOworCisgICAgYm9vbCBtX2lz
U2h1dGRvd247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9y
YWdlTmFtZXNwYWNlSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3Rv
cmFnZVN5bmNNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzNmQ2YmE2OTZmMDA4OGNjZjc0ZDZhYWE1OWYzY2ExNjI5
OGQzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5
bmNNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgorCisj
aW5jbHVkZSAiU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5o
PgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxTdG9yYWdlU3luY01hbmFnZXI+IFN0
b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlU3luY01hbmFnZXIocGF0aCkpOworfQorCitTdG9yYWdl
U3luY01hbmFnZXI6OlN0b3JhZ2VTeW5jTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgpCisgICAg
OiBtX3RocmVhZChzdGQ6Om1ha2VfdW5pcXVlPFN0b3JhZ2VUaHJlYWQ+KCkpCisgICAgLCBtX3Bh
dGgocGF0aC5pc29sYXRlZENvcHkoKSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghbV9wYXRoLmlzRW1wdHkoKSk7CisgICAgbV90aHJlYWQtPnN0YXJ0KCk7Cit9
CisKK1N0b3JhZ2VTeW5jTWFuYWdlcjo6flN0b3JhZ2VTeW5jTWFuYWdlcigpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkKTsKK30KKworLy8gQ2Fs
bGVkIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuCitTdHJpbmcgU3RvcmFnZVN5bmNNYW5hZ2VyOjpm
dWxsRGF0YWJhc2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikKK3sK
KyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhtX3BhdGgpKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBtX3Bh
dGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwgZGF0YWJhc2VJZGVudGlm
aWVyICsgIi5sb2NhbHN0b3JhZ2UiKTsKK30KKwordm9pZCBTdG9yYWdlU3luY01hbmFnZXI6OmRp
c3BhdGNoKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mIGZ1bmN0aW9uKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKworICAgIGlmICht
X3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQtPmRpc3BhdGNoKGZ1bmN0aW9uKTsKK30KKwordm9p
ZCBTdG9yYWdlU3luY01hbmFnZXI6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgaWYgKG1fdGhyZWFkKSB7CisgICAgICAgIG1fdGhyZWFkLT50ZXJtaW5hdGUo
KTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyODc3MjEwNWYyMmRhMzI5NTAzMDUzZDlkYmI1NDFiOTNmNzkzOTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU3RvcmFnZVN5bmNNYW5hZ2VyX2gKKyNkZWZpbmUgU3RvcmFnZVN5bmNN
YW5hZ2VyX2gKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU3RvcmFnZVRocmVhZDsKK2NsYXNzIFN0b3JhZ2VBcmVhU3luYzsKKworY2xh
c3MgU3RvcmFnZVN5bmNNYW5hZ2VyIDogcHVibGljIFJlZkNvdW50ZWQ8U3RvcmFnZVN5bmNNYW5h
Z2VyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIH5TdG9yYWdlU3luY01hbmFnZXIoKTsKKworICAg
IHZvaWQgZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYpOworICAgIHZvaWQg
Y2xvc2UoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTdG9yYWdlU3luY01hbmFnZXIoY29u
c3QgU3RyaW5nJiBwYXRoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlVGhyZWFkPiBt
X3RocmVhZDsKKworLy8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVh
ZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzCitwdWJsaWM6CisgICAgLy8gVG8gYmUgY2FsbGVkIGZy
b20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgorICAgIFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIG1fcGF0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFN0
b3JhZ2VTeW5jTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3Rv
cmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTA1YzFkZjFlODI5ZjA5NmEwNTg4NDk2ODZhMGMxYzZhNDhiZDQxNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcApA
QCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJTdG9yYWdlVGhyZWFkLmgiCisKKyNpbmNsdWRlIDx3dGYvQXV0b2Ry
YWluZWRQb29sLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgSGFzaFNldDxTdG9yYWdlVGhyZWFkKj4mIGFjdGl2ZVN0b3JhZ2VU
aHJlYWRzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0b3JhZ2VUaHJlYWQqPiwgdGhyZWFkcywgKCkp
OworICAgIHJldHVybiB0aHJlYWRzOworfQorCitTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFk
KCkKKyAgICA6IG1fdGhyZWFkSUQoMCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
fQorCitTdG9yYWdlVGhyZWFkOjp+U3RvcmFnZVRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkSUQpOworfQorCitib29sIFN0b3JhZ2VU
aHJlYWQ6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICgh
bV90aHJlYWRJRCkKKyAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChTdG9yYWdlVGhy
ZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3Jh
Z2UiKTsKKyAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygpLmFkZCh0aGlzKTsKKyAgICByZXR1cm4g
bV90aHJlYWRJRDsKK30KKwordm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2Fs
bGJhY2sodm9pZCogdGhyZWFkKQoreworICAgIHN0YXRpY19jYXN0PFN0b3JhZ2VUaHJlYWQqPih0
aHJlYWQpLT50aHJlYWRFbnRyeVBvaW50KCk7Cit9CisKK3ZvaWQgU3RvcmFnZVRocmVhZDo6dGhy
ZWFkRW50cnlQb2ludCgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB3
aGlsZSAoYXV0byBmdW5jdGlvbiA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2UoKSkgeworICAgICAg
ICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKKyAgICAgICAgKCpmdW5jdGlvbikoKTsKKyAgICB9Cit9
CisKK3ZvaWQgU3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2goY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NF
UlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgbV9xdWV1ZS5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PihmdW5jdGlvbikpOworfQor
Cit2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Cisg
ICAgYWN0aXZlU3RvcmFnZVRocmVhZHMoKS5yZW1vdmUodGhpcyk7CisgICAgLy8gRXZlbiBpbiB3
ZWlyZCwgZXhjZXB0aW9uYWwgY2FzZXMsIGRvbid0IHdhaXQgb24gYSBub25leGlzdGVudCB0aHJl
YWQgdG8gdGVybWluYXRlLgorICAgIGlmICghbV90aHJlYWRJRCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+PihbdGhpc10geworICAgICAgICBwZXJmb3JtVGVybWluYXRlKCk7CisgICAgfSkpOworICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChtX3F1ZXVl
LmtpbGxlZCgpKTsKKyAgICBtX3RocmVhZElEID0gMDsKK30KKwordm9pZCBTdG9yYWdlVGhyZWFk
OjpwZXJmb3JtVGVybWluYXRlKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAg
ICBtX3F1ZXVlLmtpbGwoKTsKK30KKwordm9pZCBTdG9yYWdlVGhyZWFkOjpyZWxlYXNlRmFzdE1h
bGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHMoKQoreworICAgIEhhc2hTZXQ8U3RvcmFnZVRocmVh
ZCo+JiB0aHJlYWRzID0gYWN0aXZlU3RvcmFnZVRocmVhZHMoKTsKKworICAgIGZvciAoSGFzaFNl
dDxTdG9yYWdlVGhyZWFkKj46Oml0ZXJhdG9yIGl0ID0gdGhyZWFkcy5iZWdpbigpLCBlbmQgPSB0
aHJlYWRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5kaXNwYXRjaChX
VEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZVRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNTJhYzYxMjFjODQ2NmQ0ODZlNGE0ZGM5
ZWYzYTRlMjg4NzNmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2Uv
U3RvcmFnZVRocmVhZC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VUaHJlYWRfaAorI2RlZmluZSBT
dG9yYWdlVGhyZWFkX2gKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU3RvcmFnZUFyZWFTeW5jOworY2xhc3MgU3RvcmFnZVRhc2s7CisKK2Ns
YXNzIFN0b3JhZ2VUaHJlYWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0b3JhZ2VUaHJl
YWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdG9yYWdlVGhyZWFk
KCk7CisgICAgflN0b3JhZ2VUaHJlYWQoKTsKKworICAgIGJvb2wgc3RhcnQoKTsKKyAgICB2b2lk
IHRlcm1pbmF0ZSgpOworCisgICAgdm9pZCBkaXNwYXRjaChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4mKTsKKworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeUlu
QWxsVGhyZWFkcygpOworCitwcml2YXRlOgorICAgIC8vIENhbGxlZCBvbiBiYWNrZ3JvdW5kIHRo
cmVhZC4KKyAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2sodm9pZCopOwor
ICAgIHZvaWQgdGhyZWFkRW50cnlQb2ludCgpOworCisgICAgLy8gQmFja2dyb3VuZCB0aHJlYWQg
cGFydCBvZiB0aGUgdGVybWluYXRlIHByb2NlZHVyZS4KKyAgICB2b2lkIHBlcmZvcm1UZXJtaW5h
dGUoKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBNZXNzYWdlUXVl
dWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX3F1ZXVlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRocmVhZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VUcmFja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTgzZDE3NGI3M2IwYTczZDM5ZGQzZWU0
MTgwYzk5NzZkZjQxYTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VUcmFja2VyLmNwcApAQCAtMCwwICsxLDY1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJTdG9yYWdlVHJhY2tlci5oIgorCisjaW5jbHVkZSAiU3RvcmFnZVRocmVhZC5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lz
dGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dEVuY29kaW5nLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlIDxz
cWxpdGUzX3ByaXZhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBTdG9yYWdlVHJhY2tlciogc3RvcmFnZVRyYWNrZXIgPSAwOworCisvLyBJZiB0aGVyZSBpcyBu
byBkb2N1bWVudCByZWZlcmVuY2luZyBhIHN0b3JhZ2UgZGF0YWJhc2UsIGNsb3NlIHRoZSB1bmRl
cmx5aW5nIGRhdGFiYXNlCisvLyBhZnRlciBpdCBoYXMgYmVlbiBpZGxlIGZvciBtX1N0b3JhZ2VE
YXRhYmFzZUlkbGVJbnRlcnZhbCBzZWNvbmRzLgorc3RhdGljIGNvbnN0IGRvdWJsZSBEZWZhdWx0
U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsID0gMzAwOworICAgIAordm9pZCBTdG9yYWdlVHJh
Y2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU3RvcmFn
ZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghc3RvcmFnZVRyYWNrZXIgfHwgIXN0b3JhZ2VUcmFja2VyLT5tX2NsaWVudCk7
CisgICAgCisgICAgaWYgKCFzdG9yYWdlVHJhY2tlcikKKyAgICAgICAgc3RvcmFnZVRyYWNrZXIg
PSBuZXcgU3RvcmFnZVRyYWNrZXIoc3RvcmFnZVBhdGgpOworICAgIAorICAgIHN0b3JhZ2VUcmFj
a2VyLT5tX2NsaWVudCA9IGNsaWVudDsKKyAgICBzdG9yYWdlVHJhY2tlci0+bV9uZWVkc0luaXRp
YWxpemF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6aW50ZXJuYWxJbml0
aWFsaXplKCkKK3sKKyAgICBtX25lZWRzSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGV4dCBlbmNvZGluZyBt
YXBzIGhhdmUgYmVlbiBidWlsdCBvbiB0aGUgbWFpbiB0aHJlYWQsIGFzIHRoZSBTdG9yYWdlVHJh
Y2tlciB0aHJlYWQgbWlnaHQgdHJ5IHRvIGRvIGl0IHRoZXJlIGluc3RlYWQuCisgICAgLy8gRklY
TUUgKDxyZGFyOi8vcHJvYmxlbS85MTI3ODE5Pik6IElzIHRoZXJlIGEgbW9yZSBleHBsaWNpdCB3
YXkgb2YgZG9pbmcgdGhpcyBiZXNpZGVzIGFjY2Vzc2luZyB0aGUgVVRGOEVuY29kaW5nPworICAg
IFVURjhFbmNvZGluZygpOworICAgIAorICAgIHN0b3JhZ2VUcmFja2VyLT5zZXRJc0FjdGl2ZSh0
cnVlKTsKKyAgICBzdG9yYWdlVHJhY2tlci0+bV90aHJlYWQtPnN0YXJ0KCk7ICAKKyAgICBzdG9y
YWdlVHJhY2tlci0+aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKK30KKworU3RvcmFnZVRyYWNr
ZXImIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkKK3sKKyAgICBpZiAoIXN0b3JhZ2VUcmFja2Vy
KQorICAgICAgICBzdG9yYWdlVHJhY2tlciA9IG5ldyBTdG9yYWdlVHJhY2tlcigiIik7CisgICAg
aWYgKHN0b3JhZ2VUcmFja2VyLT5tX25lZWRzSW5pdGlhbGl6YXRpb24pCisgICAgICAgIHN0b3Jh
Z2VUcmFja2VyLT5pbnRlcm5hbEluaXRpYWxpemUoKTsKKyAgICAKKyAgICByZXR1cm4gKnN0b3Jh
Z2VUcmFja2VyOworfQorCitTdG9yYWdlVHJhY2tlcjo6U3RvcmFnZVRyYWNrZXIoY29uc3QgU3Ry
aW5nJiBzdG9yYWdlUGF0aCkKKyAgICA6IG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZVBh
dGguaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2NsaWVudCgwKQorICAgICwgbV90aHJlYWQoc3Rk
OjptYWtlX3VuaXF1ZTxTdG9yYWdlVGhyZWFkPigpKQorICAgICwgbV9pc0FjdGl2ZShmYWxzZSkK
KyAgICAsIG1fbmVlZHNJbml0aWFsaXphdGlvbihmYWxzZSkKKyAgICAsIG1fU3RvcmFnZURhdGFi
YXNlSWRsZUludGVydmFsKERlZmF1bHRTdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwpCit7Cit9
CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7
CisKKyAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgbV9kYXRhYmFzZS5jbG9z
ZSgpOworCisgICAgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCk7
CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsK
KyAgICAgICAgbV9vcmlnaW5TZXQuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAoIW1faXNBY3Rp
dmUpCisgICAgICAgIHJldHVybjsKKworICAgIGltcG9ydE9yaWdpbklkZW50aWZpZXJzKCk7Cit9
CisKK1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKTsKK30K
KworU3RyaW5nIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyRGF0YWJhc2VQYXRoKCkKK3sKKyAgICBB
U1NFUlQoIW1fZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOworICAgIHJldHVybiBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCwgIlN0b3JhZ2VUcmFja2VyLmRi
Iik7Cit9CisKK3N0YXRpYyBib29sIGVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQoreworICAgIGlmIChjcmVh
dGVJZkRvZXNOb3RFeGlzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3RvcmllcyhkaXJl
Y3RvcnlOYW1lKGZpbGVOYW1lKSk7CisKKyAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxlTmFtZSk7
Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UoYm9vbCBjcmVh
dGVJZkRvZXNOb3RFeGlzdCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRv
Q291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2VNdXRl
eC50cnlMb2NrKCkpOworCisgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0
aCgpOworICAgIAorICAgIGlmICghZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0
aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKSB7CisgICAgICAgIGlmIChjcmVhdGVJZkRvZXNOb3RF
eGlzdCkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhYmFzZSBm
aWxlICclcyciLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlUGF0aCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0
YWJhc2VQYXRoLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBtX2RhdGFiYXNlLmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKyAgICAKKyAgICBpZiAo
IW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIk9yaWdpbnMiKSkgeworICAgICAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChvcmlnaW4gVEVYVCBV
TklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgcGF0aCBURVhUKTsiKSkKKyAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBPcmlnaW5zIHRhYmxlLiIpOworICAgIH0KK30KKwor
dm9pZCBTdG9yYWdlVHJhY2tlcjo6aW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKQoreyAgIAorICAg
IGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKworICAgIG1fdGhyZWFkLT5kaXNw
YXRjaChbdGhpc10geworICAgICAgICBzeW5jSW1wb3J0T3JpZ2luSWRlbnRpZmllcnMoKTsKKyAg
ICB9KTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6ZmluaXNoZWRJbXBvcnRpbmdPcmlnaW5J
ZGVudGlmaWVycygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ09y
aWdpbnMoKTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY0ltcG9ydE9yaWdpbklkZW50
aWZpZXJzKCkKK3sKKyAgICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgCisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Rh
dGFiYXNlTXV0ZXgpOworCisgICAgICAgIC8vIERvbid0IGZvcmNlIGNyZWF0aW9uIG9mIFN0b3Jh
Z2VUcmFja2VyJ3MgZGIganVzdCBiZWNhdXNlIGEgdHJhY2tlcgorICAgICAgICAvLyB3YXMgaW5p
dGlhbGl6ZWQuIEl0IHdpbGwgYmUgY3JlYXRlZCBpZiBsb2NhbCBzdG9yYWdlIGRicyBhcmUgZm91
bmQKKyAgICAgICAgLy8gYnkgc3luY0ZpbGVTeXN0ZW1BbmRUcmFja2VyRGF0YWJzZSgpIG9yIHRo
ZSBuZXh0IHRpbWUgYSBsb2NhbCBzdG9yYWdlCisgICAgICAgIC8vIGRiIGlzIGNyZWF0ZWQgYnkg
U3RvcmFnZUFyZWFTeW5jLgorICAgICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKwor
ICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgeworICAgICAgICAgICAgU1FMaXRlVHJh
bnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworCisgICAg
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgb3Jp
Z2luIEZST00gT3JpZ2lucyIpOworICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBw
cmVwYXJlIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrT3JpZ2lucyht
X29yaWdpblNldE11dGV4KTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRl
bWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgICAgICAgICAgICAgbV9vcmln
aW5TZXQuYWRkKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApLmlzb2xhdGVkQ29weSgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHREb25lKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBp
biBhbGwgb3JpZ2lucyBmcm9tIHRoZSBkYXRhYmFzZS4iKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3luY0ZpbGVT
eXN0ZW1BbmRUcmFja2VyRGF0YWJhc2UoKTsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKKworICAgICAgICBpZiAobV9jbGllbnQpIHsKKyAg
ICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsKKyAgICAgICAg
ICAgIE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9vcmlnaW5TZXQuZW5kKCk7Cisg
ICAgICAgICAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRp
c3BhdGNoRGlkTW9kaWZ5T3JpZ2luKCppdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgIGZpbmlzaGVkSW1wb3J0aW5nT3JpZ2luSWRl
bnRpZmllcnMoKTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnN5bmNG
aWxlU3lzdGVtQW5kVHJhY2tlckRhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5z
YWN0aW9uQ291bnRlcjsKKworICAgIEFTU0VSVChtX2lzQWN0aXZlKTsKKworICAgIFZlY3RvcjxT
dHJpbmc+IHBhdGhzOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJh
c2VNdXRleCk7CisgICAgICAgIHBhdGhzID0gbGlzdERpcmVjdG9yeShtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoLCAiKi5sb2NhbHN0b3JhZ2UiKTsKKyAgICB9CisKKyAgICAvLyBVc2UgYSBjb3B5IG9m
IG1fb3JpZ2luU2V0IHRvIGZpbmQgZXhwaXJlZCBlbnRyaWVzIGFuZCB0byBzY2hlZHVsZSB0aGVp
cgorICAgIC8vIGRlbGV0aW9ucyBmcm9tIGRpc2sgYW5kIGZyb20gbV9vcmlnaW5TZXQuCisgICAg
T3JpZ2luU2V0IG9yaWdpblNldENvcHk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9vcmlnaW5TZXRNdXRleCk7CisgICAgICAgIGZvciAoT3JpZ2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fb3JpZ2luU2V0LmJlZ2luKCksIGVuZCA9IG1fb3JpZ2luU2V0LmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBvcmlnaW5TZXRDb3B5LmFkZCgoKml0KS5pc29s
YXRlZENvcHkoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFkZCBtaXNzaW5nIFN0b3JhZ2VUcmFj
a2VyIHJlY29yZHMuCisgICAgT3JpZ2luU2V0IGZvdW5kT3JpZ2luczsKKyAgICBTdHJpbmcgZmls
ZUV4dGVuc2lvbiA9IEFTQ0lJTGl0ZXJhbCgiLmxvY2Fsc3RvcmFnZSIpOworCisgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpLCBlbmQgPSBw
YXRocy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0
aCA9ICppdDsKKworICAgICAgICBpZiAocGF0aC5sZW5ndGgoKSA+IGZpbGVFeHRlbnNpb24ubGVu
Z3RoKCkgJiYgcGF0aC5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uLCB0cnVlKSkgeworICAgICAgICAg
ICAgU3RyaW5nIGZpbGUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7CisgICAgICAgICAgICBTdHJp
bmcgb3JpZ2luSWRlbnRpZmllciA9IGZpbGUuc3Vic3RyaW5nKDAsIGZpbGUubGVuZ3RoKCkgLSBm
aWxlRXh0ZW5zaW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICghb3JpZ2luU2V0Q29weS5j
b250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICBzeW5jU2V0T3JpZ2lu
RGV0YWlscyhvcmlnaW5JZGVudGlmaWVyLCBwYXRoKTsKKworICAgICAgICAgICAgZm91bmRPcmln
aW5zLmFkZChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERl
bGV0ZSBzdGFsZSBTdG9yYWdlVHJhY2tlciByZWNvcmRzLgorICAgIGZvciAoT3JpZ2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG9yaWdpblNldENvcHkuYmVnaW4oKSwgZW5kID0gb3JpZ2luU2V0
Q29weS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllciA9ICppdDsKKyAgICAgICAgaWYgKGZvdW5kT3JpZ2lucy5jb250YWlucyhv
cmlnaW5JZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0cmlu
ZyBvcmlnaW5JZGVudGlmaWVyQ29weSA9IG9yaWdpbklkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCk7
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIG9yaWdpbklkZW50aWZpZXJDb3B5XSB7
CisgICAgICAgICAgICBkZWxldGVPcmlnaW5XaXRoSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVy
Q29weSk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c2V0
T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VGaWxlKQoreworICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7
CisKKyAgICAgICAgaWYgKG1fb3JpZ2luU2V0LmNvbnRhaW5zKG9yaWdpbklkZW50aWZpZXIpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVu
dGlmaWVyKTsKKyAgICB9CisKKyAgICBTdHJpbmcgb3JpZ2luSWRlbnRpZmllckNvcHkgPSBvcmln
aW5JZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOworICAgIFN0cmluZyBkYXRhYmFzZUZpbGVDb3B5
ID0gZGF0YWJhc2VGaWxlLmlzb2xhdGVkQ29weSgpOworICAgIGF1dG8gZnVuY3Rpb24gPSBbdGhp
cywgb3JpZ2luSWRlbnRpZmllckNvcHksIGRhdGFiYXNlRmlsZUNvcHldIHsKKyAgICAgICAgc3lu
Y1NldE9yaWdpbkRldGFpbHMob3JpZ2luSWRlbnRpZmllckNvcHksIGRhdGFiYXNlRmlsZUNvcHkp
OworICAgIH07CisKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1f
dGhyZWFkKTsKKyAgICAgICAgbV90aHJlYWQtPmRpc3BhdGNoKGZ1bmN0aW9uKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBGSVhNRTogVGhpcyB3ZWlyZCBwaW5nLXBvbmdpbmcgd2FzIGRvbmUg
dG8gZml4IGEgZGVhZGxvY2suIFdlIHNob3VsZCBmaWd1cmUgb3V0IGEgY2xlYW5lciB3YXkgdG8g
YXZvaWQgaXQgaW5zdGVhZC4KKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgZnVuY3Rp
b25dIHsKKyAgICAgICAgICAgIG1fdGhyZWFkLT5kaXNwYXRjaChmdW5jdGlvbik7CisgICAgICAg
IH0pOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6c3luY1NldE9yaWdpbkRldGFp
bHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
RmlsZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIFNRTGl0ZVRyYW5z
YWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOworCisgICAgb3BlblRyYWNrZXJEYXRh
YmFzZSh0cnVlKTsKKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklO
U0VSVCBJTlRPIE9yaWdpbnMgVkFMVUVTICg/LCA/KSIpOworICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGVz
dGFibGlzaCBvcmlnaW4gJyVzJyBpbiB0aGUgdHJhY2tlciIsIG9yaWdpbklkZW50aWZpZXIuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfSAKKyAgICAKKyAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDIsIGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
UmVzdWx0RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIG9yaWdp
biAnJXMnIGluIHRoZSB0cmFja2VyIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7
CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX29yaWdpblNldE11dGV4KTsK
KyAgICAgICAgaWYgKCFtX29yaWdpblNldC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSkKKyAg
ICAgICAgICAgIG1fb3JpZ2luU2V0LmFkZChvcmlnaW5JZGVudGlmaWVyKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NsaWVudE11dGV4KTsKKyAgICAgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3Jp
Z2luKG9yaWdpbklkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6
b3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIHJlc3VsdCkKK3sKKyAgICBB
U1NFUlQobV9pc0FjdGl2ZSk7CisgICAgCisgICAgaWYgKCFtX2lzQWN0aXZlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7CisKKyAg
ICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNldC5iZWdpbigp
LCBlbmQgPSBtX29yaWdpblNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1
bHQuYXBwZW5kKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tRGF0YWJhc2VJZGVudGlmaWVyKCpp
dCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVBbGxPcmlnaW5zKCkKK3sKKyAg
ICBBU1NFUlQobV9pc0FjdGl2ZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQobV90aHJlYWQpOworICAgIAorICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRl
eCk7CisgICAgICAgIHdpbGxEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgICAgIG1fb3JpZ2luU2V0
LmNsZWFyKCk7CisgICAgfQorCisgICAgUGFnZUdyb3VwOjpjbGVhckxvY2FsU3RvcmFnZUZvckFs
bE9yaWdpbnMoKTsKKworICAgIG1fdGhyZWFkLT5kaXNwYXRjaChbdGhpc10geworICAgICAgICBz
eW5jRGVsZXRlQWxsT3JpZ2lucygpOworICAgIH0pOworfQorCisjaWYgUExBVEZPUk0oSU9TKQor
c3RhdGljIHZvaWQgdHJ1bmNhdGVEYXRhYmFzZUZpbGUoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNl
KQoreworICAgIHNxbGl0ZTNfZmlsZV9jb250cm9sKGRhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwg
MCwgU1FMSVRFX1RSVU5DQVRFX0RBVEFCQVNFLCAwKTsKK30KKyNlbmRpZgorCit2b2lkIFN0b3Jh
Z2VUcmFja2VyOjpzeW5jRGVsZXRlQWxsT3JpZ2lucygpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0
cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJh
c2VNdXRleCk7CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7CisgICAgaWYg
KCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG9yaWdpbiwgcGF0aCBGUk9N
IE9yaWdpbnMiKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykg
eworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudC4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzdWx0OworICAgIHdoaWxlICgo
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIGlm
ICghY2FuRGVsZXRlT3JpZ2luKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGRlbGV0ZUZpbGUoc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMSkpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Ns
aWVudE11dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0
RG9uZSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBpbiBhbGwgb3JpZ2lucyBm
cm9tIHRoZSBkYXRhYmFzZS4iKTsKKworICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICB0cnVuY2F0ZURhdGFiYXNlRmlsZShtX2RhdGFiYXNl
KTsKKyNlbmRpZgorICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgfQorCisjaWYgIVBM
QVRGT1JNKElPUykKKyAgICBpZiAoIWRlbGV0ZUZpbGUodHJhY2tlckRhdGFiYXNlUGF0aCgpKSkg
eworICAgICAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSBpdCBpcyBub3QgcG9zc2libGUgdG8gZGVs
ZXRlIHRoZSBkYXRhYmFzZSBmaWxlIChlLmcgc29tZSBvdGhlciBwcm9ncmFtCisgICAgICAgIC8v
IGxpa2UgYSB2aXJ1cyBzY2FubmVyIGlzIGFjY2Vzc2luZyBpdCksIG1ha2Ugc3VyZSB0byByZW1v
dmUgYWxsIGVudHJpZXMuCisgICAgICAgIG9wZW5UcmFja2VyRGF0YWJhc2UoZmFsc2UpOworICAg
ICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBG
Uk9NIE9yaWdpbnMiKTsKKyAgICAgICAgaWYgKGRlbGV0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUg
ZGVsZXRpb24gb2YgYWxsIG9yaWdpbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWRlbGV0ZVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGVjdXRlIGRlbGV0aW9uIG9mIGFsbCBvcmln
aW5zIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZGVsZXRl
RW1wdHlEaXJlY3RvcnkobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisjZW5kaWYKK30KKwordm9p
ZCBTdG9yYWdlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luV2l0aElkZW50aWZpZXIoY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIGRlbGV0ZU9yaWdpbigmU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZUZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcikuZ2V0KCkpOwor
fQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKK3sgICAgCisgICAgQVNTRVJUKG1faXNBY3RpdmUpOworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkKTsKKyAgICAKKyAgICBpZiAoIW1faXNBY3Rp
dmUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEJlZm9yZSBkZWxldGluZyBkYXRhYmFzZSwg
d2UgbmVlZCB0byBjbGVhciBpbi1tZW1vcnkgbG9jYWwgc3RvcmFnZSBkYXRhCisgICAgLy8gaW4g
U3RvcmFnZUFyZWEsIGFuZCB0byBjbG9zZSB0aGUgU3RvcmFnZUFyZWEgZGIuIEl0J3MgcG9zc2li
bGUgZm9yIGFuCisgICAgLy8gaXRlbSB0byBiZSBhZGRlZCBpbW1lZGlhdGVseSBhZnRlciBjbG9z
aW5nIHRoZSBkYiBhbmQgY2F1c2UgU3RvcmFnZUFyZWFTeW5jCisgICAgLy8gdG8gcmVvcGVuIHRo
ZSBkYiBiZWZvcmUgdGhlIGRiIGlzIGRlbGV0ZWQgYnkgYSBTdG9yYWdlVHJhY2tlciB0aHJlYWQu
CisgICAgLy8gSW4gdGhpcyBjYXNlLCByZW9wZW5pbmcgdGhlIGRiIGluIFN0b3JhZ2VBcmVhU3lu
YyB3aWxsIGNhbmNlbCBhIHBlbmRpbmcKKyAgICAvLyBTdG9yYWdlVHJhY2tlciBkYiBkZWxldGlv
bi4KKyAgICBQYWdlR3JvdXA6OmNsZWFyTG9jYWxTdG9yYWdlRm9yT3JpZ2luKG9yaWdpbik7CisK
KyAgICBTdHJpbmcgb3JpZ2luSWQgPSBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOworICAg
IAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOwor
ICAgICAgICB3aWxsRGVsZXRlT3JpZ2luKG9yaWdpbklkKTsKKyAgICAgICAgbV9vcmlnaW5TZXQu
cmVtb3ZlKG9yaWdpbklkKTsKKyAgICB9CisKKyAgICBTdHJpbmcgb3JpZ2luSWRDb3B5ID0gb3Jp
Z2luSWQuaXNvbGF0ZWRDb3B5KCk7CisgICAgbV90aHJlYWQtPmRpc3BhdGNoKFt0aGlzLCBvcmln
aW5JZENvcHldIHsKKyAgICAgICAgc3luY0RlbGV0ZU9yaWdpbihvcmlnaW5JZENvcHkpOworICAg
IH0pOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjpzeW5jRGVsZXRlT3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KworICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9u
Q291bnRlcjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOworICAg
IAorICAgIGlmICghY2FuRGVsZXRlT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKSB7CisgICAgICAg
IExPR19FUlJPUigiQXR0ZW1wdGVkIHRvIGRlbGV0ZSBvcmlnaW4gJyVzJyB3aGlsZSBpdCB3YXMg
YmVpbmcgY3JlYXRlZFxuIiwgb3JpZ2luSWRlbnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgb3BlblRyYWNrZXJEYXRhYmFzZShmYWxzZSk7
CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBT
dHJpbmcgcGF0aCA9IGRhdGFiYXNlUGF0aEZvck9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKKyAg
ICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0
IGEgcmVxdWVzdCBmcm9tIHRoZSBBUEkgdG8gZGVsZXRlIHRoZSBzdG9yYWdlIGZvciBhbiBvcmln
aW4gdGhhdAorICAgICAgICAvLyBoYXMgbm8gc3VjaCBzdG9yYWdlLgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIkRFTEVURSBGUk9NIE9yaWdpbnMgd2hlcmUgb3JpZ2luPT8iKTsKKyAgICBpZiAoZGVs
ZXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBwcmVwYXJlIGRlbGV0aW9uIG9mIG9yaWdpbiAnJXMnIiwgb3JpZ2luSWRl
bnRpZmllci5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVs
ZXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbklkZW50aWZpZXIpOworICAgIGlmICghZGVs
ZXRlU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gZXhlY3V0ZSBkZWxldGlvbiBvZiBvcmlnaW4gJyVzJyIsIG9yaWdpbklkZW50aWZpZXIu
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVsZXRlRmls
ZShwYXRoKTsKKyAgICAKKyAgICBib29sIHNob3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IGZhbHNl
OworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fb3JpZ2luU2V0TXV0ZXgpOwor
ICAgICAgICBtX29yaWdpblNldC5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7CisgICAgICAgIHNo
b3VsZERlbGV0ZVRyYWNrZXJGaWxlcyA9IG1fb3JpZ2luU2V0LmlzRW1wdHkoKTsKKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkRGVsZXRlVHJhY2tlckZpbGVzKSB7CisjaWYgUExBVEZPUk0oSU9TKQor
ICAgICAgICB0cnVuY2F0ZURhdGFiYXNlRmlsZShtX2RhdGFiYXNlKTsKKyNlbmRpZgorICAgICAg
ICBtX2RhdGFiYXNlLmNsb3NlKCk7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICAgICAgZGVsZXRl
RmlsZSh0cmFja2VyRGF0YWJhc2VQYXRoKCkpOworICAgICAgICBkZWxldGVFbXB0eURpcmVjdG9y
eShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY2xpZW50TXV0ZXgpOworICAgICAgICBpZiAobV9jbGll
bnQpCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2lu
SWRlbnRpZmllcik7CisgICAgfQorfQorICAgIAordm9pZCBTdG9yYWdlVHJhY2tlcjo6d2lsbERl
bGV0ZUFsbE9yaWdpbnMoKQoreworICAgIEFTU0VSVCghbV9vcmlnaW5TZXRNdXRleC50cnlMb2Nr
KCkpOworCisgICAgT3JpZ2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX29yaWdpblNldC5l
bmQoKTsKKyAgICBmb3IgKE9yaWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX29yaWdpblNl
dC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRl
ZC5hZGQoKCppdCkuaXNvbGF0ZWRDb3B5KCkpOworfQorCit2b2lkIFN0b3JhZ2VUcmFja2VyOjp3
aWxsRGVsZXRlT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9vcmlnaW5TZXRNdXRleC50cnlM
b2NrKCkpOworCisgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLmFkZChvcmlnaW5JZGVudGlmaWVy
KTsKK30KKyAgICAKK2Jvb2wgU3RvcmFnZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlTXV0ZXgu
dHJ5TG9jaygpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7Cisg
ICAgcmV0dXJuIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5jb250YWlucyhvcmlnaW5JZGVudGlmaWVy
KTsKK30KKwordm9pZCBTdG9yYWdlVHJhY2tlcjo6Y2FuY2VsRGVsZXRpbmdPcmlnaW4oY29uc3Qg
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VNdXRleCk7Cisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9vcmlnaW5TZXRNdXRleCk7CisgICAg
ICAgIGlmICghbV9vcmlnaW5zQmVpbmdEZWxldGVkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1f
b3JpZ2luc0JlaW5nRGVsZXRlZC5yZW1vdmUob3JpZ2luSWRlbnRpZmllcik7CisgICAgfQorfQor
Citib29sIFN0b3JhZ2VUcmFja2VyOjppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1faXNBY3Rp
dmU7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXI6OnNldElzQWN0aXZlKGJvb2wgZmxhZykKK3sK
KyAgICBtX2lzQWN0aXZlID0gZmxhZzsKK30KKyAgICAKK1N0cmluZyBTdG9yYWdlVHJhY2tlcjo6
ZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sK
KyAgICBBU1NFUlQoIW1fZGF0YWJhc2VNdXRleC50cnlMb2NrKCkpOworICAgIEFTU0VSVChtX2lz
QWN0aXZlKTsKKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3Vu
dGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBwYXRoU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIE9yaWdpbnMgV0hFUkUgb3JpZ2luPT8i
KTsKKyAgICBpZiAocGF0aFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzZWxlY3Rpb24gb2YgcGF0aCBmb3Ig
b3JpZ2luICclcyciLCBvcmlnaW5JZGVudGlmaWVyLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICBwYXRoU3RhdGVtZW50LmJpbmRUZXh0KDEsIG9y
aWdpbklkZW50aWZpZXIpOworICAgIGludCByZXN1bHQgPSBwYXRoU3RhdGVtZW50LnN0ZXAoKTsK
KyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgcmV0dXJuIHBhdGhTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKK30KKyAgICAK
K2xvbmcgbG9uZyBTdG9yYWdlVHJhY2tlcjo6ZGlza1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pCit7CisgICAgaWYgKCFtX2lzQWN0aXZlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlTXV0ZXgpOworCisgICAgU3RyaW5n
IHBhdGggPSBkYXRhYmFzZVBhdGhGb3JPcmlnaW4ob3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxv
bmcgbG9uZyBzaXplOworICAgIHJldHVybiBnZXRGaWxlU2l6ZShwYXRoLCBzaXplKSA/IHNpemUg
OiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9y
YWdlVHJhY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3NzA1OTM3ZWYxNzhlNmY5N2QxYjZiZTc5YjdjYzQx
MjFkMTA4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVRyYWNrZXIuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3RvcmFn
ZVRyYWNrZXJfaAorI2RlZmluZSBTdG9yYWdlVHJhY2tlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0
b3JhZ2VUYXNrOworY2xhc3MgU3RvcmFnZVRocmVhZDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwor
Y2xhc3MgU3RvcmFnZVRyYWNrZXJDbGllbnQ7ICAgIAorCitjbGFzcyBTdG9yYWdlVHJhY2tlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFnZVRyYWNrZXIpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IGluaXRpYWxpemVUcmFja2VyKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFN0b3JhZ2VUcmFj
a2VyQ2xpZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0b3JhZ2VUcmFja2VyJiB0
cmFja2VyKCk7CisKKyAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJp
bmcmKTsKKyAgICBTdHJpbmcgZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCkgY29uc3Q7CisKKyAgICB2
b2lkIHNldE9yaWdpbkRldGFpbHMoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlRmlsZSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
ZWxldGVBbGxPcmlnaW5zKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbldpdGhJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBv
cmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYgcmVzdWx0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBsb25nIGxvbmcgZGlza1VzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7
CisgICAgCisgICAgdm9pZCBjYW5jZWxEZWxldGluZ09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpOworICAgIAorICAgIGJvb2wgaXNBY3RpdmUoKTsKKworICAgIGRvdWJsZSBz
dG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWwoKSB7IHJldHVybiBtX1N0b3JhZ2VEYXRhYmFzZUlk
bGVJbnRlcnZhbDsgfQorICAgIHZvaWQgc2V0U3RvcmFnZURhdGFiYXNlSWRsZUludGVydmFsKGRv
dWJsZSBpbnRlcnZhbCkgeyBtX1N0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbCA9IGludGVydmFs
OyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN5bmNGaWxlU3lzdGVtQW5kVHJhY2tlckRh
dGFiYXNlKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3RvcmFnZVRyYWNrZXIoY29uc3Qg
U3RyaW5nJiBzdG9yYWdlUGF0aCk7CisKKyAgICB2b2lkIGludGVybmFsSW5pdGlhbGl6ZSgpOwor
CisgICAgU3RyaW5nIHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKKyAgICB2b2lkIG9wZW5UcmFja2Vy
RGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCk7CisKKyAgICB2b2lkIGltcG9ydE9y
aWdpbklkZW50aWZpZXJzKCk7CisgICAgdm9pZCBmaW5pc2hlZEltcG9ydGluZ09yaWdpbklkZW50
aWZpZXJzKCk7CisgICAgCisgICAgdm9pZCBkZWxldGVUcmFja2VyRmlsZXMoKTsKKyAgICBTdHJp
bmcgZGF0YWJhc2VQYXRoRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7
CisKKyAgICBib29sIGNhbkRlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZU9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50
aWZpZXIpOworICAgIHZvaWQgd2lsbERlbGV0ZUFsbE9yaWdpbnMoKTsKKworICAgIHZvaWQgb3Jp
Z2luRmlsZVBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CisgICAgCisgICAgdm9pZCBzZXRJ
c0FjdGl2ZShib29sKTsKKworICAgIC8vIFN5bmMgdG8gZGlzayBvbiBiYWNrZ3JvdW5kIHRocmVh
ZC4KKyAgICB2b2lkIHN5bmNEZWxldGVBbGxPcmlnaW5zKCk7CisgICAgdm9pZCBzeW5jRGVsZXRl
T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgdm9pZCBzeW5jU2V0
T3JpZ2luRGV0YWlscyhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VGaWxlKTsKKyAgICB2b2lkIHN5bmNJbXBvcnRPcmlnaW5JZGVudGlmaWVycygp
OworCisgICAgLy8gTXV0ZXggZm9yIG1fZGF0YWJhc2UgYW5kIG1fc3RvcmFnZURpcmVjdG9yeVBh
dGguCisgICAgTXV0ZXggbV9kYXRhYmFzZU11dGV4OworICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0
YWJhc2U7CisgICAgU3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBhdGg7CisKKyAgICBNdXRleCBt
X2NsaWVudE11dGV4OworICAgIFN0b3JhZ2VUcmFja2VyQ2xpZW50KiBtX2NsaWVudDsKKworICAg
IC8vIEd1YXJkIGZvciBtX29yaWdpblNldCBhbmQgbV9vcmlnaW5zQmVpbmdEZWxldGVkLgorICAg
IE11dGV4IG1fb3JpZ2luU2V0TXV0ZXg7CisgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gT3Jp
Z2luU2V0OworICAgIE9yaWdpblNldCBtX29yaWdpblNldDsKKyAgICBPcmlnaW5TZXQgbV9vcmln
aW5zQmVpbmdEZWxldGVkOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VUaHJlYWQ+IG1f
dGhyZWFkOworICAgIAorICAgIGJvb2wgbV9pc0FjdGl2ZTsKKyAgICBib29sIG1fbmVlZHNJbml0
aWFsaXphdGlvbjsKKyAgICBkb3VibGUgbV9TdG9yYWdlRGF0YWJhc2VJZGxlSW50ZXJ2YWw7Cit9
OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRyYWNr
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MWE2MDI5ZmE1NDk2M2IxZTYwODMyY2JjNDc2MGZiMGEzZTE1ZjhkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUcmFja2VyQ2xpZW50LmgK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisgCisjaWZuZGVmIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50X2gKKyNkZWZpbmUgU3RvcmFnZVRyYWNrZXJDbGllbnRfaAorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdG9yYWdlVHJhY2tlckNs
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3RvcmFnZVRyYWNrZXJDbGllbnQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdP
cmlnaW5zKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
U3RvcmFnZVRyYWNrZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdl
L1dlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2Uv
V2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcAppbmRleCBlMjA5NDBhZjQ0Njc1NDc2ZGJl
NGNmNjA4MGQzZGJhYjc0NWE0NmU0Li5hYjQ2Yzk2OWM2MWE0ZmNlZWJlZGU1ODFhMjEwMDNkMzUx
NzQxNzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViU3RvcmFnZU5h
bWVzcGFjZVByb3ZpZGVyLmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiV2ViU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiCiAKLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmg+CisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUltcGwuaCIKICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJv
aiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCmlu
ZGV4IDA5MTUyMzUxMjhmMDE2ZGFmMjI4YjdkZWQ3OWU1ZmRjYWUyN2FmMTQuLmZjNTZhOTk0ZjJk
MTMxN2FjYmNhNDNlOWRmZGZiZDI4MDAxZjYwN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCkBAIC0yODUsNiArMjg1LDEyIEBA
CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VBcmVhU3lu
Yy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3Jh
Z2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XC4uXFN0b3JhZ2VcU3RvcmFnZVRocmVhZC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUcmFja2VyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVTdXBwb3J0XFdlYkluc3Bl
Y3RvckNsaWVudENGLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxB
Y2Nlc3NpYmxlQmFzZS5jcHAiIC8+CkBAIC00MjAsNiArNDI2LDEzIEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cV2ViV29ya2Vyc1ByaXZhdGUuY3BwIiAvPgogICA8L0l0ZW1H
cm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3Jh
Z2VcU3RvcmFnZUFyZWFJbXBsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxT
dG9yYWdlXFN0b3JhZ2VBcmVhU3luYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cU3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlU3luY01hbmFnZXIuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZVRocmVhZC5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlVHJhY2tlci5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlVHJhY2tlckNsaWVudC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJTdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nl
c3NpYmxlQmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vz
c2libGVEb2N1bWVudC5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4
cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0
LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZmRjODY3OTZkYTk1
N2UxZDFiZWIyMmQ2YjJjODMyZjhhY2Y4YzExZi4uMTJkZDk1M2YwMzZkZjUyNTdmYjBjNzQzNjRi
YTEzNDljYjc5M2Q0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCkBAIC0yMTcsNiArMjE3LDI0IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cV2ViU2VyaWFsaXplZEpTVmFsdWUu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuY3Bw
Ij4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIj4K
KyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAi
PgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAi
PgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUaHJlYWQuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlVHJhY2tlci5jcHAiPgorICAgICAg
PEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC01
MzcsNiArNTU1LDI3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cV2ViQ29y
ZVN1cHBvcnRcQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCI+CiAgICAgICA8RmlsdGVy
PldlYkNvcmVTdXBwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5oIj4KKyAgICAgIDxGaWx0
ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuaCI+CisgICAgICA8RmlsdGVyPlNv
dXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZU5hbWVzcGFjZUltcGwuaCI+CisgICAgICA8RmlsdGVyPlNv
dXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmgiPgorICAgICAgPEZpbHRlcj5Tb3Vy
Y2VzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlwuLlxTdG9yYWdlXFN0b3JhZ2VUaHJlYWQuaCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0Zp
bHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0
b3JhZ2VcU3RvcmFnZVRyYWNrZXIuaCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4K
KyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2Vc
U3RvcmFnZVRyYWNrZXJDbGllbnQuaCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4K
KyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2Vc
V2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmls
ZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNiYjVhNmRkOWU5OGU1MmM3MjQyMmM0OGI1
Mjc5ZjZlYTc1NmJiMTkuLjkxNjgwYmI4YzY2Nzc3MzY4MmU4MjQ4NGYyNThlNzdlZjNkMmQzMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMzMsNiArMzMsMTkgQEAKIAkJMUE2MDUxOTQxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3RvcnlQ
cm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNjA1MTkwMTc1MDJBNUQwMEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0LmggKi87
IH07CiAJCTFBNkEyMDhEMTg4NjE1NDYwMEU1MEY1RiAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGll
bnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZB
MjA4QjE4ODYxNTQ2MDBFNTBGNUYgLyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50Lm1tICovOyB9
OwogCQkxQTZBMjA4RTE4ODYxNTQ2MDBFNTBGNUYgLyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZBMjA4
QzE4ODYxNTQ2MDBFNTBGNUYgLyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmggKi87IH07CisJ
CTFBNkIzMTMxMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlQXJlYUltcGwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2QjMxMjQxQTUxRjNBOTAw
NDIyOTc1IC8qIFN0b3JhZ2VBcmVhSW1wbC5jcHAgKi87IH07CisJCTFBNkIzMTMyMUE1MUYzQTkw
MDQyMjk3NSAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkIzMTI1MUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlQXJl
YUltcGwuaCAqLzsgfTsKKwkJMUE2QjMxMzMxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VBcmVh
U3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTZCMzEyNjFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCAqLzsgfTsKKwkJ
MUE2QjMxMzQxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2QjMxMjcxQTUxRjNBOTAwNDIy
OTc1IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovOyB9OworCQkxQTZCMzEzNTFBNTFGM0E5MDA0MjI5
NzUgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2QjMxMjgxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCAqLzsgfTsKKwkJMUE2QjMxMzYxQTUxRjNBOTAwNDIyOTc1IC8qIFN0
b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTZCMzEyOTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZU5hbWVzcGFjZUlt
cGwuaCAqLzsgfTsKKwkJMUE2QjMxMzcxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VTeW5jTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTZCMzEyQTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLzsgfTsK
KwkJMUE2QjMxMzgxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2QjMxMkIxQTUxRjNB
OTAwNDIyOTc1IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovOyB9OworCQkxQTZCMzEzOTFBNTFG
M0E5MDA0MjI5NzUgLyogU3RvcmFnZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZCMzEyQzFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFn
ZVRocmVhZC5jcHAgKi87IH07CisJCTFBNkIzMTNBMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdl
VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTZCMzEyRDFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRocmVhZC5oICovOyB9OworCQkxQTZC
MzEzQjFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE2QjMxMkUxQTUxRjNBOTAwNDIyOTc1
IC8qIFN0b3JhZ2VUcmFja2VyLmNwcCAqLzsgfTsKKwkJMUE2QjMxM0MxQTUxRjNBOTAwNDIyOTc1
IC8qIFN0b3JhZ2VUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTZCMzEyRjFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXIuaCAq
LzsgfTsKKwkJMUE2QjMxM0QxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZCMzEz
MDFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsgfTsKIAkJMUE3
NEEyOEUwRjRGNzU0MDAwODJFMjI4IC8qIFdlYlRleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNzRBMjhDMEY0
Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmggKi87IH07CiAJ
CTFBNzRBMjhGMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTc0QTI4
RDBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tICovOyB9
OwogCQkxQTc3QjAyRTBFRTc3MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE3N0IwMkMwRUU3NzMw
NTAwQzhBMUY5IC8qIFdlYlBsdWdpblJlcXVlc3QuaCAqLzsgfTsKQEAgLTQ4Myw2ICs0OTYsMTkg
QEAKIAkJMUE2MDUxOTAxNzUwMkE1RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGlzdG9yeVByb3BlcnR5TGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTZBMjA4QjE4ODYxNTQ2MDBFNTBGNUYgLyog
V2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTZBMjA4QzE4ODYxNTQ2MDBFNTBGNUYgLyogV2ViUHJvZ3Jlc3NUcmFj
a2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2dyZXNz
VHJhY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQTZCMzEyNDFB
NTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3JhZ2VBcmVhSW1wbC5jcHA7IHBhdGggPSBTdG9yYWdlL1N0
b3JhZ2VBcmVhSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMUE2QjMx
MjUxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VBcmVhSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlQXJlYUltcGwuaDsgcGF0aCA9IFN0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMUE2QjMxMjYxQTUx
RjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBTdG9yYWdlQXJlYVN5bmMuY3BwOyBwYXRoID0gU3RvcmFnZS9TdG9y
YWdlQXJlYVN5bmMuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTFBNkIzMTI3
MUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlQXJlYVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU3RvcmFnZUFyZWFTeW5jLmg7IHBhdGggPSBTdG9yYWdlL1N0b3JhZ2VB
cmVhU3luYy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTFBNkIzMTI4MUE1MUYz
QTkwMDQyMjk3NSAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHA7IHBhdGggPSBTdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OworCQkxQTZCMzEyOTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RvcmFnZU5hbWVzcGFjZUltcGwuaDsg
cGF0aCA9IFN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuaDsgc291cmNlVHJlZSA9IFNPVVJD
RV9ST09UOyB9OworCQkxQTZCMzEyQTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3JhZ2VTeW5j
TWFuYWdlci5jcHA7IHBhdGggPSBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMUE2QjMxMkIxQTUxRjNBOTAwNDIyOTc1IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9y
YWdlU3luY01hbmFnZXIuaDsgcGF0aCA9IFN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJMUE2QjMxMkMxQTUxRjNBOTAwNDIyOTc1IC8q
IFN0b3JhZ2VUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
U3RvcmFnZVRocmVhZC5jcHA7IHBhdGggPSBTdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwOyBzb3Vy
Y2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTFBNkIzMTJEMUE1MUYzQTkwMDQyMjk3NSAvKiBT
dG9yYWdlVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0b3JhZ2VU
aHJlYWQuaDsgcGF0aCA9IFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5oOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CisJCTFBNkIzMTJFMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdG9yYWdlVHJhY2tl
ci5jcHA7IHBhdGggPSBTdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9IFNP
VVJDRV9ST09UOyB9OworCQkxQTZCMzEyRjFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RvcmFnZVRyYWNrZXIuaDsg
cGF0aCA9IFN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OworCQkxQTZCMzEzMDFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRyYWNrZXJDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RvcmFnZVRyYWNrZXJDbGllbnQu
aDsgcGF0aCA9IFN0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaDsgc291cmNlVHJlZSA9IFNP
VVJDRV9ST09UOyB9OwogCQkxQTc0QTI4QzBGNEY3NTQwMDA4MkUyMjggLyogV2ViVGV4dElucHV0
V2luZG93Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJU
ZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBNzRBMjhEMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVy
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5vYmpjOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2ViVGV4dElucHV0V2luZG93
Q29udHJvbGxlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTc3QjAyQzBFRTc3
MzA1MDBDOEExRjkgLyogV2ViUGx1Z2luUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJQbHVnaW5SZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTk1LDYgKzEyMjEsMTkgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJQTEwQzFEM0YxODIwMkZEQzAwMzY4ODNBIC8qIGlvcyAqLywKKwkJCQkxQTZCMzEy
NDFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFJbXBsLmNwcCAqLywKKwkJCQkxQTZCMzEy
NTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFJbXBsLmggKi8sCisJCQkJMUE2QjMxMjYx
QTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi8sCisJCQkJMUE2QjMxMjcx
QTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovLAorCQkJCTFBNkIzMTI4MUE1
MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi8sCisJCQkJMUE2QjMx
MjkxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi8sCisJCQkJMUE2
QjMxMkExQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi8sCisJCQkJ
MUE2QjMxMkIxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAorCQkJ
CTFBNkIzMTJDMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVGhyZWFkLmNwcCAqLywKKwkJCQkx
QTZCMzEyRDFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVRocmVhZC5oICovLAorCQkJCTFBNkIz
MTJFMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5jcHAgKi8sCisJCQkJMUE2QjMx
MkYxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VUcmFja2VyLmggKi8sCisJCQkJMUE2QjMxMzAx
QTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJNTExRjNG
RDEwQ0VDQzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlTWFuYWdlci5tbSAqLywKIAkJCQk1MTFG
M0ZEMzBDRUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50LmggKi8sCiAJ
CQkJNTExRjNGRDQwQ0VDQzg4RjAwODUyNTY1IC8qIFdlYkRhdGFiYXNlTWFuYWdlckNsaWVudC5t
bSAqLywKQEAgLTE2OTEsNiArMTczMCw3IEBACiAJCQkJOTM5ODEwNjYwODI0QkYwMTAwOERGMDM4
IC8qIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA2
NzA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93RnJhbWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUI4Mjk1OEQzMTMyNzA3RDAwMDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTFBNkIzMTNBMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVGhyZWFkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTYwNTE5NDE3NTAyQTVEMDBCQzYyRjUgLyogSGlzdG9yeVBy
b3BlcnR5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNjgwODI0QkYwMTAwOERGMDM4
IC8qIEhJVmlld0FkYXB0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkEyMDhFMTg4NjE1NDYw
MEU1MEY1RiAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAt
MTc0Myw2ICsxNzgzLDcgQEAKIAkJCQk5Mzk4MTA3NjA4MjRCRjAxMDA4REYwMzggLyogV2ViRGVm
YXVsdFVJRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTQyQzQyMEZENzc2NkYwMEQ4
QUI1RCAvKiBXZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTk4QUQ5MjAxMjAxQ0YwNzAwQUJBRTRFIC8qIFdlYkRldmljZU9yaWVudGF0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkxQTZCMzEzODFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZVN5
bmNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OThBRDkxQTEyMDFDRUM5MDBBQkFFNEUg
LyogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5OEFE
OTI0MTIwMUNGMTkwMEFCQUU0RSAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbkludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTdBMTFCMTE4MERDODQ4MDBFNTQ5OEMgLyogV2ViUGx1Z2luUGFj
a2FnZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTc1OSw2ICsxODAwLDcgQEAKIAkJCQk5
Mzk4MTA3NzA4MjRCRjAxMDA4REYwMzggLyogV2ViRG93bmxvYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFCRERGMjBEMDhFQjBEREMwMDFFMTI0MSAvKiBXZWJEb3dubG9hZEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzA5MzZBRjBCNTYwOERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE2QjMxM0MxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3Jh
Z2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA1MTA4MjRCRjAxMDA4REYwMzgg
LyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDMTE2
NzBEODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzOTgxMDlFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJFZGl0aW5n
RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTc2OCw2ICsxODEwLDcgQEAKIAkJCQlERDg5
NjgyMDA5QUE4NzI0MDA5N0U3RjAgLyogV2ViRWxlbWVudERpY3Rpb25hcnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOTgxMDUyMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGb3JtRGVsZWdhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzOTgxMDY0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGb3JtRGVs
ZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQTZCMzEzNDFBNTFGM0E5MDA0MjI5
NzUgLyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA1MzA4MjRC
RjAxMDA4REYwMzggLyogV2ViRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMEMxRDFBMTgy
MDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0RnJhbWVMb2FkRGVsZWdhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOTgxMDlDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGcmFtZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE3OTYsNiArMTgzOSw3IEBACiAJCQkJOTM5ODEwNTUwODI0QkYw
MTAwOERGMDM4IC8qIFdlYkhUTUxSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM5ODEwNTYwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxSZXByZXNlbnRhdGlvblByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDU3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIVE1M
Vmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE2QjMxM0QxQTUxRjNBOTAwNDIyOTc1IC8qIFN0
b3JhZ2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTBBMTA4MjRCRjAx
MDA4REYwMzggLyogV2ViSFRNTFZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5
ODEwNTgwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5ODEwMTgwODI0QkYwMTAwOERGMDM4IC8qIFdlYkljb25EYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xODAzLDYgKzE4NDcsNyBAQAogCQkJCTUxQjJBMTAwMEFEQjE1RDAw
MDJBOUJFRSAvKiBXZWJJY29uRGF0YWJhc2VEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMwNEIzMDAwQjAyMzQxNTAwRjc4NTBEIC8qIFdlYkljb25EYXRhYmFzZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5Mzk4MTAxOTA4MjRCRjAxMDA4REYwMzggLyogV2ViSWNvbkRhdGFi
YXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUE2QjMxMzIxQTUxRjNBOTAwNDIyOTc1
IC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEwQzFENjQxODIwMzAw
RTAwMzY4ODNBIC8qIFdlYkNocm9tZUNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ3
QkY4MTQwQzJBMUQ5MDAwOENFMDZEIC8qIFdlYkluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDY2OTNEREMwQkZCQTg1MjAwMjE2MDcyIC8qIFdlYkluc3BlY3RvckNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xODg5LDYgKzE5MzQsNyBAQAogCQkJCTkzOTgxMEIwMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJQbHVnaW5Db250YWluZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUM3MTc2RjFBMjY1NjhBMDAyRTMxMTUgLyogV2ViVmlzaXRlZExpbmtTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwMzcwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBsdWdpbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBNkIzMTM2MUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9y
YWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxRkIzQzIxODQ2RThFMTAw
MUEwM0Q4IC8qIFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5Mzk4MTAzODA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luRGF0YWJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzOTgxMDM5MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5QYWNrYWdl
LmggaW4gSGVhZGVycyAqLywKQEAgLTIxODksNiArMjIzNSw3IEBACiAJCQkJOTM5ODExMEEwODI0
QkYwMTAwOERGMDM4IC8qIFdlYkRlZmF1bHRVSURlbGVnYXRlLm0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQzU0MkM0MzBGRDc3NjZGMDBEOEFCNUQgLyogV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNh
Y2hpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUgLyog
V2ViRGV2aWNlT3JpZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQTZCMzEzMzFBNTFG
M0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
NkEyMDhEMTg4NjE1NDYwMEU1MEY1RiAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQk1OThBRDkxRTEyMDFDRUNGMDBBQkFFNEUgLyogV2ViRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBB
QkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAq
LywKQEAgLTIyMjEsMTEgKzIyNjgsMTMgQEAKIAkJCQk1MTQ5NENENzBDN0VCREUwMDA0MTc4QzUg
LyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQ3QkY4MTUw
QzJBMUQ5MDAwOENFMDZEIC8qIFdlYkluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA2
NjkzREREMEJGQkE4NTIwMDIxNjA3MiAvKiBXZWJJbnNwZWN0b3JDbGllbnQubW0gaW4gU291cmNl
cyAqLywKKwkJCQkxQTZCMzEzMTFBNTFGM0E5MDA0MjI5NzUgLyogU3RvcmFnZUFyZWFJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDN0IwQzY2MEVCMjQ2NEQwMEEyODUwMiAvKiBXZWJJbnNw
ZWN0b3JDbGllbnRDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCODA0MTc3MDEyMTdBODMxMDA0
NjZCQUUgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBD
MUQxOTE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTM5ODEwRTQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkphdmFTY3JpcHRUZXh0
SW5wdXRQYW5lbC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFEOEIxODIwMzA1RTAwMzY4ODNB
IC8qIFdlYlBERlZpZXdJT1MubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQTZCMzEzNzFBNTFGM0E5
MDA0MjI5NzUgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3
RDFEQ0E5MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTkzOTgxMTE3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLZXlHZW5lcmF0b3IubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5Mzk4MTEwMzA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0RXJyb3JzLm0g
aW4gU291cmNlcyAqLywKQEAgLTIyNjIsNiArMjMxMSw3IEBACiAJCQkJMzEyRTJGRTYxNEU0ODE4
MjAwN0NDQTE4IC8qIFdlYk5vdGlmaWNhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxQzEx
QTZGMTQ3NjU1MkUwMDQ5QTRDQyAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQubW0gaW4gU291cmNl
cyAqLywKIAkJCQlFREU5ODM4MTBCQ0RGNUZFMDBGREFFMjggLyogV2ViTlNBcnJheUV4dHJhcy5t
IGluIFNvdXJjZXMgKi8sCisJCQkJMUE2QjMxMzkxQTUxRjNBOTAwNDIyOTc1IC8qIFN0b3JhZ2VU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU2MDk0NjcxNEQ4QUQyNjAwNzk5QThBIC8q
IFdlYkluZGljYXRlTGF5ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBDNjA4MjRCRjAx
MDA4REYwMzggLyogV2ViTlNDb250cm9sRXh0cmFzLm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4
MTExNTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNEYXRhRXh0cmFzLm0gaW4gU291cmNlcyAqLywK
QEAgLTIzMDksMTIgKzIzNTksMTQgQEAKIAkJCQk5MzZBMkRFODBGRDJEMDgwMDBEMzEyREIgLyog
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFE
M0UxODIwMkZDNTAwMzY4ODNBIC8qIFdlYlVJS2l0U3VwcG9ydC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBNzRBMjhGMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9s
bGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQkxQTZCMzEzNTFBNTFGM0E5MDA0MjI5NzUgLyogU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjgzNEFBRDgwRTY0QjFD
NzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExMEMx
RDFEMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUubSBp
biBTb3VyY2VzICovLAogCQkJCTkzOTgxMEJFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJVUkxzV2l0
aFRpdGxlcy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzBDNUIzRUYxMTc3QTRBMDAwMkIwQUVGIC8q
IFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQjFEQUMx
MThCQzAyMzIwMDRCNkE5RiAvKiBXZWJWaWV3R3JvdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk5
Mzk4MTEwNzA4MjRCRjAxMDA4REYwMzggLyogV2ViVmlldy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTFBNkIzMTNCMUE1MUYzQTkwMDQyMjk3NSAvKiBTdG9yYWdlVHJhY2tlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzJFNDY0RTBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEubW0gaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1h
bmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1t
CmluZGV4IGJmMGU5MTIzZjE1OTU4ODNmMTMxM2ExOWFhMTE4ZWY4Y2Q3OGYxZjEuLmFmOTJkNzZi
ODc0OThiZjQ2NTI4MWQ0YjZhMDVhNzdjYjQ4OGY1YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQpAQCAtMjMsMTQgKzIzLDEzIEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiV2ViU2VjdXJp
dHlPcmlnaW5JbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmgi
CiAjaW1wb3J0ICJXZWJTdG9yYWdlTWFuYWdlckludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJTdG9y
YWdlVHJhY2tlckNsaWVudC5oIgogCisjaW1wb3J0ICJTdG9yYWdlVHJhY2tlci5oIgorI2ltcG9y
dCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViU3RvcmFnZVRyYWNr
ZXJDbGllbnQuaCIKICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyLmg+
CiAjaW1wb3J0IDxwdGhyZWFkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlckludGVybmFs
LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwu
aAppbmRleCA2ODhiNGJjNzNjMDFlZTZlYTdjNGFkY2IxZDJlMTMzOGFlMWI1NjJiLi5iZDMxZGIy
ODFmODA3NjlhYWYzZTBkNWU4NWNjNDU0YTZiM2JkY2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaApAQCAtMjIsNSAr
MjIsNyBAQAogICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCi0gCisKKyNpbXBvcnQgIldlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIgorCiB2
b2lkIFdlYktpdEluaXRpYWxpemVTdG9yYWdlSWZOZWNlc3NhcnkoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaAppbmRleCBmZThh
M2ZjZGJmMTY2YWJiYjMxMzNhYmQ3NmI2MDYwYmI0ZjFmZDE1Li4wNDg3OWViNzdjZmFkOTU5MDgw
ZWU0YTgyMzY3YWFjMzVmNDhhZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9TdG9y
YWdlL1dlYlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvU3Rv
cmFnZS9XZWJTdG9yYWdlVHJhY2tlckNsaWVudC5oCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KICAKKyNpbXBvcnQgIlN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmgiCiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1N0b3JhZ2VUcmFja2VyQ2xpZW50Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNGY4YzlhMzVjN2E0
OTMzOGI2ZGFhYWQ2MTc3MDk5ZWM0YmNjNjc2Zi4uY2E4MjlmMDljOTJhOTkyODY1ZmVmYWZmMjIy
ZTc5NjMzZTRhNGI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMzYs
NiArMzYsNyBAQAogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01SYW5n
ZUludGVybmFsLmgiCiAjaW1wb3J0ICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCisjaW1wb3J0ICJT
dG9yYWdlVGhyZWFkLmgiCiAjaW1wb3J0ICJXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCIKICNp
bXBvcnQgIldlYkFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlz
dEludGVybmFsLmgiCkBAIC0xNzUsNyArMTc2LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJp
dHlPcmlnaW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbXBvcnQg
PFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU3RvcmFnZVRocmVhZC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TdHlsZVByb3BlcnRpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4
dFJlc291cmNlRGVjb2Rlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaHJlYWRDaGVjay5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMDAwYWI2ZDQ2NjhkZmNl
ODEwZTJhZDgzYjk5ZmJjY2ZjM2EzMDBjMC4uOThkMzc2YmEzYTMzYzAxZjVhNjUzZTkxZDY5ZGYx
Mzk4MmZmZDUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBA
IC04NSw3ICs4NSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TY2hlbWVSZWdpc3RyeS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRp
bmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlVHJhY2tlci5oPgogI2luY2x1ZGUgPHVu
aXN0ZC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>