<?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>123647</bug_id>
          
          <creation_ts>2013-11-01 16:12:05 -0700</creation_ts>
          <short_desc>Add WebCrypto AES-CBC</short_desc>
          <delta_ts>2013-11-01 23:57:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mkwst</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>946084</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 16:12:05 -0700</bug_when>
    <thetext>Implement some functions from AES-CBC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946091</commentid>
    <comment_count>1</comment_count>
      <attachid>215776</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 16:29:07 -0700</bug_when>
    <thetext>Created attachment 215776
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946093</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 16:31:45 -0700</bug_when>
    <thetext>Attachment 215776 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-192-encrypt-decrypt-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-192-encrypt-decrypt.html&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-256-encrypt-decrypt-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-256-encrypt-decrypt.html&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-encrypt-decrypt-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-encrypt-decrypt-with-padding-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-encrypt-decrypt-with-padding.html&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-encrypt-decrypt.html&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-invalid-length-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-invalid-length.html&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-wrong-key-class-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/aes-cbc-wrong-key-class.html&apos;, u&apos;LayoutTests/crypto/subtle/hmac-sign-verify-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/hmac-sign-verify.html&apos;, u&apos;LayoutTests/crypto/subtle/resources/common.js&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/Vector.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoOperationData.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoOperationData.h&apos;, u&apos;Source/WebCore/bindings/js/JSDOMPromise.h&apos;, u&apos;Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmAesCbcParams.h&apos;, u&apos;Source/WebCore/crypto/CryptoKey.h&apos;, u&apos;Source/WebCore/crypto/CryptoKeyAES.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoKeyAES.h&apos;, u&apos;Source/WebCore/crypto/SubtleCrypto.idl&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyHMAC.h&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmHMACMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmRegistryMac.cpp&apos;]&quot; exit_code: 1
Source/WebCore/bindings/js/JSCryptoOperationData.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:38:  CryptoAlgorithmAES_CBC::s_name is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:48:  CryptoAlgorithmAES_CBC::create is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:53:  CryptoAlgorithmAES_CBC::identifier is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:58:  CryptoAlgorithmAES_CBC::importKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:70:  CryptoAlgorithmAES_CBC::exportKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp:142:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:39:  transformAES_CBC is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:87:  CryptoAlgorithmAES_CBC::encrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:100:  CryptoAlgorithmAES_CBC::decrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:113:  CryptoAlgorithmAES_CBC::generateKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/CryptoKey.h:43:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/crypto/CryptoKey.h:44:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/CryptoKey.h:45:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 14 in 36 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>946100</commentid>
    <comment_count>3</comment_count>
      <attachid>215776</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-01 16:37:36 -0700</bug_when>
    <thetext>Comment on attachment 215776
proposed patch

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

&gt;&gt; Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp:142
&gt;&gt; +    memcpy(result-&gt;iv,ivData.first, ivData.second);
&gt; 
&gt; Missing space after ,  [whitespace/comma] [3]

Missing space.

&gt; Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp:144
&gt; +    return std::move(result);

Shouldn’t need to do std::move here.

&gt; Source/WebCore/crypto/CryptoAlgorithmAesCbcParams.h:39
&gt; +    char iv[16];

I’d just use a WTF FixedArray here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946106</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 16:48:59 -0700</bug_when>
    <thetext>&gt; Shouldn’t need to do std::move here.

It appears to be necessary when the type is not the same. Local variable is std::unique_ptr&lt;CryptoAlgorithmAesCbcParams&gt;, and the return type is std::unique_ptr&lt;CryptoAlgorithmParameters&gt;.

&gt; I’d just use a WTF FixedArray here.

Neat, didn&apos;t know about this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946107</commentid>
    <comment_count>5</comment_count>
      <attachid>215779</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 16:57:13 -0700</bug_when>
    <thetext>Created attachment 215779
patch for landing

Added a const version of FixedArray::data() with an rs=Anders on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946109</commentid>
    <comment_count>6</comment_count>
      <attachid>215779</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 16:58:17 -0700</bug_when>
    <thetext>Comment on attachment 215779
patch for landing

Rejecting attachment 215779 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 215779, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Anders Carlson found in /Volumes/Data/EWS/WebKit/LayoutTests/ChangeLog does not appear to be a valid reviewer according to contributors.json.
/Volumes/Data/EWS/WebKit/LayoutTests/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://webkit-queues.appspot.com/results/19558118</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946111</commentid>
    <comment_count>7</comment_count>
      <attachid>215780</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 17:03:33 -0700</bug_when>
    <thetext>Created attachment 215780
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946124</commentid>
    <comment_count>8</comment_count>
      <attachid>215780</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 17:46:15 -0700</bug_when>
    <thetext>Comment on attachment 215780
patch for landing

Rejecting attachment 215780 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
eUnits.dia -c /Volumes/Data/EWS/WebKit/Source/WebCore/editing/VisibleUnits.cpp -o /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/VisibleUnits.o


** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/CryptoAlgorithmAES_CBCMac.o crypto/mac/CryptoAlgorithmAES_CBCMac.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: http://webkit-queues.appspot.com/results/19588153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946179</commentid>
    <comment_count>9</comment_count>
      <attachid>215796</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 23:09:15 -0700</bug_when>
    <thetext>Created attachment 215796
patch for landing

With a Mountain Lion build fix, and an attribution for a minor part of layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946181</commentid>
    <comment_count>10</comment_count>
      <attachid>215796</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 23:10:20 -0700</bug_when>
    <thetext>Comment on attachment 215796
patch for landing

Rejecting attachment 215796 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 215796, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/19628186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946182</commentid>
    <comment_count>11</comment_count>
      <attachid>215798</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 23:25:01 -0700</bug_when>
    <thetext>Created attachment 215798
maybe now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946184</commentid>
    <comment_count>12</comment_count>
      <attachid>215798</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 23:57:51 -0700</bug_when>
    <thetext>Comment on attachment 215798
maybe now?

Clearing flags on attachment: 215798

Committed r158485: &lt;http://trac.webkit.org/changeset/158485&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946185</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 23:57:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215776</attachid>
            <date>2013-11-01 16:29:07 -0700</date>
            <delta_ts>2013-11-01 16:57:13 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>AES-CBC.txt</filename>
            <type>text/plain</type>
            <size>87858</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTg0NjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJDcnlwdG8gQUVTLUNCQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6
IEFkZGVkIGEgY29tbWVudCB0byBWZWN0b3IgY29uc3RydWN0b3IgYWJvdXQgaG93IGl0IGlzIGRp
ZmZlcmVudAorICAgICAgICBmcm9tIHN0ZDo6dmVjdG9yLgorCiAyMDEzLTExLTAxICBFbWlsaW8g
UG96dWVsbyBNb25mb3J0ICA8cG9jaHUyN0BnbWFpbC5jb20+CiAKICAgICAgICAgSFBQQSBidWls
ZCBmaXhlcwpJbmRleDogU291cmNlL1dURi93dGYvVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsNyArNTMyLDggQEAgcHVibGljOgogICAg
IFZlY3RvcigpCiAgICAgewogICAgIH0KLSAgICAKKworICAgIC8vIFVubGlrZSBpbiBzdGQ6OnZl
Y3RvciwgdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCBpbml0aWFsaXplIFBPRCB0eXBlcy4KICAg
ICBleHBsaWNpdCBWZWN0b3Ioc2l6ZV90IHNpemUpCiAgICAgICAgIDogQmFzZShzaXplLCBzaXpl
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDEzLTExLTAx
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJD
cnlwdG8gQUVTLUNCQworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIzNjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdHM6IGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0
bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNy
eXB0Lmh0bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRl
Y3J5cHQtd2l0aC1wYWRkaW5nLmh0bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVz
LWNiYy1lbmNyeXB0LWRlY3J5cHQuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1YnRsZS9h
ZXMtY2JjLWludmFsaWQtbGVuZ3RoLmh0bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUv
YWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omdl
dFByb3BlcnR5KTogRmFjdG9yZWQgb3V0IGEgZnVuY3Rpb24gdG8gZ2V0IGEgcHJvcGVydHkgYXMg
SlNWYWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OmdldEhhc2hBbGdvcml0aG0pOiBVc2UgaXQuCisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVBZXNDYmNQYXJhbXMpOiBBZGRlZCBjb252ZXJ0ZXIgZm9y
IEFlc0NiY1BhcmFtcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQpOiBTdXBwb3J0IEFFU19DQkMuCisgICAg
ICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JEZWNyeXB0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkpOiBTdXBwb3J0IGFsbAor
ICAgICAgICBhbGdvcml0aG1zLCBhbGwgdGhlIG5ldyBvbmVzIGp1c3QgaGF2ZSB0cml2aWFsIGRp
Y3Rpb25hcmllcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckV4cG9ydEtleSk6IERpdHRvLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpzZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmg6IEFkZGVkLgorICAgICAgICBNb3ZlZCBD
cnlwdG9PcGVyYXRpb25EYXRhIGJpbmRpbmdzIG91dCBvZiBKU1N1YnRsZUNyeXB0b0N1c3RvbS5j
cHAsIHNvIHRoYXQgd2UKKyAgICAgICAgY291bGQgdXNlIHRoZW0gaW4gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5LmNwcC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5o
OiAoV2ViQ29yZTo6UHJvbWlzZVdyYXBwZXI6OnJlamVjdCk6IEFkZGVkIGEgc3BlY2lhbGl6YXRp
b24KKyAgICAgICAgdG8gcmVqZWN0IHdpdGggbnVsbCByZXN1bHQuIFRoZSBzcGVjIGRvZXNuJ3Qg
YWN0dWFsbHkgc2F5IGhvdyBhbGdvcml0aG1zIGZhaWwuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNy
eXB0bzo6ZW5jcnlwdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86
OmRlY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTU3VidGxlQ3J5cHRvOjpzaWdu
KTogU3R5bGUgZml4LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0FsZ29yaXRobUFlc0NiY1Bh
cmFtcy5oOiBBZGRlZC4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXkuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0tleUNsYXNzKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9L
ZXlITUFDLmg6CisgICAgICAgIChXZWJDb3JlOjphc0NyeXB0b0tleUhNQUMpOgorICAgICAgICBB
ZGRlZCBwb29yIG1hbidzIFJUVEksIHNvIHRoYXQgd2UgY2FuIHNhZmVseSB1cGNhc3QgS2V5cyBw
YXNzZWQgZnJvIEphdmFTY3JpcHQgY29kZS4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXlB
RVMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6Q3J5cHRvS2V5
QUVTKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6fkNyeXB0b0tleUFFUyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24p
OgorICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXlBRVMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjphc0NyeXB0b0tleUFFUyk6CisgICAgICAgIEFFUyBrZXlzIGFyZSB0aGUgc2FtZSBmb3Ig
YWxsIGFsZ29yaXRobXMsIGJ1dCB0aGV5IHN0aWxsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFsZ29y
aXRobS4KKworICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uaWRsOiBBZGRlZCBlbmNyeXB0
L2RlY3J5cHQuCisKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0Fs
Z29yaXRobUFFU19DQkM6On5DcnlwdG9BbGdvcml0aG1BRVNfQ0JDKToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDOjpleHBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL21h
Yy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
Ojp0cmFuc2Zvcm1BRVNfQ0JDKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFF
U19DQkM6OmVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6ZGVjcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpn
ZW5lcmF0ZUtleSk6CisgICAgICAgIEFkZGVkLgorCisgICAgICAgICogY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1ITUFDTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRo
bUhNQUM6OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6dmVy
aWZ5KToKKyAgICAgICAgQ2hlY2sga2V5IGNsYXNzIGJlZm9yZSBjYXN0aW5nIGl0IHRvIENyeXB0
b0tleUhNQUMuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpwbGF0
Zm9ybVJlZ2lzdGVyQWxnb3JpdGhtcyk6IFJlZ2lzdGVyIEFFUy1DQkMKKyAgICAgICAgb24gTWFj
LCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkLgorCiAyMDEzLTExLTAxICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBLaWxsIFJlbmRlckFyZW5hLgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTU4NDYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NTA1LDYgKzU1MDUsMTQgQEAKIAkJRTEyNUY4
MzUxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4MzMxODIyRjE4QTAwRDg0Q0Q5IC8q
IENyeXB0b0tleUhNQUMuY3BwICovOyB9OwogCQlFMTI1RjgzNjE4MjJGMThBMDBEODRDRDkgLyog
Q3J5cHRvS2V5SE1BQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuaCAqLzsgfTsK
IAkJRTEyNUY4MzgxODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4Mzcx
ODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwICovOyB9OworCQlF
MTI1RjgzQTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzOTE4
MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmggKi87IH07CisJ
CUUxMjVGODNEMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4M0IxODI0
MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAgKi87IH07CisJCUUxMjVG
ODNFMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODNDMTgyNDExRTcwMEQ4
NENEOSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCAqLzsgfTsKKwkJRTEyNUY4NDExODI0MjUz
QTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4M0YxODI0MjUzQTAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwICovOyB9OworCQlFMTI1Rjg0MjE4MjQyNTNBMDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4NDAxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0
b0FsZ29yaXRobUFFU19DQkMuaCAqLzsgfTsKKwkJRTEyNUY4NDUxODI0MjVDOTAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4NDMxODI0MjVDOTAwRDg0Q0Q5IC8qIENyeXB0b0Fs
Z29yaXRobUFFU19DQkNNYWMuY3BwICovOyB9OworCQlFMTI1Rjg0RDE4MjQyODlEMDBEODRDRDkg
LyogQ3J5cHRvS2V5QUVTLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxMjVGODRCMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwICov
OyB9OworCQlFMTI1Rjg0RTE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRvS2V5QUVTLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1Rjg0QzE4MjQyODlE
MDBEODRDRDkgLyogQ3J5cHRvS2V5QUVTLmggKi87IH07CiAJCUUxMjcxOUM3MEVFRUMxNjgwMEY2
MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTI3MTlDNjBFRUVDMTY4MDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5o
ICovOyB9OwogCQlFMTI3MTlDQTBFRUVDMjEzMDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI3MTlDOTBF
RUVDMjEzMDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5jcHAgKi87IH07CiAJCUUxMjcxQTBCMEVF
RUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxQTBBMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3Jr
ZXJOYXZpZ2F0b3IuaCAqLzsgfTsKQEAgLTEyNTExLDYgKzEyNTE5LDE0IEBACiAJCUUxMjVGODMz
MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0tleUhNQUMuY3BwOyBwYXRoID0ga2V5cy9DcnlwdG9L
ZXlITUFDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNUY4MzQxODIyRjE4
QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQ3J5cHRvS2V5SE1BQy5oOyBwYXRoID0ga2V5cy9DcnlwdG9LZXlITUFDLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjVGODM3MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlw
dG9BbGdvcml0aG1ITUFDTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwOyBwYXRoID0gbWFjL0NyeXB0b0FsZ29yaXRo
bUhNQUNNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1RjgzOTE4MjQx
MDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1RjgzQjE4MjQxMUU3MDBEODRDRDkgLyogSlND
cnlwdG9PcGVyYXRpb25EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUxMjVGODNDMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDcnlwdG9PcGVyYXRpb25EYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODNGMTgyNDI1M0EwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMTI1Rjg0MDE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODQzMTgyNDI1Qzkw
MEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwOyBwYXRo
ID0gbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMTI1Rjg0QjE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRvS2V5QUVTLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0tleUFFUy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODRDMTgyNDI4OUQwMEQ4NENEOSAvKiBD
cnlwdG9LZXlBRVMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvS2V5
QUVTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjcxOUM2MEVFRUMxNjgwMEY2
MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5hdmlnYXRvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNzE5Qzkw
RUVFQzIxMzAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxMjcxQTBBMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyTmF2aWdhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI5OCw2ICsxOTMxNCw4IEBACiAJCQkJMUM4MUJB
MDQwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLywKIAkJCQlFMTU3
QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLywK
IAkJCQlFMTU3QThFRjE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVy
LmggKi8sCisJCQkJRTEyNUY4M0IxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9u
RGF0YS5jcHAgKi8sCisJCQkJRTEyNUY4M0MxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3Bl
cmF0aW9uRGF0YS5oICovLAogCQkJCUUxQzY1NzEwMTgxNUY5REQwMDI1NkNERCAvKiBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwICovLAogCQkJCUUxQzY1NzExMTgxNUY5REQwMDI1NkNE
RCAvKiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuaCAqLywKIAkJCQlCQ0U0MzhBMTE0MEMw
REJGMDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmNwcCAqLywKQEAgLTIwMTMxLDYgKzIwMTQ5LDcg
QEAKIAkJRTE3MkFGNzExODBGMzQzNDAwRkJBREI5IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTEyNUY4NDMxODI0MjVDOTAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwICovLAogCQkJCUUxMjVGODM3MTgyMkYxRUIw
MEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAqLywKIAkJCQlFMUJCODRBQzE4
MjJDQTc0MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwICovLAogCQkJ
CUUxMjVGODJEMTgyMkNGRkYwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExTWFjLmNwcCAq
LywKQEAgLTIwMTQxLDYgKzIwMTYwLDggQEAKIAkJRTE3MkFGN0MxODBGM0IwRDAwRkJBREI5IC8q
IGFsZ29yaXRobXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCUUxMjVGODNGMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNw
cCAqLywKKwkJCQlFMTI1Rjg0MDE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQy5oICovLAogCQkJCUUxMjVGODJGMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1ITUFDLmNwcCAqLywKIAkJCQlFMTI1RjgzMDE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxn
b3JpdGhtSE1BQy5oICovLAogCQkJCUUxMjVGODI5MTgyMkNGRUMwMEQ4NENEOSAvKiBDcnlwdG9B
bGdvcml0aG1TSEExLmNwcCAqLywKQEAgLTIwMTUyLDYgKzIwMTczLDggQEAKIAkJRTE5REEyOUQx
ODE5OTVDRTAwMDg4QkM4IC8qIGtleXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUUxMjVGODRCMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMu
Y3BwICovLAorCQkJCUUxMjVGODRDMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCAq
LywKIAkJCQlFMTI1RjgzMzE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgKi8s
CiAJCQkJRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuaCAqLywKIAkJ
CSk7CkBAIC0yMDE2MSw2ICsyMDE4NCw3IEBACiAJCUUxQzY1NzE0MTgxNjAxNUYwMDI1NkNERCAv
KiBwYXJhbWV0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlFMTI1RjgzOTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFy
YW1zLmggKi8sCiAJCQkJRTE5REEyOUIxODE4OUFERDAwMDg4QkM4IC8qIENyeXB0b0FsZ29yaXRo
bUhtYWNLZXlQYXJhbXMuaCAqLywKIAkJCQlFMUM2NTcxRTE4MTZFNTAzMDAyNTZDREQgLyogQ3J5
cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5oICovLAogCQkJKTsKQEAgLTIzNzMwLDYgKzIzNzU0LDcg
QEAKIAkJCQk5QjUwQjFERTE3Q0Q0QzBGMDA4N0Y2M0MgLyogRm9ybU5hbWVkSXRlbS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ3N0U3NzcwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJREFFRDIwMzExNkYyNDQ0ODAwNzBFQzBGIC8qIFBhZ2VDb25zb2xl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTI1RjgzRTE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlw
dG9PcGVyYXRpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgyMDg5MzE0N0QzNUY5MDAx
MEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM0NzQyREQx
MzQzNjJGMDAwNTMxQkMyIC8qIFBhZ2VEZWJ1Z2dlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywK
QEAgLTIzODM2LDYgKzIzODYxLDcgQEAKIAkJCQk1MTRDNzY3NTBDRTkyM0ExMDA3RUYzQ0QgLyog
UHJvdGVjdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUEwNTI1NjEwNTg4NzQwMDBD
QzlFOTUgLyogUHJvdGVjdGlvblNwYWNlSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGOEUx
MUExMjU2NTkyNjAwMjMwRkY3IC8qIFByb3h5U2VydmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MTI1Rjg0RTE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRvS2V5QUVTLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRjk0NUVDQzE2MUY3RjM2MDA5NzFCQzggLyogUHNldWRvRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDA4MUZGMDAxNkIwQTJEMzAwOEFBQTdBIC8qIFB1YmxpY1N1ZmZpeC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTBGQjA4NEIxNEUxNUM3RTAwQTNEQjk4IC8qIFB1YmxpY1VSTE1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjM4NDUsNiArMjM4NzEsNyBAQAogCQkJCTM3OUUz
NzE3MTM3MzZBNjYwMEI5RTkxOSAvKiBRdW90ZWRQcmludGFibGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyNzk3MjBEMDBCRjIyMDA3MUI3ODIgLyogUmFkaWFsR3JhZGllbnRBdHRyaWJ1
dGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTI1Rjg0MjE4MjQyNTNBMDBEODRDRDkgLyogQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0MxMjUxRjEy
RDAwM0VGMjY5IC8qIFJhZGlvSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNjU4RkZB
NjE1MjJFRkFBMDBERDU1OTUgLyogUmFkaW9Ob2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5MTgwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0
ODA5LDYgKzI0ODM2LDcgQEAKIAkJCQkxNDQ3NkFBODE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGlu
Z01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBY
TGlua05hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwMEI5MzE4ODEzQkE4REJBMDAzNUE5NDgg
LyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMjVGODNBMTgyNDEw
NDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTAwQjkzMThDMTNCQThEQ0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUMyODA0NjEzOERDMjQxMDA3OUI3RTIgLyogWE1MRXJy
b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1M
SHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2MjYsNiArMjU2NTQsNyBAQAogCQkJ
CTA3QzU5QjY4MTdGNzg0QkEwMDBGQkNCQiAvKiBNZWRpYVNvdXJjZVN0YXRlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTlBOUM0QTBBQTVFM0JEMDBCNjk0QjIgLyogRE9NSFRNTEJvZHlFbGVt
ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUxODNCNDMwQUE2OTI2MTAwRjE5RkEzIC8qIERP
TUhUTUxCUkVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMTI1Rjg0RDE4MjQyODlEMDBE
ODRDRDkgLyogQ3J5cHRvS2V5QUVTLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1QkE0Q0RFMEFB
Njg2MUIwMDg4MDUyRCAvKiBET01IVE1MQnV0dG9uRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTkzRjlCNjU3MEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1REYyRjhGMEFBM0M4ODEwMEFENjRDNSAvKiBET01IVE1MQ29s
bGVjdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAtMjYzNDYsNiArMjYzNzUsNyBAQAogCQkJCTUx
MUVGMkM3MTdGMEZEMzUwMEU0RkExNiAvKiBKU0lEQk9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDOTREMTRFMEMyNzVDNjgwMDZCQzYxNyAvKiBKU0hpc3RvcnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFN0IxOTMwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTI1RjgzRDE4MjQxMUU3MDBEODRDRDkgLyogSlND
cnlwdG9PcGVyYXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTdFNDEyMTA5MTU0
RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDOTdFNDJDMTA5MTVCMDYwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEEyREVGMEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxB
bmNob3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2NjcsNiArMjc2OTcsNyBAQAog
CQkJCTk3QkM4NDgzMTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNDYwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGlu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTA1REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4
dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTEyNUY4NDExODI0
MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJDM0RBNDgwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzM0ExNDJFMEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNERDcxMjUxRjEyRDAwM0VGMjY5IC8qIFRl
eHRGaWVsZElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NzM5LDYgKzI3NzcwLDcg
QEAKIAkJCQlGRDMxNjBBRTEyQjAyNkY3MDBDMUEzNTkgLyogVmVjdG9yTWF0aC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCRTg4RTBERTE3MTVEMkEyMDA2NThEOTggLyogVmlkZW9UcmFjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBFMTE3MTVEMkEyMDA2NThEOTggLyogVmlkZW9UcmFj
a0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTEyNUY4NDUxODI0MjVDOTAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VGNDE4
Q0UxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTNGRkZGOUFEMTU5RDlCMDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUYwOTlFNjQ5MjAwNTZFNTgxIC8qIFZpc2li
bGVQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAko
cmV2aXNpb24gMTU4NDYxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9B
bGdvcml0aG1EaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBA
CiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bUFlc0NiY1BhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMu
aCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCiAKQEAgLTgwLDYgKzgyLDE3IEBAIGJvb2wgSlND
cnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
c3RhdGljIEpTVmFsdWUgZ2V0UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihleGVj
LCBuYW1lKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOworCisgICAgaWYgKG9iamVj
dC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICByZXR1
cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKKworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworfQorCiBzdGF0aWMgYm9vbCBnZXRIYXNoQWxnb3JpdGhtKEpTRGljdGlvbmFyeSYg
ZGljdGlvbmFyeSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciYgcmVzdWx0KQogewogICAgIC8v
IEZYSU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93IHRvIHJldHVybiBKU1ZhbHVlcywgYW5kIHVz
ZSB0aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFsdWUuCkBAIC05MCwxNSArMTAzLDkgQEAgc3Rh
dGljIGJvb2wgZ2V0SGFzaEFsZ29yaXRobShKU0RpY3Rpb25hcgogICAgIElkZW50aWZpZXIgaWRl
bnRpZmllcihleGVjLCAiaGFzaCIpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CiAK
LSAgICBKU1ZhbHVlIGhhc2ggPSBqc1VuZGVmaW5lZCgpOwotICAgIGlmIChvYmplY3QtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkgewotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaGFz
aCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgSlNW
YWx1ZSBoYXNoID0gZ2V0UHJvcGVydHkoZXhlYywgb2JqZWN0LCAiaGFzaCIpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGhh
c2guaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
Tk9UX1NVUFBPUlRFRF9FUlIpOwpAQCAtMTA4LDYgKzExNSwzNSBAQCBzdGF0aWMgYm9vbCBnZXRI
YXNoQWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAgcmV0dXJuIEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcihleGVjLCBoYXNoLCByZXN1bHQpOwogfQog
CitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0
ZUFlc0NiY1BhcmFtcyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSlNWYWx1ZSBpdiA9
IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgpLCAiaXYiKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcz4gcmVzdWx0ID0gc3RkOjptYWtl
X3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXM+KCk7CisKKyAgICBDcnlwdG9PcGVy
YXRpb25EYXRhIGl2RGF0YTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZShleGVjLCBpdiwgaXZEYXRhKSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoaXZEYXRhLnNl
Y29uZCAhPSAxNikgeworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZUVycm9yKGV4ZWMsICJBRVMtQ0JDIGluaXRpYWxpemF0aW9uIGRhdGEgbXVzdCBiZSAxNiBi
eXRlcyIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgbWVtY3B5KHJl
c3VsdC0+aXYsaXZEYXRhLmZpcnN0LCBpdkRhdGEuc2Vjb25kKTsKKworICAgIHJldHVybiBzdGQ6
Om1vdmUocmVzdWx0KTsKK30KKwogc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiBjcmVhdGVIbWFjUGFyYW1zKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CkBAIC0xNDgs
NyArMTg0LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYQogICAg
IHJldHVybiBzdGQ6Om1vdmUocmVzdWx0KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFy
YW1ldGVyc0ZvckVuY3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQ
YXJhbWV0ZXJzRm9yRW5jcnlwdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBzd2l0Y2gg
KGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNf
UEtDUzFfdjFfNToKQEAgLTE1OCw3ICsxOTQsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNE
U0E6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RIOgogICAgIGNhc2Ug
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NUUjoKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDOgorICAgICAgICByZXR1
cm4gY3JlYXRlQWVzQ2JjUGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OkFFU19DTUFDOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6QUVTX0dDTToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19D
RkI6CkBAIC0xNzcsNyArMjE2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcgogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRl
Y3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxn
b3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RGVjcnlwdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkg
ewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToK
QEAgLTE4Nyw3ICsyMjYsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNEU0E6CiAgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RIOgogICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6QUVTX0NUUjoKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5P
VF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDOgorICAgICAgICByZXR1cm4gY3JlYXRlQWVz
Q2JjUGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OkFFU19DTUFDOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0dD
TToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DRkI6CkBAIC00MDMs
MTEgKzQ0NSwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAg
ICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ01BQzoKICAgICBjYXNlIENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19HQ006CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpBRVNfQ0ZCOgotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9U
X1NVUFBPUlRFRF9FUlIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICBjYXNl
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUM6CiAgICAgICAgIHJldHVybiBjcmVhdGVI
bWFjS2V5UGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkRIOgorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPigpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hB
XzE6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0OgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoKQEAgLTQzNyw2ICs0NzksNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgY2FzZSBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0ZCOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6SE1BQzoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkRI
OgorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzPigpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6CiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0OgogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCIKKworI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBzZXF1ZW5jZU9mQ3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiByZXN1bHQpCit7CisgICAgdW5zaWduZWQg
c2VxdWVuY2VMZW5ndGg7CisgICAgSlNPYmplY3QqIHNlcXVlbmNlID0gdG9KU1NlcXVlbmNlKGV4
ZWMsIHZhbHVlLCBzZXF1ZW5jZUxlbmd0aCk7CisgICAgaWYgKCFzZXF1ZW5jZSkgeworICAgICAg
ICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlcXVlbmNlTGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgSlNWYWx1ZSBpdGVtID0gc2VxdWVuY2UtPmdldChleGVjLCBpKTsKKyAgICAg
ICAgaWYgKEFycmF5QnVmZmVyKiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0ZW0pKQorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVm
ZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICBlbHNlIGlmIChS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBidWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcoaXRl
bSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0
PGNoYXIqPihidWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwgYnVmZmVyVmlldy0+Ynl0ZUxlbmd0
aCgpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
Ik9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVyVmlldyBvYmplY3RzIGNhbiBiZSBwYXJ0
IG9mIENyeXB0b09wZXJhdGlvbkRhdGEgc2VxdWVuY2UiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjcnlw
dG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBDcnlwdG9PcGVyYXRpb25EYXRhJiByZXN1bHQpCit7CisgICAgaWYgKEFycmF5QnVmZmVyKiBi
dWZmZXIgPSB0b0FycmF5QnVmZmVyKHZhbHVlKSkKKyAgICAgICAgcmVzdWx0ID0gc3RkOjptYWtl
X3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVu
Z3RoKCkpOworICAgIGVsc2UgaWYgKFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlclZpZXcg
PSB0b0FycmF5QnVmZmVyVmlldyh2YWx1ZSkpCisgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWFrZV9w
YWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwgYnVmZmVy
Vmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgIk9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVyVmlldyBvYmplY3RzIGNhbiBi
ZSBwYXNzZWQgYXMgQ3J5cHRvT3BlcmF0aW9uRGF0YSIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9PcGVyYXRpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0NyeXB0b09wZXJhdGlv
bkRhdGFfaAorI2RlZmluZSBKU0NyeXB0b09wZXJhdGlvbkRhdGFfaAorCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBKU0Mg
eworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU1ZhbHVlOworfQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IGNoYXIqLCBzaXplX3Q+IENy
eXB0b09wZXJhdGlvbkRhdGE7CisKK2Jvb2wgc2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgVmVjdG9yPENyeXB0b09w
ZXJhdGlvbkRhdGE+Jik7Citib29sIGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgQ3J5cHRvT3BlcmF0aW9uRGF0YSYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKyNl
bmRpZiAvLyBKU0NyeXB0b09wZXJhdGlvbkRhdGFfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlLmgJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxMyBAQCBpbmxp
bmUgdm9pZCBQcm9taXNlV3JhcHBlcjo6cmVqZWN0KGNvbnN0CiB9CiAKIHRlbXBsYXRlPD4KK2lu
bGluZSB2b2lkIFByb21pc2VXcmFwcGVyOjpyZWplY3QoY29uc3Qgc3RkOjpudWxscHRyX3QmKQor
eworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKKyAgICBtX3Byb21pc2UtPnJlc29sdmVyKCktPnJlamVjdElmTm90UmVzb2x2ZWQoZXhlYywg
SlNDOjpqc051bGwoKSk7Cit9CisKK3RlbXBsYXRlPD4KIGlubGluZSB2b2lkIFByb21pc2VXcmFw
cGVyOjpmdWxmaWxsPFN0cmluZz4oY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTU4NDYxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0
bGVDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiSlNDcnlwdG9PcGVyYXRp
b25EYXRhLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgogCkBAIC01NSw0MiArNTYsNiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobT4gCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgc2VxdWVu
Y2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgcmVzdWx0KQotewotICAgIHVu
c2lnbmVkIHNlcXVlbmNlTGVuZ3RoOwotICAgIEpTT2JqZWN0KiBzZXF1ZW5jZSA9IHRvSlNTZXF1
ZW5jZShleGVjLCB2YWx1ZSwgc2VxdWVuY2VMZW5ndGgpOwotICAgIGlmICghc2VxdWVuY2UpIHsK
LSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXF1ZW5jZUxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgaXRlbSA9IHNlcXVlbmNlLT5nZXQoZXhlYywgaSk7
Ci0gICAgICAgIGlmIChBcnJheUJ1ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hh
cio+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpKTsKLSAgICAgICAgZWxz
ZSBpZiAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJW
aWV3KGl0ZW0pKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0
aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSksIGJ1ZmZlclZpZXctPmJ5
dGVMZW5ndGgoKSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0cyBjYW4g
YmUgcGFydCBvZiBDcnlwdG9PcGVyYXRpb25EYXRhIHNlcXVlbmNlIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBib29sIGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUsIENyeXB0b09wZXJhdGlvbkRhdGEmIHJlc3VsdCkKLXsKLSAgICBpZiAo
QXJyYXlCdWZmZXIqIGJ1ZmZlciA9IHRvQXJyYXlCdWZmZXIodmFsdWUpKQotICAgICAgICByZXN1
bHQgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpLCBi
dWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgZWxzZSBpZiAoUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gYnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZhbHVlKSkKLSAgICAgICAgcmVzdWx0
ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclZpZXctPmJhc2VBZGRy
ZXNzKCkpLCBidWZmZXJWaWV3LT5ieXRlTGVuZ3RoKCkpOwotICAgIGVsc2UgewotICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCAiT25seSBBcnJheUJ1ZmZlciBhbmQgQXJyYXlCdWZmZXJWaWV3
IG9iamVjdHMgY2FuIGJlIHBhcnQgb2YgQ3J5cHRvT3BlcmF0aW9uRGF0YSBzZXF1ZW5jZSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0
aWMgYm9vbCBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIENyeXB0b0tleUZvcm1hdCYgcmVzdWx0KQogewogICAgIFN0cmluZyBrZXlGb3Jt
YXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CkBAIC0xNDYsNiAr
MTExLDk4IEBAIHN0YXRpYyBib29sIGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKEUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZW5jcnlwdChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3Jp
dGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlm
ICghYWxnb3JpdGhtKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5
cHQoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
UmVmUHRyPENyeXB0b0tleT4ga2V5ID0gdG9DcnlwdG9LZXkoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSkpOworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisKKyAgICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlRW5jcnlwdCkpIHsKKyAg
ICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3Vy
Y2UsIEVycm9yTWVzc2FnZUxldmVsLCAiS2V5IHVzYWdlcyBkb2VzIG5vdCBpbmNsdWRlICdlbmNy
eXB0JyIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Q3J5
cHRvT3BlcmF0aW9uRGF0YT4gZGF0YTsKKyAgICBpZiAoIXNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRp
b25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEp
KSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IEpTUHJv
bWlzZTo6Y3JlYXRlV2l0aFJlc29sdmVyKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCgpKTsKKyAg
ICBhdXRvIHByb21pc2VXcmFwcGVyID0gUHJvbWlzZVdyYXBwZXI6OmNyZWF0ZShnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhbGdvcml0
aG0tPmVuY3J5cHQoKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlV3Jh
cHBlciksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgcmV0dXJu
IHByb21pc2U7Cit9CisKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQorICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRo
bUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAo
IWFsZ29yaXRobSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0
KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFJl
ZlB0cjxDcnlwdG9LZXk+IGtleSA9IHRvQ3J5cHRvS2V5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpKTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OworCisgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZURlY3J5cHQpKSB7CisgICAg
ICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgIktleSB1c2FnZXMgZG9lcyBub3QgaW5jbHVkZSAnZGVjcnlw
dCciKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgVmVjdG9yPENyeXB0
b09wZXJhdGlvbkRhdGE+IGRhdGE7CisgICAgaWYgKCFzZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0aW9u
RGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkg
eworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBKU1Byb21pc2UqIHByb21pc2UgPSBKU1Byb21p
c2U6OmNyZWF0ZVdpdGhSZXNvbHZlcihleGVjLT52bSgpLCBnbG9iYWxPYmplY3QoKSk7CisgICAg
YXV0byBwcm9taXNlV3JhcHBlciA9IFByb21pc2VXcmFwcGVyOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
KCksIHByb21pc2UpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYWxnb3JpdGht
LT5kZWNyeXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBw
ZXIpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIHJldHVybiBw
cm9taXNlOworfQorCiBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKQEAgLTE4Myw3ICsyNDAs
NyBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSogCiAgICAgYXV0byBw
cm9taXNlV3JhcHBlciA9IFByb21pc2VXcmFwcGVyOjpjcmVhdGUoZ2xvYmFsT2JqZWN0KCksIHBy
b21pc2UpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYWxnb3JpdGhtLT5zaWdu
KCpwYXJhbWV0ZXJzLCAqa2V5LmdldCgpLCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBwZXIp
LCBlYyk7CisgICAgYWxnb3JpdGhtLT5zaWduKCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6
Om1vdmUocHJvbWlzZVdyYXBwZXIpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdv
cml0aG1BZXNDYmNQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNfaAorI2RlZmluZSBD
cnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNfaAorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0FsZ29yaXRo
bUFlc0NiY1BhcmFtcyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsK
K3B1YmxpYzoKKyAgICAvLyBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNVVNUIGJlIDE2IGJ5
dGVzLgorICAgIGNoYXIgaXZbMTZdOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zX2gKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1BZXND
YmNQYXJhbXMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMK
K25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5oCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vQ3J5cHRvS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlcjsK
IAorRU5VTV9DTEFTUyhDcnlwdG9LZXlDbGFzcykKK3sKKyAgICBITUFDLAorICAgIEFFUworfTsK
KwogY2xhc3MgQ3J5cHRvS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8Q3J5cHRvS2V5PiB7CiBwdWJs
aWM6CiAgICAgQ3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIENyeXB0b0tleVR5
cGUsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKICAgICB2aXJ0dWFsIH5Dcnlw
dG9LZXkoKTsKIAorICAgIHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCA9
IDA7CisKICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwogICAgIGJvb2wgZXh0cmFjdGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2V4dHJhY3RhYmxlOyB9CiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkQWxn
b3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKwor
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgorI2luY2x1ZGUg
IkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3J5cHRvS2V5QUVTOjpDcnlwdG9LZXlBRVMo
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIGNvbnN0IFZlY3RvcjxjaGFyPiYg
a2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKKyAgICA6IENyeXB0
b0tleShhbGdvcml0aG0sIENyeXB0b0tleVR5cGU6OlNlY3JldCwgZXh0cmFjdGFibGUsIHVzYWdl
KQorICAgICwgbV9rZXkoa2V5KQoreworICAgIEFTU0VSVChhbGdvcml0aG0gPT0gQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6QUVTX0NUUgorICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQworICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NNQUMKKyAgICAgICAgfHwgYWxnb3JpdGhtID09
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19HQ00KKyAgICAgICAgfHwgYWxnb3JpdGht
ID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DRkIpOworfQorCitDcnlwdG9LZXlB
RVM6On5DcnlwdG9LZXlBRVMoKQoreworfQorCit2b2lkIENyeXB0b0tleUFFUzo6YnVpbGRBbGdv
cml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxk
ZXIpIGNvbnN0Cit7CisgICAgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1
aWxkZXIpOworICAgIGJ1aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tleS5zaXplKCkgKiA4KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5
QUVTLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25h
dGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleUFFUy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L0NyeXB0b0tleUFFUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENyeXB0b0tleUFFU19oCisjZGVmaW5lIENyeXB0b0tleUFFU19oCisKKyNp
bmNsdWRlICJDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3J5cHRvS2V5QUVTIEZJTkFMIDogcHVi
bGljIENyeXB0b0tleSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3J5cHRvS2V5
QUVTPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIGNvbnN0IFZl
Y3RvcjxjaGFyPiYga2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5QUVTKGFsZ29yaXRo
bSwga2V5LCBleHRyYWN0YWJsZSwgdXNhZ2UpKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q3J5cHRv
S2V5QUVTKCk7CisKKyAgICB2aXJ0dWFsIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OkFFUzsgfQorCisgICAgY29uc3QgVmVj
dG9yPGNoYXI+JiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyJikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ3J5cHRvS2V5QUVTKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBib29sIGV4
dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7Cit9
OworCitpbmxpbmUgY29uc3QgQ3J5cHRvS2V5QUVTKiBhc0NyeXB0b0tleUFFUyhjb25zdCBDcnlw
dG9LZXkmIGtleSkKK3sKKyAgICBpZiAoa2V5LmtleUNsYXNzKCkgIT0gQ3J5cHRvS2V5Q2xhc3M6
OkFFUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IENyeXB0b0tleUFFUyo+KCZrZXkpOworfQorCitpbmxpbmUgQ3J5cHRvS2V5QUVTKiBhc0Ny
eXB0b0tleUFFUyhDcnlwdG9LZXkmIGtleSkKK3sKKyAgICBpZiAoa2V5LmtleUNsYXNzKCkgIT0g
Q3J5cHRvS2V5Q2xhc3M6OkFFUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENyeXB0b0tleUFFUyo+KCZrZXkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworCisjZW5kaWYgLy8g
Q3J5cHRvS2V5QUVTX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9DcnlwdG9LZXlBRVMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAg
KzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmlkbAkocmV2aXNpb24gMTU4NDYxKQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDggQEAKICAgICBOb0ludGVyZmFjZU9iamVjdCwKICAgICBPcGVyYXRpb25zTm90RGVs
ZXRhYmxlCiBdIGludGVyZmFjZSBTdWJ0bGVDcnlwdG8geworICAgIFtDdXN0b21dIFByb21pc2Ug
ZW5jcnlwdChBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgS2V5IGtleSwgc2VxdWVuY2U8
Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CisgICAgW0N1c3RvbV0gUHJvbWlzZSBkZWNyeXB0
KEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBLZXkga2V5LCBzZXF1ZW5jZTxDcnlwdG9P
cGVyYXRpb25EYXRhPiBkYXRhKTsKICAgICBbQ3VzdG9tXSBQcm9taXNlIHNpZ24oQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIEtleSBrZXksIHNlcXVlbmNlPENyeXB0b09wZXJhdGlvbkRh
dGE+IGRhdGEpOwogICAgIFtDdXN0b21dIFByb21pc2UgdmVyaWZ5KEFsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtLCBLZXkga2V5LCBDcnlwdG9PcGVyYXRpb25EYXRhIHNpZ25hdHVyZSwgc2Vx
dWVuY2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CiAgICAgW0N1c3RvbV0gUHJvbWlzZSBk
aWdlc3QoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIHNlcXVlbmNlPENyeXB0b09wZXJh
dGlvbkRhdGE+IGRhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
Q0JDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKKwor
I2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVz
Q2JjUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnNfbmFtZSA9
ICJhZXMtY2JjIjsKKworQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Q3J5cHRvQWxnb3JpdGhtQUVT
X0NCQygpCit7Cit9CisKK0NyeXB0b0FsZ29yaXRobUFFU19DQkM6On5DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDKCkKK3sKK30KKworc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobT4obmV3IENyeXB0b0FsZ29yaXRobUFFU19DQkMpOworfQorCitDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmlkZW50aWZpZXIo
KSBjb25zdAoreworICAgIHJldHVybiBzX2lkZW50aWZpZXI7Cit9CisKK3ZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6aW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
LCBDcnlwdG9LZXlGb3JtYXQgZm9ybWF0LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRh
LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSwgc3RkOjp1bmlxdWVfcHRy
PFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
Zm9ybWF0ICE9IENyeXB0b0tleUZvcm1hdDo6UmF3KSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBP
UlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVmVjdG9yPGNoYXI+IGtleURh
dGE7CisgICAga2V5RGF0YS5hcHBlbmQoZGF0YS5maXJzdCwgZGF0YS5zZWNvbmQpOworICAgIFJl
ZlB0cjxDcnlwdG9LZXlBRVM+IHJlc3VsdCA9IENyeXB0b0tleUFFUzo6Y3JlYXRlKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMsIGtleURhdGEsIGV4dHJhY3RhYmxlLCB1c2FnZSk7
CisgICAgcHJvbWlzZS0+ZnVsZmlsbChyZXN1bHQucmVsZWFzZSgpKTsKK30KKwordm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDOjpleHBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYsIENyeXB0b0tleUZvcm1hdCwgY29uc3QgQ3J5cHRvS2V5Jiwgc3RkOjp1bmlxdWVfcHRy
PFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gTm90IGltcGxl
bWVudGVkIHlldC4KKyAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ19oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobUFF
U19DQkNfaAorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtLmgiCisKKyNpZiBFTkFCTEUoU1VC
VExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDIEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfbmFtZTsKKyAgICBzdGF0aWMgY29uc3QgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBzX2lkZW50aWZpZXIgPSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpBRVNfQ0JDOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG0+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlk
ZW50aWZpZXIoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBlbmNyeXB0KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBW
ZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBw
ZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlY3J5cHQo
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0
IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUs
IENyeXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRp
b25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGltcG9ydEtleShjb25zdCBDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9PcGVy
YXRpb25EYXRhJiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVl
X3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhwb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlw
dG9LZXlGb3JtYXQsIGNvbnN0IENyeXB0b0tleSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDKCk7CisgICAgdmlydHVhbCB+Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQygp
OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNlbmRpZiAv
LyBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlITUFDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5oCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8va2V5cy9DcnlwdG9LZXlITUFDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAK
ICNkZWZpbmUgQ3J5cHRvS2V5SE1BQ19oCiAKICNpbmNsdWRlICJDcnlwdG9LZXkuaCIKLSNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCkBAIC00Miw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVh
bCB+Q3J5cHRvS2V5SE1BQygpOwogCisgICAgdmlydHVhbCBDcnlwdG9LZXlDbGFzcyBrZXlDbGFz
cygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpITUFDOyB9CisKICAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1E
ZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBPVkVSUklERTsKQEAgLTUzLDYgKzU0LDIwIEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPGNoYXI+IG1fa2V5OwogfTsKIAoraW5saW5lIGNvbnN0IENyeXB0
b0tleUhNQUMqIGFzQ3J5cHRvS2V5SE1BQyhjb25zdCBDcnlwdG9LZXkmIGtleSkKK3sKKyAgICBp
ZiAoa2V5LmtleUNsYXNzKCkgIT0gQ3J5cHRvS2V5Q2xhc3M6OkhNQUMpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlITUFDKj4o
JmtleSk7Cit9CisKK2lubGluZSBDcnlwdG9LZXlITUFDKiBhc0NyeXB0b0tleUhNQUMoQ3J5cHRv
S2V5JiBrZXkpCit7CisgICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpI
TUFDKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5
cHRvS2V5SE1BQyo+KCZrZXkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01h
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oIgorCisj
aWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXND
YmNQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCisjaW5jbHVkZSA8Q29tbW9uQ3J5
cHRvL0NvbW1vbkNyeXB0by5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lk
IHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBDcnlwdG9BbGdv
cml0aG1BZXNDYmNQYXJhbXMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBj
b25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQ
cm9taXNlV3JhcHBlcj4gcHJvbWlzZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihwYXJh
bWV0ZXJzLml2KSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgsICJJbml0aWFsaXphdGlvbiB2ZWN0b3Ig
c2l6ZSBtdXN0IGJlIHRoZSBzYW1lIGFzIGFsZ29yaXRobSBibG9jayBzaXplIik7CisKKyAgICBz
aXplX3Qga2V5TGVuZ3RoSW5CeXRlcyA9IGtleS5rZXkoKS5zaXplKCk7CisgICAgaWYgKGtleUxl
bmd0aEluQnl0ZXMgIT0gMTYgJiYga2V5TGVuZ3RoSW5CeXRlcyAhPSAyNCAmJiBrZXlMZW5ndGhJ
bkJ5dGVzICE9IDMyKSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIENDQ3J5cHRvclJlZiBjcnlwdG9yOworICAgIENDQ3J5
cHRvclN0YXR1cyBzdGF0dXMgPSBDQ0NyeXB0b3JDcmVhdGUob3BlcmF0aW9uLCBrQ0NBbGdvcml0
aG1BRVMsIGtDQ09wdGlvblBLQ1M3UGFkZGluZywga2V5LmtleSgpLmRhdGEoKSwga2V5TGVuZ3Ro
SW5CeXRlcywgcGFyYW1ldGVycy5pdiwgJmNyeXB0b3IpOworICAgIGlmIChzdGF0dXMpIHsKKyAg
ICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc2l6ZV90IGlucHV0U2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUg
PSBkYXRhLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgaW5wdXRTaXplICs9IGRhdGFb
aV0uc2Vjb25kOworCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJlc3VsdChDQ0NyeXB0b3JH
ZXRPdXRwdXRMZW5ndGgoY3J5cHRvciwgaW5wdXRTaXplLCB0cnVlKSk7CisKKyAgICB1bnNpZ25l
ZCBjaGFyKiBwID0gcmVzdWx0LmRhdGEoKTsKKyAgICBzaXplX3QgcmVzdWx0Q2h1bmtTaXplOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZGF0YS5zaXplKCk7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgc3RhdHVzID0gQ0NDcnlwdG9yVXBkYXRlKGNyeXB0b3IsIGRhdGFbaV0uZmly
c3QsIGRhdGFbaV0uc2Vjb25kLCBwLCByZXN1bHQuZW5kKCkgLSBwLCAmcmVzdWx0Q2h1bmtTaXpl
KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51
bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHAgKz0gcmVz
dWx0Q2h1bmtTaXplOworICAgIH0KKyAgICBzdGF0dXMgPSBDQ0NyeXB0b3JGaW5hbChjcnlwdG9y
LCBwLCByZXN1bHQuZW5kKCkgLSBwLCAmcmVzdWx0Q2h1bmtTaXplKTsKKyAgICBwICs9IHJlc3Vs
dENodW5rU2l6ZTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChu
dWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChwIDw9IHJlc3Vs
dC5lbmQoKSk7CisgICAgcmVzdWx0LnNocmluayhwIC0gcmVzdWx0LmJlZ2luKCkpOworCisgICAg
Q0NDcnlwdG9yUmVsZWFzZShjcnlwdG9yKTsKKworICAgIHByb21pc2UtPmZ1bGZpbGwocmVzdWx0
KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBj
b25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQ
cm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJiBhZXNDQkNQYXJhbWV0ZXJzID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJj4ocGFyYW1ldGVycyk7CisgICAg
Y29uc3QgQ3J5cHRvS2V5QUVTKiBhZXNLZXkgPSBhc0NyeXB0b0tleUFFUyhrZXkpOworCisgICAg
aWYgKCFhZXNLZXkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzQ0JD
UGFyYW1ldGVycywgKmFlc0tleSwgZGF0YSwgc3RkOjptb3ZlKHByb21pc2UpKTsKK30KKwordm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8
Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBl
cj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtQWVzQ2JjUGFyYW1zJiBhZXNDQkNQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5
cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJj4ocGFyYW1ldGVycyk7CisgICAgY29uc3QgQ3J5cHRv
S2V5QUVTKiBhZXNLZXkgPSBhc0NyeXB0b0tleUFFUyhrZXkpOworCisgICAgaWYgKCFhZXNLZXkp
IHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRGVjcnlwdCwgYWVzQ0JDUGFyYW1ldGVycywg
KmFlc0tleSwgZGF0YSwgc3RkOjptb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
JiwgYm9vbCAvKmV4dHJhY3RhYmxlKi8sIENyeXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBOb3QgeWV0IGlt
cGxlbWVudGVkLgorICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNf
Q0JDTWFjLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMK
K25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHJl
dmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3Jp
dGhtSE1BQ01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiBjYWxjdWxhdGVTaQogdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFD
OjpzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0
IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEs
IHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyYgaG1hY1BhcmFtZXRl
cnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJj4ocGFyYW1l
dGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5SE1BQyYgaG1hY0tleSA9IHN0YXRpY19jYXN0PGNv
bnN0IENyeXB0b0tleUhNQUMmPihrZXkpOworICAgIGNvbnN0IENyeXB0b0tleUhNQUMqIGhtYWNL
ZXkgPSBhc0NyeXB0b0tleUhNQUMoa2V5KTsKIAogICAgIENDSG1hY0FsZ29yaXRobSBhbGdvcml0
aG07CiAgICAgaWYgKCFnZXRDb21tb25DcnlwdG9BbGdvcml0aG0oaG1hY1BhcmFtZXRlcnMuaGFz
aCwgYWxnb3JpdGhtKSkgewpAQCAtMTAzLDcgKzEwMywxMiBAQCB2b2lkIENyeXB0b0FsZ29yaXRo
bUhNQUM6OnNpZ24oY29uc3QgQ3J5CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0
b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRo
bSwgaG1hY0tleS5rZXkoKSwgZGF0YSk7CisgICAgaWYgKCFobWFjS2V5KSB7CisgICAgICAgIGVj
ID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0
b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRo
bSwgaG1hY0tleS0+a2V5KCksIGRhdGEpOwogCiAgICAgcHJvbWlzZS0+ZnVsZmlsbChzaWduYXR1
cmUpOwogfQpAQCAtMTExLDcgKzExNiw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c2ln
bihjb25zdCBDcnkKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6dmVyaWZ5KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBleHBlY3RlZFNpZ25hdHVyZSwgY29uc3QgVmVjdG9y
PENyeXB0b09wZXJhdGlvbkRhdGE+JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBw
ZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNvbnN0IENyeXB0b0FsZ29y
aXRobUhtYWNQYXJhbXMmIGhtYWNQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRv
QWxnb3JpdGhtSG1hY1BhcmFtcyY+KHBhcmFtZXRlcnMpOwotICAgIGNvbnN0IENyeXB0b0tleUhN
QUMmIGhtYWNLZXkgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlITUFDJj4oa2V5KTsKKyAg
ICBjb25zdCBDcnlwdG9LZXlITUFDKiBobWFjS2V5ID0gYXNDcnlwdG9LZXlITUFDKGtleSk7CiAK
ICAgICBDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtOwogICAgIGlmICghZ2V0Q29tbW9uQ3J5cHRv
QWxnb3JpdGhtKGhtYWNQYXJhbWV0ZXJzLmhhc2gsIGFsZ29yaXRobSkpIHsKQEAgLTExOSw3ICsx
MjQsMTIgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjp2ZXJpZnkoY29uc3QgQwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9
IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXkua2V5KCksIGRhdGEpOworICAg
IGlmICghaG1hY0tleSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9
IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXktPmtleSgpLCBkYXRhKTsKIAog
ICAgIGJvb2wgcmVzdWx0ID0gc2lnbmF0dXJlLnNpemUoKSA9PSBleHBlY3RlZFNpZ25hdHVyZS5z
ZWNvbmQgJiYgIW1lbWNtcChzaWduYXR1cmUuZGF0YSgpLCBleHBlY3RlZFNpZ25hdHVyZS5maXJz
dCwgc2lnbmF0dXJlLnNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCShyZXZpc2lvbiAx
NTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgiCiAj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1BQy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bVNIQTEuaCIKIApAQCAtMzUsNiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKCkKIHsK
KyAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpzX25hbWUsIENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6Y3JlYXRlKTsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1ITUFDOjpz
X25hbWUsIENyeXB0b0FsZ29yaXRobUhNQUM6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGht
SE1BQzo6Y3JlYXRlKTsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1TSEEx
OjpzX25hbWUsIENyeXB0b0FsZ29yaXRobVNIQTE6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3Jp
dGhtU0hBMTo6Y3JlYXRlKTsKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODQ2MSkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEzLTEx
LTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBX
ZWJDcnlwdG8gQUVTLUNCQworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5j
cnlwdC1kZWNyeXB0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNi
Yy0yNTYtZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5
cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQuaHRtbDogQWRkZWQuCisgICAg
ICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQt
d2l0aC1wYWRkaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRs
ZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcuaHRtbDogQWRkZWQuCisgICAg
ICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGgtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5n
dGguaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtl
eS1jbGFzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVz
LWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbDogQWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8vc3Vi
dGxlL2htYWMtc2lnbi12ZXJpZnktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGNyeXB0by9zdWJ0
bGUvaG1hYy1zaWduLXZlcmlmeS5odG1sOgorICAgICAgICBDb3JyZWN0ZWQgYSBkZXNjcmlwdGlv
bi4KKworICAgICAgICAqIGNyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qczogKGhleFRv
QXJyYXlCdWZmZXIpOiBBZGRlZCBhIGhlbHBlci4KKwogMjAxMy0xMS0wMSAgSmFtZXMgQ3JhaWcg
IDxqY3JhaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBSZWdyZXNzaW9uOiBtZWRpYSBjb250
cm9scyBhcmUgbm8gbG9uZ2VyIGFjY2Vzc2libGUKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlw
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOSBAQAorVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rp
b25zIHdpdGggYSAyNTYgYml0IGtleS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K0ltcG9ydGluZyBhIHJhdyBBRVMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4KK1BBU1Mga2V5
LnR5cGUgaXMgJ3NlY3JldCcKK1BBU1Mga2V5LmV4dHJhY3RhYmxlIGlzIHRydWUKK1BBU1Mga2V5
LmFsZ29yaXRobS5uYW1lIGlzICdhZXMtY2JjJworUEFTUyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBp
cyAxOTIKK1BBU1Mga2V5LnVzYWdlcyBpcyBbJ2VuY3J5cHQnLCAnZGVjcnlwdCddCitVc2luZyB0
aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0Li4uCitQQVNTIGJ5dGVBcnJheVRvSGV4U3RyaW5n
KG5ldyBVaW50OEFycmF5KGVuY3J5cHRpb25SZXN1bHQpKSBpcyAnWzRmIDAyIDFkIGIyIDQzIGJj
IDYzIDNkIDcxIDc4IDE4IDNhIDlmIGEwIDcxIGU4IGI0IGQ5IGFkIGE5IGFkIDdkIGVkIGY0IGU1
IGU3IDM4IDc2IDNmIDY5IDE0IDVhIDU3IDFiIDI0IDIwIDEyIGZiIDdhIGUwIDdmIGE5IGJhIGFj
IDNkIGYxIDAyIGUwIDA4IGIwIGUyIDc5IDg4IDU5IDg4IDgxIGQ5IDIwIGE5IGU2IDRmIDU2IDE1
IGNkIDYxIDJjIGNkIDc5IDIyIDRiIDM1IDA5IDM1IGQ0IDVkIGQ2IGE5IDhmIDgxIDc2XScKK0Rl
Y3J5cHRpbmcgaXQgYmFjay4uLgorUEFTUyBuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0
KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0x
OTItZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Nv
bW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0
IGtleS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkK
KyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOwor
Cit2YXIga2V5RGF0YSA9IGhleFRvQXJyYXlCdWZmZXIoIjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMy
YjgwOTA3OWU1NjJmOGVhZDI1MjJjNmI3YiIpOwordmFyIGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigi
MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiKTsKK3ZhciBwbGFpbnRleHQgPSBoZXhU
b0FycmF5QnVmZmVyKCI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUw
M2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxMzBjODFjNDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlm
MjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCIpOwordmFyIGV4dHJhY3RhYmxlID0gdHJ1ZTsK
KworZGVidWcoIkltcG9ydGluZyBhIHJhdyBBRVMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4i
KTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLCBrZXlEYXRhLCAiYWVzLWNiYyIsIGV4
dHJhY3RhYmxlLCBbImVuY3J5cHQiLCAiZGVjcnlwdCJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkg
eworICAgIGtleSA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgia2V5LnR5cGUiLCAiJ3NlY3JldCci
KTsKKyAgICBzaG91bGRCZSgia2V5LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKKyAgICBzaG91bGRC
ZSgia2V5LmFsZ29yaXRobS5uYW1lIiwgIidhZXMtY2JjJyIpOworICAgIHNob3VsZEJlKCJrZXku
YWxnb3JpdGhtLmxlbmd0aCIsICIxOTIiKTsKKyAgICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICJb
J2VuY3J5cHQnLCAnZGVjcnlwdCddIik7CisKKyAgICBkZWJ1ZygiVXNpbmcgdGhlIGtleSB0byBl
bmNyeXB0IHBsYWludGV4dC4uLiIpOworICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmVuY3J5cHQo
e25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwga2V5LCBbcGxhaW50ZXh0XSk7Cit9KS50aGVuKGZ1
bmN0aW9uKHJlc3VsdCkgeworICAgIGVuY3J5cHRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hv
dWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5nKG5ldyBVaW50OEFycmF5KGVuY3J5cHRpb25SZXN1
bHQpKSIsICInWzRmIDAyIDFkIGIyIDQzIGJjIDYzIDNkIDcxIDc4IDE4IDNhIDlmIGEwIDcxIGU4
IGI0IGQ5IGFkIGE5IGFkIDdkIGVkIGY0IGU1IGU3IDM4IDc2IDNmIDY5IDE0IDVhIDU3IDFiIDI0
IDIwIDEyIGZiIDdhIGUwIDdmIGE5IGJhIGFjIDNkIGYxIDAyIGUwIDA4IGIwIGUyIDc5IDg4IDU5
IDg4IDgxIGQ5IDIwIGE5IGU2IDRmIDU2IDE1IGNkIDYxIDJjIGNkIDc5IDIyIDRiIDM1IDA5IDM1
IGQ0IDVkIGQ2IGE5IDhmIDgxIDc2XSciKTsKKworICAgIGRlYnVnKCJEZWNyeXB0aW5nIGl0IGJh
Y2suLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5kZWNyeXB0KHtuYW1lOiAiYWVzLWNi
YyIsIGl2OiBpdn0sIGtleSwgW3Jlc3VsdF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsK
KyAgICBkZWNyeXB0aW9uUmVzdWx0ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJuZXcgVWludDhB
cnJheShkZWNyeXB0aW9uUmVzdWx0KSIsICJwbGFpbnRleHQiKTsKKworICAgIGZpbmlzaEpTVGVz
dCgpOworfSk7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5
cHQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3Rl
eHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNy
eXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5
cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNy
eXB0IGZ1bmN0aW9ucyB3aXRoIGEgMjU2IGJpdCBrZXkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4u
CitQQVNTIGtleS50eXBlIGlzICdzZWNyZXQnCitQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0cnVl
CitQQVNTIGtleS5hbGdvcml0aG0ubmFtZSBpcyAnYWVzLWNiYycKK1BBU1Mga2V5LmFsZ29yaXRo
bS5sZW5ndGggaXMgMjU2CitQQVNTIGtleS51c2FnZXMgaXMgWydlbmNyeXB0JywgJ2RlY3J5cHQn
XQorVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4uLgorUEFTUyBieXRlQXJyYXlU
b0hleFN0cmluZyhuZXcgVWludDhBcnJheShlbmNyeXB0aW9uUmVzdWx0KSkgaXMgJ1tmNSA4YyA0
YyAwNCBkNiBlNSBmMSBiYSA3NyA5ZSBhYiBmYiA1ZiA3YiBmYiBkNiA5YyBmYyA0ZSA5NiA3ZSBk
YiA4MCA4ZCA2NyA5ZiA3NyA3YiBjNiA3MCAyYyA3ZCAzOSBmMiAzMyA2OSBhOSBkOSBiYSBjZiBh
NSAzMCBlMiA2MyAwNCAyMyAxNCA2MSBiMiBlYiAwNSBlMiBjMyA5YiBlOSBmYyBkYSA2YyAxOSAw
NyA4YyA2YSA5ZCAxYiAzZiA0NiAxNyA5NiBkNiBiMCBkNiBiMiBlMCBjMiBhNyAyYiA0ZCA4MCBl
NiA0NF0nCitEZWNyeXB0aW5nIGl0IGJhY2suLi4KK1BBU1MgbmV3IFVpbnQ4QXJyYXkoZGVjcnlw
dGlvblJlc3VsdCkgaXMgcGxhaW50ZXh0CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5
cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAg
KzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlv
dXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlw
dC1kZWNyeXB0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVz
Y3JpcHRpb24oIlRlc3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNyeXB0IGZ1bmN0aW9ucyB3aXRo
IGEgMjU2IGJpdCBrZXkuIik7CisKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRv
dy5zdWJ0bGUpCisgICAgd2luZG93LmNyeXB0by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtp
dFN1YnRsZTsKKwordmFyIGtleURhdGEgPSBoZXhUb0FycmF5QnVmZmVyKCI2MDNkZWIxMDE1Y2E3
MWJlMmI3M2FlZjA4NTdkNzc4MTFmMzUyYzA3M2I2MTA4ZDcyZDk4MTBhMzA5MTRkZmY0Iik7Cit2
YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUw
ZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUyMmU0MDlmOTZl
OTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEz
NWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIik7
Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1ZygiSW1wb3J0aW5nIGEgcmF3IEFFUyBr
ZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLiIpOworY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInJh
dyIsIGtleURhdGEsICJhZXMtY2JjIiwgZXh0cmFjdGFibGUsIFsiZW5jcnlwdCIsICJkZWNyeXB0
Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2V5ID0gcmVzdWx0OworICAgIHNob3Vs
ZEJlKCJrZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3VsZEJlKCJrZXkuZXh0cmFjdGFi
bGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ2Flcy1j
YmMnIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjI1NiIpOworICAg
IHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgIlsnZW5jcnlwdCcsICdkZWNyeXB0J10iKTsKKworICAg
IGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0Li4uIik7CisgICAgcmV0
dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXks
IFtwbGFpbnRleHRdKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgZW5jcnlwdGlv
blJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgiYnl0ZUFycmF5VG9IZXhTdHJpbmcobmV3
IFVpbnQ4QXJyYXkoZW5jcnlwdGlvblJlc3VsdCkpIiwgIidbZjUgOGMgNGMgMDQgZDYgZTUgZjEg
YmEgNzcgOWUgYWIgZmIgNWYgN2IgZmIgZDYgOWMgZmMgNGUgOTYgN2UgZGIgODAgOGQgNjcgOWYg
NzcgN2IgYzYgNzAgMmMgN2QgMzkgZjIgMzMgNjkgYTkgZDkgYmEgY2YgYTUgMzAgZTIgNjMgMDQg
MjMgMTQgNjEgYjIgZWIgMDUgZTIgYzMgOWIgZTkgZmMgZGEgNmMgMTkgMDcgOGMgNmEgOWQgMWIg
M2YgNDYgMTcgOTYgZDYgYjAgZDYgYjIgZTAgYzIgYTcgMmIgNGQgODAgZTYgNDRdJyIpOworCisg
ICAgZGVidWcoIkRlY3J5cHRpbmcgaXQgYmFjay4uLiIpOworICAgIHJldHVybiBjcnlwdG8uc3Vi
dGxlLmRlY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwga2V5LCBbcmVzdWx0XSk7Cit9
KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGRlY3J5cHRpb25SZXN1bHQgPSByZXN1bHQ7
CisgICAgc2hvdWxkQmUoIm5ldyBVaW50OEFycmF5KGRlY3J5cHRpb25SZXN1bHQpIiwgInBsYWlu
dGV4dCIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpt
aW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0
LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorVGVzdCBBRVMtQ0JDIGVu
Y3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworSW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFT
UyBrZXkudHlwZSBpcyAnc2VjcmV0JworUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFT
UyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ2Flcy1jYmMnCitQQVNTIGtleS5hbGdvcml0aG0ubGVu
Z3RoIGlzIDEyOAorUEFTUyBrZXkudXNhZ2VzIGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0J10KK1Vz
aW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4KK1BBU1MgYnl0ZUFycmF5VG9IZXhT
dHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvblJlc3VsdCkpIGlzICdbNzYgNDkgYWIgYWMg
ODEgMTkgYjIgNDYgY2UgZTkgOGUgOWIgMTIgZTkgMTkgN2QgNTAgODYgY2IgOWIgNTAgNzIgMTkg
ZWUgOTUgZGIgMTEgM2EgOTEgNzYgNzggYjIgNzMgYmUgZDYgYjggZTMgYzEgNzQgM2IgNzEgMTYg
ZTYgOWUgMjIgMjIgOTUgMTYgM2YgZjEgY2EgYTEgNjggMWYgYWMgMDkgMTIgMGUgY2EgMzAgNzUg
ODYgZTEgYTcgOGMgYjggMjggMDcgMjMgMGUgMTMgMjEgZDMgZmEgZTAgMGQgMTggY2MgMjAgMTJd
JworRGVjcnlwdGluZyBpdCBiYWNrLi4uCitQQVNTIG5ldyBVaW50OEFycmF5KGRlY3J5cHRpb25S
ZXN1bHQpIGlzIHBsYWludGV4dAorVGVzdGluZyBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYmluZGlu
Z3MuLi4KK1BBU1MgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiBu
dWxsfSwga2V5LCBbcGxhaW50ZXh0XSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT25seSBB
cnJheUJ1ZmZlciBhbmQgQXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBD
cnlwdG9PcGVyYXRpb25EYXRhLgorUEFTUyBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdB
RVMtQ0JDJ30sIGtleSwgW3BsYWludGV4dF0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9u
bHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVyVmlldyBvYmplY3RzIGNhbiBiZSBwYXNzZWQg
YXMgQ3J5cHRvT3BlcmF0aW9uRGF0YS4KK1BBU1MgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1l
OiAnQUVTLUNCQycsIGl2OiAzfSwga2V5LCBbcGxhaW50ZXh0XSkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogT25seSBBcnJheUJ1ZmZlciBhbmQgQXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2Fu
IGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVyYXRpb25EYXRhLgorUEFTUyBjcnlwdG8uc3VidGxlLmVu
Y3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IG5ldyBVaW50OEFycmF5KFswXSl9LCBrZXksIFtw
bGFpbnRleHRdKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IEFFUy1DQkMgaW5pdGlhbGl6YXRpb24g
ZGF0YSBtdXN0IGJlIDE2IGJ5dGVzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMK
K25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2Jj
LWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRo
LXBhZGRpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK1Rl
c3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNyeXB0IGZ1bmN0aW9ucyBvbiBhIHBsYWludGV4dCB0
aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mIGJsb2NrIHNpemUgaW4gbGVuZ3RoLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworSW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJp
bmcgbGl0ZXJhbC4uLgorUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0JworUEFTUyBrZXkuZXh0cmFj
dGFibGUgaXMgdHJ1ZQorUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ2Flcy1jYmMnCitQQVNT
IGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDEyOAorUEFTUyBrZXkudXNhZ2VzIGlzIFsnZW5jcnlw
dCcsICdkZWNyeXB0J10KK1VzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4KKyAg
ICA9IFs2MyAwMSA5OSBjNSBmMiAwMiBjYyA3MSA2NyBiYiA4NCBjNiBjNyAyYiAzNCA5ZF0KK0Rl
Y3J5cHRpbmcgaXQgYmFjay4uLgorUEFTUyBuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0
KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy1leHBlY3RlZC50eHQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCAr
MSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91
dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5n
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVu
Y3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQg
YW5kIGRlY3J5cHQgZnVuY3Rpb25zIG9uIGEgcGxhaW50ZXh0IHRoYXQgaXMgbm90IGEgbXVsdGlw
bGUgb2YgYmxvY2sgc2l6ZSBpbiBsZW5ndGguIik7CisKK2pzVGVzdElzQXN5bmMgPSB0cnVlOwor
CitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAgd2luZG93LmNyeXB0by5zdWJ0bGUgPSB3aW5kb3cu
Y3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFyIGtleURhdGEgPSBoZXhUb0FycmF5QnVmZmVyKCIy
YjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyIpOwordmFyIGl2ID0gaGV4VG9BcnJheUJ1
ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYiKTsKK3ZhciBwbGFpbnRleHQg
PSBhc2NpaVRvQXJyYXlCdWZmZXIoInRlc3QiKTsKK3ZhciBleHRyYWN0YWJsZSA9IHRydWU7CisK
K2RlYnVnKCJJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uIik7
CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwga2V5RGF0YSwgImFlcy1jYmMiLCBleHRy
YWN0YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsK
KyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImtleS50eXBlIiwgIidzZWNyZXQnIik7
CisgICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUo
ImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWNiYyciKTsKKyAgICBzaG91bGRCZSgia2V5LmFs
Z29yaXRobS5sZW5ndGgiLCAiMTI4Iik7CisgICAgc2hvdWxkQmUoImtleS51c2FnZXMiLCAiWydl
bmNyeXB0JywgJ2RlY3J5cHQnXSIpOworCisgICAgZGVidWcoIlVzaW5nIHRoZSBrZXkgdG8gZW5j
cnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtu
YW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pOworfSkudGhlbihmdW5j
dGlvbihyZXN1bHQpIHsKKyAgICBwcmludEFjY2VwdGVkUmVzdWx0KHJlc3VsdCk7CisKKyAgICBk
ZWJ1ZygiRGVjcnlwdGluZyBpdCBiYWNrLi4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUu
ZGVjcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtyZXN1bHRdKTsKK30pLnRo
ZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgZGVjcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAg
ICBzaG91bGRCZSgibmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkiLCAicGxhaW50ZXh0
Iik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1j
YmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy5odG1sCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNy
eXB0LWRlY3J5cHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVu
Y3Rpb25zLiIpOworCitqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKCF3aW5kb3cuc3VidGxl
KQorICAgIHdpbmRvdy5jcnlwdG8uc3VidGxlID0gd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7
CisKK3ZhciBrZXlEYXRhID0gaGV4VG9BcnJheUJ1ZmZlcigiMmI3ZTE1MTYyOGFlZDJhNmFiZjcx
NTg4MDljZjRmM2MiKTsKK3ZhciBpdiA9IGhleFRvQXJyYXlCdWZmZXIoIjAwMDEwMjAzMDQwNTA2
MDcwODA5MGEwYjBjMGQwZTBmIik7Cit2YXIgcGxhaW50ZXh0ID0gaGV4VG9BcnJheUJ1ZmZlcigi
NmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmFhZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0
NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFlNWZiYzExOTFhMGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2Fk
MmI0MTdiZTY2YzM3MTAiKTsKK3ZhciBleHRyYWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJJbXBv
cnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3Vi
dGxlLmltcG9ydEtleSgicmF3Iiwga2V5RGF0YSwgImFlcy1jYmMiLCBleHRyYWN0YWJsZSwgWyJl
bmNyeXB0IiwgImRlY3J5cHQiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSBy
ZXN1bHQ7CisgICAgc2hvdWxkQmUoImtleS50eXBlIiwgIidzZWNyZXQnIik7CisgICAgc2hvdWxk
QmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0
aG0ubmFtZSIsICInYWVzLWNiYyciKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5n
dGgiLCAiMTI4Iik7CisgICAgc2hvdWxkQmUoImtleS51c2FnZXMiLCAiWydlbmNyeXB0JywgJ2Rl
Y3J5cHQnXSIpOworCisgICAgZGVidWcoIlVzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRl
eHQuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNi
YyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQp
IHsKKyAgICBlbmNyeXB0aW9uUmVzdWx0ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJieXRlQXJy
YXlUb0hleFN0cmluZyhuZXcgVWludDhBcnJheShlbmNyeXB0aW9uUmVzdWx0KSkiLCAiJ1s3NiA0
OSBhYiBhYyA4MSAxOSBiMiA0NiBjZSBlOSA4ZSA5YiAxMiBlOSAxOSA3ZCA1MCA4NiBjYiA5YiA1
MCA3MiAxOSBlZSA5NSBkYiAxMSAzYSA5MSA3NiA3OCBiMiA3MyBiZSBkNiBiOCBlMyBjMSA3NCAz
YiA3MSAxNiBlNiA5ZSAyMiAyMiA5NSAxNiAzZiBmMSBjYSBhMSA2OCAxZiBhYyAwOSAxMiAwZSBj
YSAzMCA3NSA4NiBlMSBhNyA4YyBiOCAyOCAwNyAyMyAwZSAxMyAyMSBkMyBmYSBlMCAwZCAxOCBj
YyAyMCAxMl0nIik7CisKKyAgICBkZWJ1ZygiRGVjcnlwdGluZyBpdCBiYWNrLi4uIik7CisgICAg
cmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBr
ZXksIFtyZXN1bHRdKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgZGVjcnlwdGlv
blJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgibmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlv
blJlc3VsdCkiLCAicGxhaW50ZXh0Iik7CisKKyAgICBkZWJ1ZygiVGVzdGluZyBpbml0aWFsaXph
dGlvbiB2ZWN0b3IgYmluZGluZ3MuLi4iKTsKKyAgICBzaG91bGRUaHJvdygiY3J5cHRvLnN1YnRs
ZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiBudWxsfSwga2V5LCBbcGxhaW50ZXh0XSki
KTsKKyAgICBzaG91bGRUaHJvdygiY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNC
Qyd9LCBrZXksIFtwbGFpbnRleHRdKSIpOworICAgIHNob3VsZFRocm93KCJjcnlwdG8uc3VidGxl
LmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IDN9LCBrZXksIFtwbGFpbnRleHRdKSIpOwor
ICAgIHNob3VsZFRocm93KCJjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywg
aXY6IG5ldyBVaW50OEFycmF5KFswXSl9LCBrZXksIFtwbGFpbnRleHRdKSIpOworCisgICAgZmlu
aXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1k
ZWNyeXB0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMj
Cit0ZXh0L2h0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0
VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3RoLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1s
ZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3RoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzODogU3ludGF4RXJyb3I6IFVu
ZXhwZWN0ZWQgaWRlbnRpZmllciAnZmluaXNoSlNUZXN0Jy4gRXhwZWN0ZWQgJyknIHRvIGVuZCBh
IGFyZ3VtZW50IGxpc3QuCitGQUlMIHN1Y2Nlc3NmdWxseVBhcnNlZCBzaG91bGQgYmUgdHJ1ZSAo
b2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorCitU
RVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVu
Z3RoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBhbiB1bnN1cHBv
cnRlZCBBRVMga2V5IGxlbmd0aC4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICgh
d2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8u
d2Via2l0U3VidGxlOworCit2YXIga2V5RGF0YSA9IGhleFRvQXJyYXlCdWZmZXIoIjhlNzNiMGY3
ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1NjJmOGVhZDI1MjJjIik7Cit2YXIgaXYgPSBoZXhUb0Fy
cmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWlu
dGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJh
YWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkx
YTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFi
bGUgPSB0cnVlOworCitkZWJ1ZygiSW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcg
bGl0ZXJhbC4uLiIpOworY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsIGtleURhdGEsICJh
ZXMtY2JjIiwgZXh0cmFjdGFibGUsIFsiZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rp
b24ocmVzdWx0KSB7CisgICAga2V5ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJrZXkudHlwZSIs
ICInc2VjcmV0JyIpOworICAgIHNob3VsZEJlKCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOwor
ICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hv
dWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjE3NiIpOworICAgIHNob3VsZEJlKCJrZXku
dXNhZ2VzIiwgIlsnZW5jcnlwdCcsICdkZWNyeXB0J10iKTsKKworICAgIGRlYnVnKCJVc2luZyB0
aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0
bGUuZW5jcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKTsK
K30pLnRoZW4odW5kZWZpbmVkLCBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBkZWJ1ZygiRmFpbGVk
LCBhcyBleHBlY3RlZC4gTm90ZSB0aGF0IHRoZSBzcGVjIGRvZXNuJ3QgYXBwZWFyIHRvIGNsZWFy
bHkgZGVmaW5lIHdoaWNoIHN0ZXAgc2hvdWxkIGZhaWwuIgorCisgICAgZmluaXNoSlNUZXN0KCk7
Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGguaHRtbApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8v
c3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNi
Yy13cm9uZy1rZXktY2xhc3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIgQEAKK1Rlc3QgY2FsbGluZyBBRVMtQ0JDIGVuY3J5cHQgd2l0aCBhIEhNQUMga2V5LgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1wb3J0aW5nIGEgcmF3IEhNQUMga2V5IGZy
b20gc3RyaW5nIGxpdGVyYWwuLi4KK1VzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQu
Li4KK1BBU1MgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0s
IGtleSwgW3BsYWludGV4dF0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogTm90U3VwcG9ydGVkRXJy
b3I6IERPTSBFeGNlcHRpb24gOS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8v
c3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCitu
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1jbGFzcy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1r
ZXktY2xhc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGNhbGxp
bmcgQUVTLUNCQyBlbmNyeXB0IHdpdGggYSBITUFDIGtleS4iKTsKKworanNUZXN0SXNBc3luYyA9
IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9
IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVy
KCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhl
eFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcx
ZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2
OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIik7Cit2YXIgaG1hY0tleSA9IGFzY2lpVG9B
cnJheUJ1ZmZlcignYScpOwordmFyIGV4dHJhY3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9y
dGluZyBhIHJhdyBITUFDIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3Vi
dGxlLmltcG9ydEtleSgicmF3IiwgaG1hY0tleSwge25hbWU6ICdobWFjJywgaGFzaDoge25hbWU6
ICdzaGEtMSd9fSwgZXh0cmFjdGFibGUsIFsic2lnbiIsICJ2ZXJpZnkiLCAiZW5jcnlwdCIsICJk
ZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2V5ID0gcmVzdWx0OworICAg
IGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0Li4uIik7CisgICAgc2hv
dWxkVGhyb3coJ2NyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9
LCBrZXksIFtwbGFpbnRleHRdKScpCisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3Jp
cHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMt
c2lnbi12ZXJpZnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1ODQ2MSkK
KysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi1UZXN0IGNyeXB0by5zdWJ0bGUuZGln
ZXN0LgorVGVzdCBITUFDIHNpZ24gYW5kIHZlcmlmeSBmdW5jdGlvbnMuCiAKIE9uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KIApJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNp
Z24tdmVyaWZ5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9o
bWFjLXNpZ24tdmVyaWZ5Lmh0bWwJKHJldmlzaW9uIDE1ODQ2MSkKKysrIExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDcg
KzksNyBAQAogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CiAKIDxzY3JpcHQ+Ci1kZXNjcmlwdGlv
bigiVGVzdCBjcnlwdG8uc3VidGxlLmRpZ2VzdC4iKTsKK2Rlc2NyaXB0aW9uKCJUZXN0IEhNQUMg
c2lnbiBhbmQgdmVyaWZ5IGZ1bmN0aW9ucy4iKTsKIAoganNUZXN0SXNBc3luYyA9IHRydWU7CiAK
SW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL3Jlc291cmNlcy9jb21tb24uanMJ
KHJldmlzaW9uIDE1ODQ2MSkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcmVzb3VyY2Vz
L2NvbW1vbi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTYgQEAgZnVuY3Rpb24gYXNj
aWlUb0FycmF5QnVmZmVyKHN0cikKICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2hhcnMpOwog
fQogCitmdW5jdGlvbiBoZXhUb0FycmF5QnVmZmVyKHN0cikKK3sKKyAgICBpZiAoc3RyLmxlbmd0
aCAlIDIpCisgICAgICAgIHRocm93ICJIZXggc3RyaW5nIGxlbmdodCBtdXN0IGJlIGV2ZW4iOwor
ICAgIHZhciBjaGFycyA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsg
aSArPSAyKQorICAgICAgICBjaGFycy5wdXNoKHBhcnNlSW50KHN0ci5zdWJzdHIoaSwgMiksIDE2
KSk7CisgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNoYXJzKTsKK30KKwogZnVuY3Rpb24gcHJp
bnRSZWplY3RlZFJlc3VsdCh2YWx1ZSkKIHsKICAgICBkZWJ1ZygiICAgIHJlamVjdGVkIHdpdGgg
dmFsdWUgb2YgIiArIHZhbHVlKTsK
</data>
<flag name="review"
          id="238593"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215779</attachid>
            <date>2013-11-01 16:57:13 -0700</date>
            <delta_ts>2013-11-01 23:09:15 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>AES-CBC.txt</filename>
            <type>text/plain</type>
            <size>88344</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTg0NjcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJDcnlwdG8gQUVTLUNCQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzb24uCisKKyAgICAgICAgKiB3dGYvRml4ZWRBcnJh
eS5oOiAoV1RGOjpGaXhlZEFycmF5OjpkYXRhKTogQWRkZWQgYSBjb25zdCB2ZXJzaW9uIG9mIHRo
ZSBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9WZWN0b3IuaDogQWRkZWQgYSBjb21tZW50IHRv
IFZlY3RvciBjb25zdHJ1Y3RvciBhYm91dCBob3cgaXQgaXMgZGlmZmVyZW50CisgICAgICAgIGZy
b20gc3RkOjp2ZWN0b3IuCisKIDIwMTMtMTEtMDEgIEVtaWxpbyBQb3p1ZWxvIE1vbmZvcnQgIDxw
b2NodTI3QGdtYWlsLmNvbT4KIAogICAgICAgICBIUFBBIGJ1aWxkIGZpeGVzCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9GaXhlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRml4
ZWRBcnJheS5oCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaXhlZEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IFQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBjb25zdCBUKiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhOyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBTaXpl
OyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTU4NDYxKQorKysgU291cmNl
L1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsOCBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yKCkKICAgICB7CiAgICAgfQotICAgIAorCisgICAgLy8gVW5saWtlIGlu
IHN0ZDo6dmVjdG9yLCB0aGlzIGNvbnN0cnVjdG9yIGRvZXMgbm90IGluaXRpYWxpemUgUE9EIHR5
cGVzLgogICAgIGV4cGxpY2l0IFZlY3RvcihzaXplX3Qgc2l6ZSkKICAgICAgICAgOiBCYXNlKHNp
emUsIHNpemUpCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NDYxKQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAKKzIw
MTMtMTEtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIFdlYkNyeXB0byBBRVMtQ0JDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjM2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNv
bi4KKworICAgICAgICBUZXN0czogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRl
Y3J5cHQuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNy
eXB0LWRlY3J5cHQuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVu
Y3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8v
c3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGguaHRtbAorICAgICAgICAgICAgICAgY3J5cHRv
L3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1jbGFzcy5odG1sCisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0UHJvcGVydHkpOiBGYWN0b3JlZCBvdXQgYSBmdW5jdGlvbiB0byBnZXQgYSBwcm9w
ZXJ0eSBhcyBKU1ZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGFzaEFsZ29yaXRobSk6IFVz
ZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFlc0NiY1BhcmFtcyk6IEFkZGVkIGNvbnZl
cnRlciBmb3IgQWVzQ2JjUGFyYW1zLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCk6IFN1cHBvcnQgQUVTX0NC
Qy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvckRlY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleSk6IFN1cHBv
cnQgYWxsCisgICAgICAgIGFsZ29yaXRobXMsIGFsbCB0aGUgbmV3IG9uZXMganVzdCBoYXZlIHRy
aXZpYWwgZGljdGlvbmFyaWVzLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1E
aWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRXhwb3J0S2V5KTogRGl0dG8uCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuaDogQWRkZWQuCisgICAgICAg
IE1vdmVkIENyeXB0b09wZXJhdGlvbkRhdGEgYmluZGluZ3Mgb3V0IG9mIEpTU3VidGxlQ3J5cHRv
Q3VzdG9tLmNwcCwgc28gdGhhdCB3ZQorICAgICAgICBjb3VsZCB1c2UgdGhlbSBpbiBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Q
cm9taXNlLmg6IChXZWJDb3JlOjpQcm9taXNlV3JhcHBlcjo6cmVqZWN0KTogQWRkZWQgYSBzcGVj
aWFsaXphdGlvbgorICAgICAgICB0byByZWplY3Qgd2l0aCBudWxsIHJlc3VsdC4gVGhlIHNwZWMg
ZG9lc24ndCBhY3R1YWxseSBzYXkgaG93IGFsZ29yaXRobXMgZmFpbC4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
U3VidGxlQ3J5cHRvOjplbmNyeXB0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRs
ZUNyeXB0bzo6ZGVjcnlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlw
dG86OnNpZ24pOiBTdHlsZSBmaXguCisKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGht
QWVzQ2JjUGFyYW1zLmg6IEFkZGVkLgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5Q2xhc3MpOgorICAgICAgICAqIGNyeXB0by9rZXlz
L0NyeXB0b0tleUhNQUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFzQ3J5cHRvS2V5SE1BQyk6Cisg
ICAgICAgIEFkZGVkIHBvb3IgbWFuJ3MgUlRUSSwgc28gdGhhdCB3ZSBjYW4gc2FmZWx5IHVwY2Fz
dCBLZXlzIHBhc3NlZCBmcm8gSmF2YVNjcmlwdCBjb2RlLgorCisgICAgICAgICogY3J5cHRvL0Ny
eXB0b0tleUFFUy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpD
cnlwdG9LZXlBRVMpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjp+Q3J5cHRvS2V5
QUVTKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNj
cmlwdGlvbik6CisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleUFFUy5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmFzQ3J5cHRvS2V5QUVTKToKKyAgICAgICAgQUVTIGtleXMgYXJlIHRoZSBz
YW1lIGZvciBhbGwgYWxnb3JpdGhtcywgYnV0IHRoZXkgc3RpbGwgbmVlZCB0byByZW1lbWJlciB0
aGUgYWxnb3JpdGhtLgorCisgICAgICAgICogY3J5cHRvL1N1YnRsZUNyeXB0by5pZGw6IEFkZGVk
IGVuY3J5cHQvZGVjcnlwdC4KKworICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29y
aXRobUFFU19DQkM6OkNyeXB0b0FsZ29yaXRobUFFU19DQkMpOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6fkNyeXB0b0FsZ29yaXRobUFFU19DQkMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmlkZW50aWZpZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6aW1wb3J0S2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmV4cG9ydEtleSk6CisgICAgICAgICogY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oOiBBZGRlZC4KKyAgICAgICAgKiBj
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnRyYW5zZm9ybUFFU19DQkMpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjpkZWNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFF
U19DQkM6OmdlbmVyYXRlS2V5KToKKyAgICAgICAgQWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8v
bWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtSE1BQzo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1I
TUFDOjp2ZXJpZnkpOgorICAgICAgICBDaGVjayBrZXkgY2xhc3MgYmVmb3JlIGNhc3RpbmcgaXQg
dG8gQ3J5cHRvS2V5SE1BQy4KKworICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnlNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnk6OnBsYXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKTogUmVnaXN0ZXIgQUVTLUNCQworICAgICAg
ICBvbiBNYWMsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQuCisKIDIwMTMtMTEtMDEgIEFuZHJlYXMg
S2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEtpbGwgUmVuZGVyQXJlbmEuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1MDUsNiArNTUwNSwxNCBAQAog
CQlFMTI1RjgzNTE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzMzE4MjJGMThBMDBE
ODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgKi87IH07CiAJCUUxMjVGODM2MTgyMkYxOEEwMEQ4
NENEOSAvKiBDcnlwdG9LZXlITUFDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTI1RjgzNDE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5o
ICovOyB9OwogCQlFMTI1RjgzODE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1B
Q01hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTI1RjgzNzE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgKi87
IH07CisJCUUxMjVGODNBMTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
MjVGODM5MTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCAq
LzsgfTsKKwkJRTEyNUY4M0QxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1
RjgzQjE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcCAqLzsgfTsK
KwkJRTEyNUY4M0UxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4M0MxODI0
MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oICovOyB9OworCQlFMTI1Rjg0
MTE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzRjE4MjQyNTNBMDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgKi87IH07CisJCUUxMjVGODQyMTgy
NDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1Rjg0MDE4MjQyNTNBMDBEODRDRDkg
LyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oICovOyB9OworCQlFMTI1Rjg0NTE4MjQyNUM5MDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1Rjg0MzE4MjQyNUM5MDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgKi87IH07CisJCUUxMjVGODREMTgyNDI4OUQw
MEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4NEIxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFF
Uy5jcHAgKi87IH07CisJCUUxMjVGODRFMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODRD
MTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCAqLzsgfTsKIAkJRTEyNzE5QzcwRUVF
QzE2ODAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxOUM2MEVFRUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0
b3JCYXNlLmggKi87IH07CiAJCUUxMjcxOUNBMEVFRUMyMTMwMEY2MTIxMyAvKiBOYXZpZ2F0b3JC
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
MjcxOUM5MEVFRUMyMTMwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmNwcCAqLzsgfTsKIAkJRTEy
NzFBMEIwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNzFBMEEwRUVFQzc3QTAwRjYxMjEz
IC8qIFdvcmtlck5hdmlnYXRvci5oICovOyB9OwpAQCAtMTI1MTEsNiArMTI1MTksMTQgQEAKIAkJ
RTEyNUY4MzMxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvS2V5SE1BQy5jcHA7IHBhdGggPSBrZXlz
L0NyeXB0b0tleUhNQUMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI1Rjgz
NDE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBDcnlwdG9LZXlITUFDLmg7IHBhdGggPSBrZXlzL0NyeXB0b0tleUhNQUMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNUY4MzcxODIyRjFFQjAwRDg0Q0Q5
IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHA7IHBhdGggPSBtYWMvQ3J5cHRv
QWxnb3JpdGhtSE1BQ01hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVG
ODM5MTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODNCMTgyNDExRTcwMEQ4NENE
OSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTEyNUY4M0MxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9u
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b09wZXJhdGlv
bkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4M0YxODI0MjUzQTAw
RDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODQwMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0Fs
Z29yaXRobUFFU19DQkMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4NDMx
ODI0MjVDOTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5j
cHA7IHBhdGggPSBtYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODRCMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlB
RVMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvS2V5QUVT
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4NEMxODI0Mjg5RDAwRDg0
Q0Q5IC8qIENyeXB0b0tleUFFUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
cnlwdG9LZXlBRVMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNzE5QzYwRUVF
QzE2ODAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmF2aWdhdG9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTI3MTlDOTBFRUVDMjEzMDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0b3JCYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNzFBMEEwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtlck5hdmln
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJOYXZpZ2F0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5Mjk4LDYgKzE5MzE0LDggQEAKIAkJ
CQkxQzgxQkEwNDBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICovLAog
CQkJCUUxNTdBOEVFMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIu
Y3BwICovLAogCQkJCUUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRo
bUJ1aWxkZXIuaCAqLywKKwkJCQlFMTI1RjgzQjE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9P
cGVyYXRpb25EYXRhLmNwcCAqLywKKwkJCQlFMTI1RjgzQzE4MjQxMUU3MDBEODRDRDkgLyogSlND
cnlwdG9PcGVyYXRpb25EYXRhLmggKi8sCiAJCQkJRTFDNjU3MTAxODE1RjlERDAwMjU2Q0REIC8q
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAgKi8sCiAJCQkJRTFDNjU3MTExODE1RjlE
RDAwMjU2Q0REIC8qIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5oICovLAogCQkJCUJDRTQz
OEExMTQwQzBEQkYwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnkuY3BwICovLApAQCAtMjAxMzEsNiAr
MjAxNDksNyBAQAogCQlFMTcyQUY3MTE4MEYzNDM0MDBGQkFEQjkgLyogbWFjICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlFMTI1Rjg0MzE4MjQyNUM5MDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgKi8sCiAJCQkJRTEyNUY4Mzcx
ODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwICovLAogCQkJCUUx
QkI4NEFDMTgyMkNBNzQwMDUyNTA0MyAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAg
Ki8sCiAJCQkJRTEyNUY4MkQxODIyQ0ZGRjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTFN
YWMuY3BwICovLApAQCAtMjAxNDEsNiArMjAxNjAsOCBAQAogCQlFMTcyQUY3QzE4MEYzQjBEMDBG
QkFEQjkgLyogYWxnb3JpdGhtcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJRTEyNUY4M0YxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFF
U19DQkMuY3BwICovLAorCQkJCUUxMjVGODQwMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDLmggKi8sCiAJCQkJRTEyNUY4MkYxODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0
b0FsZ29yaXRobUhNQUMuY3BwICovLAogCQkJCUUxMjVGODMwMTgyMkYxMUIwMEQ4NENEOSAvKiBD
cnlwdG9BbGdvcml0aG1ITUFDLmggKi8sCiAJCQkJRTEyNUY4MjkxODIyQ0ZFQzAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobVNIQTEuY3BwICovLApAQCAtMjAxNTIsNiArMjAxNzMsOCBAQAogCQlF
MTlEQTI5RDE4MTk5NUNFMDAwODhCQzggLyoga2V5cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTEyNUY4NEIxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0
b0tleUFFUy5jcHAgKi8sCisJCQkJRTEyNUY4NEMxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tl
eUFFUy5oICovLAogCQkJCUUxMjVGODMzMTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFD
LmNwcCAqLywKIAkJCQlFMTI1RjgzNDE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5o
ICovLAogCQkJKTsKQEAgLTIwMTYxLDYgKzIwMTg0LDcgQEAKIAkJRTFDNjU3MTQxODE2MDE1RjAw
MjU2Q0REIC8qIHBhcmFtZXRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCUUxMjVGODM5MTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1B
ZXNDYmNQYXJhbXMuaCAqLywKIAkJCQlFMTlEQTI5QjE4MTg5QUREMDAwODhCQzggLyogQ3J5cHRv
QWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oICovLAogCQkJCUUxQzY1NzFFMTgxNkU1MDMwMDI1NkNE
RCAvKiBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmggKi8sCiAJCQkpOwpAQCAtMjM3MzAsNiAr
MjM3NTQsNyBAQAogCQkJCTlCNTBCMURFMTdDRDRDMEYwMDg3RjYzQyAvKiBGb3JtTmFtZWRJdGVt
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc3RTc3NzBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQUVEMjAzMTE2RjI0NDQ4MDA3MEVDMEYgLyogUGFn
ZUNvbnNvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMjVGODNFMTgyNDExRTcwMEQ4NENEOSAv
KiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODkzMTQ3
RDM1RjkwMDEwQkMwNiAvKiBQYWdlQ29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
MzQ3NDJERDEzNDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjM4MzYsNiArMjM4NjEsNyBAQAogCQkJCTUxNEM3Njc1MENFOTIzQTEwMDdF
RjNDRCAvKiBQcm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTA1MjU2MTA1
ODg3NDAwMENDOUU5NSAvKiBQcm90ZWN0aW9uU3BhY2VIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUY4RTExQTEyNTY1OTI2MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCUUxMjVGODRFMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZGOTQ1RUNDMTYxRjdGMzYwMDk3MUJDOCAvKiBQc2V1ZG9FbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwMDgxRkYwMDE2QjBBMkQzMDA4QUFBN0EgLyogUHVibGljU3Vm
Zml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxMEZCMDg0QjE0RTE1QzdFMDBBM0RCOTggLyogUHVi
bGljVVJMTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzg0NSw2ICsyMzg3MSw3IEBACiAJ
CQkJMzc5RTM3MTcxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUE1NzRGMjkxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3OTcyMEQwMEJGMjIwMDcxQjc4MiAvKiBSYWRpYWxHcmFkaWVu
dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMjVGODQyMTgyNDI1M0EwMEQ4NENE
OSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RD
QzEyNTFGMTJEMDAzRUYyNjkgLyogUmFkaW9JbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUI2NThGRkE2MTUyMkVGQUEwMERENTU5NSAvKiBSYWRpb05vZGVMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0YxOTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICov
LApAQCAtMjQ4MDksNiArMjQ4MzYsNyBAQAogCQkJCTE0NDc2QUE4MTVEQzRCQjEwMDMwNURCMiAv
KiBXcml0aW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgyMDIwOUQxNTA4RDAwMEU2
MUQ3IC8qIFhMaW5rTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwQjkzMTg4MTNCQThEQkEw
MDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEyNUY4
M0ExODI0MTA0ODAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFy
c2VyU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5QzI4MDQ2MTM4REMyNDEwMDc5QjdFMiAv
KiBYTUxFcnJvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzcyQzQ3MEM0RUIyQzYwMDgzMjg1
RiAvKiBYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTYyNiw2ICsyNTY1NCw3
IEBACiAJCQkJMDdDNTlCNjgxN0Y3ODRCQTAwMEZCQ0JCIC8qIE1lZGlhU291cmNlU3RhdGVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg1OUE5QzRBMEFBNUUzQkQwMEI2OTRCMiAvKiBET01IVE1M
Qm9keUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTE4M0I0MzBBQTY5MjYxMDBGMTlG
QTMgLyogRE9NSFRNTEJSRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUxMjVGODREMTgy
NDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODVC
QTRDREUwQUE2ODYxQjAwODgwNTJEIC8qIERPTUhUTUxCdXR0b25FbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGOUI2NTcwQkEwRjM1RTAwODU0MDY0IC8qIERPTUhUTUxDYW52YXNFbGVt
ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVERjJGOEYwQUEzQzg4MTAwQUQ2NEM1IC8qIERP
TUhUTUxDb2xsZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjM0Niw2ICsyNjM3NSw3IEBA
CiAJCQkJNTExRUYyQzcxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0U3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM5NEQxNEUwQzI3NUM2ODAwNkJDNjE3IC8qIEpTSGlzdG9yeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0U3QjE5MzBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0
b3J5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMjVGODNEMTgyNDExRTcwMEQ4NENE
OSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5N0U0
MTIxMDkxNTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM5N0U0MkMxMDkxNUIwNjAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb25D
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0QTJERUYwQTFCODUyQTAwQzgwN0Y4IC8q
IEpTSFRNTEFuY2hvckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzY2Nyw2ICsyNzY5
Nyw3IEBACiAJCQkJOTdCQzg0ODMxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4
dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxMDVEQTYyMEYzQUE2OEYwMDFERDQ0
RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTI1
Rjg0MTE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkMzREE0ODBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVn
aXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzQTE0MkUwQjdEMTg4NjAwQTUzRkZEIC8q
IFRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RENzEyNTFGMTJEMDAzRUYy
NjkgLyogVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3MzksNiAr
Mjc3NzAsNyBAQAogCQkJCUZEMzE2MEFFMTJCMDI2RjcwMEMxQTM1OSAvKiBWZWN0b3JNYXRoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJFODhFMERFMTcxNUQyQTIwMDY1OEQ5OCAvKiBWaWRlb1Ry
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFODhFMEUxMTcxNUQyQTIwMDY1OEQ5OCAvKiBW
aWRlb1RyYWNrTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTI1Rjg0NTE4MjQyNUM5MDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDRUY0MThDRTExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJM0ZGRkY5QUQxNTlEOUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0U3R5bGVS
ZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRjA5OUU2NDkyMDA1NkU1ODEg
LyogVmlzaWJsZVBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnkuY3BwCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCAr
MjgsMTIgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY0tl
eVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCIKICNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKIApAQCAtODAsNiArODIsMTcgQEAg
Ym9vbCBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZwogICAgIHJldHVybiB0cnVl
OwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgSWRlbnRpZmllciBpZGVudGlm
aWVyKGV4ZWMsIG5hbWUpOworICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CisKKyAgICBp
ZiAob2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCisgICAg
ICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOworCisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Cit9CisKIHN0YXRpYyBib29sIGdldEhhc2hBbGdvcml0aG0oSlNEaWN0
aW9uYXJ5JiBkaWN0aW9uYXJ5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyJiByZXN1bHQpCiB7
CiAgICAgLy8gRlhJTUU6IFRlYWNoIEpTRGljdGlvbmFyeSBob3cgdG8gcmV0dXJuIEpTVmFsdWVz
LCBhbmQgdXNlIHRoYXQgdG8gZ2V0IGhhc2ggZWxlbWVudCB2YWx1ZS4KQEAgLTkwLDE1ICsxMDMs
OSBAQCBzdGF0aWMgYm9vbCBnZXRIYXNoQWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAgSWRlbnRp
ZmllciBpZGVudGlmaWVyKGV4ZWMsICJoYXNoIik7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0KTsKIAotICAgIEpTVmFsdWUgaGFzaCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKG9iamVj
dC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBoYXNoID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
KyAgICBKU1ZhbHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBvYmplY3QsICJoYXNoIik7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAoaGFzaC5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CkBAIC0xMDgsNiArMTE1LDM1IEBAIHN0YXRpYyBi
b29sIGdldEhhc2hBbGdvcml0aG0oSlNEaWN0aW9uYXIKICAgICByZXR1cm4gSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKGV4ZWMsIGhhc2gsIHJlc3Vs
dCk7CiB9CiAKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gY3JlYXRlQWVzQ2JjUGFyYW1zKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU1Zh
bHVlIGl2ID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zPiByZXN1bHQgPSBz
dGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcz4oKTsKKworICAgIENy
eXB0b09wZXJhdGlvbkRhdGEgaXZEYXRhOworICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZy
b21KU1ZhbHVlKGV4ZWMsIGl2LCBpdkRhdGEpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChp
dkRhdGEuc2Vjb25kICE9IDE2KSB7CisgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIkFFUy1DQkMgaW5pdGlhbGl6YXRpb24gZGF0YSBtdXN0
IGJlIDE2IGJ5dGVzIikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBt
ZW1jcHkocmVzdWx0LT5pdi5kYXRhKCksIGl2RGF0YS5maXJzdCwgaXZEYXRhLnNlY29uZCk7CisK
KyAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7Cit9CisKIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlSG1hY1BhcmFtcyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgewpAQCAtMTQ4LDcgKzE4NCw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGEKICAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CkBAIC0xNTgsNyArMTk0LDEwIEBAIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkVDRFNBOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
RUNESDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DVFI6CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NC
QzoKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFlc0NiY1BhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ01BQzoKICAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19HQ006CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpBRVNfQ0ZCOgpAQCAtMTc3LDcgKzIxNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0
ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3Jl
YXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgc3dp
dGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJT
QUVTX1BLQ1MxX3YxXzU6CkBAIC0xODcsNyArMjI2LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkVDRFNBOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNESDoKICAgICBj
YXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DVFI6CisgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQzoKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUFlc0NiY1BhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ01BQzoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OkFFU19HQ006CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpB
RVNfQ0ZCOgpAQCAtNDAzLDExICs0NDUsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NN
QUM6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfR0NNOgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NGQjoKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+KCk7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDOgogICAgICAg
ICByZXR1cm4gY3JlYXRlSG1hY0tleVBhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpESDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OlNIQV8xOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
U0hBXzIyNDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CkBA
IC00MzcsNiArNDc5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NGQjoKICAgICBjYXNl
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUM6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpESDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoK
ICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09w
ZXJhdGlvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDcnlwdG9PcGVyYXRpb25EYXRh
LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgc2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgcmVzdWx0KQor
eworICAgIHVuc2lnbmVkIHNlcXVlbmNlTGVuZ3RoOworICAgIEpTT2JqZWN0KiBzZXF1ZW5jZSA9
IHRvSlNTZXF1ZW5jZShleGVjLCB2YWx1ZSwgc2VxdWVuY2VMZW5ndGgpOworICAgIGlmICghc2Vx
dWVuY2UpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXF1
ZW5jZUxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgaXRlbSA9IHNlcXVlbmNlLT5nZXQo
ZXhlYywgaSk7CisgICAgICAgIGlmIChBcnJheUJ1ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZl
cihpdGVtKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RhdGlj
X2Nhc3Q8Y2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpKTsKKyAg
ICAgICAgZWxzZSBpZiAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYnVmZmVyVmlldyA9IHRvQXJy
YXlCdWZmZXJWaWV3KGl0ZW0pKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSksIGJ1ZmZl
clZpZXctPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBBcnJheUJ1ZmZlclZpZXcgb2Jq
ZWN0cyBjYW4gYmUgcGFydCBvZiBDcnlwdG9PcGVyYXRpb25EYXRhIHNlcXVlbmNlIik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgcmVzdWx0KQoreworICAgIGlm
IChBcnJheUJ1ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZlcih2YWx1ZSkpCisgICAgICAgIHJl
c3VsdCA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSks
IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbHNlIGlmIChSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiBidWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsdWUpKQorICAgICAgICByZXN1
bHQgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+YmFzZUFk
ZHJlc3MoKSksIGJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgZWxzZSB7CisgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBBcnJheUJ1ZmZlclZp
ZXcgb2JqZWN0cyBjYW4gYmUgcGFzc2VkIGFzIENyeXB0b09wZXJhdGlvbkRhdGEiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlv
bkRhdGEuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIwor
bmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SlNDcnlwdG9PcGVyYXRpb25EYXRhX2gKKyNkZWZpbmUgSlNDcnlwdG9PcGVyYXRpb25EYXRhX2gK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQor
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTVmFsdWU7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgY2hhciosIHNp
emVfdD4gQ3J5cHRvT3BlcmF0aW9uRGF0YTsKKworYm9vbCBzZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0
aW9uRGF0YUZyb21KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBWZWN0b3I8
Q3J5cHRvT3BlcmF0aW9uRGF0YT4mKTsKK2Jvb2wgY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1Zh
bHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBDcnlwdG9PcGVyYXRpb25EYXRhJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZ
UFRPKQorI2VuZGlmIC8vIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YV9oCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVByb21pc2UuaAkocmV2aXNpb24gMTU4NDYxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDEz
IEBAIGlubGluZSB2b2lkIFByb21pc2VXcmFwcGVyOjpyZWplY3QoY29uc3QKIH0KIAogdGVtcGxh
dGU8PgoraW5saW5lIHZvaWQgUHJvbWlzZVdyYXBwZXI6OnJlamVjdChjb25zdCBzdGQ6Om51bGxw
dHJfdCYpCit7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOworICAgIG1fcHJvbWlzZS0+cmVzb2x2ZXIoKS0+cmVqZWN0SWZOb3RSZXNvbHZl
ZChleGVjLCBKU0M6OmpzTnVsbCgpKTsKK30KKwordGVtcGxhdGU8PgogaW5saW5lIHZvaWQgUHJv
bWlzZVdyYXBwZXI6OmZ1bGZpbGw8U3RyaW5nPihjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKICAg
ICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9D
dXN0b20uY3BwCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJKU0NyeXB0
b09wZXJhdGlvbkRhdGEuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+CiAKQEAgLTU1LDQyICs1Niw2IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtPiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9v
bCBzZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiByZXN1bHQpCi17
Ci0gICAgdW5zaWduZWQgc2VxdWVuY2VMZW5ndGg7Ci0gICAgSlNPYmplY3QqIHNlcXVlbmNlID0g
dG9KU1NlcXVlbmNlKGV4ZWMsIHZhbHVlLCBzZXF1ZW5jZUxlbmd0aCk7Ci0gICAgaWYgKCFzZXF1
ZW5jZSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlcXVl
bmNlTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBpdGVtID0gc2VxdWVuY2UtPmdldChl
eGVjLCBpKTsKLSAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBidWZmZXIgPSB0b0FycmF5QnVmZmVy
KGl0ZW0pKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0aWNf
Y2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSkpOwotICAg
ICAgICBlbHNlIGlmIChSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBidWZmZXJWaWV3ID0gdG9BcnJh
eUJ1ZmZlclZpZXcoaXRlbSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwgYnVmZmVy
Vmlldy0+Ynl0ZUxlbmd0aCgpKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgIk9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVyVmlldyBvYmpl
Y3RzIGNhbiBiZSBwYXJ0IG9mIENyeXB0b09wZXJhdGlvbkRhdGEgc2VxdWVuY2UiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGJvb2wgY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgcmVzdWx0KQotewot
ICAgIGlmIChBcnJheUJ1ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZlcih2YWx1ZSkpCi0gICAg
ICAgIHJlc3VsdCA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRh
dGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBlbHNlIGlmIChSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiBidWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsdWUpKQotICAgICAg
ICByZXN1bHQgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+
YmFzZUFkZHJlc3MoKSksIGJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBBcnJheUJ1
ZmZlclZpZXcgb2JqZWN0cyBjYW4gYmUgcGFydCBvZiBDcnlwdG9PcGVyYXRpb25EYXRhIHNlcXVl
bmNlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIHN0YXRpYyBib29sIGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5Rm9ybWF0JiByZXN1bHQpCiB7CiAgICAgU3RyaW5n
IGtleUZvcm1hdFN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKQEAg
LTE0Niw2ICsxMTEsOTggQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUo
RQogICAgIHJldHVybiB0cnVlOwogfQogCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykK
KyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgaWYgKCFhbGdvcml0aG0pIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yRW5jcnlwdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGlmICghcGFyYW1ldGVycykgeworICAgICAgICBBU1NFUlQoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSB0b0NyeXB0b0tleShleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKKworICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0
KSkgeworICAgICAgICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVz
c2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJLZXkgdXNhZ2VzIGRvZXMgbm90IGluY2x1
ZGUgJ2VuY3J5cHQnIik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9S
VEVEX0VSUik7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZl
Y3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhOworICAgIGlmICghc2VxdWVuY2VPZkNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgy
KSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgSlNQcm9taXNlKiBwcm9taXNl
ID0gSlNQcm9taXNlOjpjcmVhdGVXaXRoUmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0
KCkpOworICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRlKGds
b2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGFsZ29yaXRobS0+ZW5jcnlwdCgqcGFyYW1ldGVycywgKmtleSwgZGF0YSwgc3RkOjptb3ZlKHBy
b21pc2VXcmFwcGVyKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcHJvbWlzZTsKK30KKworSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGVjcnlwdChF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCisg
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRl
QWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwor
ICAgIGlmICghYWxnb3JpdGhtKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
ckRlY3J5cHQoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
CisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gdG9DcnlwdG9LZXkoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpOworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7CisKKyAgICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlRGVjcnlwdCkp
IHsKKyAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3Nh
Z2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCAiS2V5IHVzYWdlcyBkb2VzIG5vdCBpbmNsdWRl
ICdkZWNyeXB0JyIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRF
RF9FUlIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YTsKKyAgICBpZiAoIXNlcXVlbmNlT2ZDcnlwdG9P
cGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiks
IGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9
IEpTUHJvbWlzZTo6Y3JlYXRlV2l0aFJlc29sdmVyKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCgp
KTsKKyAgICBhdXRvIHByb21pc2VXcmFwcGVyID0gUHJvbWlzZVdyYXBwZXI6OmNyZWF0ZShnbG9i
YWxPYmplY3QoKSwgcHJvbWlzZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBh
bGdvcml0aG0tPmRlY3J5cHQoKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIHN0ZDo6bW92ZShwcm9t
aXNlV3JhcHBlciksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
cmV0dXJuIHByb21pc2U7Cit9CisKIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0
YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQpAQCAtMTgz
LDcgKzI0MCw3IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0YXRlKiAKICAg
ICBhdXRvIHByb21pc2VXcmFwcGVyID0gUHJvbWlzZVdyYXBwZXI6OmNyZWF0ZShnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhbGdvcml0
aG0tPnNpZ24oKnBhcmFtZXRlcnMsICprZXkuZ2V0KCksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNl
V3JhcHBlciksIGVjKTsKKyAgICBhbGdvcml0aG0tPnNpZ24oKnBhcmFtZXRlcnMsICprZXksIGRh
dGEsIHN0ZDo6bW92ZShwcm9taXNlV3JhcHBlciksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFy
YW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRo
bUFlc0NiY1BhcmFtcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc19oCisj
ZGVmaW5lIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc19oCisKKyNpbmNsdWRlICJDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KKworI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENy
eXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBN
VVNUIGJlIDE2IGJ5dGVzLgorICAgIEZpeGVkQXJyYXk8Y2hhciwgMTY+IGl2OworfTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRvQWxnb3Jp
dGhtQWVzQ2JjUGFyYW1zX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCShyZXZpc2lvbiAxNTg0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDExICszOSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlcjsKIAorRU5VTV9DTEFTUyhDcnlwdG9LZXlDbGFzcykgewor
ICAgIEhNQUMsCisgICAgQUVTCit9OworCiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMgUmVmQ291
bnRlZDxDcnlwdG9LZXk+IHsKIHB1YmxpYzoKICAgICBDcnlwdG9LZXkoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciwgQ3J5cHRvS2V5VHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNh
Z2UpOwogICAgIHZpcnR1YWwgfkNyeXB0b0tleSgpOwogCisgICAgdmlydHVhbCBDcnlwdG9LZXlD
bGFzcyBrZXlDbGFzcygpIGNvbnN0ID0gMDsKKwogICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CiAg
ICAgYm9vbCBleHRyYWN0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0cmFjdGFibGU7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1E
ZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9D
cnlwdG9LZXlBRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9Dcnlw
dG9LZXlBRVMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0
b0tleUFFUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKworI2lmIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRp
b25CdWlsZGVyLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDcnlw
dG9LZXlBRVM6OkNyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRo
bSwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlIHVzYWdlKQorICAgIDogQ3J5cHRvS2V5KGFsZ29yaXRobSwgQ3J5cHRvS2V5VHlwZTo6U2Vj
cmV0LCBleHRyYWN0YWJsZSwgdXNhZ2UpCisgICAgLCBtX2tleShrZXkpCit7CisgICAgQVNTRVJU
KGFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ1RSCisgICAgICAg
IHx8IGFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDCisgICAg
ICAgIHx8IGFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ01BQwor
ICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0dD
TQorICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVT
X0NGQik7Cit9CisKK0NyeXB0b0tleUFFUzo6fkNyeXB0b0tleUFFUygpCit7Cit9CisKK3ZvaWQg
Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURl
c2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK3sKKyAgICBDcnlwdG9LZXk6OmJ1aWxk
QWxnb3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CisgICAgYnVpbGRlci5hZGQoImxlbmd0aCIs
IG1fa2V5LnNpemUoKSAqIDgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvS2V5QUVTX2gKKyNkZWZp
bmUgQ3J5cHRvS2V5QUVTX2gKKworI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIu
aCIKKyNpbmNsdWRlICJDcnlwdG9LZXkuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
cnlwdG9LZXlBRVMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDcnlwdG9LZXlBRVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGFsZ29yaXRobSwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUs
IENyeXB0b0tleVVzYWdlIHVzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDcnlwdG9LZXlBRVMoYWxnb3JpdGhtLCBrZXksIGV4dHJhY3RhYmxlLCB1c2FnZSkpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5DcnlwdG9LZXlBRVMoKTsKKworICAgIHZpcnR1YWwgQ3J5cHRvS2V5
Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6
QUVTOyB9CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICBDcnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgY29uc3QgVmVj
dG9yPGNoYXI+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKKworICAg
IFZlY3RvcjxjaGFyPiBtX2tleTsKK307CisKK2lubGluZSBjb25zdCBDcnlwdG9LZXlBRVMqIGFz
Q3J5cHRvS2V5QUVTKGNvbnN0IENyeXB0b0tleSYga2V5KQoreworICAgIGlmIChrZXkua2V5Q2xh
c3MoKSAhPSBDcnlwdG9LZXlDbGFzczo6QUVTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5QUVTKj4oJmtleSk7Cit9CisKK2lu
bGluZSBDcnlwdG9LZXlBRVMqIGFzQ3J5cHRvS2V5QUVTKENyeXB0b0tleSYga2V5KQoreworICAg
IGlmIChrZXkua2V5Q2xhc3MoKSAhPSBDcnlwdG9LZXlDbGFzczo6QUVTKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5cHRvS2V5QUVTKj4oJmtleSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQorCisKKyNlbmRpZiAvLyBDcnlwdG9LZXlBRVNfaAoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleUFFUy5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaWRsCShy
ZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogICAgIE5vSW50ZXJmYWNlT2JqZWN0
LAogICAgIE9wZXJhdGlvbnNOb3REZWxldGFibGUKIF0gaW50ZXJmYWNlIFN1YnRsZUNyeXB0byB7
CisgICAgW0N1c3RvbV0gUHJvbWlzZSBlbmNyeXB0KEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3Jp
dGhtLCBLZXkga2V5LCBzZXF1ZW5jZTxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhKTsKKyAgICBb
Q3VzdG9tXSBQcm9taXNlIGRlY3J5cHQoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEtl
eSBrZXksIHNlcXVlbmNlPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGEpOwogICAgIFtDdXN0b21d
IFByb21pc2Ugc2lnbihBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgS2V5IGtleSwgc2Vx
dWVuY2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CiAgICAgW0N1c3RvbV0gUHJvbWlzZSB2
ZXJpZnkoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEtleSBrZXksIENyeXB0b09wZXJh
dGlvbkRhdGEgc2lnbmF0dXJlLCBzZXF1ZW5jZTxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhKTsK
ICAgICBbQ3VzdG9tXSBQcm9taXNlIGRpZ2VzdChBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRo
bSwgc2VxdWVuY2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlB
RVMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY29uc3QgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6c19uYW1lID0gImFlcy1jYmMiOworCitDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDKCkKK3sKK30KKworQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6fkNyeXB0b0FsZ29yaXRobUFFU19DQkMoKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPihuZXcgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQyk7Cit9CisKK0NyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQzo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNfaWRlbnRpZmll
cjsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIENyeXB0b0tleUZvcm1hdCBmb3JtYXQsIGNvbnN0IENy
eXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdl
IHVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGlmIChmb3JtYXQgIT0gQ3J5cHRvS2V5Rm9ybWF0OjpSYXcpIHsK
KyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBWZWN0b3I8Y2hhcj4ga2V5RGF0YTsKKyAgICBrZXlEYXRhLmFwcGVuZChkYXRhLmZpcnN0
LCBkYXRhLnNlY29uZCk7CisgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0ID0gQ3J5cHRv
S2V5QUVTOjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQywga2V5RGF0
YSwgZXh0cmFjdGFibGUsIHVzYWdlKTsKKyAgICBwcm9taXNlLT5mdWxmaWxsKHJlc3VsdC5yZWxl
YXNlKCkpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmV4cG9ydEtleShjb25z
dCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0LCBjb25zdCBDcnlw
dG9LZXkmLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19DQkMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDX2gKKyNk
ZWZpbmUgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ19oCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0
aG0uaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENyeXB0b0FsZ29yaXRobUFFU19DQkMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvQWxn
b3JpdGhtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19uYW1lOwor
ICAgIHN0YXRpYyBjb25zdCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIHNfaWRlbnRpZmllciA9
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkM7CisKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFOworCisgICAg
dmlydHVhbCB2b2lkIGVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNv
bnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYsIHN0ZDo6
dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwg
Y29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+Jiwgc3Rk
Ojp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQ
cm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlwdG9LZXlG
b3JtYXQsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29k
ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBleHBvcnRLZXkoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYsIENyeXB0b0tleUZvcm1hdCwgY29uc3QgQ3J5cHRvS2V5Jiwgc3Rk
Ojp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwor
Citwcml2YXRlOgorICAgIENyeXB0b0FsZ29yaXRobUFFU19DQkMoKTsKKyAgICB2aXJ0dWFsIH5D
cnlwdG9BbGdvcml0aG1BRVNfQ0JDKCk7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VC
VExFX0NSWVBUTykKKworI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRobUFFU19DQkNfaAoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCAr
MSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgJKHJldmlzaW9uIDE1ODQ2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2RlZmluZSBDcnlwdG9LZXlITUFDX2gKIAogI2luY2x1
ZGUgIkNyeXB0b0tleS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKQEAgLTQyLDYgKzQxLDggQEAgcHVi
bGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5DcnlwdG9LZXlITUFDKCk7CiAKKyAgICB2aXJ0dWFs
IENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ3J5cHRv
S2V5Q2xhc3M6OkhNQUM7IH0KKwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9rZXk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2Ny
aXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IE9WRVJSSURF
OwpAQCAtNTMsNiArNTQsMjAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7CiB9
OwogCitpbmxpbmUgY29uc3QgQ3J5cHRvS2V5SE1BQyogYXNDcnlwdG9LZXlITUFDKGNvbnN0IENy
eXB0b0tleSYga2V5KQoreworICAgIGlmIChrZXkua2V5Q2xhc3MoKSAhPSBDcnlwdG9LZXlDbGFz
czo6SE1BQykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IENyeXB0b0tleUhNQUMqPigma2V5KTsKK30KKworaW5saW5lIENyeXB0b0tleUhNQUMq
IGFzQ3J5cHRvS2V5SE1BQyhDcnlwdG9LZXkmIGtleSkKK3sKKyAgICBpZiAoa2V5LmtleUNsYXNz
KCkgIT0gQ3J5cHRvS2V5Q2xhc3M6OkhNQUMpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDcnlwdG9LZXlITUFDKj4oJmtleSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFF
U19DQkNNYWMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9D
cnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUFF
Uy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2Uu
aCIKKyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uQ3J5cHRvLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIHZvaWQgdHJhbnNmb3JtQUVTX0NCQyhDQ09wZXJhdGlvbiBvcGVy
YXRpb24sIGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5QUVTJiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYg
ZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlKQoreworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKHBhcmFtZXRlcnMuaXYpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCwg
IkluaXRpYWxpemF0aW9uIHZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgYWxnb3JpdGht
IGJsb2NrIHNpemUiKTsKKworICAgIHNpemVfdCBrZXlMZW5ndGhJbkJ5dGVzID0ga2V5LmtleSgp
LnNpemUoKTsKKyAgICBpZiAoa2V5TGVuZ3RoSW5CeXRlcyAhPSAxNiAmJiBrZXlMZW5ndGhJbkJ5
dGVzICE9IDI0ICYmIGtleUxlbmd0aEluQnl0ZXMgIT0gMzIpIHsKKyAgICAgICAgcHJvbWlzZS0+
cmVqZWN0KG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0NDcnlwdG9y
UmVmIGNyeXB0b3I7CisgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IENDQ3J5cHRvckNyZWF0
ZShvcGVyYXRpb24sIGtDQ0FsZ29yaXRobUFFUywga0NDT3B0aW9uUEtDUzdQYWRkaW5nLCBrZXku
a2V5KCkuZGF0YSgpLCBrZXlMZW5ndGhJbkJ5dGVzLCBwYXJhbWV0ZXJzLml2LmRhdGEoKSwgJmNy
eXB0b3IpOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxw
dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IGlucHV0U2l6ZSA9IDA7
CisgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBkYXRhLnNpemUoKTsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgaW5wdXRTaXplICs9IGRhdGFbaV0uc2Vjb25kOworCisgICAgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+IHJlc3VsdChDQ0NyeXB0b3JHZXRPdXRwdXRMZW5ndGgoY3J5cHRvciwgaW5w
dXRTaXplLCB0cnVlKSk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBwID0gcmVzdWx0LmRhdGEoKTsK
KyAgICBzaXplX3QgcmVzdWx0Q2h1bmtTaXplOworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXpl
ID0gZGF0YS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgc3RhdHVzID0gQ0NDcnlw
dG9yVXBkYXRlKGNyeXB0b3IsIGRhdGFbaV0uZmlyc3QsIGRhdGFbaV0uc2Vjb25kLCBwLCByZXN1
bHQuZW5kKCkgLSBwLCAmcmVzdWx0Q2h1bmtTaXplKTsKKyAgICAgICAgaWYgKHN0YXR1cykgewor
ICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHAgKz0gcmVzdWx0Q2h1bmtTaXplOworICAgIH0KKyAgICBz
dGF0dXMgPSBDQ0NyeXB0b3JGaW5hbChjcnlwdG9yLCBwLCByZXN1bHQuZW5kKCkgLSBwLCAmcmVz
dWx0Q2h1bmtTaXplKTsKKyAgICBwICs9IHJlc3VsdENodW5rU2l6ZTsKKyAgICBpZiAoc3RhdHVz
KSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVChwIDw9IHJlc3VsdC5lbmQoKSk7CisgICAgcmVzdWx0LnNocmlu
ayhwIC0gcmVzdWx0LmJlZ2luKCkpOworCisgICAgQ0NDcnlwdG9yUmVsZWFzZShjcnlwdG9yKTsK
KworICAgIHByb21pc2UtPmZ1bGZpbGwocmVzdWx0KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjplbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9u
RGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1z
JiBhZXNDQkNQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVz
Q2JjUGFyYW1zJj4ocGFyYW1ldGVycyk7CisgICAgY29uc3QgQ3J5cHRvS2V5QUVTKiBhZXNLZXkg
PSBhc0NyeXB0b0tleUFFUyhrZXkpOworCisgICAgaWYgKCFhZXNLZXkpIHsKKyAgICAgICAgZWMg
PSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRyYW5z
Zm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzQ0JDUGFyYW1ldGVycywgKmFlc0tleSwgZGF0YSwg
c3RkOjptb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpk
ZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0
IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEs
IHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJiBhZXNDQkNQYXJh
bWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJj4o
cGFyYW1ldGVycyk7CisgICAgY29uc3QgQ3J5cHRvS2V5QUVTKiBhZXNLZXkgPSBhc0NyeXB0b0tl
eUFFUyhrZXkpOworCisgICAgaWYgKCFhZXNLZXkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRyYW5zZm9ybUFFU19DQkMo
a0NDRGVjcnlwdCwgYWVzQ0JDUGFyYW1ldGVycywgKmFlc0tleSwgZGF0YSwgc3RkOjptb3ZlKHBy
b21pc2UpKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpnZW5lcmF0ZUtleShj
b25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgYm9vbCAvKmV4dHJhY3RhYmxlKi8sIENy
eXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkLgorICAgIGVjID0gTk9UX1NV
UFBPUlRFRF9FUlI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29y
aXRobUhNQUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBjYWxjdWxh
dGVTaQogdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0
b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxn
b3JpdGhtSG1hY1BhcmFtcyYgaG1hY1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlw
dG9BbGdvcml0aG1IbWFjUGFyYW1zJj4ocGFyYW1ldGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5
SE1BQyYgaG1hY0tleSA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleUhNQUMmPihrZXkpOwor
ICAgIGNvbnN0IENyeXB0b0tleUhNQUMqIGhtYWNLZXkgPSBhc0NyeXB0b0tleUhNQUMoa2V5KTsK
IAogICAgIENDSG1hY0FsZ29yaXRobSBhbGdvcml0aG07CiAgICAgaWYgKCFnZXRDb21tb25Dcnlw
dG9BbGdvcml0aG0oaG1hY1BhcmFtZXRlcnMuaGFzaCwgYWxnb3JpdGhtKSkgewpAQCAtMTAzLDcg
KzEwMywxMiBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJl
ID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS5rZXkoKSwgZGF0YSk7Cisg
ICAgaWYgKCFobWFjS2V5KSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJl
ID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS0+a2V5KCksIGRhdGEpOwog
CiAgICAgcHJvbWlzZS0+ZnVsZmlsbChzaWduYXR1cmUpOwogfQpAQCAtMTExLDcgKzExNiw3IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c2lnbihjb25zdCBDcnkKIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtSE1BQzo6dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBl
eHBlY3RlZFNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiBkYXRh
LCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmIGhtYWNQYXJhbWV0
ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyY+KHBhcmFt
ZXRlcnMpOwotICAgIGNvbnN0IENyeXB0b0tleUhNQUMmIGhtYWNLZXkgPSBzdGF0aWNfY2FzdDxj
b25zdCBDcnlwdG9LZXlITUFDJj4oa2V5KTsKKyAgICBjb25zdCBDcnlwdG9LZXlITUFDKiBobWFj
S2V5ID0gYXNDcnlwdG9LZXlITUFDKGtleSk7CiAKICAgICBDQ0htYWNBbGdvcml0aG0gYWxnb3Jp
dGhtOwogICAgIGlmICghZ2V0Q29tbW9uQ3J5cHRvQWxnb3JpdGhtKGhtYWNQYXJhbWV0ZXJzLmhh
c2gsIGFsZ29yaXRobSkpIHsKQEAgLTExOSw3ICsxMjQsMTIgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1ITUFDOjp2ZXJpZnkoY29uc3QgQwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0
aG0sIGhtYWNLZXkua2V5KCksIGRhdGEpOworICAgIGlmICghaG1hY0tleSkgeworICAgICAgICBl
YyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0
aG0sIGhtYWNLZXktPmtleSgpLCBkYXRhKTsKIAogICAgIGJvb2wgcmVzdWx0ID0gc2lnbmF0dXJl
LnNpemUoKSA9PSBleHBlY3RlZFNpZ25hdHVyZS5zZWNvbmQgJiYgIW1lbWNtcChzaWduYXR1cmUu
ZGF0YSgpLCBleHBlY3RlZFNpZ25hdHVyZS5maXJzdCwgc2lnbmF0dXJlLnNpemUoKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnlNYWMuY3BwCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1B
Qy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTEuaCIKIApAQCAtMzUsNiArMzYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnBs
YXRmb3JtUmVnaXN0ZXJBbGdvcml0aG1zKCkKIHsKKyAgICByZWdpc3RlckFsZ29yaXRobShDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDOjpzX25hbWUsIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnNfaWRl
bnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Y3JlYXRlKTsKICAgICByZWdpc3RlckFs
Z29yaXRobShDcnlwdG9BbGdvcml0aG1ITUFDOjpzX25hbWUsIENyeXB0b0FsZ29yaXRobUhNQUM6
OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6Y3JlYXRlKTsKICAgICByZWdpc3Rl
ckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1TSEExOjpzX25hbWUsIENyeXB0b0FsZ29yaXRobVNI
QTE6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtU0hBMTo6Y3JlYXRlKTsKIH0KSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE1ODQ2MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEzLTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJDcnlwdG8gQUVTLUNCQworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzb24uCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Fl
cy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNy
eXB0LWRlY3J5cHQuaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2Jj
LWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9z
dWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13
aXRoLXBhZGRpbmcuaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2Jj
LWVuY3J5cHQtZGVjcnlwdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Fl
cy1jYmMtaW52YWxpZC1sZW5ndGgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlw
dG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGguaHRtbDogQWRkZWQuCisgICAgICAgICog
Y3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1jbGFzcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbDog
QWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnktZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS5odG1sOgor
ICAgICAgICBDb3JyZWN0ZWQgYSBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIGNyeXB0by9zdWJ0
bGUvcmVzb3VyY2VzL2NvbW1vbi5qczogKGhleFRvQXJyYXlCdWZmZXIpOiBBZGRlZCBhIGhlbHBl
ci4KKwogMjAxMy0xMS0wMSAgSmFtZXMgQ3JhaWcgIDxqY3JhaWdAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFYOiBSZWdyZXNzaW9uOiBtZWRpYSBjb250cm9scyBhcmUgbm8gbG9uZ2VyIGFjY2Vzc2li
bGUKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1k
ZWNyeXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlw
dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorVGVzdCBBRVMt
Q0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0IGtleS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0ltcG9ydGluZyBhIHJhdyBBRVMga2V5IGZy
b20gc3RyaW5nIGxpdGVyYWwuLi4KK1BBU1Mga2V5LnR5cGUgaXMgJ3NlY3JldCcKK1BBU1Mga2V5
LmV4dHJhY3RhYmxlIGlzIHRydWUKK1BBU1Mga2V5LmFsZ29yaXRobS5uYW1lIGlzICdhZXMtY2Jj
JworUEFTUyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBpcyAxOTIKK1BBU1Mga2V5LnVzYWdlcyBpcyBb
J2VuY3J5cHQnLCAnZGVjcnlwdCddCitVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0
Li4uCitQQVNTIGJ5dGVBcnJheVRvSGV4U3RyaW5nKG5ldyBVaW50OEFycmF5KGVuY3J5cHRpb25S
ZXN1bHQpKSBpcyAnWzRmIDAyIDFkIGIyIDQzIGJjIDYzIDNkIDcxIDc4IDE4IDNhIDlmIGEwIDcx
IGU4IGI0IGQ5IGFkIGE5IGFkIDdkIGVkIGY0IGU1IGU3IDM4IDc2IDNmIDY5IDE0IDVhIDU3IDFi
IDI0IDIwIDEyIGZiIDdhIGUwIDdmIGE5IGJhIGFjIDNkIGYxIDAyIGUwIDA4IGIwIGUyIDc5IDg4
IDU5IDg4IDgxIGQ5IDIwIGE5IGU2IDRmIDU2IDE1IGNkIDYxIDJjIGNkIDc5IDIyIDRiIDM1IDA5
IDM1IGQ0IDVkIGQ2IGE5IDhmIDgxIDc2XScKK0RlY3J5cHRpbmcgaXQgYmFjay4uLgorUEFTUyBu
ZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlw
dC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsx
ICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5j
cnlwdC1kZWNyeXB0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRl
Y3J5cHQgZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0IGtleS4iKTsKKworanNUZXN0SXNBc3luYyA9
IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9
IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIga2V5RGF0YSA9IGhleFRvQXJyYXlC
dWZmZXIoIjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1NjJmOGVhZDI1MjJjNmI3YiIp
OwordmFyIGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMw
ZDBlMGYiKTsKK3ZhciBwbGFpbnRleHQgPSBoZXhUb0FycmF5QnVmZmVyKCI2YmMxYmVlMjJlNDA5
Zjk2ZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxMzBjODFj
NDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcx
MCIpOwordmFyIGV4dHJhY3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGluZyBhIHJhdyBB
RVMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4iKTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5
KCJyYXciLCBrZXlEYXRhLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBbImVuY3J5cHQiLCAiZGVj
cnlwdCJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3VsdDsKKyAgICBz
aG91bGRCZSgia2V5LnR5cGUiLCAiJ3NlY3JldCciKTsKKyAgICBzaG91bGRCZSgia2V5LmV4dHJh
Y3RhYmxlIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwgIidh
ZXMtY2JjJyIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICIxOTIiKTsK
KyAgICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICJbJ2VuY3J5cHQnLCAnZGVjcnlwdCddIik7CisK
KyAgICBkZWJ1ZygiVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4uLiIpOworICAg
IHJldHVybiBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwg
a2V5LCBbcGxhaW50ZXh0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGVuY3J5
cHRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5n
KG5ldyBVaW50OEFycmF5KGVuY3J5cHRpb25SZXN1bHQpKSIsICInWzRmIDAyIDFkIGIyIDQzIGJj
IDYzIDNkIDcxIDc4IDE4IDNhIDlmIGEwIDcxIGU4IGI0IGQ5IGFkIGE5IGFkIDdkIGVkIGY0IGU1
IGU3IDM4IDc2IDNmIDY5IDE0IDVhIDU3IDFiIDI0IDIwIDEyIGZiIDdhIGUwIDdmIGE5IGJhIGFj
IDNkIGYxIDAyIGUwIDA4IGIwIGUyIDc5IDg4IDU5IDg4IDgxIGQ5IDIwIGE5IGU2IDRmIDU2IDE1
IGNkIDYxIDJjIGNkIDc5IDIyIDRiIDM1IDA5IDM1IGQ0IDVkIGQ2IGE5IDhmIDgxIDc2XSciKTsK
KworICAgIGRlYnVnKCJEZWNyeXB0aW5nIGl0IGJhY2suLi4iKTsKKyAgICByZXR1cm4gY3J5cHRv
LnN1YnRsZS5kZWNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3Jlc3VsdF0p
OworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBkZWNyeXB0aW9uUmVzdWx0ID0gcmVz
dWx0OworICAgIHNob3VsZEJlKCJuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSIsICJw
bGFpbnRleHQiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKworPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2
LWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNy
eXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAK
K1Rlc3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNyeXB0IGZ1bmN0aW9ucyB3aXRoIGEgMjU2IGJp
dCBrZXkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitJbXBvcnRpbmcgYSByYXcg
QUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uCitQQVNTIGtleS50eXBlIGlzICdzZWNyZXQn
CitQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCitQQVNTIGtleS5hbGdvcml0aG0ubmFtZSBp
cyAnYWVzLWNiYycKK1BBU1Mga2V5LmFsZ29yaXRobS5sZW5ndGggaXMgMjU2CitQQVNTIGtleS51
c2FnZXMgaXMgWydlbmNyeXB0JywgJ2RlY3J5cHQnXQorVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0
IHBsYWludGV4dC4uLgorUEFTUyBieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhBcnJheShl
bmNyeXB0aW9uUmVzdWx0KSkgaXMgJ1tmNSA4YyA0YyAwNCBkNiBlNSBmMSBiYSA3NyA5ZSBhYiBm
YiA1ZiA3YiBmYiBkNiA5YyBmYyA0ZSA5NiA3ZSBkYiA4MCA4ZCA2NyA5ZiA3NyA3YiBjNiA3MCAy
YyA3ZCAzOSBmMiAzMyA2OSBhOSBkOSBiYSBjZiBhNSAzMCBlMiA2MyAwNCAyMyAxNCA2MSBiMiBl
YiAwNSBlMiBjMyA5YiBlOSBmYyBkYSA2YyAxOSAwNyA4YyA2YSA5ZCAxYiAzZiA0NiAxNyA5NiBk
NiBiMCBkNiBiMiBlMCBjMiBhNyAyYiA0ZCA4MCBlNiA0NF0nCitEZWNyeXB0aW5nIGl0IGJhY2su
Li4KK1BBU1MgbmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkgaXMgcGxhaW50ZXh0CitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNy
eXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUK
IyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1j
YmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlw
dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQUVTLUNCQyBlbmNy
eXB0IGFuZCBkZWNyeXB0IGZ1bmN0aW9ucyB3aXRoIGEgMjU2IGJpdCBrZXkuIik7CisKK2pzVGVz
dElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAgd2luZG93LmNyeXB0
by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFyIGtleURhdGEgPSBo
ZXhUb0FycmF5QnVmZmVyKCI2MDNkZWIxMDE1Y2E3MWJlMmI3M2FlZjA4NTdkNzc4MTFmMzUyYzA3
M2I2MTA4ZDcyZDk4MTBhMzA5MTRkZmY0Iik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIw
MDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRv
QXJyYXlCdWZmZXIoIjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAz
YWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYy
NDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOwor
CitkZWJ1ZygiSW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLiIp
OworY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsIGtleURhdGEsICJhZXMtY2JjIiwgZXh0
cmFjdGFibGUsIFsiZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7
CisgICAga2V5ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJrZXkudHlwZSIsICInc2VjcmV0JyIp
OworICAgIHNob3VsZEJlKCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJl
KCJrZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoImtleS5h
bGdvcml0aG0ubGVuZ3RoIiwgIjI1NiIpOworICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgIlsn
ZW5jcnlwdCcsICdkZWNyeXB0J10iKTsKKworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVu
Y3J5cHQgcGxhaW50ZXh0Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7
bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKTsKK30pLnRoZW4oZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgZW5jcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91
bGRCZSgiYnl0ZUFycmF5VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvblJlc3Vs
dCkpIiwgIidbZjUgOGMgNGMgMDQgZDYgZTUgZjEgYmEgNzcgOWUgYWIgZmIgNWYgN2IgZmIgZDYg
OWMgZmMgNGUgOTYgN2UgZGIgODAgOGQgNjcgOWYgNzcgN2IgYzYgNzAgMmMgN2QgMzkgZjIgMzMg
NjkgYTkgZDkgYmEgY2YgYTUgMzAgZTIgNjMgMDQgMjMgMTQgNjEgYjIgZWIgMDUgZTIgYzMgOWIg
ZTkgZmMgZGEgNmMgMTkgMDcgOGMgNmEgOWQgMWIgM2YgNDYgMTcgOTYgZDYgYjAgZDYgYjIgZTAg
YzIgYTcgMmIgNGQgODAgZTYgNDRdJyIpOworCisgICAgZGVidWcoIkRlY3J5cHRpbmcgaXQgYmFj
ay4uLiIpOworICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6ICJhZXMtY2Jj
IiwgaXY6IGl2fSwga2V5LCBbcmVzdWx0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgIGRlY3J5cHRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoIm5ldyBVaW50OEFy
cmF5KGRlY3J5cHRpb25SZXN1bHQpIiwgInBsYWludGV4dCIpOworCisgICAgZmluaXNoSlNUZXN0
KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlw
dC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4
dC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5
cHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNCBAQAorVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25z
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1wb3J0aW5nIGEgcmF3IEFFUyBr
ZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0JworUEFT
UyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ2Fl
cy1jYmMnCitQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDEyOAorUEFTUyBrZXkudXNhZ2Vz
IGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0J10KK1VzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFp
bnRleHQuLi4KK1BBU1MgYnl0ZUFycmF5VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5jcnlw
dGlvblJlc3VsdCkpIGlzICdbNzYgNDkgYWIgYWMgODEgMTkgYjIgNDYgY2UgZTkgOGUgOWIgMTIg
ZTkgMTkgN2QgNTAgODYgY2IgOWIgNTAgNzIgMTkgZWUgOTUgZGIgMTEgM2EgOTEgNzYgNzggYjIg
NzMgYmUgZDYgYjggZTMgYzEgNzQgM2IgNzEgMTYgZTYgOWUgMjIgMjIgOTUgMTYgM2YgZjEgY2Eg
YTEgNjggMWYgYWMgMDkgMTIgMGUgY2EgMzAgNzUgODYgZTEgYTcgOGMgYjggMjggMDcgMjMgMGUg
MTMgMjEgZDMgZmEgZTAgMGQgMTggY2MgMjAgMTJdJworRGVjcnlwdGluZyBpdCBiYWNrLi4uCitQ
QVNTIG5ldyBVaW50OEFycmF5KGRlY3J5cHRpb25SZXN1bHQpIGlzIHBsYWludGV4dAorVGVzdGlu
ZyBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYmluZGluZ3MuLi4KK1BBU1MgY3J5cHRvLnN1YnRsZS5l
bmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiBudWxsfSwga2V5LCBbcGxhaW50ZXh0XSkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT25seSBBcnJheUJ1ZmZlciBhbmQgQXJyYXlCdWZmZXJW
aWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVyYXRpb25EYXRhLgorUEFTUyBj
cnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJ30sIGtleSwgW3BsYWludGV4dF0p
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVm
ZmVyVmlldyBvYmplY3RzIGNhbiBiZSBwYXNzZWQgYXMgQ3J5cHRvT3BlcmF0aW9uRGF0YS4KK1BB
U1MgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiAzfSwga2V5LCBb
cGxhaW50ZXh0XSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT25seSBBcnJheUJ1ZmZlciBh
bmQgQXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVyYXRp
b25EYXRhLgorUEFTUyBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6
IG5ldyBVaW50OEFycmF5KFswXSl9LCBrZXksIFtwbGFpbnRleHRdKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IEFFUy1DQkMgaW5pdGlhbGl6YXRpb24gZGF0YSBtdXN0IGJlIDE2IGJ5dGVzLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRl
Y3J5cHQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAs
MCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5j
cnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRp
bmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmctZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNy
eXB0IGZ1bmN0aW9ucyBvbiBhIHBsYWludGV4dCB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mIGJs
b2NrIHNpemUgaW4gbGVuZ3RoLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1w
b3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFTUyBrZXkudHlw
ZSBpcyAnc2VjcmV0JworUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFTUyBrZXkuYWxn
b3JpdGhtLm5hbWUgaXMgJ2Flcy1jYmMnCitQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDEy
OAorUEFTUyBrZXkudXNhZ2VzIGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0J10KK1VzaW5nIHRoZSBr
ZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4KKyAgICA9IFs2MyAwMSA5OSBjNSBmMiAwMiBjYyA3
MSA2NyBiYiA4NCBjNiBjNyAyYiAzNCA5ZF0KK0RlY3J5cHRpbmcgaXQgYmFjay4uLgorUEFTUyBu
ZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdp
dGgtcGFkZGluZy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQoj
IyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
QWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNi
Yy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1l
bmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIG9uIGEg
cGxhaW50ZXh0IHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgYmxvY2sgc2l6ZSBpbiBsZW5ndGgu
Iik7CisKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAg
d2luZG93LmNyeXB0by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFy
IGtleURhdGEgPSBoZXhUb0FycmF5QnVmZmVyKCIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNm
NGYzYyIpOwordmFyIGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4MDkw
YTBiMGMwZDBlMGYiKTsKK3ZhciBwbGFpbnRleHQgPSBhc2NpaVRvQXJyYXlCdWZmZXIoInRlc3Qi
KTsKK3ZhciBleHRyYWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcgYSByYXcgQUVT
IGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgi
cmF3Iiwga2V5RGF0YSwgImFlcy1jYmMiLCBleHRyYWN0YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5
cHQiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hv
dWxkQmUoImtleS50eXBlIiwgIidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5leHRyYWN0
YWJsZSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVz
LWNiYyciKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiMTI4Iik7Cisg
ICAgc2hvdWxkQmUoImtleS51c2FnZXMiLCAiWydlbmNyeXB0JywgJ2RlY3J5cHQnXSIpOworCisg
ICAgZGVidWcoIlVzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICBy
ZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtl
eSwgW3BsYWludGV4dF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBwcmludEFj
Y2VwdGVkUmVzdWx0KHJlc3VsdCk7CisKKyAgICBkZWJ1ZygiRGVjcnlwdGluZyBpdCBiYWNrLi4u
Iik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZTogImFlcy1jYmMiLCBp
djogaXZ9LCBrZXksIFtyZXN1bHRdKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAg
ZGVjcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgibmV3IFVpbnQ4QXJyYXko
ZGVjcnlwdGlvblJlc3VsdCkiLCAicGxhaW50ZXh0Iik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9
KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFk
ZGluZy5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwor
dGV4dC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRl
c3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5j
cnlwdC1kZWNyeXB0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBB
RVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zLiIpOworCitqc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKKworaWYgKCF3aW5kb3cuc3VidGxlKQorICAgIHdpbmRvdy5jcnlwdG8uc3VidGxl
ID0gd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7CisKK3ZhciBrZXlEYXRhID0gaGV4VG9BcnJh
eUJ1ZmZlcigiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiKTsKK3ZhciBpdiA9IGhl
eFRvQXJyYXlCdWZmZXIoIjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIik7Cit2YXIg
cGxhaW50ZXh0ID0gaGV4VG9BcnJheUJ1ZmZlcigiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5
MzE3MmFhZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFlNWZi
YzExOTFhMGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2FkMmI0MTdiZTY2YzM3MTAiKTsKK3ZhciBleHRy
YWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0
cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwga2V5RGF0
YSwgImFlcy1jYmMiLCBleHRyYWN0YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSkudGhlbihm
dW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImtleS50
eXBlIiwgIidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVl
Iik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWNiYyciKTsKKyAg
ICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiMTI4Iik7CisgICAgc2hvdWxkQmUo
ImtleS51c2FnZXMiLCAiWydlbmNyeXB0JywgJ2RlY3J5cHQnXSIpOworCisgICAgZGVidWcoIlVz
aW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRv
LnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4
dF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBlbmNyeXB0aW9uUmVzdWx0ID0g
cmVzdWx0OworICAgIHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhBcnJh
eShlbmNyeXB0aW9uUmVzdWx0KSkiLCAiJ1s3NiA0OSBhYiBhYyA4MSAxOSBiMiA0NiBjZSBlOSA4
ZSA5YiAxMiBlOSAxOSA3ZCA1MCA4NiBjYiA5YiA1MCA3MiAxOSBlZSA5NSBkYiAxMSAzYSA5MSA3
NiA3OCBiMiA3MyBiZSBkNiBiOCBlMyBjMSA3NCAzYiA3MSAxNiBlNiA5ZSAyMiAyMiA5NSAxNiAz
ZiBmMSBjYSBhMSA2OCAxZiBhYyAwOSAxMiAwZSBjYSAzMCA3NSA4NiBlMSBhNyA4YyBiOCAyOCAw
NyAyMyAwZSAxMyAyMSBkMyBmYSBlMCAwZCAxOCBjYyAyMCAxMl0nIik7CisKKyAgICBkZWJ1Zygi
RGVjcnlwdGluZyBpdCBiYWNrLi4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVjcnlw
dCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtyZXN1bHRdKTsKK30pLnRoZW4oZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgZGVjcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91
bGRCZSgibmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkiLCAicGxhaW50ZXh0Iik7CisK
KyAgICBkZWJ1ZygiVGVzdGluZyBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYmluZGluZ3MuLi4iKTsK
KyAgICBzaG91bGRUaHJvdygiY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycs
IGl2OiBudWxsfSwga2V5LCBbcGxhaW50ZXh0XSkiKTsKKyAgICBzaG91bGRUaHJvdygiY3J5cHRv
LnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQyd9LCBrZXksIFtwbGFpbnRleHRdKSIpOwor
ICAgIHNob3VsZFRocm93KCJjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywg
aXY6IDN9LCBrZXksIFtwbGFpbnRleHRdKSIpOworICAgIHNob3VsZFRocm93KCJjcnlwdG8uc3Vi
dGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IG5ldyBVaW50OEFycmF5KFswXSl9LCBr
ZXksIFtwbGFpbnRleHRdKSIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9j
cnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWwKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L2h0bWwKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2Jj
LWludmFsaWQtbGVuZ3RoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9j
cnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3Ro
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAzODogU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgaWRlbnRpZmllciAnZmluaXNo
SlNUZXN0Jy4gRXhwZWN0ZWQgJyknIHRvIGVuZCBhIGFyZ3VtZW50IGxpc3QuCitGQUlMIHN1Y2Nl
c3NmdWxseVBhcnNlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVm
aW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0
aC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsx
ICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlk
LWxlbmd0aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVz
LWNiYy1pbnZhbGlkLWxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5
cHRvL3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3RoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdCBhbiB1bnN1cHBvcnRlZCBBRVMga2V5IGxlbmd0aC4iKTsKKwor
anNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cu
Y3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIga2V5RGF0
YSA9IGhleFRvQXJyYXlCdWZmZXIoIjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1NjJm
OGVhZDI1MjJjIik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3
MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZi
YzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVh
ZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJi
NDE3YmU2NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1ZygiSW1wb3J0
aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLiIpOworY3J5cHRvLnN1YnRs
ZS5pbXBvcnRLZXkoInJhdyIsIGtleURhdGEsICJhZXMtY2JjIiwgZXh0cmFjdGFibGUsIFsiZW5j
cnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2V5ID0gcmVz
dWx0OworICAgIHNob3VsZEJlKCJrZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3VsZEJl
KCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGht
Lm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3Ro
IiwgIjE3NiIpOworICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgIlsnZW5jcnlwdCcsICdkZWNy
eXB0J10iKTsKKworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0
Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogImFlcy1jYmMi
LCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKTsKK30pLnRoZW4odW5kZWZpbmVkLCBmdW5jdGlv
bihyZXN1bHQpIHsKKyAgICBkZWJ1ZygiRmFpbGVkLCBhcyBleHBlY3RlZC4gTm90ZSB0aGF0IHRo
ZSBzcGVjIGRvZXNuJ3QgYXBwZWFyIHRvIGNsZWFybHkgZGVmaW5lIHdoaWNoIHN0ZXAgc2hvdWxk
IGZhaWwuIgorCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtaW52YWxpZC1sZW5ndGguaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNs
YXNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxl
L2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgY2FsbGluZyBBRVMtQ0JD
IGVuY3J5cHQgd2l0aCBhIEhNQUMga2V5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworSW1wb3J0aW5nIGEgcmF3IEhNQUMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4KK1VzaW5n
IHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4KK1BBU1MgY3J5cHRvLnN1YnRsZS5lbmNy
eXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogTm90U3VwcG9ydGVkRXJyb3I6IERPTSBFeGNlcHRpb24gOS4KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNs
YXNzLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAg
KzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25n
LWtleS1jbGFzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
YWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGNhbGxpbmcgQUVTLUNCQyBlbmNyeXB0IHdpdGggYSBI
TUFDIGtleS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRs
ZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxl
OworCit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIw
YzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUyMmU0
MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4
MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMz
NzEwIik7Cit2YXIgaG1hY0tleSA9IGFzY2lpVG9BcnJheUJ1ZmZlcignYScpOwordmFyIGV4dHJh
Y3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGluZyBhIHJhdyBITUFDIGtleSBmcm9tIHN0
cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3IiwgaG1hY0tl
eSwge25hbWU6ICdobWFjJywgaGFzaDoge25hbWU6ICdzaGEtMSd9fSwgZXh0cmFjdGFibGUsIFsi
c2lnbiIsICJ2ZXJpZnkiLCAiZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVz
dWx0KSB7CisgICAga2V5ID0gcmVzdWx0OworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVu
Y3J5cHQgcGxhaW50ZXh0Li4uIik7CisgICAgc2hvdWxkVGhyb3coJ2NyeXB0by5zdWJ0bGUuZW5j
cnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKScpCisKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClBy
b3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9u
Zy1rZXktY2xhc3MuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAg
KzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnktZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDE1ODQ2MSkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSw0IEBACi1UZXN0IGNyeXB0by5zdWJ0bGUuZGlnZXN0LgorVGVzdCBITUFDIHNpZ24gYW5kIHZl
cmlmeSBmdW5jdGlvbnMuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIApJbmRleDogTGF5
b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwJKHJldmlz
aW9uIDE1ODQ2MSkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlm
eS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDcgKzksNyBAQAogPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CiAKIDxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVzdCBjcnlwdG8uc3VidGxlLmRpZ2Vz
dC4iKTsKK2Rlc2NyaXB0aW9uKCJUZXN0IEhNQUMgc2lnbiBhbmQgdmVyaWZ5IGZ1bmN0aW9ucy4i
KTsKIAoganNUZXN0SXNBc3luYyA9IHRydWU7CiAKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlw
dG8vc3VidGxlL3Jlc291cmNlcy9jb21tb24uanMJKHJldmlzaW9uIDE1ODQ2MSkKKysrIExheW91
dFRlc3RzL2NyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsMTYgQEAgZnVuY3Rpb24gYXNjaWlUb0FycmF5QnVmZmVyKHN0cikKICAgICBy
ZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2hhcnMpOwogfQogCitmdW5jdGlvbiBoZXhUb0FycmF5QnVm
ZmVyKHN0cikKK3sKKyAgICBpZiAoc3RyLmxlbmd0aCAlIDIpCisgICAgICAgIHRocm93ICJIZXgg
c3RyaW5nIGxlbmdodCBtdXN0IGJlIGV2ZW4iOworICAgIHZhciBjaGFycyA9IFtdOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSAyKQorICAgICAgICBjaGFycy5wdXNo
KHBhcnNlSW50KHN0ci5zdWJzdHIoaSwgMiksIDE2KSk7CisgICAgcmV0dXJuIG5ldyBVaW50OEFy
cmF5KGNoYXJzKTsKK30KKwogZnVuY3Rpb24gcHJpbnRSZWplY3RlZFJlc3VsdCh2YWx1ZSkKIHsK
ICAgICBkZWJ1ZygiICAgIHJlamVjdGVkIHdpdGggdmFsdWUgb2YgIiArIHZhbHVlKTsK
</data>
<flag name="commit-queue"
          id="238597"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215780</attachid>
            <date>2013-11-01 17:03:33 -0700</date>
            <delta_ts>2013-11-01 23:09:15 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>AES-CBC.txt</filename>
            <type>text/plain</type>
            <size>88347</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTg0NjcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJDcnlwdG8gQUVTLUNCQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgICogd3RmL0ZpeGVkQXJy
YXkuaDogKFdURjo6Rml4ZWRBcnJheTo6ZGF0YSk6IEFkZGVkIGEgY29uc3QgdmVyc2lvbiBvZiB0
aGUgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6IEFkZGVkIGEgY29tbWVudCB0
byBWZWN0b3IgY29uc3RydWN0b3IgYWJvdXQgaG93IGl0IGlzIGRpZmZlcmVudAorICAgICAgICBm
cm9tIHN0ZDo6dmVjdG9yLgorCiAyMDEzLTExLTAxICBFbWlsaW8gUG96dWVsbyBNb25mb3J0ICA8
cG9jaHUyN0BnbWFpbC5jb20+CiAKICAgICAgICAgSFBQQSBidWlsZCBmaXhlcwpJbmRleDogU291
cmNlL1dURi93dGYvRml4ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zp
eGVkQXJyYXkuaAkocmV2aXNpb24gMTU4NDYxKQorKysgU291cmNlL1dURi93dGYvRml4ZWRBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBUKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gU2l6
ZTsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dURi93dGYvVmVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsNyArNTMyLDggQEAgcHVi
bGljOgogICAgIFZlY3RvcigpCiAgICAgewogICAgIH0KLSAgICAKKworICAgIC8vIFVubGlrZSBp
biBzdGQ6OnZlY3RvciwgdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCBpbml0aWFsaXplIFBPRCB0
eXBlcy4KICAgICBleHBsaWNpdCBWZWN0b3Ioc2l6ZV90IHNpemUpCiAgICAgICAgIDogQmFzZShz
aXplLCBzaXplKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisy
MDEzLTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBXZWJDcnlwdG8gQUVTLUNCQworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxz
c29uLgorCisgICAgICAgIFRlc3RzOiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQt
ZGVjcnlwdC5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVu
Y3J5cHQtZGVjcnlwdC5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8vc3VidGxlL2Flcy1jYmMt
ZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8v
c3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWwKKyAgICAgICAgICAgICAgIGNyeXB0
by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC5odG1sCisgICAgICAgICAgICAgICBjcnlw
dG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLmh0bWwKKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgbmV3IGZpbGVzLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRQcm9wZXJ0eSk6IEZhY3RvcmVkIG91dCBhIGZ1bmN0aW9uIHRvIGdldCBhIHBy
b3BlcnR5IGFzIEpTVmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpnZXRIYXNoQWxnb3JpdGhtKTog
VXNlIGl0LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWVzQ2JjUGFyYW1zKTogQWRkZWQgY29u
dmVydGVyIGZvciBBZXNDYmNQYXJhbXMuCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KTogU3VwcG9ydCBBRVNf
Q0JDLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KTogU3Vw
cG9ydCBhbGwKKyAgICAgICAgYWxnb3JpdGhtcywgYWxsIHRoZSBuZXcgb25lcyBqdXN0IGhhdmUg
dHJpdmlhbCBkaWN0aW9uYXJpZXMuCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFeHBvcnRLZXkpOiBEaXR0by4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6c2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oOiBBZGRlZC4KKyAgICAg
ICAgTW92ZWQgQ3J5cHRvT3BlcmF0aW9uRGF0YSBiaW5kaW5ncyBvdXQgb2YgSlNTdWJ0bGVDcnlw
dG9DdXN0b20uY3BwLCBzbyB0aGF0IHdlCisgICAgICAgIGNvdWxkIHVzZSB0aGVtIGluIEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVByb21pc2UuaDogKFdlYkNvcmU6OlByb21pc2VXcmFwcGVyOjpyZWplY3QpOiBBZGRlZCBhIHNw
ZWNpYWxpemF0aW9uCisgICAgICAgIHRvIHJlamVjdCB3aXRoIG51bGwgcmVzdWx0LiBUaGUgc3Bl
YyBkb2Vzbid0IGFjdHVhbGx5IHNheSBob3cgYWxnb3JpdGhtcyBmYWlsLgorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNTdWJ0bGVDcnlwdG86OmVuY3J5cHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTU3Vi
dGxlQ3J5cHRvOjpkZWNyeXB0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNy
eXB0bzo6c2lnbik6IFN0eWxlIGZpeC4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0
aG1BZXNDYmNQYXJhbXMuaDogQWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlDbGFzcyk6CisgICAgICAgICogY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5SE1BQy5oOgorICAgICAgICAoV2ViQ29yZTo6YXNDcnlwdG9LZXlITUFDKToK
KyAgICAgICAgQWRkZWQgcG9vciBtYW4ncyBSVFRJLCBzbyB0aGF0IHdlIGNhbiBzYWZlbHkgdXBj
YXN0IEtleXMgcGFzc2VkIGZybyBKYXZhU2NyaXB0IGNvZGUuCisKKyAgICAgICAgKiBjcnlwdG8v
Q3J5cHRvS2V5QUVTLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6
OkNyeXB0b0tleUFFUyk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6On5DcnlwdG9L
ZXlBRVMpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURl
c2NyaXB0aW9uKToKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5QUVTLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6YXNDcnlwdG9LZXlBRVMpOgorICAgICAgICBBRVMga2V5cyBhcmUgdGhl
IHNhbWUgZm9yIGFsbCBhbGdvcml0aG1zLCBidXQgdGhleSBzdGlsbCBuZWVkIHRvIHJlbWVtYmVy
IHRoZSBhbGdvcml0aG0uCisKKyAgICAgICAgKiBjcnlwdG8vU3VidGxlQ3J5cHRvLmlkbDogQWRk
ZWQgZW5jcnlwdC9kZWNyeXB0LgorCisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQyk6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjp+Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQyk6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6aWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZXhwb3J0S2V5KToKKyAgICAgICAgKiBjcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmg6IEFkZGVkLgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dHJhbnNmb3JtQUVTX0NCQyk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29y
aXRobUFFU19DQkM6OmRlY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGht
QUVTX0NCQzo6Z2VuZXJhdGVLZXkpOgorICAgICAgICBBZGRlZC4KKworICAgICAgICAqIGNyeXB0
by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9BbGdvcml0aG1ITUFDOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRo
bUhNQUM6OnZlcmlmeSk6CisgICAgICAgIENoZWNrIGtleSBjbGFzcyBiZWZvcmUgY2FzdGluZyBp
dCB0byBDcnlwdG9LZXlITUFDLgorCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0
aG1SZWdpc3RyeU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6cGxhdGZvcm1SZWdpc3RlckFsZ29yaXRobXMpOiBSZWdpc3RlciBBRVMtQ0JDCisgICAg
ICAgIG9uIE1hYywgc28gdGhhdCBpdCBjYW4gYmUgdXNlZC4KKwogMjAxMy0xMS0wMSAgQW5kcmVh
cyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgS2lsbCBSZW5kZXJBcmVuYS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTUwNSw2ICs1NTA1LDE0IEBA
CiAJCUUxMjVGODM1MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODMzMTgyMkYxOEEw
MEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmNwcCAqLzsgfTsKIAkJRTEyNUY4MzYxODIyRjE4QTAw
RDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxMjVGODM0MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFD
LmggKi87IH07CiAJCUUxMjVGODM4MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1I
TUFDTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxMjVGODM3MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAq
LzsgfTsKKwkJRTEyNUY4M0ExODI0MTA0ODAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFlc0Ni
Y1BhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEyNUY4MzkxODI0MTA0ODAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5o
ICovOyB9OworCQlFMTI1RjgzRDE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25E
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
MjVGODNCMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwICovOyB9
OworCQlFMTI1RjgzRTE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzQzE4
MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmggKi87IH07CisJCUUxMjVG
ODQxMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODNGMTgyNDI1M0Ew
MEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCAqLzsgfTsKKwkJRTEyNUY4NDIx
ODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODQwMTgyNDI1M0EwMEQ4NENE
OSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmggKi87IH07CisJCUUxMjVGODQ1MTgyNDI1Qzkw
MEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODQzMTgyNDI1QzkwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCAqLzsgfTsKKwkJRTEyNUY4NEQxODI0Mjg5
RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1Rjg0QjE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRvS2V5
QUVTLmNwcCAqLzsgfTsKKwkJRTEyNUY4NEUxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFF
Uy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4
NEMxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5oICovOyB9OwogCQlFMTI3MTlDNzBF
RUVDMTY4MDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNzE5QzYwRUVFQzE2ODAwRjYxMjEzIC8qIE5hdmln
YXRvckJhc2UuaCAqLzsgfTsKIAkJRTEyNzE5Q0EwRUVFQzIxMzAwRjYxMjEzIC8qIE5hdmlnYXRv
ckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEyNzE5QzkwRUVFQzIxMzAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuY3BwICovOyB9OwogCQlF
MTI3MUEwQjBFRUVDNzdBMDBGNjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI3MUEwQTBFRUVDNzdBMDBGNjEy
MTMgLyogV29ya2VyTmF2aWdhdG9yLmggKi87IH07CkBAIC0xMjUxMSw2ICsxMjUxOSwxNCBAQAog
CQlFMTI1RjgzMzE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9LZXlITUFDLmNwcDsgcGF0aCA9IGtl
eXMvQ3J5cHRvS2V5SE1BQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjVG
ODM0MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IENyeXB0b0tleUhNQUMuaDsgcGF0aCA9IGtleXMvQ3J5cHRvS2V5SE1B
Qy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI1RjgzNzE4MjJGMUVCMDBEODRD
RDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcDsgcGF0aCA9IG1hYy9Dcnlw
dG9BbGdvcml0aG1ITUFDTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEy
NUY4MzkxODI0MTA0ODAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJh
bXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4M0IxODI0MTFFNzAwRDg0
Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMTI1RjgzQzE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRp
b25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3J5cHRvT3BlcmF0
aW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1RjgzRjE4MjQyNTNB
MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4NDAxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0Fs
Z29yaXRobUFFU19DQkMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1Rjg0
MzE4MjQyNUM5MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFj
LmNwcDsgcGF0aCA9IG1hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4NEIxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tl
eUFFUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9LZXlB
RVMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1Rjg0QzE4MjQyODlEMDBE
ODRDRDkgLyogQ3J5cHRvS2V5QUVTLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENyeXB0b0tleUFFUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI3MTlDNjBF
RUVDMTY4MDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOYXZpZ2F0b3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxMjcxOUM5MEVFRUMyMTMwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvckJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMTI3MUEwQTBFRUVDNzdBMDBGNjEyMTMgLyogV29ya2VyTmF2
aWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlck5hdmlnYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyOTgsNiArMTkzMTQsOCBAQAog
CQkJCTFDODFCQTA0MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8s
CiAJCQkJRTE1N0E4RUUxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRl
ci5jcHAgKi8sCiAJCQkJRTE1N0E4RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3Jp
dGhtQnVpbGRlci5oICovLAorCQkJCUUxMjVGODNCMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0
b09wZXJhdGlvbkRhdGEuY3BwICovLAorCQkJCUUxMjVGODNDMTgyNDExRTcwMEQ4NENEOSAvKiBK
U0NyeXB0b09wZXJhdGlvbkRhdGEuaCAqLywKIAkJCQlFMUM2NTcxMDE4MTVGOUREMDAyNTZDREQg
LyogSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcCAqLywKIAkJCQlFMUM2NTcxMTE4MTVG
OUREMDAyNTZDREQgLyogSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmggKi8sCiAJCQkJQkNF
NDM4QTExNDBDMERCRjAwNUU0MzdFIC8qIEpTRGljdGlvbmFyeS5jcHAgKi8sCkBAIC0yMDEzMSw2
ICsyMDE0OSw3IEBACiAJCUUxNzJBRjcxMTgwRjM0MzQwMEZCQURCOSAvKiBtYWMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUUxMjVGODQzMTgyNDI1Qzkw
MEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCAqLywKIAkJCQlFMTI1Rjgz
NzE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgKi8sCiAJCQkJ
RTFCQjg0QUMxODIyQ0E3NDAwNTI1MDQzIC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNw
cCAqLywKIAkJCQlFMTI1RjgyRDE4MjJDRkZGMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hB
MU1hYy5jcHAgKi8sCkBAIC0yMDE0MSw2ICsyMDE2MCw4IEBACiAJCUUxNzJBRjdDMTgwRjNCMEQw
MEZCQURCOSAvKiBhbGdvcml0aG1zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlFMTI1RjgzRjE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQy5jcHAgKi8sCisJCQkJRTEyNUY4NDAxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0Fs
Z29yaXRobUFFU19DQkMuaCAqLywKIAkJCQlFMTI1RjgyRjE4MjJGMTFCMDBEODRDRDkgLyogQ3J5
cHRvQWxnb3JpdGhtSE1BQy5jcHAgKi8sCiAJCQkJRTEyNUY4MzAxODIyRjExQjAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUhNQUMuaCAqLywKIAkJCQlFMTI1RjgyOTE4MjJDRkVDMDBEODRDRDkg
LyogQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAgKi8sCkBAIC0yMDE1Miw2ICsyMDE3Myw4IEBACiAJ
CUUxOURBMjlEMTgxOTk1Q0UwMDA4OEJDOCAvKiBrZXlzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlFMTI1Rjg0QjE4MjQyODlEMDBEODRDRDkgLyogQ3J5
cHRvS2V5QUVTLmNwcCAqLywKKwkJCQlFMTI1Rjg0QzE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRv
S2V5QUVTLmggKi8sCiAJCQkJRTEyNUY4MzMxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhN
QUMuY3BwICovLAogCQkJCUUxMjVGODM0MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFD
LmggKi8sCiAJCQkpOwpAQCAtMjAxNjEsNiArMjAxODQsNyBAQAogCQlFMUM2NTcxNDE4MTYwMTVG
MDAyNTZDREQgLyogcGFyYW1ldGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJRTEyNUY4MzkxODI0MTA0ODAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRo
bUFlc0NiY1BhcmFtcy5oICovLAogCQkJCUUxOURBMjlCMTgxODlBREQwMDA4OEJDOCAvKiBDcnlw
dG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zLmggKi8sCiAJCQkJRTFDNjU3MUUxODE2RTUwMzAwMjU2
Q0REIC8qIENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCAqLywKIAkJCSk7CkBAIC0yMzczMCw2
ICsyMzc1NCw3IEBACiAJCQkJOUI1MEIxREUxN0NENEMwRjAwODdGNjNDIC8qIEZvcm1OYW1lZEl0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzdFNzc3MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdl
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCURBRUQyMDMxMTZGMjQ0NDgwMDcwRUMwRiAvKiBQ
YWdlQ29uc29sZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEyNUY4M0UxODI0MTFFNzAwRDg0Q0Q5
IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MjA4OTMx
NDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUYzNDc0MkREMTM0MzYyRjAwMDUzMUJDMiAvKiBQYWdlRGVidWdnZXJBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMzgzNiw2ICsyMzg2MSw3IEBACiAJCQkJNTE0Qzc2NzUwQ0U5MjNBMTAw
N0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBMDUyNTYx
MDU4ODc0MDAwQ0M5RTk1IC8qIFByb3RlY3Rpb25TcGFjZUhhc2guaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRjhFMTFBMTI1NjU5MjYwMDIzMEZGNyAvKiBQcm94eVNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTEyNUY4NEUxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkY5NDVFQ0MxNjFGN0YzNjAwOTcxQkM4IC8qIFBzZXVkb0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTAwODFGRjAwMTZCMEEyRDMwMDhBQUE3QSAvKiBQdWJsaWNT
dWZmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQ
dWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTIzODQ1LDYgKzIzODcxLDcgQEAK
IAkJCQkzNzlFMzcxNzEzNzM2QTY2MDBCOUU5MTkgLyogUXVvdGVkUHJpbnRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QTU3NEYyOTEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NzIwRDAwQkYyMjAwNzFCNzgyIC8qIFJhZGlhbEdyYWRp
ZW50QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEyNUY4NDIxODI0MjUzQTAwRDg0
Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIz
RENDMTI1MUYxMkQwMDNFRjI2OSAvKiBSYWRpb0lucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjY1OEZGQTYxNTIyRUZBQTAwREQ1NTk1IC8qIFJhZGlvTm9kZUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNDgwOSw2ICsyNDgzNiw3IEBACiAJCQkJMTQ0NzZBQTgxNURDNEJCMTAwMzA1REIy
IC8qIFdyaXRpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODIwMjA5RDE1MDhEMDAw
RTYxRDcgLyogWExpbmtOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBCOTMxODgxM0JBOERC
QTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTI1
RjgzQTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwMEI5MzE4QzEzQkE4RENDMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlDMjgwNDYxMzhEQzI0MTAwNzlCN0Uy
IC8qIFhNTEVycm9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzJDNDcwQzRFQjJDNjAwODMy
ODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NjI2LDYgKzI1NjU0
LDcgQEAKIAkJCQkwN0M1OUI2ODE3Rjc4NEJBMDAwRkJDQkIgLyogTWVkaWFTb3VyY2VTdGF0ZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU5QTlDNEEwQUE1RTNCRDAwQjY5NEIyIC8qIERPTUhU
TUxCb2R5RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1MTgzQjQzMEFBNjkyNjEwMEYx
OUZBMyAvKiBET01IVE1MQlJFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTEyNUY4NEQx
ODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NUJBNENERTBBQTY4NjFCMDA4ODA1MkQgLyogRE9NSFRNTEJ1dHRvbkVsZW1lbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5M0Y5QjY1NzBCQTBGMzVFMDA4NTQwNjQgLyogRE9NSFRNTENhbnZhc0Vs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NURGMkY4RjBBQTNDODgxMDBBRDY0QzUgLyog
RE9NSFRNTENvbGxlY3Rpb24ubW0gaW4gU291cmNlcyAqLywKQEAgLTI2MzQ2LDYgKzI2Mzc1LDcg
QEAKIAkJCQk1MTFFRjJDNzE3RjBGRDM1MDBFNEZBMTYgLyogSlNJREJPYmplY3RTdG9yZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzk0RDE0RTBDMjc1QzY4MDA2QkM2MTcgLyogSlNIaXN0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTdCMTkzMEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hp
c3RvcnlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTEyNUY4M0QxODI0MTFFNzAwRDg0
Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzk3
RTQxMjEwOTE1NEZBMDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzk3RTQyQzEwOTE1QjA2MDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlv
bkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTRBMkRFRjBBMUI4NTJBMDBDODA3Rjgg
LyogSlNIVE1MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3NjY3LDYgKzI3
Njk3LDcgQEAKIAkJCQk5N0JDODQ4MzEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3VtZW50UGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQ2MEQwMDZDMUQwMEVGNkYyNiAvKiBU
ZXh0RW5jb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzEwNURBNjIwRjNBQTY4RjAwMURE
NDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUx
MjVGODQxMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQg
LyogVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQ3MTI1MUYxMkQwMDNF
RjI2OSAvKiBUZXh0RmllbGRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzczOSw2
ICsyNzc3MCw3IEBACiAJCQkJRkQzMTYwQUUxMkIwMjZGNzAwQzFBMzU5IC8qIFZlY3Rvck1hdGgu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU4OEUwREUxNzE1RDJBMjAwNjU4RDk4IC8qIFZpZGVv
VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU4OEUwRTExNzE1RDJBMjAwNjU4RDk4IC8q
IFZpZGVvVHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMjVGODQ1MTgyNDI1Qzkw
MEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNFRjQxOENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzRkZGRjlBRDE1OUQ5QjA2MDAyMEJCRDUgLyogVmlld3BvcnRTdHls
ZVJlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFGMDk5RTY0OTIwMDU2RTU4
MSAvKiBWaXNpYmxlUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeS5jcHAJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEw
ICsyOCwxMiBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKKyNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1IbWFj
S2V5UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5oIgogI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIkpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgogCkBAIC04MCw2ICs4MiwxNyBA
QCBib29sIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIoZXhlYywgbmFtZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKKworICAg
IGlmIChvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkKKyAg
ICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7CisKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKK30KKwogc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29yaXRobShKU0Rp
Y3Rpb25hcnkmIGRpY3Rpb25hcnksIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXImIHJlc3VsdCkK
IHsKICAgICAvLyBGWElNRTogVGVhY2ggSlNEaWN0aW9uYXJ5IGhvdyB0byByZXR1cm4gSlNWYWx1
ZXMsIGFuZCB1c2UgdGhhdCB0byBnZXQgaGFzaCBlbGVtZW50IHZhbHVlLgpAQCAtOTAsMTUgKzEw
Myw5IEBAIHN0YXRpYyBib29sIGdldEhhc2hBbGdvcml0aG0oSlNEaWN0aW9uYXIKICAgICBJZGVu
dGlmaWVyIGlkZW50aWZpZXIoZXhlYywgImhhc2giKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QpOwogCi0gICAgSlNWYWx1ZSBoYXNoID0ganNVbmRlZmluZWQoKTsKLSAgICBpZiAob2Jq
ZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xvdCkpIHsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGhhc2ggPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIEpTVmFsdWUgaGFzaCA9IGdldFByb3BlcnR5KGV4ZWMsIG9iamVjdCwgImhhc2giKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChoYXNoLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKQEAgLTEwOCw2ICsxMTUsMzUgQEAgc3RhdGlj
IGJvb2wgZ2V0SGFzaEFsZ29yaXRobShKU0RpY3Rpb25hcgogICAgIHJldHVybiBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmdldEFsZ29yaXRobUlkZW50aWZpZXIoZXhlYywgaGFzaCwgcmVz
dWx0KTsKIH0KIAorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzPiBjcmVhdGVBZXNDYmNQYXJhbXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpT
VmFsdWUgaXYgPSBnZXRQcm9wZXJ0eShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSwgIml2Iik7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXM+IHJlc3VsdCA9
IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zPigpOworCisgICAg
Q3J5cHRvT3BlcmF0aW9uRGF0YSBpdkRhdGE7CisgICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRh
RnJvbUpTVmFsdWUoZXhlYywgaXYsIGl2RGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYg
KGl2RGF0YS5zZWNvbmQgIT0gMTYpIHsKKyAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiQUVTLUNCQyBpbml0aWFsaXphdGlvbiBkYXRhIG11
c3QgYmUgMTYgYnl0ZXMiKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IG1lbWNweShyZXN1bHQtPml2LmRhdGEoKSwgaXZEYXRhLmZpcnN0LCBpdkRhdGEuc2Vjb25kKTsK
KworICAgIHJldHVybiBzdGQ6Om1vdmUocmVzdWx0KTsKK30KKwogc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVIbWFjUGFyYW1zKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7CkBAIC0xNDgsNyArMTg0LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYQogICAgIHJldHVybiBzdGQ6Om1vdmUocmVzdWx0KTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1E
aWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdChKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKQEAgLTE1OCw3ICsxOTQsMTAgQEAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6RUNEU0E6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpFQ0RIOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NUUjoKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNf
Q0JDOgorICAgICAgICByZXR1cm4gY3JlYXRlQWVzQ2JjUGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAg
ICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DTUFDOgogICAgIGNhc2UgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0dDTToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkFFU19DRkI6CkBAIC0xNzcsNyArMjE2LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3Jl
YXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5Ojpj
cmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBz
d2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
UlNBRVNfUEtDUzFfdjFfNToKQEAgLTE4Nyw3ICsyMjYsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6RUNEU0E6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RIOgogICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NUUjoKKyAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDOgorICAgICAg
ICByZXR1cm4gY3JlYXRlQWVzQ2JjUGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DTUFDOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6QUVTX0dDTToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19DRkI6CkBAIC00MDMsMTEgKzQ0NSwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVyCiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNf
Q01BQzoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19HQ006CiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0ZCOgotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4oKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUM6CiAgICAg
ICAgIHJldHVybiBjcmVhdGVIbWFjS2V5UGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkRIOgorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzE6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfMjI0OgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoK
QEAgLTQzNyw2ICs0NzksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVyCiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0ZCOgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQzoKICAgICBjYXNlIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OkRIOgorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6U0hBXzE6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0
OgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1NjoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRh
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRv
T3BlcmF0aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlvbkRh
dGEuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ym9vbCBzZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiByZXN1bHQp
Cit7CisgICAgdW5zaWduZWQgc2VxdWVuY2VMZW5ndGg7CisgICAgSlNPYmplY3QqIHNlcXVlbmNl
ID0gdG9KU1NlcXVlbmNlKGV4ZWMsIHZhbHVlLCBzZXF1ZW5jZUxlbmd0aCk7CisgICAgaWYgKCFz
ZXF1ZW5jZSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNl
cXVlbmNlTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBpdGVtID0gc2VxdWVuY2UtPmdl
dChleGVjLCBpKTsKKyAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBidWZmZXIgPSB0b0FycmF5QnVm
ZmVyKGl0ZW0pKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0
aWNfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSkpOwor
ICAgICAgICBlbHNlIGlmIChSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBidWZmZXJWaWV3ID0gdG9B
cnJheUJ1ZmZlclZpZXcoaXRlbSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwgYnVm
ZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgIk9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVyVmlldyBv
YmplY3RzIGNhbiBiZSBwYXJ0IG9mIENyeXB0b09wZXJhdGlvbkRhdGEgc2VxdWVuY2UiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9PcGVyYXRpb25EYXRhJiByZXN1bHQpCit7CisgICAg
aWYgKEFycmF5QnVmZmVyKiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKHZhbHVlKSkKKyAgICAgICAg
cmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlci0+ZGF0YSgp
KSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIGVsc2UgaWYgKFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IGJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyh2YWx1ZSkpCisgICAgICAgIHJl
c3VsdCA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXJWaWV3LT5iYXNl
QWRkcmVzcygpKSwgYnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIk9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVy
VmlldyBvYmplY3RzIGNhbiBiZSBwYXNzZWQgYXMgQ3J5cHRvT3BlcmF0aW9uRGF0YSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0
aW9uRGF0YS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMj
CituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBKU0NyeXB0b09wZXJhdGlvbkRhdGFfaAorI2RlZmluZSBKU0NyeXB0b09wZXJhdGlvbkRhdGFf
aAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNWYWx1ZTsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBjaGFyKiwg
c2l6ZV90PiBDcnlwdG9PcGVyYXRpb25EYXRhOworCitib29sIHNlcXVlbmNlT2ZDcnlwdG9PcGVy
YXRpb25EYXRhRnJvbUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIFZlY3Rv
cjxDcnlwdG9PcGVyYXRpb25EYXRhPiYpOworYm9vbCBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpT
VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIENyeXB0b09wZXJhdGlvbkRhdGEm
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9D
UllQVE8pCisjZW5kaWYgLy8gSlNDcnlwdG9PcGVyYXRpb25EYXRhX2gKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NUHJvbWlzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NUHJvbWlzZS5oCShyZXZpc2lvbiAxNTg0NjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMs
MTMgQEAgaW5saW5lIHZvaWQgUHJvbWlzZVdyYXBwZXI6OnJlamVjdChjb25zdAogfQogCiB0ZW1w
bGF0ZTw+CitpbmxpbmUgdm9pZCBQcm9taXNlV3JhcHBlcjo6cmVqZWN0KGNvbnN0IHN0ZDo6bnVs
bHB0cl90JikKK3sKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CisgICAgbV9wcm9taXNlLT5yZXNvbHZlcigpLT5yZWplY3RJZk5vdFJlc29s
dmVkKGV4ZWMsIEpTQzo6anNOdWxsKCkpOworfQorCit0ZW1wbGF0ZTw+CiBpbmxpbmUgdm9pZCBQ
cm9taXNlV3JhcHBlcjo6ZnVsZmlsbDxTdHJpbmc+KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0
b0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkpTQ3J5
cHRvT3BlcmF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KIApAQCAtNTUsNDIgKzU2LDYgQEAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG0+IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBi
b29sIHNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIHJlc3VsdCkK
LXsKLSAgICB1bnNpZ25lZCBzZXF1ZW5jZUxlbmd0aDsKLSAgICBKU09iamVjdCogc2VxdWVuY2Ug
PSB0b0pTU2VxdWVuY2UoZXhlYywgdmFsdWUsIHNlcXVlbmNlTGVuZ3RoKTsKLSAgICBpZiAoIXNl
cXVlbmNlKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Vx
dWVuY2VMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBzZXF1ZW5jZS0+Z2V0
KGV4ZWMsIGkpOwotICAgICAgICBpZiAoQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IHRvQXJyYXlCdWZm
ZXIoaXRlbSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0YXRp
Y19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlclZpZXcgPSB0b0Fy
cmF5QnVmZmVyVmlldyhpdGVtKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBidWZm
ZXJWaWV3LT5ieXRlTGVuZ3RoKCkpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCAiT25seSBBcnJheUJ1ZmZlciBhbmQgQXJyYXlCdWZmZXJWaWV3IG9i
amVjdHMgY2FuIGJlIHBhcnQgb2YgQ3J5cHRvT3BlcmF0aW9uRGF0YSBzZXF1ZW5jZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgYm9vbCBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9PcGVyYXRpb25EYXRhJiByZXN1bHQpCi17
Ci0gICAgaWYgKEFycmF5QnVmZmVyKiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKHZhbHVlKSkKLSAg
ICAgICAgcmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlci0+
ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgIGVsc2UgaWYgKFJlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IGJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyh2YWx1ZSkpCi0gICAg
ICAgIHJlc3VsdCA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXJWaWV3
LT5iYXNlQWRkcmVzcygpKSwgYnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIk9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5
QnVmZmVyVmlldyBvYmplY3RzIGNhbiBiZSBwYXJ0IG9mIENyeXB0b09wZXJhdGlvbkRhdGEgc2Vx
dWVuY2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlGb3JtYXQmIHJlc3VsdCkKIHsKICAgICBTdHJp
bmcga2V5Rm9ybWF0U3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwpA
QCAtMTQ2LDYgKzExMSw5OCBAQCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1
ZShFCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmVuY3J5
cHQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAz
KQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBhdXRvIGFsZ29yaXRobSA9IGNy
ZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIWFsZ29yaXRobSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JFbmNyeXB0KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKSB7CisgICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IHRvQ3J5cHRvS2V5KGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworCisgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZUVuY3J5
cHQpKSB7CisgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNN
ZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIktleSB1c2FnZXMgZG9lcyBub3QgaW5j
bHVkZSAnZW5jcnlwdCciKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQ
T1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
VmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGE7CisgICAgaWYgKCFzZXF1ZW5jZU9mQ3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBkYXRhKSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBKU1Byb21pc2UqIHByb21p
c2UgPSBKU1Byb21pc2U6OmNyZWF0ZVdpdGhSZXNvbHZlcihleGVjLT52bSgpLCBnbG9iYWxPYmpl
Y3QoKSk7CisgICAgYXV0byBwcm9taXNlV3JhcHBlciA9IFByb21pc2VXcmFwcGVyOjpjcmVhdGUo
Z2xvYmFsT2JqZWN0KCksIHByb21pc2UpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgYWxnb3JpdGhtLT5lbmNyeXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6Om1vdmUo
cHJvbWlzZVdyYXBwZXIpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKwor
ICAgIHJldHVybiBwcm9taXNlOworfQorCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpkZWNyeXB0
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykK
KyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgaWYgKCFhbGdvcml0aG0pIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yRGVjcnlwdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGlmICghcGFyYW1ldGVycykgeworICAgICAgICBBU1NFUlQoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisKKyAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSB0b0NyeXB0b0tleShleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKKworICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0
KSkgeworICAgICAgICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVz
c2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJLZXkgdXNhZ2VzIGRvZXMgbm90IGluY2x1
ZGUgJ2RlY3J5cHQnIik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9S
VEVEX0VSUik7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZl
Y3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhOworICAgIGlmICghc2VxdWVuY2VPZkNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgy
KSwgZGF0YSkpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgSlNQcm9taXNlKiBwcm9taXNl
ID0gSlNQcm9taXNlOjpjcmVhdGVXaXRoUmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0
KCkpOworICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRlKGds
b2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGFsZ29yaXRobS0+ZGVjcnlwdCgqcGFyYW1ldGVycywgKmtleSwgZGF0YSwgc3RkOjptb3ZlKHBy
b21pc2VXcmFwcGVyKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcHJvbWlzZTsKK30KKwogSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2lnbihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCkBAIC0x
ODMsNyArMjQwLDcgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2lnbihFeGVjU3RhdGUqIAog
ICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRlKGdsb2JhbE9i
amVjdCgpLCBwcm9taXNlKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGFsZ29y
aXRobS0+c2lnbigqcGFyYW1ldGVycywgKmtleS5nZXQoKSwgZGF0YSwgc3RkOjptb3ZlKHByb21p
c2VXcmFwcGVyKSwgZWMpOworICAgIGFsZ29yaXRobS0+c2lnbigqcGFyYW1ldGVycywgKmtleSwg
ZGF0YSwgc3RkOjptb3ZlKHByb21pc2VXcmFwcGVyKSwgZWMpOwogICAgIGlmIChlYykgewogICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3Jp
dGhtQWVzQ2JjUGFyYW1zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zX2gK
KyNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zX2gKKworI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgorCisj
aWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zIEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMgeworcHVibGljOgorICAgIC8vIFRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3Iu
IE1VU1QgYmUgMTYgYnl0ZXMuCisgICAgRml4ZWRBcnJheTxjaGFyLCAxNj4gaXY7Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKyNlbmRpZiAvLyBDcnlwdG9BbGdv
cml0aG1BZXNDYmNQYXJhbXNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL0NyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDE1ODQ2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksMTEgKzM5LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwogCitFTlVNX0NMQVNTKENyeXB0b0tleUNsYXNzKSB7
CisgICAgSE1BQywKKyAgICBBRVMKK307CisKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBSZWZD
b3VudGVkPENyeXB0b0tleT4gewogcHVibGljOgogICAgIENyeXB0b0tleShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyLCBDcnlwdG9LZXlUeXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlV
c2FnZSk7CiAgICAgdmlydHVhbCB+Q3J5cHRvS2V5KCk7CiAKKyAgICB2aXJ0dWFsIENyeXB0b0tl
eUNsYXNzIGtleUNsYXNzKCkgY29uc3QgPSAwOworCiAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsK
ICAgICBib29sIGV4dHJhY3RhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYWN0YWJsZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRo
bURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L0NyeXB0b0tleUFFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleUFFUy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5
cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgorCisjaWYg
RU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXIuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Ny
eXB0b0tleUFFUzo6Q3J5cHRvS2V5QUVTKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3Jp
dGhtLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2UgdXNhZ2UpCisgICAgOiBDcnlwdG9LZXkoYWxnb3JpdGhtLCBDcnlwdG9LZXlUeXBlOjpT
ZWNyZXQsIGV4dHJhY3RhYmxlLCB1c2FnZSkKKyAgICAsIG1fa2V5KGtleSkKK3sKKyAgICBBU1NF
UlQoYWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DVFIKKyAgICAg
ICAgfHwgYWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMKKyAg
ICAgICAgfHwgYWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DTUFD
CisgICAgICAgIHx8IGFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNf
R0NNCisgICAgICAgIHx8IGFsZ29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpB
RVNfQ0ZCKTsKK30KKworQ3J5cHRvS2V5QUVTOjp+Q3J5cHRvS2V5QUVTKCkKK3sKK30KKwordm9p
ZCBDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBjb25zdAoreworICAgIENyeXB0b0tleTo6YnVp
bGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVyKTsKKyAgICBidWlsZGVyLmFkZCgibGVuZ3Ro
IiwgbV9rZXkuc2l6ZSgpICogOCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleUFFUy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleUFFUy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9LZXlBRVNfaAorI2Rl
ZmluZSBDcnlwdG9LZXlBRVNfaAorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgIkNyeXB0b0tleS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
I2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENyeXB0b0tleUFFUyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9LZXkgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENyeXB0b0tleUFFUz4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgYWxnb3JpdGhtLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENyeXB0b0tleUFFUyhhbGdvcml0aG0sIGtleSwgZXh0cmFjdGFibGUsIHVzYWdlKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgfkNyeXB0b0tleUFFUygpOworCisgICAgdmlydHVhbCBDcnlwdG9L
ZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENyeXB0b0tleUNsYXNz
OjpBRVM7IH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9rZXk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IE9WRVJSSURFOworCitwcml2
YXRlOgorICAgIENyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOworCisg
ICAgVmVjdG9yPGNoYXI+IG1fa2V5OworfTsKKworaW5saW5lIGNvbnN0IENyeXB0b0tleUFFUyog
YXNDcnlwdG9LZXlBRVMoY29uc3QgQ3J5cHRvS2V5JiBrZXkpCit7CisgICAgaWYgKGtleS5rZXlD
bGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpBRVMpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlBRVMqPigma2V5KTsKK30KKwor
aW5saW5lIENyeXB0b0tleUFFUyogYXNDcnlwdG9LZXlBRVMoQ3J5cHRvS2V5JiBrZXkpCit7Cisg
ICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpBRVMpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDcnlwdG9LZXlBRVMqPigma2V5
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCisKKworI2VuZGlmIC8vIENyeXB0b0tleUFFU19oCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5pZGwJ
KHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8u
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAgICAgTm9JbnRlcmZhY2VPYmpl
Y3QsCiAgICAgT3BlcmF0aW9uc05vdERlbGV0YWJsZQogXSBpbnRlcmZhY2UgU3VidGxlQ3J5cHRv
IHsKKyAgICBbQ3VzdG9tXSBQcm9taXNlIGVuY3J5cHQoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdv
cml0aG0sIEtleSBrZXksIHNlcXVlbmNlPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGEpOworICAg
IFtDdXN0b21dIFByb21pc2UgZGVjcnlwdChBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwg
S2V5IGtleSwgc2VxdWVuY2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CiAgICAgW0N1c3Rv
bV0gUHJvbWlzZSBzaWduKEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBLZXkga2V5LCBz
ZXF1ZW5jZTxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhKTsKICAgICBbQ3VzdG9tXSBQcm9taXNl
IHZlcmlmeShBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgS2V5IGtleSwgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSBzaWduYXR1cmUsIHNlcXVlbmNlPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGEp
OwogICAgIFtDdXN0b21dIFByb21pc2UgZGlnZXN0KEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3Jp
dGhtLCBzZXF1ZW5jZTxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19DQkMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tl
eUFFUy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTVByb21p
c2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBjb25zdCBDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpzX25hbWUgPSAiYWVzLWNiYyI7CisKK0NyeXB0b0FsZ29yaXRobUFF
U19DQkM6OkNyeXB0b0FsZ29yaXRobUFFU19DQkMoKQoreworfQorCitDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDOjp+Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQygpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG0+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmNyZWF0ZSgpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+KG5ldyBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDKTsKK30KKworQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjppZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc19pZGVudGlm
aWVyOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleShjb25zdCBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0IGZvcm1hdCwgY29uc3Qg
Q3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNh
Z2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGZvcm1hdCAhPSBDcnlwdG9LZXlGb3JtYXQ6OlJhdykg
eworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFZlY3RvcjxjaGFyPiBrZXlEYXRhOworICAgIGtleURhdGEuYXBwZW5kKGRhdGEuZmly
c3QsIGRhdGEuc2Vjb25kKTsKKyAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQgPSBDcnlw
dG9LZXlBRVM6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDLCBrZXlE
YXRhLCBleHRyYWN0YWJsZSwgdXNhZ2UpOworICAgIHByb21pc2UtPmZ1bGZpbGwocmVzdWx0LnJl
bGVhc2UoKSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZXhwb3J0S2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlwdG9LZXlGb3JtYXQsIGNvbnN0IENy
eXB0b0tleSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0w
LDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0FsZ29yaXRobUFFU19DQkNfaAor
I2RlZmluZSBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDX2gKKworI2luY2x1ZGUgIkNyeXB0b0FsZ29y
aXRobS5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9B
bGdvcml0aG0geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX25hbWU7
CisgICAgc3RhdGljIGNvbnN0IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgc19pZGVudGlmaWVy
ID0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQzsKKworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwg
Y29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+Jiwgc3Rk
Ojp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
LCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3RkOjp1bmlxdWVfcHRy
PFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBpbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIENyeXB0b0tl
eUZvcm1hdCwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIGJvb2wgZXh0cmFjdGFibGUsIENy
eXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25D
b2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGV4cG9ydEtleShjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZXkmLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7
CisKK3ByaXZhdGU6CisgICAgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQygpOworICAgIHZpcnR1YWwg
fkNyeXB0b0FsZ29yaXRobUFFU19DQkMoKTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShT
VUJUTEVfQ1JZUFRPKQorCisjZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ19oCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkocmV2aXNpb24gMTU4NDYx
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjZGVmaW5lIENyeXB0b0tleUhNQUNfaAogCiAjaW5j
bHVkZSAiQ3J5cHRvS2V5LmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpAQCAtNDIsNiArNDEsOCBAQCBw
dWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkNyeXB0b0tleUhNQUMoKTsKIAorICAgIHZpcnR1
YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDcnlw
dG9LZXlDbGFzczo6SE1BQzsgfQorCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXkoKSBjb25z
dCB7IHJldHVybiBtX2tleTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVz
Y3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3QgT1ZFUlJJ
REU7CkBAIC01Myw2ICs1NCwyMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxjaGFyPiBtX2tleTsK
IH07CiAKK2lubGluZSBjb25zdCBDcnlwdG9LZXlITUFDKiBhc0NyeXB0b0tleUhNQUMoY29uc3Qg
Q3J5cHRvS2V5JiBrZXkpCit7CisgICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNs
YXNzOjpITUFDKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQ3J5cHRvS2V5SE1BQyo+KCZrZXkpOworfQorCitpbmxpbmUgQ3J5cHRvS2V5SE1B
QyogYXNDcnlwdG9LZXlITUFDKENyeXB0b0tleSYga2V5KQoreworICAgIGlmIChrZXkua2V5Q2xh
c3MoKSAhPSBDcnlwdG9LZXlDbGFzczo6SE1BQykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0tleUhNQUMqPigma2V5KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQ01hYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFj
L0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobUFFU19DQkMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5
QUVTLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlz
ZS5oIgorI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25DcnlwdG8uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1BRVNfQ0JDKENDT3BlcmF0aW9uIG9w
ZXJhdGlvbiwgY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJiBwYXJhbWV0ZXJzLCBj
b25zdCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+
JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UpCit7CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YocGFyYW1ldGVycy5pdikgPT0ga0NDQmxvY2tTaXplQUVTMTI4
LCAiSW5pdGlhbGl6YXRpb24gdmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyBhbGdvcml0
aG0gYmxvY2sgc2l6ZSIpOworCisgICAgc2l6ZV90IGtleUxlbmd0aEluQnl0ZXMgPSBrZXkua2V5
KCkuc2l6ZSgpOworICAgIGlmIChrZXlMZW5ndGhJbkJ5dGVzICE9IDE2ICYmIGtleUxlbmd0aElu
Qnl0ZXMgIT0gMjQgJiYga2V5TGVuZ3RoSW5CeXRlcyAhPSAzMikgeworICAgICAgICBwcm9taXNl
LT5yZWplY3QobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDQ0NyeXB0
b3JSZWYgY3J5cHRvcjsKKyAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gQ0NDcnlwdG9yQ3Jl
YXRlKG9wZXJhdGlvbiwga0NDQWxnb3JpdGhtQUVTLCBrQ0NPcHRpb25QS0NTN1BhZGRpbmcsIGtl
eS5rZXkoKS5kYXRhKCksIGtleUxlbmd0aEluQnl0ZXMsIHBhcmFtZXRlcnMuaXYuZGF0YSgpLCAm
Y3J5cHRvcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBwcm9taXNlLT5yZWplY3QobnVs
bHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgaW5wdXRTaXplID0g
MDsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGRhdGEuc2l6ZSgpOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBpbnB1dFNpemUgKz0gZGF0YVtpXS5zZWNvbmQ7CisKKyAgICBWZWN0b3I8
dW5zaWduZWQgY2hhcj4gcmVzdWx0KENDQ3J5cHRvckdldE91dHB1dExlbmd0aChjcnlwdG9yLCBp
bnB1dFNpemUsIHRydWUpKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIHAgPSByZXN1bHQuZGF0YSgp
OworICAgIHNpemVfdCByZXN1bHRDaHVua1NpemU7CisgICAgZm9yIChzaXplX3QgaSA9IDAsIHNp
emUgPSBkYXRhLnNpemUoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBzdGF0dXMgPSBDQ0Ny
eXB0b3JVcGRhdGUoY3J5cHRvciwgZGF0YVtpXS5maXJzdCwgZGF0YVtpXS5zZWNvbmQsIHAsIHJl
c3VsdC5lbmQoKSAtIHAsICZyZXN1bHRDaHVua1NpemUpOworICAgICAgICBpZiAoc3RhdHVzKSB7
CisgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgcCArPSByZXN1bHRDaHVua1NpemU7CisgICAgfQorICAg
IHN0YXR1cyA9IENDQ3J5cHRvckZpbmFsKGNyeXB0b3IsIHAsIHJlc3VsdC5lbmQoKSAtIHAsICZy
ZXN1bHRDaHVua1NpemUpOworICAgIHAgKz0gcmVzdWx0Q2h1bmtTaXplOworICAgIGlmIChzdGF0
dXMpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxwdHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUKHAgPD0gcmVzdWx0LmVuZCgpKTsKKyAgICByZXN1bHQuc2hy
aW5rKHAgLSByZXN1bHQuYmVnaW4oKSk7CisKKyAgICBDQ0NyeXB0b3JSZWxlYXNlKGNyeXB0b3Ip
OworCisgICAgcHJvbWlzZS0+ZnVsZmlsbChyZXN1bHQpOworfQorCit2b2lkIENyeXB0b0FsZ29y
aXRobUFFU19DQkM6OmVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFy
YW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRp
b25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJh
bXMmIGFlc0NCQ1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1B
ZXNDYmNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKKyAgICBjb25zdCBDcnlwdG9LZXlBRVMqIGFlc0tl
eSA9IGFzQ3J5cHRvS2V5QUVTKGtleSk7CisKKyAgICBpZiAoIWFlc0tleSkgeworICAgICAgICBl
YyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHJh
bnNmb3JtQUVTX0NCQyhrQ0NFbmNyeXB0LCBhZXNDQkNQYXJhbWV0ZXJzLCAqYWVzS2V5LCBkYXRh
LCBzdGQ6Om1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6
OmRlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0
YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMmIGFlc0NCQ1Bh
cmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMm
PihwYXJhbWV0ZXJzKTsKKyAgICBjb25zdCBDcnlwdG9LZXlBRVMqIGFlc0tleSA9IGFzQ3J5cHRv
S2V5QUVTKGtleSk7CisKKyAgICBpZiAoIWFlc0tleSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQ
T1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHJhbnNmb3JtQUVTX0NC
QyhrQ0NEZWNyeXB0LCBhZXNDQkNQYXJhbWV0ZXJzLCAqYWVzS2V5LCBkYXRhLCBzdGQ6Om1vdmUo
cHJvbWlzZSkpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmdlbmVyYXRlS2V5
KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBib29sIC8qZXh0cmFjdGFibGUqLywg
Q3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNVQlRMRV9DUllQVE8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxn
b3JpdGhtSE1BQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcAkocmV2aXNpb24gMTU4NDYxKQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGNhbGN1
bGF0ZVNpCiB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZl
Y3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VX
cmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCBDcnlwdG9B
bGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENy
eXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKLSAgICBjb25zdCBDcnlwdG9L
ZXlITUFDJiBobWFjS2V5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5SE1BQyY+KGtleSk7
CisgICAgY29uc3QgQ3J5cHRvS2V5SE1BQyogaG1hY0tleSA9IGFzQ3J5cHRvS2V5SE1BQyhrZXkp
OwogCiAgICAgQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobTsKICAgICBpZiAoIWdldENvbW1vbkNy
eXB0b0FsZ29yaXRobShobWFjUGFyYW1ldGVycy5oYXNoLCBhbGdvcml0aG0pKSB7CkBAIC0xMDMs
NyArMTAzLDEyIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c2lnbihjb25zdCBDcnkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzaWduYXR1
cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBobWFjS2V5LmtleSgpLCBkYXRhKTsK
KyAgICBpZiAoIWhtYWNLZXkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzaWduYXR1
cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBobWFjS2V5LT5rZXkoKSwgZGF0YSk7
CiAKICAgICBwcm9taXNlLT5mdWxmaWxsKHNpZ25hdHVyZSk7CiB9CkBAIC0xMTEsNyArMTE2LDcg
QEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeQogdm9pZCBDcnlwdG9B
bGdvcml0aG1ITUFDOjp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFy
YW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEm
IGV4cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRh
dGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyYgaG1hY1BhcmFt
ZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJj4ocGFy
YW1ldGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5SE1BQyYgaG1hY0tleSA9IHN0YXRpY19jYXN0
PGNvbnN0IENyeXB0b0tleUhNQUMmPihrZXkpOworICAgIGNvbnN0IENyeXB0b0tleUhNQUMqIGht
YWNLZXkgPSBhc0NyeXB0b0tleUhNQUMoa2V5KTsKIAogICAgIENDSG1hY0FsZ29yaXRobSBhbGdv
cml0aG07CiAgICAgaWYgKCFnZXRDb21tb25DcnlwdG9BbGdvcml0aG0oaG1hY1BhcmFtZXRlcnMu
aGFzaCwgYWxnb3JpdGhtKSkgewpAQCAtMTE5LDcgKzEyNCwxMiBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobUhNQUM6OnZlcmlmeShjb25zdCBDCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29y
aXRobSwgaG1hY0tleS5rZXkoKSwgZGF0YSk7CisgICAgaWYgKCFobWFjS2V5KSB7CisgICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29y
aXRobSwgaG1hY0tleS0+a2V5KCksIGRhdGEpOwogCiAgICAgYm9vbCByZXN1bHQgPSBzaWduYXR1
cmUuc2l6ZSgpID09IGV4cGVjdGVkU2lnbmF0dXJlLnNlY29uZCAmJiAhbWVtY21wKHNpZ25hdHVy
ZS5kYXRhKCksIGV4cGVjdGVkU2lnbmF0dXJlLmZpcnN0LCBzaWduYXR1cmUuc2l6ZSgpKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1h
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1SZWdpc3RyeU1hYy5jcHAJKHJldmlzaW9uIDE1ODQ2MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAorI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1I
TUFDLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hBMS5oIgogCkBAIC0zNSw2ICszNiw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6
cGxhdGZvcm1SZWdpc3RlckFsZ29yaXRobXMoKQogeworICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6c19p
ZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpjcmVhdGUpOwogICAgIHJlZ2lzdGVy
QWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobUhNQUM6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtSE1B
Qzo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1ITUFDOjpjcmVhdGUpOwogICAgIHJlZ2lz
dGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobVNIQTE6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGht
U0hBMTo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1TSEExOjpjcmVhdGUpOwogfQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU4NDYxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTMtMTEtMDEgIEFsZXhleSBQcm9za3VyeWFrb3Yg
IDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFdlYkNyeXB0byBBRVMtQ0JDCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxl
L2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1l
bmNyeXB0LWRlY3J5cHQuaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0
by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlw
dC13aXRoLXBhZGRpbmcuaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLWVuY3J5cHQtZGVjcnlwdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxl
L2Flcy1jYmMtaW52YWxpZC1sZW5ndGgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBj
cnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGguaHRtbDogQWRkZWQuCisgICAgICAg
ICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1jbGFzcy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRt
bDogQWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnktZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS5odG1s
OgorICAgICAgICBDb3JyZWN0ZWQgYSBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIGNyeXB0by9z
dWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qczogKGhleFRvQXJyYXlCdWZmZXIpOiBBZGRlZCBhIGhl
bHBlci4KKwogMjAxMy0xMS0wMSAgSmFtZXMgQ3JhaWcgIDxqY3JhaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFYOiBSZWdyZXNzaW9uOiBtZWRpYSBjb250cm9scyBhcmUgbm8gbG9uZ2VyIGFjY2Vz
c2libGUKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlw
dC1kZWNyeXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8v
c3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVj
cnlwdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorVGVzdCBB
RVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0IGtleS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0ltcG9ydGluZyBhIHJhdyBBRVMga2V5
IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4KK1BBU1Mga2V5LnR5cGUgaXMgJ3NlY3JldCcKK1BBU1Mg
a2V5LmV4dHJhY3RhYmxlIGlzIHRydWUKK1BBU1Mga2V5LmFsZ29yaXRobS5uYW1lIGlzICdhZXMt
Y2JjJworUEFTUyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBpcyAxOTIKK1BBU1Mga2V5LnVzYWdlcyBp
cyBbJ2VuY3J5cHQnLCAnZGVjcnlwdCddCitVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50
ZXh0Li4uCitQQVNTIGJ5dGVBcnJheVRvSGV4U3RyaW5nKG5ldyBVaW50OEFycmF5KGVuY3J5cHRp
b25SZXN1bHQpKSBpcyAnWzRmIDAyIDFkIGIyIDQzIGJjIDYzIDNkIDcxIDc4IDE4IDNhIDlmIGEw
IDcxIGU4IGI0IGQ5IGFkIGE5IGFkIDdkIGVkIGY0IGU1IGU3IDM4IDc2IDNmIDY5IDE0IDVhIDU3
IDFiIDI0IDIwIDEyIGZiIDdhIGUwIDdmIGE5IGJhIGFjIDNkIGYxIDAyIGUwIDA4IGIwIGUyIDc5
IDg4IDU5IDg4IDgxIGQ5IDIwIGE5IGU2IDRmIDU2IDE1IGNkIDYxIDJjIGNkIDc5IDIyIDRiIDM1
IDA5IDM1IGQ0IDVkIGQ2IGE5IDhmIDgxIDc2XScKK0RlY3J5cHRpbmcgaXQgYmFjay4uLgorUEFT
UyBuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVj
cnlwdC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCww
ICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6
IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTIt
ZW5jcnlwdC1kZWNyeXB0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5k
IGRlY3J5cHQgZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0IGtleS4iKTsKKworanNUZXN0SXNBc3lu
YyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRs
ZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIga2V5RGF0YSA9IGhleFRvQXJy
YXlCdWZmZXIoIjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1NjJmOGVhZDI1MjJjNmI3
YiIpOwordmFyIGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBi
MGMwZDBlMGYiKTsKK3ZhciBwbGFpbnRleHQgPSBoZXhUb0FycmF5QnVmZmVyKCI2YmMxYmVlMjJl
NDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxMzBj
ODFjNDZhMzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZj
MzcxMCIpOwordmFyIGV4dHJhY3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGluZyBhIHJh
dyBBRVMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4iKTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0
S2V5KCJyYXciLCBrZXlEYXRhLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBbImVuY3J5cHQiLCAi
ZGVjcnlwdCJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3VsdDsKKyAg
ICBzaG91bGRCZSgia2V5LnR5cGUiLCAiJ3NlY3JldCciKTsKKyAgICBzaG91bGRCZSgia2V5LmV4
dHJhY3RhYmxlIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwg
IidhZXMtY2JjJyIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICIxOTIi
KTsKKyAgICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICJbJ2VuY3J5cHQnLCAnZGVjcnlwdCddIik7
CisKKyAgICBkZWJ1ZygiVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4uLiIpOwor
ICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2
fSwga2V5LCBbcGxhaW50ZXh0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGVu
Y3J5cHRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3Ry
aW5nKG5ldyBVaW50OEFycmF5KGVuY3J5cHRpb25SZXN1bHQpKSIsICInWzRmIDAyIDFkIGIyIDQz
IGJjIDYzIDNkIDcxIDc4IDE4IDNhIDlmIGEwIDcxIGU4IGI0IGQ5IGFkIGE5IGFkIDdkIGVkIGY0
IGU1IGU3IDM4IDc2IDNmIDY5IDE0IDVhIDU3IDFiIDI0IDIwIDEyIGZiIDdhIGUwIDdmIGE5IGJh
IGFjIDNkIGYxIDAyIGUwIDA4IGIwIGUyIDc5IDg4IDU5IDg4IDgxIGQ5IDIwIGE5IGU2IDRmIDU2
IDE1IGNkIDYxIDJjIGNkIDc5IDIyIDRiIDM1IDA5IDM1IGQ0IDVkIGQ2IGE5IDhmIDgxIDc2XSci
KTsKKworICAgIGRlYnVnKCJEZWNyeXB0aW5nIGl0IGJhY2suLi4iKTsKKyAgICByZXR1cm4gY3J5
cHRvLnN1YnRsZS5kZWNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3Jlc3Vs
dF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBkZWNyeXB0aW9uUmVzdWx0ID0g
cmVzdWx0OworICAgIHNob3VsZEJlKCJuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSIs
ICJwbGFpbnRleHQiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKwor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRv
L3N1YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMt
MjU2LWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1l
bmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkg
QEAKK1Rlc3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNyeXB0IGZ1bmN0aW9ucyB3aXRoIGEgMjU2
IGJpdCBrZXkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitJbXBvcnRpbmcgYSBy
YXcgQUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uCitQQVNTIGtleS50eXBlIGlzICdzZWNy
ZXQnCitQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCitQQVNTIGtleS5hbGdvcml0aG0ubmFt
ZSBpcyAnYWVzLWNiYycKK1BBU1Mga2V5LmFsZ29yaXRobS5sZW5ndGggaXMgMjU2CitQQVNTIGtl
eS51c2FnZXMgaXMgWydlbmNyeXB0JywgJ2RlY3J5cHQnXQorVXNpbmcgdGhlIGtleSB0byBlbmNy
eXB0IHBsYWludGV4dC4uLgorUEFTUyBieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhBcnJh
eShlbmNyeXB0aW9uUmVzdWx0KSkgaXMgJ1tmNSA4YyA0YyAwNCBkNiBlNSBmMSBiYSA3NyA5ZSBh
YiBmYiA1ZiA3YiBmYiBkNiA5YyBmYyA0ZSA5NiA3ZSBkYiA4MCA4ZCA2NyA5ZiA3NyA3YiBjNiA3
MCAyYyA3ZCAzOSBmMiAzMyA2OSBhOSBkOSBiYSBjZiBhNSAzMCBlMiA2MyAwNCAyMyAxNCA2MSBi
MiBlYiAwNSBlMiBjMyA5YiBlOSBmYyBkYSA2YyAxOSAwNyA4YyA2YSA5ZCAxYiAzZiA0NiAxNyA5
NiBkNiBiMCBkNiBiMiBlMCBjMiBhNyAyYiA0ZCA4MCBlNiA0NF0nCitEZWNyeXB0aW5nIGl0IGJh
Y2suLi4KK1BBU1MgbmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkgaXMgcGxhaW50ZXh0
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1l
bmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5
cGUKIyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Fl
cy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVj
cnlwdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQUVTLUNCQyBl
bmNyeXB0IGFuZCBkZWNyeXB0IGZ1bmN0aW9ucyB3aXRoIGEgMjU2IGJpdCBrZXkuIik7CisKK2pz
VGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAgd2luZG93LmNy
eXB0by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFyIGtleURhdGEg
PSBoZXhUb0FycmF5QnVmZmVyKCI2MDNkZWIxMDE1Y2E3MWJlMmI3M2FlZjA4NTdkNzc4MTFmMzUy
YzA3M2I2MTA4ZDcyZDk4MTBhMzA5MTRkZmY0Iik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVy
KCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhl
eFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcx
ZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2
OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVl
OworCitkZWJ1ZygiSW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4u
LiIpOworY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsIGtleURhdGEsICJhZXMtY2JjIiwg
ZXh0cmFjdGFibGUsIFsiZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0
KSB7CisgICAga2V5ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJrZXkudHlwZSIsICInc2VjcmV0
JyIpOworICAgIHNob3VsZEJlKCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3Vs
ZEJlKCJrZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoImtl
eS5hbGdvcml0aG0ubGVuZ3RoIiwgIjI1NiIpOworICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwg
IlsnZW5jcnlwdCcsICdkZWNyeXB0J10iKTsKKworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRv
IGVuY3J5cHQgcGxhaW50ZXh0Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlw
dCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKTsKK30pLnRoZW4o
ZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgZW5jcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBz
aG91bGRCZSgiYnl0ZUFycmF5VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvblJl
c3VsdCkpIiwgIidbZjUgOGMgNGMgMDQgZDYgZTUgZjEgYmEgNzcgOWUgYWIgZmIgNWYgN2IgZmIg
ZDYgOWMgZmMgNGUgOTYgN2UgZGIgODAgOGQgNjcgOWYgNzcgN2IgYzYgNzAgMmMgN2QgMzkgZjIg
MzMgNjkgYTkgZDkgYmEgY2YgYTUgMzAgZTIgNjMgMDQgMjMgMTQgNjEgYjIgZWIgMDUgZTIgYzMg
OWIgZTkgZmMgZGEgNmMgMTkgMDcgOGMgNmEgOWQgMWIgM2YgNDYgMTcgOTYgZDYgYjAgZDYgYjIg
ZTAgYzIgYTcgMmIgNGQgODAgZTYgNDRdJyIpOworCisgICAgZGVidWcoIkRlY3J5cHRpbmcgaXQg
YmFjay4uLiIpOworICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6ICJhZXMt
Y2JjIiwgaXY6IGl2fSwga2V5LCBbcmVzdWx0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkg
eworICAgIGRlY3J5cHRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoIm5ldyBVaW50
OEFycmF5KGRlY3J5cHRpb25SZXN1bHQpIiwgInBsYWludGV4dCIpOworCisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVj
cnlwdC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwor
dGV4dC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRl
c3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRl
Y3J5cHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNCBAQAorVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rp
b25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1wb3J0aW5nIGEgcmF3IEFF
UyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0Jwor
UEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMg
J2Flcy1jYmMnCitQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDEyOAorUEFTUyBrZXkudXNh
Z2VzIGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0J10KK1VzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBw
bGFpbnRleHQuLi4KK1BBU1MgYnl0ZUFycmF5VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5j
cnlwdGlvblJlc3VsdCkpIGlzICdbNzYgNDkgYWIgYWMgODEgMTkgYjIgNDYgY2UgZTkgOGUgOWIg
MTIgZTkgMTkgN2QgNTAgODYgY2IgOWIgNTAgNzIgMTkgZWUgOTUgZGIgMTEgM2EgOTEgNzYgNzgg
YjIgNzMgYmUgZDYgYjggZTMgYzEgNzQgM2IgNzEgMTYgZTYgOWUgMjIgMjIgOTUgMTYgM2YgZjEg
Y2EgYTEgNjggMWYgYWMgMDkgMTIgMGUgY2EgMzAgNzUgODYgZTEgYTcgOGMgYjggMjggMDcgMjMg
MGUgMTMgMjEgZDMgZmEgZTAgMGQgMTggY2MgMjAgMTJdJworRGVjcnlwdGluZyBpdCBiYWNrLi4u
CitQQVNTIG5ldyBVaW50OEFycmF5KGRlY3J5cHRpb25SZXN1bHQpIGlzIHBsYWludGV4dAorVGVz
dGluZyBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYmluZGluZ3MuLi4KK1BBU1MgY3J5cHRvLnN1YnRs
ZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiBudWxsfSwga2V5LCBbcGxhaW50ZXh0XSkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT25seSBBcnJheUJ1ZmZlciBhbmQgQXJyYXlCdWZm
ZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVyYXRpb25EYXRhLgorUEFT
UyBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJ30sIGtleSwgW3BsYWludGV4
dF0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5
QnVmZmVyVmlldyBvYmplY3RzIGNhbiBiZSBwYXNzZWQgYXMgQ3J5cHRvT3BlcmF0aW9uRGF0YS4K
K1BBU1MgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiAzfSwga2V5
LCBbcGxhaW50ZXh0XSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT25seSBBcnJheUJ1ZmZl
ciBhbmQgQXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVy
YXRpb25EYXRhLgorUEFTUyBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywg
aXY6IG5ldyBVaW50OEFycmF5KFswXSl9LCBrZXksIFtwbGFpbnRleHRdKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IEFFUy1DQkMgaW5pdGlhbGl6YXRpb24gZGF0YSBtdXN0IGJlIDE2IGJ5dGVzLgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0
LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMg
LTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMt
ZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBh
ZGRpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmctZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBk
ZWNyeXB0IGZ1bmN0aW9ucyBvbiBhIHBsYWludGV4dCB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9m
IGJsb2NrIHNpemUgaW4gbGVuZ3RoLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
SW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFTUyBrZXku
dHlwZSBpcyAnc2VjcmV0JworUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFTUyBrZXku
YWxnb3JpdGhtLm5hbWUgaXMgJ2Flcy1jYmMnCitQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlz
IDEyOAorUEFTUyBrZXkudXNhZ2VzIGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0J10KK1VzaW5nIHRo
ZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4KKyAgICA9IFs2MyAwMSA5OSBjNSBmMiAwMiBj
YyA3MSA2NyBiYiA4NCBjNiBjNyAyYiAzNCA5ZF0KK0RlY3J5cHRpbmcgaXQgYmFjay4uLgorUEFT
UyBuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0
LXdpdGgtcGFkZGluZy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlw
ZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVz
LWNiYy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRp
bmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNi
Yy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIG9u
IGEgcGxhaW50ZXh0IHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgYmxvY2sgc2l6ZSBpbiBsZW5n
dGguIik7CisKK2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisg
ICAgd2luZG93LmNyeXB0by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwor
dmFyIGtleURhdGEgPSBoZXhUb0FycmF5QnVmZmVyKCIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgw
OWNmNGYzYyIpOwordmFyIGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4
MDkwYTBiMGMwZDBlMGYiKTsKK3ZhciBwbGFpbnRleHQgPSBhc2NpaVRvQXJyYXlCdWZmZXIoInRl
c3QiKTsKK3ZhciBleHRyYWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcgYSByYXcg
QUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtl
eSgicmF3Iiwga2V5RGF0YSwgImFlcy1jYmMiLCBleHRyYWN0YWJsZSwgWyJlbmNyeXB0IiwgImRl
Y3J5cHQiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAg
c2hvdWxkQmUoImtleS50eXBlIiwgIidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5leHRy
YWN0YWJsZSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICIn
YWVzLWNiYyciKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiMTI4Iik7
CisgICAgc2hvdWxkQmUoImtleS51c2FnZXMiLCAiWydlbmNyeXB0JywgJ2RlY3J5cHQnXSIpOwor
CisgICAgZGVidWcoIlVzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAg
ICByZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0s
IGtleSwgW3BsYWludGV4dF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBwcmlu
dEFjY2VwdGVkUmVzdWx0KHJlc3VsdCk7CisKKyAgICBkZWJ1ZygiRGVjcnlwdGluZyBpdCBiYWNr
Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZTogImFlcy1jYmMi
LCBpdjogaXZ9LCBrZXksIFtyZXN1bHRdKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAgZGVjcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgibmV3IFVpbnQ4QXJy
YXkoZGVjcnlwdGlvblJlc3VsdCkiLCAicGxhaW50ZXh0Iik7CisgICAgZmluaXNoSlNUZXN0KCk7
Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgt
cGFkZGluZy5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAj
IwordGV4dC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91
dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMt
ZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1v
bi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zLiIpOworCitqc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKworaWYgKCF3aW5kb3cuc3VidGxlKQorICAgIHdpbmRvdy5jcnlwdG8uc3Vi
dGxlID0gd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7CisKK3ZhciBrZXlEYXRhID0gaGV4VG9B
cnJheUJ1ZmZlcigiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiKTsKK3ZhciBpdiA9
IGhleFRvQXJyYXlCdWZmZXIoIjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIik7Cit2
YXIgcGxhaW50ZXh0ID0gaGV4VG9BcnJheUJ1ZmZlcigiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTEx
NzM5MzE3MmFhZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFl
NWZiYzExOTFhMGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2FkMmI0MTdiZTY2YzM3MTAiKTsKK3ZhciBl
eHRyYWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9t
IHN0cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwga2V5
RGF0YSwgImFlcy1jYmMiLCBleHRyYWN0YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSkudGhl
bihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImtl
eS50eXBlIiwgIidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIsICJ0
cnVlIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWNiYyciKTsK
KyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiMTI4Iik7CisgICAgc2hvdWxk
QmUoImtleS51c2FnZXMiLCAiWydlbmNyeXB0JywgJ2RlY3J5cHQnXSIpOworCisgICAgZGVidWco
IlVzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICByZXR1cm4gY3J5
cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWlu
dGV4dF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBlbmNyeXB0aW9uUmVzdWx0
ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhB
cnJheShlbmNyeXB0aW9uUmVzdWx0KSkiLCAiJ1s3NiA0OSBhYiBhYyA4MSAxOSBiMiA0NiBjZSBl
OSA4ZSA5YiAxMiBlOSAxOSA3ZCA1MCA4NiBjYiA5YiA1MCA3MiAxOSBlZSA5NSBkYiAxMSAzYSA5
MSA3NiA3OCBiMiA3MyBiZSBkNiBiOCBlMyBjMSA3NCAzYiA3MSAxNiBlNiA5ZSAyMiAyMiA5NSAx
NiAzZiBmMSBjYSBhMSA2OCAxZiBhYyAwOSAxMiAwZSBjYSAzMCA3NSA4NiBlMSBhNyA4YyBiOCAy
OCAwNyAyMyAwZSAxMyAyMSBkMyBmYSBlMCAwZCAxOCBjYyAyMCAxMl0nIik7CisKKyAgICBkZWJ1
ZygiRGVjcnlwdGluZyBpdCBiYWNrLi4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVj
cnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtyZXN1bHRdKTsKK30pLnRoZW4o
ZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgZGVjcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBz
aG91bGRCZSgibmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkiLCAicGxhaW50ZXh0Iik7
CisKKyAgICBkZWJ1ZygiVGVzdGluZyBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYmluZGluZ3MuLi4i
KTsKKyAgICBzaG91bGRUaHJvdygiY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNC
QycsIGl2OiBudWxsfSwga2V5LCBbcGxhaW50ZXh0XSkiKTsKKyAgICBzaG91bGRUaHJvdygiY3J5
cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQyd9LCBrZXksIFtwbGFpbnRleHRdKSIp
OworICAgIHNob3VsZFRocm93KCJjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JD
JywgaXY6IDN9LCBrZXksIFtwbGFpbnRleHRdKSIpOworICAgIHNob3VsZFRocm93KCJjcnlwdG8u
c3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IG5ldyBVaW50OEFycmF5KFswXSl9
LCBrZXksIFtwbGFpbnRleHRdKSIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2Ny
aXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWwKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L2h0bWwKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLWludmFsaWQtbGVuZ3RoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVu
Z3RoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAzODogU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgaWRlbnRpZmllciAnZmlu
aXNoSlNUZXN0Jy4gRXhwZWN0ZWQgJyknIHRvIGVuZCBhIGFyZ3VtZW50IGxpc3QuCitGQUlMIHN1
Y2Nlc3NmdWxseVBhcnNlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVu
ZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxl
bmd0aC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCww
ICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6
IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZh
bGlkLWxlbmd0aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
YWVzLWNiYy1pbnZhbGlkLWxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3RoLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbigiVGVzdCBhbiB1bnN1cHBvcnRlZCBBRVMga2V5IGxlbmd0aC4iKTsK
KworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5k
b3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIga2V5
RGF0YSA9IGhleFRvQXJyYXlCdWZmZXIoIjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1
NjJmOGVhZDI1MjJjIik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUw
NjA3MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIo
IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFj
NDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdh
ZDJiNDE3YmU2NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1ZygiSW1w
b3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLiIpOworY3J5cHRvLnN1
YnRsZS5pbXBvcnRLZXkoInJhdyIsIGtleURhdGEsICJhZXMtY2JjIiwgZXh0cmFjdGFibGUsIFsi
ZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2V5ID0g
cmVzdWx0OworICAgIHNob3VsZEJlKCJrZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3Vs
ZEJlKCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3Jp
dGhtLm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVu
Z3RoIiwgIjE3NiIpOworICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgIlsnZW5jcnlwdCcsICdk
ZWNyeXB0J10iKTsKKworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50
ZXh0Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogImFlcy1j
YmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKTsKK30pLnRoZW4odW5kZWZpbmVkLCBmdW5j
dGlvbihyZXN1bHQpIHsKKyAgICBkZWJ1ZygiRmFpbGVkLCBhcyBleHBlY3RlZC4gTm90ZSB0aGF0
IHRoZSBzcGVjIGRvZXNuJ3QgYXBwZWFyIHRvIGNsZWFybHkgZGVmaW5lIHdoaWNoIHN0ZXAgc2hv
dWxkIGZhaWwuIgorCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGguaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5
LWNsYXNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgY2FsbGluZyBBRVMt
Q0JDIGVuY3J5cHQgd2l0aCBhIEhNQUMga2V5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworSW1wb3J0aW5nIGEgcmF3IEhNQUMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4KK1Vz
aW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4KK1BBU1MgY3J5cHRvLnN1YnRsZS5l
bmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogTm90U3VwcG9ydGVkRXJyb3I6IERPTSBFeGNlcHRpb24gOS4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5
LWNsYXNzLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0w
LDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdy
b25nLWtleS1jbGFzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGNhbGxpbmcgQUVTLUNCQyBlbmNyeXB0IHdpdGgg
YSBITUFDIGtleS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1
YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3Vi
dGxlOworCit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBh
MGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUy
MmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEz
MGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2
NmMzNzEwIik7Cit2YXIgaG1hY0tleSA9IGFzY2lpVG9BcnJheUJ1ZmZlcignYScpOwordmFyIGV4
dHJhY3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGluZyBhIHJhdyBITUFDIGtleSBmcm9t
IHN0cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3IiwgaG1h
Y0tleSwge25hbWU6ICdobWFjJywgaGFzaDoge25hbWU6ICdzaGEtMSd9fSwgZXh0cmFjdGFibGUs
IFsic2lnbiIsICJ2ZXJpZnkiLCAiZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAga2V5ID0gcmVzdWx0OworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRv
IGVuY3J5cHQgcGxhaW50ZXh0Li4uIik7CisgICAgc2hvdWxkVGhyb3coJ2NyeXB0by5zdWJ0bGUu
ZW5jcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKScpCisK
KyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13
cm9uZy1rZXktY2xhc3MuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0w
LDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnktZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlm
eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1ODQ2MSkKKysrIExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEs
NCArMSw0IEBACi1UZXN0IGNyeXB0by5zdWJ0bGUuZGlnZXN0LgorVGVzdCBITUFDIHNpZ24gYW5k
IHZlcmlmeSBmdW5jdGlvbnMuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIApJbmRleDog
TGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwJKHJl
dmlzaW9uIDE1ODQ2MSkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZl
cmlmeS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05LDcgKzksNyBAQAogPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+CiAKIDxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVzdCBjcnlwdG8uc3VidGxlLmRp
Z2VzdC4iKTsKK2Rlc2NyaXB0aW9uKCJUZXN0IEhNQUMgc2lnbiBhbmQgdmVyaWZ5IGZ1bmN0aW9u
cy4iKTsKIAoganNUZXN0SXNBc3luYyA9IHRydWU7CiAKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9j
cnlwdG8vc3VidGxlL3Jlc291cmNlcy9jb21tb24uanMJKHJldmlzaW9uIDE1ODQ2MSkKKysrIExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsMTYgQEAgZnVuY3Rpb24gYXNjaWlUb0FycmF5QnVmZmVyKHN0cikKICAg
ICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2hhcnMpOwogfQogCitmdW5jdGlvbiBoZXhUb0FycmF5
QnVmZmVyKHN0cikKK3sKKyAgICBpZiAoc3RyLmxlbmd0aCAlIDIpCisgICAgICAgIHRocm93ICJI
ZXggc3RyaW5nIGxlbmdodCBtdXN0IGJlIGV2ZW4iOworICAgIHZhciBjaGFycyA9IFtdOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSAyKQorICAgICAgICBjaGFycy5w
dXNoKHBhcnNlSW50KHN0ci5zdWJzdHIoaSwgMiksIDE2KSk7CisgICAgcmV0dXJuIG5ldyBVaW50
OEFycmF5KGNoYXJzKTsKK30KKwogZnVuY3Rpb24gcHJpbnRSZWplY3RlZFJlc3VsdCh2YWx1ZSkK
IHsKICAgICBkZWJ1ZygiICAgIHJlamVjdGVkIHdpdGggdmFsdWUgb2YgIiArIHZhbHVlKTsK
</data>
<flag name="commit-queue"
          id="238598"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215796</attachid>
            <date>2013-11-01 23:09:15 -0700</date>
            <delta_ts>2013-11-01 23:25:01 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>AES-CBC.txt</filename>
            <type>text/plain</type>
            <size>90464</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJDcnlwdG8gQUVTLUNCQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgICogd3RmL0ZpeGVkQXJy
YXkuaDogKFdURjo6Rml4ZWRBcnJheTo6ZGF0YSk6IEFkZGVkIGEgY29uc3QgdmVyc2lvbiBvZiB0
aGUgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6IEFkZGVkIGEgY29tbWVudCB0
byBWZWN0b3IgY29uc3RydWN0b3IgYWJvdXQgaG93IGl0IGlzIGRpZmZlcmVudAorICAgICAgICBm
cm9tIHN0ZDo6dmVjdG9yLgorCiAyMDEzLTExLTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBleHRlbmRlZCBhdHRlbXB0IGF0IFdp
bmRvd3MgYnVpbGQgZml4IGFmdGVyIHIxNTg0NzEuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaXhl
ZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRml4ZWRBcnJheS5oCShyZXZp
c2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaXhlZEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIGRhdGEoKSB7IHJl
dHVybiBtX2RhdGE7IH0KKyAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBTaXplOyB9CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dURi93dGYvVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
KCkKICAgICB7CiAgICAgfQotICAgIAorCisgICAgLy8gVW5saWtlIGluIHN0ZDo6dmVjdG9yLCB0
aGlzIGNvbnN0cnVjdG9yIGRvZXMgbm90IGluaXRpYWxpemUgUE9EIHR5cGVzLgogICAgIGV4cGxp
Y2l0IFZlY3RvcihzaXplX3Qgc2l6ZSkKICAgICAgICAgOiBCYXNlKHNpemUsIHNpemUpCiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA3IEBACisyMDEzLTExLTAxICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJDcnlwdG8g
QUVTLUNCQworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAg
IFRlc3RzOiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC5odG1sCisg
ICAgICAgICAgICAgICBjcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5o
dG1sCisgICAgICAgICAgICAgICBjcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0
LXdpdGgtcGFkZGluZy5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8vc3VidGxlL2Flcy1jYmMt
ZW5jcnlwdC1kZWNyeXB0Lmh0bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVzLWNi
Yy1pbnZhbGlkLWxlbmd0aC5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8vc3VidGxlL2Flcy1j
YmMtd3Jvbmcta2V5LWNsYXNzLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogQWRkZWQgbmV3IGZpbGVzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9w
ZXJ0eSk6IEZhY3RvcmVkIG91dCBhIGZ1bmN0aW9uIHRvIGdldCBhIHByb3BlcnR5IGFzIEpTVmFs
dWUuCisgICAgICAgIChXZWJDb3JlOjpnZXRIYXNoQWxnb3JpdGhtKTogVXNlIGl0LgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQWVzQ2JjUGFyYW1zKTogQWRkZWQgY29udmVydGVyIGZvciBBZXND
YmNQYXJhbXMuCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KTogU3VwcG9ydCBBRVNfQ0JDLgorICAgICAgICAo
V2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RGVjcnlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KTogU3VwcG9ydCBhbGwKKyAgICAg
ICAgYWxnb3JpdGhtcywgYWxsIHRoZSBuZXcgb25lcyBqdXN0IGhhdmUgdHJpdmlhbCBkaWN0aW9u
YXJpZXMuCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNy
ZWF0ZVBhcmFtZXRlcnNGb3JFeHBvcnRLZXkpOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
c2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgTW92ZWQgQ3J5cHRv
T3BlcmF0aW9uRGF0YSBiaW5kaW5ncyBvdXQgb2YgSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwLCBz
byB0aGF0IHdlCisgICAgICAgIGNvdWxkIHVzZSB0aGVtIGluIEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeS5jcHAuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaDogKFdl
YkNvcmU6OlByb21pc2VXcmFwcGVyOjpyZWplY3QpOiBBZGRlZCBhIHNwZWNpYWxpemF0aW9uCisg
ICAgICAgIHRvIHJlamVjdCB3aXRoIG51bGwgcmVzdWx0LiBUaGUgc3BlYyBkb2Vzbid0IGFjdHVh
bGx5IHNheSBob3cgYWxnb3JpdGhtcyBmYWlsLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNT
dWJ0bGVDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86
OmVuY3J5cHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTU3VidGxlQ3J5cHRvOjpkZWNy
eXB0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0bzo6c2lnbik6IFN0
eWxlIGZpeC4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMu
aDogQWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5Lmg6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlDbGFzcyk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1B
Qy5oOgorICAgICAgICAoV2ViQ29yZTo6YXNDcnlwdG9LZXlITUFDKToKKyAgICAgICAgQWRkZWQg
cG9vciBtYW4ncyBSVFRJLCBzbyB0aGF0IHdlIGNhbiBzYWZlbHkgdXBjYXN0IEtleXMgcGFzc2Vk
IGZybyBKYXZhU2NyaXB0IGNvZGUuCisKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5QUVTLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6OkNyeXB0b0tleUFFUyk6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6On5DcnlwdG9LZXlBRVMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKToKKyAg
ICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5QUVTLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
YXNDcnlwdG9LZXlBRVMpOgorICAgICAgICBBRVMga2V5cyBhcmUgdGhlIHNhbWUgZm9yIGFsbCBh
bGdvcml0aG1zLCBidXQgdGhleSBzdGlsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhbGdvcml0aG0u
CisKKyAgICAgICAgKiBjcnlwdG8vU3VidGxlQ3J5cHRvLmlkbDogQWRkZWQgZW5jcnlwdC9kZWNy
eXB0LgorCisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQyk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjp+Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQyk6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6aWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6ZXhwb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1BRVNfQ0JDLmg6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dHJh
bnNmb3JtQUVTX0NCQyk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
OjplbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRl
Y3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Z2VuZXJh
dGVLZXkpOgorICAgICAgICBBZGRlZC4KKworICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxn
b3JpdGhtSE1BQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFD
OjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OnZlcmlmeSk6
CisgICAgICAgIENoZWNrIGtleSBjbGFzcyBiZWZvcmUgY2FzdGluZyBpdCB0byBDcnlwdG9LZXlI
TUFDLgorCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6cGxhdGZvcm1S
ZWdpc3RlckFsZ29yaXRobXMpOiBSZWdpc3RlciBBRVMtQ0JDCisgICAgICAgIG9uIE1hYywgc28g
dGhhdCBpdCBjYW4gYmUgdXNlZC4KKworMjAxMy0xMC0zMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIxNTgzMzMpOiBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3Jlc3BvbnNlLWVuY29kaW5nLmh0bWwgYW5kIHhtbGh0dHByZXF1ZXN0
LW92ZXJyaWRlbWltZXR5cGUtY29udGVudC10eXBlLWhlYWRlci5odG1sIGFyZSBmYWlsaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM1NDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBoYWQgY29k
ZSB0aGF0IG1hZGUgc3VyZSB0aGF0IGNhY2hlZCAyMDAgcmVzcG9uc2VzIHdlcmVuJ3QgdXNlZCBm
b3IgY29uZGl0aW9uYWwKKyAgICAgICAgcmVxdWVzdHMuIEJ1dCBpdCBkaWRuJ3Qgd29yayB0aGUg
b3RoZXIgd2F5IC0gY2FjaGVkIDMwNCByZXNwb25zZXMgZ290IHJldXNlZCBmb3IKKyAgICAgICAg
c3Vic2VxdWVudCB1bmNvbmRpdGlvbmFsIHJlcXVlc3RzIQorCisgICAgICAgIEFkZGluZyB0aGUg
dGVzdCB1bmNvdmVyZWQgdGhpcyBidWcuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwOiAoV2ViQ29yZTo6c2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVz
ZSk6CisgICAgICAgIFNob3VsZCBuZXZlciBpZ25vcmUgY29uZGl0aW9uYWwgaGVhZGVycy4gQ29k
ZSBpbiBkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kKKyAgICAgICAgd2FzIGFscmVhZHkgdW5k
b2luZyB0aGlzIGZvciBjb25kaXRpb25hbCByZXF1ZXN0cywgYnV0IHdlIGFsc28gc2hvdWxkbid0
IHVzZQorICAgICAgICBXZWJDb3JlIGNhY2hlIGlmIGl0IGhvbGRzIGEgMzA0IHJlc3BvbnNlIHRv
IGNvbmRpdGlvbmFsIHJlcXVlc3QuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuY3BwOiAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWlu
ZVJldmFsaWRhdGlvblBvbGljeSk6CisgICAgICAgIEV2ZW4gdGhvdWdoIHRoZSBjaGFuZ2VkIGNv
ZGUgaXMgb25seSBmb3IgcmF3IHJlc291cmNlcywgSSB0aGluayB0aGF0IHdlIGNhbiBuZXZlcgor
ICAgICAgICBnZXQgYSBjb25kaXRpb25hbCByZXF1ZXN0IGhlcmUgYW55IG1vcmUuCisKIDIwMTMt
MTEtMDEgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNWR1Jl
bmRlclN0eWxlIGFjY2Vzc29ycyBzaG91bGQgcmV0dXJuIHJlZmVyZW5jZXMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1MDAsNiArNTUwMCwxNCBAQAogCQlFMTI1Rjgz
NTE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzMzE4MjJGMThBMDBEODRDRDkgLyog
Q3J5cHRvS2V5SE1BQy5jcHAgKi87IH07CiAJCUUxMjVGODM2MTgyMkYxOEEwMEQ4NENEOSAvKiBD
cnlwdG9LZXlITUFDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTI1RjgzNDE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5oICovOyB9Owog
CQlFMTI1RjgzODE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzNzE4
MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgKi87IH07CisJCUUx
MjVGODNBMTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODM5MTgy
NDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCAqLzsgfTsKKwkJ
RTEyNUY4M0QxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzQjE4MjQx
MUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcCAqLzsgfTsKKwkJRTEyNUY4
M0UxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4M0MxODI0MTFFNzAwRDg0
Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oICovOyB9OworCQlFMTI1Rjg0MTE4MjQyNTNB
MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzRjE4MjQyNTNBMDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgKi87IH07CisJCUUxMjVGODQyMTgyNDI1M0EwMEQ4
NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1Rjg0MDE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5oICovOyB9OworCQlFMTI1Rjg0NTE4MjQyNUM5MDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1Rjg0MzE4MjQyNUM5MDBEODRDRDkgLyogQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQ01hYy5jcHAgKi87IH07CisJCUUxMjVGODREMTgyNDI4OUQwMEQ4NENEOSAv
KiBDcnlwdG9LZXlBRVMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTEyNUY4NEIxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5jcHAgKi87
IH07CisJCUUxMjVGODRFMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODRDMTgyNDI4OUQw
MEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCAqLzsgfTsKIAkJRTEyNzE5QzcwRUVFQzE2ODAwRjYx
MjEzIC8qIE5hdmlnYXRvckJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMjcxOUM2MEVFRUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmgg
Ki87IH07CiAJCUUxMjcxOUNBMEVFRUMyMTMwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxOUM5MEVF
RUMyMTMwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmNwcCAqLzsgfTsKIAkJRTEyNzFBMEIwRUVF
Qzc3QTAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNzFBMEEwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtl
ck5hdmlnYXRvci5oICovOyB9OwpAQCAtMTI1MDEsNiArMTI1MDksMTQgQEAKIAkJRTEyNUY4MzMx
ODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvS2V5SE1BQy5jcHA7IHBhdGggPSBrZXlzL0NyeXB0b0tl
eUhNQUMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI1RjgzNDE4MjJGMThB
MDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDcnlwdG9LZXlITUFDLmg7IHBhdGggPSBrZXlzL0NyeXB0b0tleUhNQUMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNUY4MzcxODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0
b0FsZ29yaXRobUhNQUNNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHA7IHBhdGggPSBtYWMvQ3J5cHRvQWxnb3JpdGht
SE1BQ01hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODM5MTgyNDEw
NDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODNCMTgyNDExRTcwMEQ4NENEOSAvKiBKU0Ny
eXB0b09wZXJhdGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTEyNUY4M0MxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b09wZXJhdGlvbkRhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4M0YxODI0MjUzQTAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxMjVGODQwMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobUFF
U19DQkMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4NDMxODI0MjVDOTAw
RDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA7IHBhdGgg
PSBtYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxMjVGODRCMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvS2V5QUVTLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4NEMxODI0Mjg5RDAwRDg0Q0Q5IC8qIENy
eXB0b0tleUFFUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9LZXlB
RVMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNzE5QzYwRUVFQzE2ODAwRjYx
MjEzIC8qIE5hdmlnYXRvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmF2aWdhdG9yQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI3MTlDOTBF
RUVDMjEzMDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0b3JCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTEyNzFBMEEwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJOYXZpZ2F0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MjgzLDYgKzE5Mjk5LDggQEAKIAkJCQkxQzgxQkEw
NDBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oICovLAogCQkJCUUxNTdB
OEVFMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwICovLAog
CQkJCUUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIu
aCAqLywKKwkJCQlFMTI1RjgzQjE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25E
YXRhLmNwcCAqLywKKwkJCQlFMTI1RjgzQzE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVy
YXRpb25EYXRhLmggKi8sCiAJCQkJRTFDNjU3MTAxODE1RjlERDAwMjU2Q0REIC8qIEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeS5jcHAgKi8sCiAJCQkJRTFDNjU3MTExODE1RjlERDAwMjU2Q0RE
IC8qIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5oICovLAogCQkJCUJDRTQzOEExMTQwQzBE
QkYwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnkuY3BwICovLApAQCAtMjAxMTYsNiArMjAxMzQsNyBA
QAogCQlFMTcyQUY3MTE4MEYzNDM0MDBGQkFEQjkgLyogbWFjICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlFMTI1Rjg0MzE4MjQyNUM5MDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgKi8sCiAJCQkJRTEyNUY4MzcxODIyRjFFQjAw
RDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwICovLAogCQkJCUUxQkI4NEFDMTgy
MkNBNzQwMDUyNTA0MyAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAgKi8sCiAJCQkJ
RTEyNUY4MkQxODIyQ0ZGRjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTFNYWMuY3BwICov
LApAQCAtMjAxMjYsNiArMjAxNDUsOCBAQAogCQlFMTcyQUY3QzE4MEYzQjBEMDBGQkFEQjkgLyog
YWxnb3JpdGhtcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRTEyNUY4M0YxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3Bw
ICovLAorCQkJCUUxMjVGODQwMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDLmggKi8sCiAJCQkJRTEyNUY4MkYxODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRo
bUhNQUMuY3BwICovLAogCQkJCUUxMjVGODMwMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdv
cml0aG1ITUFDLmggKi8sCiAJCQkJRTEyNUY4MjkxODIyQ0ZFQzAwRDg0Q0Q5IC8qIENyeXB0b0Fs
Z29yaXRobVNIQTEuY3BwICovLApAQCAtMjAxMzcsNiArMjAxNTgsOCBAQAogCQlFMTlEQTI5RDE4
MTk5NUNFMDAwODhCQzggLyoga2V5cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJRTEyNUY4NEIxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5j
cHAgKi8sCisJCQkJRTEyNUY4NEMxODI0Mjg5RDAwRDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5oICov
LAogCQkJCUUxMjVGODMzMTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmNwcCAqLywK
IAkJCQlFMTI1RjgzNDE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5oICovLAogCQkJ
KTsKQEAgLTIwMTQ2LDYgKzIwMTY5LDcgQEAKIAkJRTFDNjU3MTQxODE2MDE1RjAwMjU2Q0REIC8q
IHBhcmFtZXRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCUUxMjVGODM5MTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJh
bXMuaCAqLywKIAkJCQlFMTlEQTI5QjE4MTg5QUREMDAwODhCQzggLyogQ3J5cHRvQWxnb3JpdGht
SG1hY0tleVBhcmFtcy5oICovLAogCQkJCUUxQzY1NzFFMTgxNkU1MDMwMDI1NkNERCAvKiBDcnlw
dG9BbGdvcml0aG1IbWFjUGFyYW1zLmggKi8sCiAJCQkpOwpAQCAtMjM3MTUsNiArMjM3MzksNyBA
QAogCQkJCTlCNTBCMURFMTdDRDRDMEYwMDg3RjYzQyAvKiBGb3JtTmFtZWRJdGVtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDc3RTc3NzBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlEQUVEMjAzMTE2RjI0NDQ4MDA3MEVDMEYgLyogUGFnZUNvbnNvbGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUxMjVGODNFMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0
b09wZXJhdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODkzMTQ3RDM1RjkwMDEw
QkMwNiAvKiBQYWdlQ29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJERDEz
NDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLApA
QCAtMjM4MjEsNiArMjM4NDYsNyBAQAogCQkJCTUxNEM3Njc1MENFOTIzQTEwMDdFRjNDRCAvKiBQ
cm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTA1MjU2MTA1ODg3NDAwMEND
OUU5NSAvKiBQcm90ZWN0aW9uU3BhY2VIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUY4RTEx
QTEyNTY1OTI2MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUUx
MjVGODRFMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZGOTQ1RUNDMTYxRjdGMzYwMDk3MUJDOCAvKiBQc2V1ZG9FbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwMDgxRkYwMDE2QjBBMkQzMDA4QUFBN0EgLyogUHVibGljU3VmZml4LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxMEZCMDg0QjE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzgzMCw2ICsyMzg1Niw3IEBACiAJCQkJMzc5RTM3
MTcxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUE1NzRGMjkxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3OTcyMEQwMEJGMjIwMDcxQjc4MiAvKiBSYWRpYWxHcmFkaWVudEF0dHJpYnV0
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMjVGODQyMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDQzEyNTFGMTJE
MDAzRUYyNjkgLyogUmFkaW9JbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2NThGRkE2
MTUyMkVGQUEwMERENTU5NSAvKiBSYWRpb05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ3
OTQsNiArMjQ4MjEsNyBAQAogCQkJCTE0NDc2QUE4MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5n
TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgyMDIwOUQxNTA4RDAwMEU2MUQ3IC8qIFhM
aW5rTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAv
KiBYTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEyNUY4M0ExODI0MTA0
ODAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTU5QzI4MDQ2MTM4REMyNDEwMDc5QjdFMiAvKiBYTUxFcnJv
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzcyQzQ3MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxI
dHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTYxMCw2ICsyNTYzOCw3IEBACiAJCQkJ
MDdDNTlCNjgxN0Y3ODRCQTAwMEZCQ0JCIC8qIE1lZGlhU291cmNlU3RhdGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg1OUE5QzRBMEFBNUUzQkQwMEI2OTRCMiAvKiBET01IVE1MQm9keUVsZW1l
bnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTE4M0I0MzBBQTY5MjYxMDBGMTlGQTMgLyogRE9N
SFRNTEJSRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUxMjVGODREMTgyNDI4OUQwMEQ4
NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQTRDREUwQUE2
ODYxQjAwODgwNTJEIC8qIERPTUhUTUxCdXR0b25FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNGOUI2NTcwQkEwRjM1RTAwODU0MDY0IC8qIERPTUhUTUxDYW52YXNFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODVERjJGOEYwQUEzQzg4MTAwQUQ2NEM1IC8qIERPTUhUTUxDb2xs
ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjMzMCw2ICsyNjM1OSw3IEBACiAJCQkJNTEx
RUYyQzcxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM5NEQxNEUwQzI3NUM2ODAwNkJDNjE3IC8qIEpTSGlzdG9yeS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0U3QjE5MzBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0b3J5Q3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMjVGODNEMTgyNDExRTcwMEQ4NENEOSAvKiBKU0Ny
eXB0b09wZXJhdGlvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5N0U0MTIxMDkxNTRG
QTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM5N0U0MkMxMDkxNUIwNjAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0QTJERUYwQTFCODUyQTAwQzgwN0Y4IC8qIEpTSFRNTEFu
Y2hvckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzY0Nyw2ICsyNzY3Nyw3IEBACiAJ
CQkJOTdCQzg0ODMxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkMzREE0NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxMDVEQTYyMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTI1Rjg0MTE4MjQy
NTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMkMzREE0ODBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzQTE0MkUwQjdEMTg4NjAwQTUzRkZEIC8qIFRleHRFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RENzEyNTFGMTJEMDAzRUYyNjkgLyogVGV4
dEZpZWxkSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3MTksNiArMjc3NTAsNyBA
QAogCQkJCUZEMzE2MEFFMTJCMDI2RjcwMEMxQTM1OSAvKiBWZWN0b3JNYXRoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJFODhFMERFMTcxNUQyQTIwMDY1OEQ5OCAvKiBWaWRlb1RyYWNrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJFODhFMEUxMTcxNUQyQTIwMDY1OEQ5OCAvKiBWaWRlb1RyYWNr
TGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTI1Rjg0NTE4MjQyNUM5MDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRUY0MThD
RTExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJM0ZGRkY5QUQxNTlEOUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0U3R5bGVSZXNvbHZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRjA5OUU2NDkyMDA1NkU1ODEgLyogVmlzaWJs
ZVBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCShy
ZXZpc2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTIgQEAK
IAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
QWVzQ2JjUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5o
IgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKIApAQCAtODAsNiArODIsMTcgQEAgYm9vbCBKU0Ny
eXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZwogICAgIHJldHVybiB0cnVlOwogfQogCitz
dGF0aWMgSlNWYWx1ZSBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMs
IG5hbWUpOworICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CisKKyAgICBpZiAob2JqZWN0
LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOworCisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Cit9CisKIHN0YXRpYyBib29sIGdldEhhc2hBbGdvcml0aG0oSlNEaWN0aW9uYXJ5JiBk
aWN0aW9uYXJ5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyJiByZXN1bHQpCiB7CiAgICAgLy8g
RlhJTUU6IFRlYWNoIEpTRGljdGlvbmFyeSBob3cgdG8gcmV0dXJuIEpTVmFsdWVzLCBhbmQgdXNl
IHRoYXQgdG8gZ2V0IGhhc2ggZWxlbWVudCB2YWx1ZS4KQEAgLTkwLDE1ICsxMDMsOSBAQCBzdGF0
aWMgYm9vbCBnZXRIYXNoQWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyKGV4ZWMsICJoYXNoIik7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKIAot
ICAgIEpTVmFsdWUgaGFzaCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKG9iamVjdC0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBoYXNo
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBKU1Zh
bHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBvYmplY3QsICJoYXNoIik7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFz
aC5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBO
T1RfU1VQUE9SVEVEX0VSUik7CkBAIC0xMDgsNiArMTE1LDM1IEBAIHN0YXRpYyBib29sIGdldEhh
c2hBbGdvcml0aG0oSlNEaWN0aW9uYXIKICAgICByZXR1cm4gSlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKGV4ZWMsIGhhc2gsIHJlc3VsdCk7CiB9CiAK
K3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRl
QWVzQ2JjUGFyYW1zKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU1ZhbHVlIGl2ID0g
Z2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zPiByZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcz4oKTsKKworICAgIENyeXB0b09wZXJh
dGlvbkRhdGEgaXZEYXRhOworICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVl
KGV4ZWMsIGl2LCBpdkRhdGEpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChpdkRhdGEuc2Vj
b25kICE9IDE2KSB7CisgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgIkFFUy1DQkMgaW5pdGlhbGl6YXRpb24gZGF0YSBtdXN0IGJlIDE2IGJ5
dGVzIikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtZW1jcHkocmVz
dWx0LT5pdi5kYXRhKCksIGl2RGF0YS5maXJzdCwgaXZEYXRhLnNlY29uZCk7CisKKyAgICByZXR1
cm4gc3RkOjptb3ZlKHJlc3VsdCk7Cit9CisKIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlSG1hY1BhcmFtcyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewpA
QCAtMTQ4LDcgKzE4NCw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGEKICAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNy
ZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6
Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
c3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlJTQUVTX1BLQ1MxX3YxXzU6CkBAIC0xNTgsNyArMTk0LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OkVDRFNBOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNESDoKICAg
ICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DVFI6CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQzoKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUFlc0NiY1BhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ01BQzoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkFFU19HQ006CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpBRVNfQ0ZCOgpAQCAtMTc3LDcgKzIxNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JEZWNyeXB0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1l
dGVyc0ZvckRlY3J5cHQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdv
cml0aG0pIHsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1Mx
X3YxXzU6CkBAIC0xODcsNyArMjI2LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDRFNBOgog
ICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNESDoKICAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DVFI6CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQzoKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUFlc0NiY1BhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpBRVNfQ01BQzoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19HQ006CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0ZCOgpA
QCAtNDAzLDExICs0NDUsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NNQUM6CiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfR0NNOgogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NGQjoKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAg
ICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDOgogICAgICAgICByZXR1cm4g
Y3JlYXRlSG1hY0tleVBhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpESDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlNIQV8xOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoK
ICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CkBAIC00MzcsNiAr
NDc5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NGQjoKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkhNQUM6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpESDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4oKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8x
OgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoKICAgICBjYXNl
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgiCisKKyNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCit1
c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgc2VxdWVu
Y2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgcmVzdWx0KQoreworICAgIHVu
c2lnbmVkIHNlcXVlbmNlTGVuZ3RoOworICAgIEpTT2JqZWN0KiBzZXF1ZW5jZSA9IHRvSlNTZXF1
ZW5jZShleGVjLCB2YWx1ZSwgc2VxdWVuY2VMZW5ndGgpOworICAgIGlmICghc2VxdWVuY2UpIHsK
KyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXF1ZW5jZUxlbmd0
aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgaXRlbSA9IHNlcXVlbmNlLT5nZXQoZXhlYywgaSk7
CisgICAgICAgIGlmIChBcnJheUJ1ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hh
cio+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgZWxz
ZSBpZiAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJW
aWV3KGl0ZW0pKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0
aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSksIGJ1ZmZlclZpZXctPmJ5
dGVMZW5ndGgoKSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0cyBjYW4g
YmUgcGFydCBvZiBDcnlwdG9PcGVyYXRpb25EYXRhIHNlcXVlbmNlIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSwgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgcmVzdWx0KQoreworICAgIGlmIChBcnJheUJ1
ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZlcih2YWx1ZSkpCisgICAgICAgIHJlc3VsdCA9IHN0
ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbHNlIGlmIChSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBidWZm
ZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsdWUpKQorICAgICAgICByZXN1bHQgPSBzdGQ6
Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSks
IGJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0
cyBjYW4gYmUgcGFzc2VkIGFzIENyeXB0b09wZXJhdGlvbkRhdGEiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNDcnlwdG9P
cGVyYXRpb25EYXRhX2gKKyNkZWZpbmUgSlNDcnlwdG9PcGVyYXRpb25EYXRhX2gKKworI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3Bh
Y2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTVmFsdWU7Cit9CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgY2hhciosIHNpemVfdD4gQ3J5
cHRvT3BlcmF0aW9uRGF0YTsKKworYm9vbCBzZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0aW9uRGF0YUZy
b21KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBWZWN0b3I8Q3J5cHRvT3Bl
cmF0aW9uRGF0YT4mKTsKK2Jvb2wgY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBDcnlwdG9PcGVyYXRpb25EYXRhJik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorI2Vu
ZGlmIC8vIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVByb21pc2UuaAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDEzIEBAIGlubGlu
ZSB2b2lkIFByb21pc2VXcmFwcGVyOjpyZWplY3QoY29uc3QKIH0KIAogdGVtcGxhdGU8PgoraW5s
aW5lIHZvaWQgUHJvbWlzZVdyYXBwZXI6OnJlamVjdChjb25zdCBzdGQ6Om51bGxwdHJfdCYpCit7
CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OworICAgIG1fcHJvbWlzZS0+cmVzb2x2ZXIoKS0+cmVqZWN0SWZOb3RSZXNvbHZlZChleGVjLCBK
U0M6OmpzTnVsbCgpKTsKK30KKwordGVtcGxhdGU8PgogaW5saW5lIHZvaWQgUHJvbWlzZVdyYXBw
ZXI6OmZ1bGZpbGw8U3RyaW5nPihjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3Bw
CShyZXZpc2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRs
ZUNyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlv
bkRhdGEuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yLmg+CiAKQEAgLTU1LDQyICs1Niw2IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtPiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBzZXF1ZW5j
ZU9mQ3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSwgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiByZXN1bHQpCi17Ci0gICAgdW5z
aWduZWQgc2VxdWVuY2VMZW5ndGg7Ci0gICAgSlNPYmplY3QqIHNlcXVlbmNlID0gdG9KU1NlcXVl
bmNlKGV4ZWMsIHZhbHVlLCBzZXF1ZW5jZUxlbmd0aCk7Ci0gICAgaWYgKCFzZXF1ZW5jZSkgewot
ICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlcXVlbmNlTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBpdGVtID0gc2VxdWVuY2UtPmdldChleGVjLCBpKTsK
LSAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0ZW0pKQot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFy
Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSkpOwotICAgICAgICBlbHNl
IGlmIChSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBidWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZp
ZXcoaXRlbSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0YXRp
Y19jYXN0PGNoYXIqPihidWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwgYnVmZmVyVmlldy0+Ynl0
ZUxlbmd0aCgpKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgIk9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVyVmlldyBvYmplY3RzIGNhbiBi
ZSBwYXJ0IG9mIENyeXB0b09wZXJhdGlvbkRhdGEgc2VxdWVuY2UiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIGJvb2wgY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgcmVzdWx0KQotewotICAgIGlmIChB
cnJheUJ1ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZlcih2YWx1ZSkpCi0gICAgICAgIHJlc3Vs
dCA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBlbHNlIGlmIChSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PiBidWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsdWUpKQotICAgICAgICByZXN1bHQg
PSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+YmFzZUFkZHJl
c3MoKSksIGJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBBcnJheUJ1ZmZlclZpZXcg
b2JqZWN0cyBjYW4gYmUgcGFydCBvZiBDcnlwdG9PcGVyYXRpb25EYXRhIHNlcXVlbmNlIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRp
YyBib29sIGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSwgQ3J5cHRvS2V5Rm9ybWF0JiByZXN1bHQpCiB7CiAgICAgU3RyaW5nIGtleUZvcm1h
dFN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKQEAgLTE0Niw2ICsx
MTEsOTggQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRQogICAgIHJl
dHVybiB0cnVlOwogfQogCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKKyAgICAgICAg
cmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0
aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYg
KCFhbGdvcml0aG0pIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlw
dChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGlmICghcGFyYW1ldGVycykgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBS
ZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSB0b0NyeXB0b0tleShleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKworICAgIGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkgeworICAg
ICAgICBtX2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJj
ZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJLZXkgdXNhZ2VzIGRvZXMgbm90IGluY2x1ZGUgJ2VuY3J5
cHQnIik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZlY3RvcjxDcnlw
dG9PcGVyYXRpb25EYXRhPiBkYXRhOworICAgIGlmICghc2VxdWVuY2VPZkNyeXB0b09wZXJhdGlv
bkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkp
IHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9t
aXNlOjpjcmVhdGVXaXRoUmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOworICAg
IGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRlKGdsb2JhbE9iamVj
dCgpLCBwcm9taXNlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGFsZ29yaXRo
bS0+ZW5jcnlwdCgqcGFyYW1ldGVycywgKmtleSwgZGF0YSwgc3RkOjptb3ZlKHByb21pc2VXcmFw
cGVyKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cHJvbWlzZTsKK30KKworSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJl
dHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGht
RnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICgh
YWxnb3JpdGhtKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQo
ZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgUmVm
UHRyPENyeXB0b0tleT4ga2V5ID0gdG9DcnlwdG9LZXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkpOworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
CisKKyAgICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlRGVjcnlwdCkpIHsKKyAgICAg
ICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2Us
IEVycm9yTWVzc2FnZUxldmVsLCAiS2V5IHVzYWdlcyBkb2VzIG5vdCBpbmNsdWRlICdkZWNyeXB0
JyIpOworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOwor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Q3J5cHRv
T3BlcmF0aW9uRGF0YT4gZGF0YTsKKyAgICBpZiAoIXNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRpb25E
YXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7
CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IEpTUHJvbWlz
ZTo6Y3JlYXRlV2l0aFJlc29sdmVyKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCgpKTsKKyAgICBh
dXRvIHByb21pc2VXcmFwcGVyID0gUHJvbWlzZVdyYXBwZXI6OmNyZWF0ZShnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhbGdvcml0aG0t
PmRlY3J5cHQoKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlV3JhcHBl
ciksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBy
b21pc2U7Cit9CisKIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0YXRlKiBleGVj
KQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKQpAQCAtMTgzLDcgKzI0MCw3
IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1N0YXRlKiAKICAgICBhdXRvIHBy
b21pc2VXcmFwcGVyID0gUHJvbWlzZVdyYXBwZXI6OmNyZWF0ZShnbG9iYWxPYmplY3QoKSwgcHJv
bWlzZSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhbGdvcml0aG0tPnNpZ24o
KnBhcmFtZXRlcnMsICprZXkuZ2V0KCksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlV3JhcHBlciks
IGVjKTsKKyAgICBhbGdvcml0aG0tPnNpZ24oKnBhcmFtZXRlcnMsICprZXksIGRhdGEsIHN0ZDo6
bW92ZShwcm9taXNlV3JhcHBlciksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobUFlc0NiY1Bh
cmFtcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29y
aXRobUFlc0NiY1BhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc19oCisjZGVmaW5lIENy
eXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc19oCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KKworI2lmIEVOQUJMRShT
VUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0FsZ29y
aXRobUFlc0NiY1BhcmFtcyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
IHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNVVNUIGJlIDE2
IGJ5dGVzLgorICAgIEZpeGVkQXJyYXk8Y2hhciwgMTY+IGl2OworfTsKKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
UGFyYW1zX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9Dcnlw
dG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCShyZXZpc2lvbiAxNTg0ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICsz
OSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENyeXB0b0FsZ29yaXRobURlc2Ny
aXB0aW9uQnVpbGRlcjsKIAorRU5VTV9DTEFTUyhDcnlwdG9LZXlDbGFzcykgeworICAgIEhNQUMs
CisgICAgQUVTCit9OworCiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxDcnlw
dG9LZXk+IHsKIHB1YmxpYzoKICAgICBDcnlwdG9LZXkoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciwgQ3J5cHRvS2V5VHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOwogICAg
IHZpcnR1YWwgfkNyeXB0b0tleSgpOwogCisgICAgdmlydHVhbCBDcnlwdG9LZXlDbGFzcyBrZXlD
bGFzcygpIGNvbnN0ID0gMDsKKwogICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CiAgICAgYm9vbCBl
eHRyYWN0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0cmFjdGFibGU7IH0KICAgICB2aXJ0dWFs
IHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlv
bkJ1aWxkZXImKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlB
RVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleUFFUy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKworI2lmIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
LmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDcnlwdG9LZXlBRVM6
OkNyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdl
KQorICAgIDogQ3J5cHRvS2V5KGFsZ29yaXRobSwgQ3J5cHRvS2V5VHlwZTo6U2VjcmV0LCBleHRy
YWN0YWJsZSwgdXNhZ2UpCisgICAgLCBtX2tleShrZXkpCit7CisgICAgQVNTRVJUKGFsZ29yaXRo
bSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ1RSCisgICAgICAgIHx8IGFsZ29y
aXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDCisgICAgICAgIHx8IGFs
Z29yaXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ01BQworICAgICAgICB8
fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0dDTQorICAgICAg
ICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NGQik7Cit9
CisKK0NyeXB0b0tleUFFUzo6fkNyeXB0b0tleUFFUygpCit7Cit9CisKK3ZvaWQgQ3J5cHRvS2V5
QUVTOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9u
QnVpbGRlciYgYnVpbGRlcikgY29uc3QKK3sKKyAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGht
RGVzY3JpcHRpb24oYnVpbGRlcik7CisgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNp
emUoKSAqIDgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU1VCVExFX0NSWVBUTykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXlBRVMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMg
LTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvS2V5QUVTX2gKKyNkZWZpbmUgQ3J5cHRv
S2V5QUVTX2gKKworI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIuaCIKKyNpbmNs
dWRlICJDcnlwdG9LZXkuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUo
U1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9LZXlB
RVMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDcnlwdG9LZXlBRVM+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29y
aXRobSwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlIHVzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9L
ZXlBRVMoYWxnb3JpdGhtLCBrZXksIGV4dHJhY3RhYmxlLCB1c2FnZSkpOworICAgIH0KKyAgICB2
aXJ0dWFsIH5DcnlwdG9LZXlBRVMoKTsKKworICAgIHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5
Q2xhc3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6QUVTOyB9CisK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0
aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBD
cnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPGNoYXI+
JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKKworICAgIFZlY3Rvcjxj
aGFyPiBtX2tleTsKK307CisKK2lubGluZSBjb25zdCBDcnlwdG9LZXlBRVMqIGFzQ3J5cHRvS2V5
QUVTKGNvbnN0IENyeXB0b0tleSYga2V5KQoreworICAgIGlmIChrZXkua2V5Q2xhc3MoKSAhPSBD
cnlwdG9LZXlDbGFzczo6QUVTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5QUVTKj4oJmtleSk7Cit9CisKK2lubGluZSBDcnlw
dG9LZXlBRVMqIGFzQ3J5cHRvS2V5QUVTKENyeXB0b0tleSYga2V5KQoreworICAgIGlmIChrZXku
a2V5Q2xhc3MoKSAhPSBDcnlwdG9LZXlDbGFzczo6QUVTKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5cHRvS2V5QUVTKj4oJmtleSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQor
CisKKyNlbmRpZiAvLyBDcnlwdG9LZXlBRVNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleUFFUy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaWRsCShyZXZpc2lvbiAx
NTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogICAgIE5vSW50ZXJmYWNlT2JqZWN0LAogICAgIE9w
ZXJhdGlvbnNOb3REZWxldGFibGUKIF0gaW50ZXJmYWNlIFN1YnRsZUNyeXB0byB7CisgICAgW0N1
c3RvbV0gUHJvbWlzZSBlbmNyeXB0KEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBLZXkg
a2V5LCBzZXF1ZW5jZTxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhKTsKKyAgICBbQ3VzdG9tXSBQ
cm9taXNlIGRlY3J5cHQoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEtleSBrZXksIHNl
cXVlbmNlPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGEpOwogICAgIFtDdXN0b21dIFByb21pc2Ug
c2lnbihBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgS2V5IGtleSwgc2VxdWVuY2U8Q3J5
cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CiAgICAgW0N1c3RvbV0gUHJvbWlzZSB2ZXJpZnkoQWxn
b3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEtleSBrZXksIENyeXB0b09wZXJhdGlvbkRhdGEg
c2lnbmF0dXJlLCBzZXF1ZW5jZTxDcnlwdG9PcGVyYXRpb25EYXRhPiBkYXRhKTsKICAgICBbQ3Vz
dG9tXSBQcm9taXNlIGRpZ2VzdChBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgc2VxdWVu
Y2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY29uc3QgQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6c19uYW1lID0gImFlcy1jYmMiOworCitDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDKCkKK3sKK30KKworQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6fkNy
eXB0b0FsZ29yaXRobUFFU19DQkMoKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtPiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpjcmVhdGUoKQoreworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPihuZXcgQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qyk7Cit9CisKK0NyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKK30KKwor
dm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYsIENyeXB0b0tleUZvcm1hdCBmb3JtYXQsIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmIGRhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIGlmIChmb3JtYXQgIT0gQ3J5cHRvS2V5Rm9ybWF0OjpSYXcpIHsKKyAgICAgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBWZWN0
b3I8Y2hhcj4ga2V5RGF0YTsKKyAgICBrZXlEYXRhLmFwcGVuZChkYXRhLmZpcnN0LCBkYXRhLnNl
Y29uZCk7CisgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpj
cmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQywga2V5RGF0YSwgZXh0cmFj
dGFibGUsIHVzYWdlKTsKKyAgICBwcm9taXNlLT5mdWxmaWxsKHJlc3VsdC5yZWxlYXNlKCkpOwor
fQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmV4cG9ydEtleShjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZXkmLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Cit9
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCitu
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19D
QkMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19DQkMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDX2gKKyNkZWZpbmUgQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQ19oCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG0uaCIKKwor
I2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENyeXB0b0FsZ29yaXRobUFFU19DQkMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19uYW1lOworICAgIHN0YXRp
YyBjb25zdCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIHNfaWRlbnRpZmllciA9IENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkFFU19DQkM7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIGVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0
b0tleSYsIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYsIHN0ZDo6dW5pcXVlX3B0
cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5
cHRvS2V5JiwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+Jiwgc3RkOjp1bmlxdWVf
cHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1wb3J0
S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlwdG9LZXlGb3JtYXQsIGNv
bnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2Fn
ZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBleHBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIENyeXB0b0tleUZvcm1hdCwgY29uc3QgQ3J5cHRvS2V5Jiwgc3RkOjp1bmlxdWVf
cHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworCitwcml2YXRl
OgorICAgIENyeXB0b0FsZ29yaXRobUFFU19DQkMoKTsKKyAgICB2aXJ0dWFsIH5DcnlwdG9BbGdv
cml0aG1BRVNfQ0JDKCk7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBU
TykKKworI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRobUFFU19DQkNfaAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgJKHJldmlzaW9uIDE1ODQ4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNiBAQAogI2RlZmluZSBDcnlwdG9LZXlITUFDX2gKIAogI2luY2x1ZGUgIkNyeXB0
b0tleS5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
ICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKQEAgLTQyLDYgKzQxLDggQEAgcHVibGljOgogICAg
IH0KICAgICB2aXJ0dWFsIH5DcnlwdG9LZXlITUFDKCk7CiAKKyAgICB2aXJ0dWFsIENyeXB0b0tl
eUNsYXNzIGtleUNsYXNzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6
OkhNQUM7IH0KKwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9rZXk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIGNvbnN0IE9WRVJSSURFOwpAQCAtNTMs
NiArNTQsMjAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7CiB9OwogCitpbmxp
bmUgY29uc3QgQ3J5cHRvS2V5SE1BQyogYXNDcnlwdG9LZXlITUFDKGNvbnN0IENyeXB0b0tleSYg
a2V5KQoreworICAgIGlmIChrZXkua2V5Q2xhc3MoKSAhPSBDcnlwdG9LZXlDbGFzczo6SE1BQykK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENy
eXB0b0tleUhNQUMqPigma2V5KTsKK30KKworaW5saW5lIENyeXB0b0tleUhNQUMqIGFzQ3J5cHRv
S2V5SE1BQyhDcnlwdG9LZXkmIGtleSkKK3sKKyAgICBpZiAoa2V5LmtleUNsYXNzKCkgIT0gQ3J5
cHRvS2V5Q2xhc3M6OkhNQUMpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDcnlwdG9LZXlITUFDKj4oJmtleSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1BRVNfQ0JDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKyNpbmNs
dWRlIDxDb21tb25DcnlwdG8vQ29tbW9uQ3J5cHRvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIHZvaWQgdHJhbnNmb3JtQUVTX0NCQyhDQ09wZXJhdGlvbiBvcGVyYXRpb24sIGNv
bnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRv
S2V5QUVTJiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3Rk
Ojp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlKQoreworICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKHBhcmFtZXRlcnMuaXYpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCwgIkluaXRpYWxp
emF0aW9uIHZlY3RvciBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgYWxnb3JpdGhtIGJsb2NrIHNp
emUiKTsKKworICAgIHNpemVfdCBrZXlMZW5ndGhJbkJ5dGVzID0ga2V5LmtleSgpLnNpemUoKTsK
KyAgICBpZiAoa2V5TGVuZ3RoSW5CeXRlcyAhPSAxNiAmJiBrZXlMZW5ndGhJbkJ5dGVzICE9IDI0
ICYmIGtleUxlbmd0aEluQnl0ZXMgIT0gMzIpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51
bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0NDcnlwdG9yUmVmIGNyeXB0
b3I7CisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKKyAgICBDQ0FsZ29yaXRobSBhZXNBbGdvcml0aG0gPSBrQ0NBbGdvcml0aG1BRVM7
CisjZWxzZQorICAgIENDQWxnb3JpdGhtIGFlc0FsZ29yaXRobSA9IGtDQ0FsZ29yaXRobUFFUzEy
ODsKKyNlbmRpZgorICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBDQ0NyeXB0b3JDcmVhdGUo
b3BlcmF0aW9uLCBhZXNBbGdvcml0aG0sIGtDQ09wdGlvblBLQ1M3UGFkZGluZywga2V5LmtleSgp
LmRhdGEoKSwga2V5TGVuZ3RoSW5CeXRlcywgcGFyYW1ldGVycy5pdi5kYXRhKCksICZjcnlwdG9y
KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBpbnB1dFNpemUgPSAwOworICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZGF0YS5zaXplKCk7IGkgPCBzaXplOyArK2kpCisg
ICAgICAgIGlucHV0U2l6ZSArPSBkYXRhW2ldLnNlY29uZDsKKworICAgIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiByZXN1bHQoQ0NDcnlwdG9yR2V0T3V0cHV0TGVuZ3RoKGNyeXB0b3IsIGlucHV0U2l6
ZSwgdHJ1ZSkpOworCisgICAgdW5zaWduZWQgY2hhciogcCA9IHJlc3VsdC5kYXRhKCk7CisgICAg
c2l6ZV90IHJlc3VsdENodW5rU2l6ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGRh
dGEuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIHN0YXR1cyA9IENDQ3J5cHRvclVw
ZGF0ZShjcnlwdG9yLCBkYXRhW2ldLmZpcnN0LCBkYXRhW2ldLnNlY29uZCwgcCwgcmVzdWx0LmVu
ZCgpIC0gcCwgJnJlc3VsdENodW5rU2l6ZSk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAg
ICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBwICs9IHJlc3VsdENodW5rU2l6ZTsKKyAgICB9CisgICAgc3RhdHVz
ID0gQ0NDcnlwdG9yRmluYWwoY3J5cHRvciwgcCwgcmVzdWx0LmVuZCgpIC0gcCwgJnJlc3VsdENo
dW5rU2l6ZSk7CisgICAgcCArPSByZXN1bHRDaHVua1NpemU7CisgICAgaWYgKHN0YXR1cykgewor
ICAgICAgICBwcm9taXNlLT5yZWplY3QobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlQocCA8PSByZXN1bHQuZW5kKCkpOworICAgIHJlc3VsdC5zaHJpbmsocCAt
IHJlc3VsdC5iZWdpbigpKTsKKworICAgIENDQ3J5cHRvclJlbGVhc2UoY3J5cHRvcik7CisKKyAg
ICBwcm9taXNlLT5mdWxmaWxsKHJlc3VsdCk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6ZW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+
JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgYWVz
Q0JDUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1Bh
cmFtcyY+KHBhcmFtZXRlcnMpOworICAgIGNvbnN0IENyeXB0b0tleUFFUyogYWVzS2V5ID0gYXND
cnlwdG9LZXlBRVMoa2V5KTsKKworICAgIGlmICghYWVzS2V5KSB7CisgICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0cmFuc2Zvcm1B
RVNfQ0JDKGtDQ0VuY3J5cHQsIGFlc0NCQ1BhcmFtZXRlcnMsICphZXNLZXksIGRhdGEsIHN0ZDo6
bW92ZShwcm9taXNlKSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZGVjcnlw
dChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlw
dG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiBkYXRhLCBzdGQ6
OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgYWVzQ0JDUGFyYW1ldGVy
cyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyY+KHBhcmFt
ZXRlcnMpOworICAgIGNvbnN0IENyeXB0b0tleUFFUyogYWVzS2V5ID0gYXNDcnlwdG9LZXlBRVMo
a2V5KTsKKworICAgIGlmICghYWVzS2V5KSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0Rl
Y3J5cHQsIGFlc0NCQ1BhcmFtZXRlcnMsICphZXNLZXksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNl
KSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Z2VuZXJhdGVLZXkoY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJvb2wgLypleHRyYWN0YWJsZSovLCBDcnlwdG9L
ZXlVc2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICBlYyA9IE5PVF9TVVBQT1JU
RURfRVJSOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
U1VCVExFX0NSWVBUTykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1I
TUFDTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0
b0FsZ29yaXRobUhNQUNNYWMuY3BwCShyZXZpc2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw3ICs5NSw3IEBAIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQgY2hhcj4gY2FsY3VsYXRlU2kK
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPENy
eXB0b09wZXJhdGlvbkRhdGE+JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+
IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNvbnN0IENyeXB0b0FsZ29yaXRo
bUhtYWNQYXJhbXMmIGhtYWNQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxn
b3JpdGhtSG1hY1BhcmFtcyY+KHBhcmFtZXRlcnMpOwotICAgIGNvbnN0IENyeXB0b0tleUhNQUMm
IGhtYWNLZXkgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlITUFDJj4oa2V5KTsKKyAgICBj
b25zdCBDcnlwdG9LZXlITUFDKiBobWFjS2V5ID0gYXNDcnlwdG9LZXlITUFDKGtleSk7CiAKICAg
ICBDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtOwogICAgIGlmICghZ2V0Q29tbW9uQ3J5cHRvQWxn
b3JpdGhtKGhtYWNQYXJhbWV0ZXJzLmhhc2gsIGFsZ29yaXRobSkpIHsKQEAgLTEwMyw3ICsxMDMs
MTIgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9IGNh
bGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXkua2V5KCksIGRhdGEpOworICAgIGlm
ICghaG1hY0tleSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9IGNh
bGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXktPmtleSgpLCBkYXRhKTsKIAogICAg
IHByb21pc2UtPmZ1bGZpbGwoc2lnbmF0dXJlKTsKIH0KQEAgLTExMSw3ICsxMTYsNyBAQCB2b2lk
IENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5CiB2b2lkIENyeXB0b0FsZ29yaXRo
bUhNQUM6OnZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZXhwZWN0
ZWRTaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3Rk
Ojp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9
IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJz
KTsKLSAgICBjb25zdCBDcnlwdG9LZXlITUFDJiBobWFjS2V5ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Q3J5cHRvS2V5SE1BQyY+KGtleSk7CisgICAgY29uc3QgQ3J5cHRvS2V5SE1BQyogaG1hY0tleSA9
IGFzQ3J5cHRvS2V5SE1BQyhrZXkpOwogCiAgICAgQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobTsK
ICAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobShobWFjUGFyYW1ldGVycy5oYXNoLCBh
bGdvcml0aG0pKSB7CkBAIC0xMTksNyArMTI0LDEyIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1B
Qzo6dmVyaWZ5KGNvbnN0IEMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBo
bWFjS2V5LmtleSgpLCBkYXRhKTsKKyAgICBpZiAoIWhtYWNLZXkpIHsKKyAgICAgICAgZWMgPSBO
T1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBo
bWFjS2V5LT5rZXkoKSwgZGF0YSk7CiAKICAgICBib29sIHJlc3VsdCA9IHNpZ25hdHVyZS5zaXpl
KCkgPT0gZXhwZWN0ZWRTaWduYXR1cmUuc2Vjb25kICYmICFtZW1jbXAoc2lnbmF0dXJlLmRhdGEo
KSwgZXhwZWN0ZWRTaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zaXplKCkpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5TWFjLmNwcAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCisjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhNQUMuaCIK
ICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1TSEExLmgiCiAKQEAgLTM1LDYgKzM2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpwbGF0Zm9y
bVJlZ2lzdGVyQWxnb3JpdGhtcygpCiB7CisgICAgcmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpzX2lkZW50aWZp
ZXIsIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmNyZWF0ZSk7CiAgICAgcmVnaXN0ZXJBbGdvcml0
aG0oQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzX2lk
ZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobUhNQUM6OmNyZWF0ZSk7CiAgICAgcmVnaXN0ZXJBbGdv
cml0aG0oQ3J5cHRvQWxnb3JpdGhtU0hBMTo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1TSEExOjpz
X2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobVNIQTE6OmNyZWF0ZSk7CiB9CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNTg0ODQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw0NCBAQAorMjAxMy0xMS0wMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgV2ViQ3J5cHRvIEFFUy1DQkMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY0NworCisgICAgICAgIFJldmll
d2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KKworICAgICAgICBQYXJ0IG9mIGFlcy1jYmMtZW5jcnlw
dC1kZWNyeXB0Lmh0bWwgdGVzdCB3YXMgdGFrZW4gZnJvbSBCbGluay4KKworICAgICAgICAqIGNy
eXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQu
aHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0
LWRlY3J5cHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Fl
cy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8v
c3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmct
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5j
cnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8v
c3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNy
eXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtl
eS1jbGFzcy5odG1sOiBBZGRlZC4KKworICAgICAgICAqIGNyeXB0by9zdWJ0bGUvaG1hYy1zaWdu
LXZlcmlmeS1leHBlY3RlZC50eHQ6CisgICAgICAgICogY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24t
dmVyaWZ5Lmh0bWw6CisgICAgICAgIENvcnJlY3RlZCBhIGRlc2NyaXB0aW9uLgorCisgICAgICAg
ICogY3J5cHRvL3N1YnRsZS9yZXNvdXJjZXMvY29tbW9uLmpzOiAoaGV4VG9BcnJheUJ1ZmZlcik6
IEFkZGVkIGEgaGVscGVyLgorCisyMDEzLTEwLTMwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04ocjE1ODMzMyk6IGh0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QvcmVzcG9uc2UtZW5jb2RpbmcuaHRtbCBhbmQgeG1saHR0cHJlcXVlc3Qtb3Zl
cnJpZGVtaW1ldHlwZS1jb250ZW50LXR5cGUtaGVhZGVyLmh0bWwgYXJlIGZhaWxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzU0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0
aW9uczogVW5za2lwIHRlc3RzIHRoYXQgdXNlZCB0byBiZSBhZmZlY3RlZCBieSByZXNwb25zZS1l
bXB0eS1hcnJheWJ1ZmZlci5odG1sCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3Jlc3BvbnNlLWVtcHR5LWFycmF5YnVmZmVyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc3BvbnNlLWVtcHR5LWFycmF5YnVmZmVyLmh0bWw6
CisgICAgICAgIEZpeCBhIHN0dXBpZCB0eXBvLiBUaGlzIHRlc3QgYWN0dWFsbHkgZnVsbHkgcGFz
c2VzLgorCiAyMDEzLTExLTAxICBKYWVodW4gTGltICA8bGphZWh1bi5saW1Ac2Ftc3VuZy5jb20+
CiAKICAgICAgICAgVXBkYXRlIGxheW91dCB0ZXN0IHJlc3VsdHMgYWZ0ZXIgQ1NTIGNhbGMoKSBz
aW1wbGlmaWNhdGlvbgpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTE5
Mi1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5j
cnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBA
CitUZXN0IEFFUy1DQkMgZW5jcnlwdCBhbmQgZGVjcnlwdCBmdW5jdGlvbnMgd2l0aCBhIDI1NiBi
aXQga2V5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1wb3J0aW5nIGEgcmF3
IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0
JworUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUg
aXMgJ2Flcy1jYmMnCitQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDE5MgorUEFTUyBrZXku
dXNhZ2VzIGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0J10KK1VzaW5nIHRoZSBrZXkgdG8gZW5jcnlw
dCBwbGFpbnRleHQuLi4KK1BBU1MgYnl0ZUFycmF5VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXko
ZW5jcnlwdGlvblJlc3VsdCkpIGlzICdbNGYgMDIgMWQgYjIgNDMgYmMgNjMgM2QgNzEgNzggMTgg
M2EgOWYgYTAgNzEgZTggYjQgZDkgYWQgYTkgYWQgN2QgZWQgZjQgZTUgZTcgMzggNzYgM2YgNjkg
MTQgNWEgNTcgMWIgMjQgMjAgMTIgZmIgN2EgZTAgN2YgYTkgYmEgYWMgM2QgZjEgMDIgZTAgMDgg
YjAgZTIgNzkgODggNTkgODggODEgZDkgMjAgYTkgZTYgNGYgNTYgMTUgY2QgNjEgMmMgY2QgNzkg
MjIgNGIgMzUgMDkgMzUgZDQgNWQgZDYgYTkgOGYgODEgNzZdJworRGVjcnlwdGluZyBpdCBiYWNr
Li4uCitQQVNTIG5ldyBVaW50OEFycmF5KGRlY3J5cHRpb25SZXN1bHQpIGlzIHBsYWludGV4dAor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5j
cnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBl
CiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9j
cnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5
cHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEFFUy1DQkMgZW5j
cnlwdCBhbmQgZGVjcnlwdCBmdW5jdGlvbnMgd2l0aCBhIDI1NiBiaXQga2V5LiIpOworCitqc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKCF3aW5kb3cuc3VidGxlKQorICAgIHdpbmRvdy5jcnlw
dG8uc3VidGxlID0gd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7CisKK3ZhciBrZXlEYXRhID0g
aGV4VG9BcnJheUJ1ZmZlcigiOGU3M2IwZjdkYTBlNjQ1MmM4MTBmMzJiODA5MDc5ZTU2MmY4ZWFk
MjUyMmM2YjdiIik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3
MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZi
YzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVh
ZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJi
NDE3YmU2NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1ZygiSW1wb3J0
aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLiIpOworY3J5cHRvLnN1YnRs
ZS5pbXBvcnRLZXkoInJhdyIsIGtleURhdGEsICJhZXMtY2JjIiwgZXh0cmFjdGFibGUsIFsiZW5j
cnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2V5ID0gcmVz
dWx0OworICAgIHNob3VsZEJlKCJrZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3VsZEJl
KCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGht
Lm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3Ro
IiwgIjE5MiIpOworICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgIlsnZW5jcnlwdCcsICdkZWNy
eXB0J10iKTsKKworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0
Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogImFlcy1jYmMi
LCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7
CisgICAgZW5jcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgiYnl0ZUFycmF5
VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvblJlc3VsdCkpIiwgIidbNGYgMDIg
MWQgYjIgNDMgYmMgNjMgM2QgNzEgNzggMTggM2EgOWYgYTAgNzEgZTggYjQgZDkgYWQgYTkgYWQg
N2QgZWQgZjQgZTUgZTcgMzggNzYgM2YgNjkgMTQgNWEgNTcgMWIgMjQgMjAgMTIgZmIgN2EgZTAg
N2YgYTkgYmEgYWMgM2QgZjEgMDIgZTAgMDggYjAgZTIgNzkgODggNTkgODggODEgZDkgMjAgYTkg
ZTYgNGYgNTYgMTUgY2QgNjEgMmMgY2QgNzkgMjIgNGIgMzUgMDkgMzUgZDQgNWQgZDYgYTkgOGYg
ODEgNzZdJyIpOworCisgICAgZGVidWcoIkRlY3J5cHRpbmcgaXQgYmFjay4uLiIpOworICAgIHJl
dHVybiBjcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwga2V5
LCBbcmVzdWx0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGRlY3J5cHRpb25S
ZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoIm5ldyBVaW50OEFycmF5KGRlY3J5cHRpb25S
ZXN1bHQpIiwgInBsYWludGV4dCIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2Ny
aXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC5odG1sCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9odG1sClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
YWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1j
YmMtMjU2LWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOSBAQAorVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIHdp
dGggYSAyNTYgYml0IGtleS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0ltcG9y
dGluZyBhIHJhdyBBRVMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4KK1BBU1Mga2V5LnR5cGUg
aXMgJ3NlY3JldCcKK1BBU1Mga2V5LmV4dHJhY3RhYmxlIGlzIHRydWUKK1BBU1Mga2V5LmFsZ29y
aXRobS5uYW1lIGlzICdhZXMtY2JjJworUEFTUyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBpcyAyNTYK
K1BBU1Mga2V5LnVzYWdlcyBpcyBbJ2VuY3J5cHQnLCAnZGVjcnlwdCddCitVc2luZyB0aGUga2V5
IHRvIGVuY3J5cHQgcGxhaW50ZXh0Li4uCitQQVNTIGJ5dGVBcnJheVRvSGV4U3RyaW5nKG5ldyBV
aW50OEFycmF5KGVuY3J5cHRpb25SZXN1bHQpKSBpcyAnW2Y1IDhjIDRjIDA0IGQ2IGU1IGYxIGJh
IDc3IDllIGFiIGZiIDVmIDdiIGZiIGQ2IDljIGZjIDRlIDk2IDdlIGRiIDgwIDhkIDY3IDlmIDc3
IDdiIGM2IDcwIDJjIDdkIDM5IGYyIDMzIDY5IGE5IGQ5IGJhIGNmIGE1IDMwIGUyIDYzIDA0IDIz
IDE0IDYxIGIyIGViIDA1IGUyIGMzIDliIGU5IGZjIGRhIDZjIDE5IDA3IDhjIDZhIDlkIDFiIDNm
IDQ2IDE3IDk2IGQ2IGIwIGQ2IGIyIGUwIGMyIGE3IDJiIDRkIDgwIGU2IDQ0XScKK0RlY3J5cHRp
bmcgaXQgYmFjay4uLgorUEFTUyBuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSBpcyBw
bGFpbnRleHQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1j
YmMtMjU2LWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
Om1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5j
cnlwdC1kZWNyeXB0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBB
RVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0IGtleS4i
KTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3
aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIg
a2V5RGF0YSA9IGhleFRvQXJyYXlCdWZmZXIoIjYwM2RlYjEwMTVjYTcxYmUyYjczYWVmMDg1N2Q3
NzgxMWYzNTJjMDczYjYxMDhkNzJkOTgxMGEzMDkxNGRmZjQiKTsKK3ZhciBpdiA9IGhleFRvQXJy
YXlCdWZmZXIoIjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIik7Cit2YXIgcGxhaW50
ZXh0ID0gaGV4VG9BcnJheUJ1ZmZlcigiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmFh
ZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFlNWZiYzExOTFh
MGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2FkMmI0MTdiZTY2YzM3MTAiKTsKK3ZhciBleHRyYWN0YWJs
ZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBs
aXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwga2V5RGF0YSwgImFl
cy1jYmMiLCBleHRyYWN0YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSkudGhlbihmdW5jdGlv
bihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImtleS50eXBlIiwg
IidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7Cisg
ICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWNiYyciKTsKKyAgICBzaG91
bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiMjU2Iik7CisgICAgc2hvdWxkQmUoImtleS51
c2FnZXMiLCAiWydlbmNyeXB0JywgJ2RlY3J5cHQnXSIpOworCisgICAgZGVidWcoIlVzaW5nIHRo
ZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRs
ZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pOwor
fSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBlbmNyeXB0aW9uUmVzdWx0ID0gcmVzdWx0
OworICAgIHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhBcnJheShlbmNy
eXB0aW9uUmVzdWx0KSkiLCAiJ1tmNSA4YyA0YyAwNCBkNiBlNSBmMSBiYSA3NyA5ZSBhYiBmYiA1
ZiA3YiBmYiBkNiA5YyBmYyA0ZSA5NiA3ZSBkYiA4MCA4ZCA2NyA5ZiA3NyA3YiBjNiA3MCAyYyA3
ZCAzOSBmMiAzMyA2OSBhOSBkOSBiYSBjZiBhNSAzMCBlMiA2MyAwNCAyMyAxNCA2MSBiMiBlYiAw
NSBlMiBjMyA5YiBlOSBmYyBkYSA2YyAxOSAwNyA4YyA2YSA5ZCAxYiAzZiA0NiAxNyA5NiBkNiBi
MCBkNiBiMiBlMCBjMiBhNyAyYiA0ZCA4MCBlNiA0NF0nIik7CisKKyAgICBkZWJ1ZygiRGVjcnlw
dGluZyBpdCBiYWNrLi4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFt
ZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtyZXN1bHRdKTsKK30pLnRoZW4oZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAgZGVjcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgi
bmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkiLCAicGxhaW50ZXh0Iik7CisKKyAgICBm
aW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5j
cnlwdC1kZWNyeXB0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCww
ICsxICMjCit0ZXh0L2h0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
TGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVu
Y3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9j
cnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACitUZXN0IEFFUy1DQkMgZW5jcnlwdCBhbmQgZGVjcnlw
dCBmdW5jdGlvbnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitJbXBvcnRpbmcg
YSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uCitQQVNTIGtleS50eXBlIGlzICdz
ZWNyZXQnCitQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCitQQVNTIGtleS5hbGdvcml0aG0u
bmFtZSBpcyAnYWVzLWNiYycKK1BBU1Mga2V5LmFsZ29yaXRobS5sZW5ndGggaXMgMTI4CitQQVNT
IGtleS51c2FnZXMgaXMgWydlbmNyeXB0JywgJ2RlY3J5cHQnXQorVXNpbmcgdGhlIGtleSB0byBl
bmNyeXB0IHBsYWludGV4dC4uLgorUEFTUyBieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhB
cnJheShlbmNyeXB0aW9uUmVzdWx0KSkgaXMgJ1s3NiA0OSBhYiBhYyA4MSAxOSBiMiA0NiBjZSBl
OSA4ZSA5YiAxMiBlOSAxOSA3ZCA1MCA4NiBjYiA5YiA1MCA3MiAxOSBlZSA5NSBkYiAxMSAzYSA5
MSA3NiA3OCBiMiA3MyBiZSBkNiBiOCBlMyBjMSA3NCAzYiA3MSAxNiBlNiA5ZSAyMiAyMiA5NSAx
NiAzZiBmMSBjYSBhMSA2OCAxZiBhYyAwOSAxMiAwZSBjYSAzMCA3NSA4NiBlMSBhNyA4YyBiOCAy
OCAwNyAyMyAwZSAxMyAyMSBkMyBmYSBlMCAwZCAxOCBjYyAyMCAxMl0nCitEZWNyeXB0aW5nIGl0
IGJhY2suLi4KK1BBU1MgbmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkgaXMgcGxhaW50
ZXh0CitUZXN0aW5nIGluaXRpYWxpemF0aW9uIHZlY3RvciBiaW5kaW5ncy4uLgorUEFTUyBjcnlw
dG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IG51bGx9LCBrZXksIFtwbGFp
bnRleHRdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBPbmx5IEFycmF5QnVmZmVyIGFuZCBB
cnJheUJ1ZmZlclZpZXcgb2JqZWN0cyBjYW4gYmUgcGFzc2VkIGFzIENyeXB0b09wZXJhdGlvbkRh
dGEuCitQQVNTIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogJ0FFUy1DQkMnfSwga2V5LCBb
cGxhaW50ZXh0XSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT25seSBBcnJheUJ1ZmZlciBh
bmQgQXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVyYXRp
b25EYXRhLgorUEFTUyBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6
IDN9LCBrZXksIFtwbGFpbnRleHRdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBPbmx5IEFy
cmF5QnVmZmVyIGFuZCBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0cyBjYW4gYmUgcGFzc2VkIGFzIENy
eXB0b09wZXJhdGlvbkRhdGEuCitQQVNTIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogJ0FF
Uy1DQkMnLCBpdjogbmV3IFVpbnQ4QXJyYXkoWzBdKX0sIGtleSwgW3BsYWludGV4dF0pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogQUVTLUNCQyBpbml0aWFsaXphdGlvbiBkYXRhIG11c3QgYmUgMTYg
Ynl0ZXMuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2Jj
LWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUt
dHlwZQojIyAtMCwwICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
YWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0
LXdpdGgtcGFkZGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9j
cnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorVGVzdCBBRVMtQ0JDIGVuY3J5
cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIG9uIGEgcGxhaW50ZXh0IHRoYXQgaXMgbm90IGEgbXVs
dGlwbGUgb2YgYmxvY2sgc2l6ZSBpbiBsZW5ndGguCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uCitQ
QVNTIGtleS50eXBlIGlzICdzZWNyZXQnCitQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCitQ
QVNTIGtleS5hbGdvcml0aG0ubmFtZSBpcyAnYWVzLWNiYycKK1BBU1Mga2V5LmFsZ29yaXRobS5s
ZW5ndGggaXMgMTI4CitQQVNTIGtleS51c2FnZXMgaXMgWydlbmNyeXB0JywgJ2RlY3J5cHQnXQor
VXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4uLgorICAgID0gWzYzIDAxIDk5IGM1
IGYyIDAyIGNjIDcxIDY3IGJiIDg0IGM2IGM3IDJiIDM0IDlkXQorRGVjcnlwdGluZyBpdCBiYWNr
Li4uCitQQVNTIG5ldyBVaW50OEFycmF5KGRlY3J5cHRpb25SZXN1bHQpIGlzIHBsYWludGV4dAor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0
LWRlY3J5cHQtd2l0aC1wYWRkaW5nLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdp
dGgtcGFkZGluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRs
ZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEFFUy1DQkMgZW5jcnlwdCBhbmQgZGVjcnlwdCBmdW5j
dGlvbnMgb24gYSBwbGFpbnRleHQgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZiBibG9jayBzaXpl
IGluIGxlbmd0aC4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1
YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3Vi
dGxlOworCit2YXIga2V5RGF0YSA9IGhleFRvQXJyYXlCdWZmZXIoIjJiN2UxNTE2MjhhZWQyYTZh
YmY3MTU4ODA5Y2Y0ZjNjIik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0
MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGFzY2lpVG9BcnJheUJ1
ZmZlcigidGVzdCIpOwordmFyIGV4dHJhY3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGlu
ZyBhIHJhdyBBRVMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4iKTsKK2NyeXB0by5zdWJ0bGUu
aW1wb3J0S2V5KCJyYXciLCBrZXlEYXRhLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBbImVuY3J5
cHQiLCAiZGVjcnlwdCJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3Vs
dDsKKyAgICBzaG91bGRCZSgia2V5LnR5cGUiLCAiJ3NlY3JldCciKTsKKyAgICBzaG91bGRCZSgi
a2V5LmV4dHJhY3RhYmxlIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5u
YW1lIiwgIidhZXMtY2JjJyIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIs
ICIxMjgiKTsKKyAgICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICJbJ2VuY3J5cHQnLCAnZGVjcnlw
dCddIik7CisKKyAgICBkZWJ1ZygiVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4u
LiIpOworICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwg
aXY6IGl2fSwga2V5LCBbcGxhaW50ZXh0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgIHByaW50QWNjZXB0ZWRSZXN1bHQocmVzdWx0KTsKKworICAgIGRlYnVnKCJEZWNyeXB0aW5n
IGl0IGJhY2suLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5kZWNyeXB0KHtuYW1lOiAi
YWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3Jlc3VsdF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1
bHQpIHsKKyAgICBkZWNyeXB0aW9uUmVzdWx0ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJuZXcg
VWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSIsICJwbGFpbnRleHQiKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5
cHQtd2l0aC1wYWRkaW5nLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAt
MCwwICsxICMjCit0ZXh0L2h0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0
LWRlY3J5cHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
YWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0
aW9uKCJUZXN0IEFFUy1DQkMgZW5jcnlwdCBhbmQgZGVjcnlwdCBmdW5jdGlvbnMuIik7CisKK2pz
VGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAgd2luZG93LmNy
eXB0by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFyIGtleURhdGEg
PSBoZXhUb0FycmF5QnVmZmVyKCIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyIpOwor
dmFyIGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBl
MGYiKTsKK3ZhciBwbGFpbnRleHQgPSBoZXhUb0FycmF5QnVmZmVyKCI2YmMxYmVlMjJlNDA5Zjk2
ZTkzZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxMzBjODFjNDZh
MzVjZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCIp
OwordmFyIGV4dHJhY3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGluZyBhIHJhdyBBRVMg
a2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4iKTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJy
YXciLCBrZXlEYXRhLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBbImVuY3J5cHQiLCAiZGVjcnlw
dCJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3VsdDsKKyAgICBzaG91
bGRCZSgia2V5LnR5cGUiLCAiJ3NlY3JldCciKTsKKyAgICBzaG91bGRCZSgia2V5LmV4dHJhY3Rh
YmxlIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwgIidhZXMt
Y2JjJyIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICIxMjgiKTsKKyAg
ICBzaG91bGRCZSgia2V5LnVzYWdlcyIsICJbJ2VuY3J5cHQnLCAnZGVjcnlwdCddIik7CisKKyAg
ICBkZWJ1ZygiVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4uLiIpOworICAgIHJl
dHVybiBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwga2V5
LCBbcGxhaW50ZXh0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGVuY3J5cHRp
b25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5nKG5l
dyBVaW50OEFycmF5KGVuY3J5cHRpb25SZXN1bHQpKSIsICInWzc2IDQ5IGFiIGFjIDgxIDE5IGIy
IDQ2IGNlIGU5IDhlIDliIDEyIGU5IDE5IDdkIDUwIDg2IGNiIDliIDUwIDcyIDE5IGVlIDk1IGRi
IDExIDNhIDkxIDc2IDc4IGIyIDczIGJlIGQ2IGI4IGUzIGMxIDc0IDNiIDcxIDE2IGU2IDllIDIy
IDIyIDk1IDE2IDNmIGYxIGNhIGExIDY4IDFmIGFjIDA5IDEyIDBlIGNhIDMwIDc1IDg2IGUxIGE3
IDhjIGI4IDI4IDA3IDIzIDBlIDEzIDIxIGQzIGZhIGUwIDBkIDE4IGNjIDIwIDEyXSciKTsKKwor
ICAgIGRlYnVnKCJEZWNyeXB0aW5nIGl0IGJhY2suLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1
YnRsZS5kZWNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3Jlc3VsdF0pOwor
fSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBkZWNyeXB0aW9uUmVzdWx0ID0gcmVzdWx0
OworICAgIHNob3VsZEJlKCJuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSIsICJwbGFp
bnRleHQiKTsKKworICAgIGRlYnVnKCJUZXN0aW5nIGluaXRpYWxpemF0aW9uIHZlY3RvciBiaW5k
aW5ncy4uLiIpOworICAgIHNob3VsZFRocm93KCJjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6
ICdBRVMtQ0JDJywgaXY6IG51bGx9LCBrZXksIFtwbGFpbnRleHRdKSIpOworICAgIHNob3VsZFRo
cm93KCJjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJ30sIGtleSwgW3BsYWlu
dGV4dF0pIik7CisgICAgc2hvdWxkVGhyb3coImNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTog
J0FFUy1DQkMnLCBpdjogM30sIGtleSwgW3BsYWludGV4dF0pIik7CisgICAgc2hvdWxkVGhyb3co
ImNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogJ0FFUy1DQkMnLCBpdjogbmV3IFVpbnQ4QXJy
YXkoWzBdKX0sIGtleSwgW3BsYWludGV4dF0pIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30p
OworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQuaHRtbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52
YWxpZC1sZW5ndGgtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDM4OiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBpZGVudGlm
aWVyICdmaW5pc2hKU1Rlc3QnLiBFeHBlY3RlZCAnKScgdG8gZW5kIGEgYXJndW1lbnQgbGlzdC4K
K0ZBSUwgc3VjY2Vzc2Z1bGx5UGFyc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4p
LiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCisKK1RFU1QgQ09NUExFVEUKKwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWlu
dmFsaWQtbGVuZ3RoLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBl
CiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLWludmFsaWQtbGVuZ3RoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRv
L3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3RoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGguaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGFuIHVuc3VwcG9ydGVkIEFFUyBrZXkgbGVu
Z3RoLiIpOworCitqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKCF3aW5kb3cuc3VidGxlKQor
ICAgIHdpbmRvdy5jcnlwdG8uc3VidGxlID0gd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7CisK
K3ZhciBrZXlEYXRhID0gaGV4VG9BcnJheUJ1ZmZlcigiOGU3M2IwZjdkYTBlNjQ1MmM4MTBmMzJi
ODA5MDc5ZTU2MmY4ZWFkMjUyMmMiKTsKK3ZhciBpdiA9IGhleFRvQXJyYXlCdWZmZXIoIjAwMDEw
MjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIik7Cit2YXIgcGxhaW50ZXh0ID0gaGV4VG9BcnJh
eUJ1ZmZlcigiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmFhZTJkOGE1NzFlMDNhYzlj
OWViNzZmYWM0NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFlNWZiYzExOTFhMGE1MmVmZjY5ZjI0NDVk
ZjRmOWIxN2FkMmI0MTdiZTY2YzM3MTAiKTsKK3ZhciBleHRyYWN0YWJsZSA9IHRydWU7CisKK2Rl
YnVnKCJJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uIik7Citj
cnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwga2V5RGF0YSwgImFlcy1jYmMiLCBleHRyYWN0
YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAg
ICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImtleS50eXBlIiwgIidzZWNyZXQnIik7Cisg
ICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImtl
eS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWNiYyciKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29y
aXRobS5sZW5ndGgiLCAiMTc2Iik7CisgICAgc2hvdWxkQmUoImtleS51c2FnZXMiLCAiWydlbmNy
eXB0JywgJ2RlY3J5cHQnXSIpOworCisgICAgZGVidWcoIlVzaW5nIHRoZSBrZXkgdG8gZW5jcnlw
dCBwbGFpbnRleHQuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1l
OiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pOworfSkudGhlbih1bmRlZmlu
ZWQsIGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGRlYnVnKCJGYWlsZWQsIGFzIGV4cGVjdGVkLiBO
b3RlIHRoYXQgdGhlIHNwZWMgZG9lc24ndCBhcHBlYXIgdG8gY2xlYXJseSBkZWZpbmUgd2hpY2gg
c3RlcCBzaG91bGQgZmFpbC4iCisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+
CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC5odG1sCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9odG1sClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13
cm9uZy1rZXktY2xhc3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1jbGFz
cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBjYWxs
aW5nIEFFUy1DQkMgZW5jcnlwdCB3aXRoIGEgSE1BQyBrZXkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitJbXBvcnRpbmcgYSByYXcgSE1BQyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJh
bC4uLgorVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4uLgorUEFTUyBjcnlwdG8u
c3VidGxlLmVuY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwga2V5LCBbcGxhaW50ZXh0
XSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBOb3RTdXBwb3J0ZWRFcnJvcjogRE9NIEV4Y2VwdGlv
biA5LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13
cm9uZy1rZXktY2xhc3MtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5
cGUKIyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Fl
cy1jYmMtd3Jvbmcta2V5LWNsYXNzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5
cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1jbGFzcy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1jbGFzcy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgY2FsbGluZyBBRVMtQ0JDIGVuY3J5
cHQgd2l0aCBhIEhNQUMga2V5LiIpOworCitqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKCF3
aW5kb3cuc3VidGxlKQorICAgIHdpbmRvdy5jcnlwdG8uc3VidGxlID0gd2luZG93LmNyeXB0by53
ZWJraXRTdWJ0bGU7CisKK3ZhciBpdiA9IGhleFRvQXJyYXlCdWZmZXIoIjAwMDEwMjAzMDQwNTA2
MDcwODA5MGEwYjBjMGQwZTBmIik7Cit2YXIgcGxhaW50ZXh0ID0gaGV4VG9BcnJheUJ1ZmZlcigi
NmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmFhZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0
NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFlNWZiYzExOTFhMGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2Fk
MmI0MTdiZTY2YzM3MTAiKTsKK3ZhciBobWFjS2V5ID0gYXNjaWlUb0FycmF5QnVmZmVyKCdhJyk7
Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1ZygiSW1wb3J0aW5nIGEgcmF3IEhNQUMg
a2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4iKTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJy
YXciLCBobWFjS2V5LCB7bmFtZTogJ2htYWMnLCBoYXNoOiB7bmFtZTogJ3NoYS0xJ319LCBleHRy
YWN0YWJsZSwgWyJzaWduIiwgInZlcmlmeSIsICJlbmNyeXB0IiwgImRlY3J5cHQiXSkudGhlbihm
dW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgZGVidWcoIlVzaW5nIHRo
ZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICBzaG91bGRUaHJvdygnY3J5cHRv
LnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4
dF0pJykKKworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9h
ZXMtY2JjLXdyb25nLWtleS1jbGFzcy5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5
cGUKIyMgLTAsMCArMSAjIwordGV4dC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNp
Z24tdmVyaWZ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU4NDg0KQorKysgTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSw0ICsxLDQgQEAKLVRlc3QgY3J5cHRvLnN1YnRsZS5kaWdlc3QuCitUZXN0IEhNQUMg
c2lnbiBhbmQgdmVyaWZ5IGZ1bmN0aW9ucy4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgog
CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnkuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnku
aHRtbAkocmV2aXNpb24gMTU4NDg0KQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFj
LXNpZ24tdmVyaWZ5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTksNyArOSw3IEBACiA8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KIAogPHNjcmlwdD4KLWRlc2NyaXB0aW9uKCJUZXN0IGNyeXB0by5z
dWJ0bGUuZGlnZXN0LiIpOworZGVzY3JpcHRpb24oIlRlc3QgSE1BQyBzaWduIGFuZCB2ZXJpZnkg
ZnVuY3Rpb25zLiIpOwogCiBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKIApJbmRleDogTGF5b3V0VGVz
dHMvY3J5cHRvL3N1YnRsZS9yZXNvdXJjZXMvY29tbW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2NyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwkocmV2aXNpb24gMTU4NDg0
KQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yZXNvdXJjZXMvY29tbW9uLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxNiBAQCBmdW5jdGlvbiBhc2NpaVRvQXJyYXlCdWZmZXIo
c3RyKQogICAgIHJldHVybiBuZXcgVWludDhBcnJheShjaGFycyk7CiB9CiAKK2Z1bmN0aW9uIGhl
eFRvQXJyYXlCdWZmZXIoc3RyKQoreworICAgIGlmIChzdHIubGVuZ3RoICUgMikKKyAgICAgICAg
dGhyb3cgIkhleCBzdHJpbmcgbGVuZ2h0IG11c3QgYmUgZXZlbiI7CisgICAgdmFyIGNoYXJzID0g
W107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDIpCisgICAgICAg
IGNoYXJzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cihpLCAyKSwgMTYpKTsKKyAgICByZXR1cm4g
bmV3IFVpbnQ4QXJyYXkoY2hhcnMpOworfQorCiBmdW5jdGlvbiBwcmludFJlamVjdGVkUmVzdWx0
KHZhbHVlKQogewogICAgIGRlYnVnKCIgICAgcmVqZWN0ZWQgd2l0aCB2YWx1ZSBvZiAiICsgdmFs
dWUpOwo=
</data>
<flag name="commit-queue"
          id="238623"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215798</attachid>
            <date>2013-11-01 23:25:01 -0700</date>
            <delta_ts>2013-11-01 23:57:51 -0700</delta_ts>
            <desc>maybe now?</desc>
            <filename>AES-CBC.txt</filename>
            <type>text/plain</type>
            <size>88680</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTExLTAxICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBXZWJDcnlwdG8gQUVTLUNCQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjQ3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgICogd3RmL0ZpeGVkQXJy
YXkuaDogKFdURjo6Rml4ZWRBcnJheTo6ZGF0YSk6IEFkZGVkIGEgY29uc3QgdmVyc2lvbiBvZiB0
aGUgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6IEFkZGVkIGEgY29tbWVudCB0
byBWZWN0b3IgY29uc3RydWN0b3IgYWJvdXQgaG93IGl0IGlzIGRpZmZlcmVudAorICAgICAgICBm
cm9tIHN0ZDo6dmVjdG9yLgorCiAyMDEzLTExLTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBleHRlbmRlZCBhdHRlbXB0IGF0IFdp
bmRvd3MgYnVpbGQgZml4IGFmdGVyIHIxNTg0NzEuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GaXhl
ZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRml4ZWRBcnJheS5oCShyZXZp
c2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV1RGL3d0Zi9GaXhlZEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIGRhdGEoKSB7IHJl
dHVybiBtX2RhdGE7IH0KKyAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBTaXplOyB9CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dURi93dGYvVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
KCkKICAgICB7CiAgICAgfQotICAgIAorCisgICAgLy8gVW5saWtlIGluIHN0ZDo6dmVjdG9yLCB0
aGlzIGNvbnN0cnVjdG9yIGRvZXMgbm90IGluaXRpYWxpemUgUE9EIHR5cGVzLgogICAgIGV4cGxp
Y2l0IFZlY3RvcihzaXplX3Qgc2l6ZSkKICAgICAgICAgOiBCYXNlKHNpemUsIHNpemUpCiAgICAg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAKKzIwMTMtMTEtMDEgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFdlYkNyeXB0byBB
RVMtQ0JDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjM2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCisKKyAgICAgICAg
VGVzdHM6IGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWwKKyAg
ICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0Lmh0
bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQt
d2l0aC1wYWRkaW5nLmh0bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1l
bmNyeXB0LWRlY3J5cHQuaHRtbAorICAgICAgICAgICAgICAgY3J5cHRvL3N1YnRsZS9hZXMtY2Jj
LWludmFsaWQtbGVuZ3RoLmh0bWwKKyAgICAgICAgICAgICAgIGNyeXB0by9zdWJ0bGUvYWVzLWNi
Yy13cm9uZy1rZXktY2xhc3MuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICogYmluZGluZ3MvanMvSlND
cnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3Bl
cnR5KTogRmFjdG9yZWQgb3V0IGEgZnVuY3Rpb24gdG8gZ2V0IGEgcHJvcGVydHkgYXMgSlNWYWx1
ZS4KKyAgICAgICAgKFdlYkNvcmU6OmdldEhhc2hBbGdvcml0aG0pOiBVc2UgaXQuCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVBZXNDYmNQYXJhbXMpOiBBZGRlZCBjb252ZXJ0ZXIgZm9yIEFlc0Ni
Y1BhcmFtcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6
Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQpOiBTdXBwb3J0IEFFU19DQkMuCisgICAgICAgIChX
ZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JE
ZWNyeXB0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkpOiBTdXBwb3J0IGFsbAorICAgICAg
ICBhbGdvcml0aG1zLCBhbGwgdGhlIG5ldyBvbmVzIGp1c3QgaGF2ZSB0cml2aWFsIGRpY3Rpb25h
cmllcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3Jl
YXRlUGFyYW1ldGVyc0ZvckV4cG9ydEtleSk6IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpz
ZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmg6IEFkZGVkLgorICAgICAgICBNb3ZlZCBDcnlwdG9P
cGVyYXRpb25EYXRhIGJpbmRpbmdzIG91dCBvZiBKU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAsIHNv
IHRoYXQgd2UKKyAgICAgICAgY291bGQgdXNlIHRoZW0gaW4gSlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5LmNwcC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oOiAoV2Vi
Q29yZTo6UHJvbWlzZVdyYXBwZXI6OnJlamVjdCk6IEFkZGVkIGEgc3BlY2lhbGl6YXRpb24KKyAg
ICAgICAgdG8gcmVqZWN0IHdpdGggbnVsbCByZXN1bHQuIFRoZSBzcGVjIGRvZXNuJ3QgYWN0dWFs
bHkgc2F5IGhvdyBhbGdvcml0aG1zIGZhaWwuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N1
YnRsZUNyeXB0b0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0bzo6
ZW5jcnlwdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86OmRlY3J5
cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTU3VidGxlQ3J5cHRvOjpzaWduKTogU3R5
bGUgZml4LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5o
OiBBZGRlZC4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0tleUNsYXNzKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
Lmg6CisgICAgICAgIChXZWJDb3JlOjphc0NyeXB0b0tleUhNQUMpOgorICAgICAgICBBZGRlZCBw
b29yIG1hbidzIFJUVEksIHNvIHRoYXQgd2UgY2FuIHNhZmVseSB1cGNhc3QgS2V5cyBwYXNzZWQg
ZnJvIEphdmFTY3JpcHQgY29kZS4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXlBRVMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6Q3J5cHRvS2V5QUVTKToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUFFUzo6fkNyeXB0b0tleUFFUyk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9LZXlBRVM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24pOgorICAg
ICAgICAqIGNyeXB0by9DcnlwdG9LZXlBRVMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjph
c0NyeXB0b0tleUFFUyk6CisgICAgICAgIEFFUyBrZXlzIGFyZSB0aGUgc2FtZSBmb3IgYWxsIGFs
Z29yaXRobXMsIGJ1dCB0aGV5IHN0aWxsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFsZ29yaXRobS4K
KworICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uaWRsOiBBZGRlZCBlbmNyeXB0L2RlY3J5
cHQuCisKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JD
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpD
cnlwdG9BbGdvcml0aG1BRVNfQ0JDKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRo
bUFFU19DQkM6On5DcnlwdG9BbGdvcml0aG1BRVNfQ0JDKToKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUFFU19DQkM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0Fs
Z29yaXRobUFFU19DQkM6OmltcG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpleHBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19DQkMuaDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0cmFu
c2Zvcm1BRVNfQ0JDKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6
OmVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZGVj
cnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpnZW5lcmF0
ZUtleSk6CisgICAgICAgIEFkZGVkLgorCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1ITUFDTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6
OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6dmVyaWZ5KToK
KyAgICAgICAgQ2hlY2sga2V5IGNsYXNzIGJlZm9yZSBjYXN0aW5nIGl0IHRvIENyeXB0b0tleUhN
QUMuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpwbGF0Zm9ybVJl
Z2lzdGVyQWxnb3JpdGhtcyk6IFJlZ2lzdGVyIEFFUy1DQkMKKyAgICAgICAgb24gTWFjLCBzbyB0
aGF0IGl0IGNhbiBiZSB1c2VkLgorCiAyMDEzLTExLTAxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBTVkdSZW5kZXJTdHlsZSBhY2Nlc3NvcnMgc2hvdWxkIHJl
dHVybiByZWZlcmVuY2VzLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01
NTAwLDYgKzU1MDAsMTQgQEAKIAkJRTEyNUY4MzUxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tl
eUhNQUMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEyNUY4MzMxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwICovOyB9OwogCQlF
MTI1RjgzNjE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5
IC8qIENyeXB0b0tleUhNQUMuaCAqLzsgfTsKIAkJRTEyNUY4MzgxODIyRjFFQjAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4MzcxODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29y
aXRobUhNQUNNYWMuY3BwICovOyB9OworCQlFMTI1RjgzQTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5
cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgzOTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3Jp
dGhtQWVzQ2JjUGFyYW1zLmggKi87IH07CisJCUUxMjVGODNEMTgyNDExRTcwMEQ4NENEOSAvKiBK
U0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTEyNUY4M0IxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0
aW9uRGF0YS5jcHAgKi87IH07CisJCUUxMjVGODNFMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0
b09wZXJhdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxMjVGODNDMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEu
aCAqLzsgfTsKKwkJRTEyNUY4NDExODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFF
U19DQkMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEyNUY4M0YxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwICov
OyB9OworCQlFMTI1Rjg0MjE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4
NDAxODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkMuaCAqLzsgfTsKKwkJ
RTEyNUY4NDUxODI0MjVDOTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4NDMx
ODI0MjVDOTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwICovOyB9Owor
CQlFMTI1Rjg0RDE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRvS2V5QUVTLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODRCMTgyNDI4OUQwMEQ4
NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwICovOyB9OworCQlFMTI1Rjg0RTE4MjQyODlEMDBEODRD
RDkgLyogQ3J5cHRvS2V5QUVTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTI1Rjg0QzE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRvS2V5QUVTLmggKi87
IH07CiAJCUUxMjcxOUM3MEVFRUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI3MTlDNjBFRUVDMTY4
MDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5oICovOyB9OwogCQlFMTI3MTlDQTBFRUVDMjEzMDBG
NjEyMTMgLyogTmF2aWdhdG9yQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTI3MTlDOTBFRUVDMjEzMDBGNjEyMTMgLyogTmF2aWdhdG9yQmFz
ZS5jcHAgKi87IH07CiAJCUUxMjcxQTBCMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcx
QTBBMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCAqLzsgfTsKQEAgLTEyNTAx
LDYgKzEyNTA5LDE0IEBACiAJCUUxMjVGODMzMTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlI
TUFDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0tleUhN
QUMuY3BwOyBwYXRoID0ga2V5cy9DcnlwdG9LZXlITUFDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvS2V5SE1BQy5oOyBwYXRoID0g
a2V5cy9DcnlwdG9LZXlITUFDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjVG
ODM3MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3Bw
OyBwYXRoID0gbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMTI1RjgzOTE4MjQxMDQ4MDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGht
QWVzQ2JjUGFyYW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0Fs
Z29yaXRobUFlc0NiY1BhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1
RjgzQjE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODNDMTgyNDExRTcwMEQ4NENEOSAv
KiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNDcnlwdG9PcGVyYXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxMjVGODNGMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobUFFU19D
QkMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1Rjg0MDE4MjQyNTNBMDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxMjVGODQzMTgyNDI1QzkwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0Fs
Z29yaXRobUFFU19DQkNNYWMuY3BwOyBwYXRoID0gbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNN
YWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTI1Rjg0QjE4MjQyODlEMDBE
ODRDRDkgLyogQ3J5cHRvS2V5QUVTLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENyeXB0b0tleUFFUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
MjVGODRDMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRvS2V5QUVTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxMjcxOUM2MEVFRUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvckJhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNzE5QzkwRUVFQzIxMzAwRjYxMjEzIC8qIE5hdmlnYXRvckJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yQmFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjcxQTBBMEVFRUM3N0EwMEY2
MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV29ya2VyTmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI4
Myw2ICsxOTI5OSw4IEBACiAJCQkJMUM4MUJBMDQwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3Jp
cHRDYWxsRnJhbWUuaCAqLywKIAkJCQlFMTU3QThFRTE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyLmNwcCAqLywKIAkJCQlFMTU3QThFRjE4MTg1NDI1MDA5RjgyMUQg
LyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggKi8sCisJCQkJRTEyNUY4M0IxODI0MTFFNzAw
RDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAgKi8sCisJCQkJRTEyNUY4M0MxODI0
MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YS5oICovLAogCQkJCUUxQzY1NzEw
MTgxNUY5REQwMDI1NkNERCAvKiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwICovLAog
CQkJCUUxQzY1NzExMTgxNUY5REQwMDI1NkNERCAvKiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnkuaCAqLywKIAkJCQlCQ0U0MzhBMTE0MEMwREJGMDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmNw
cCAqLywKQEAgLTIwMTE2LDYgKzIwMTM0LDcgQEAKIAkJRTE3MkFGNzExODBGMzQzNDAwRkJBREI5
IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RTEyNUY4NDMxODI0MjVDOTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3Bw
ICovLAogCQkJCUUxMjVGODM3MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFD
TWFjLmNwcCAqLywKIAkJCQlFMUJCODRBQzE4MjJDQTc0MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnlNYWMuY3BwICovLAogCQkJCUUxMjVGODJEMTgyMkNGRkYwMEQ4NENEOSAvKiBD
cnlwdG9BbGdvcml0aG1TSEExTWFjLmNwcCAqLywKQEAgLTIwMTI2LDYgKzIwMTQ1LDggQEAKIAkJ
RTE3MkFGN0MxODBGM0IwRDAwRkJBREI5IC8qIGFsZ29yaXRobXMgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUUxMjVGODNGMTgyNDI1M0EwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCAqLywKKwkJCQlFMTI1Rjg0MDE4MjQyNTNBMDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oICovLAogCQkJCUUxMjVGODJGMTgyMkYx
MUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDLmNwcCAqLywKIAkJCQlFMTI1RjgzMDE4
MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQy5oICovLAogCQkJCUUxMjVGODI5
MTgyMkNGRUMwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmNwcCAqLywKQEAgLTIwMTM3
LDYgKzIwMTU4LDggQEAKIAkJRTE5REEyOUQxODE5OTVDRTAwMDg4QkM4IC8qIGtleXMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUUxMjVGODRCMTgyNDI4
OUQwMEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuY3BwICovLAorCQkJCUUxMjVGODRDMTgyNDI4OUQw
MEQ4NENEOSAvKiBDcnlwdG9LZXlBRVMuaCAqLywKIAkJCQlFMTI1RjgzMzE4MjJGMThBMDBEODRD
RDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgKi8sCiAJCQkJRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5
IC8qIENyeXB0b0tleUhNQUMuaCAqLywKIAkJCSk7CkBAIC0yMDE0Niw2ICsyMDE2OSw3IEBACiAJ
CUUxQzY1NzE0MTgxNjAxNUYwMDI1NkNERCAvKiBwYXJhbWV0ZXJzICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlFMTI1RjgzOTE4MjQxMDQ4MDBEODRDRDkg
LyogQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmggKi8sCiAJCQkJRTE5REEyOUIxODE4OUFE
RDAwMDg4QkM4IC8qIENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaCAqLywKIAkJCQlFMUM2
NTcxRTE4MTZFNTAzMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5oICovLAog
CQkJKTsKQEAgLTIzNzE1LDYgKzIzNzM5LDcgQEAKIAkJCQk5QjUwQjFERTE3Q0Q0QzBGMDA4N0Y2
M0MgLyogRm9ybU5hbWVkSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3N0U3NzcwQkY0MTM0
QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREFFRDIwMzExNkYy
NDQ0ODAwNzBFQzBGIC8qIFBhZ2VDb25zb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTI1Rjgz
RTE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGMzgyMDg5MzE0N0QzNUY5MDAxMEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjM0NzQyREQxMzQzNjJGMDAwNTMxQkMyIC8qIFBhZ2VEZWJ1Z2dl
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyog
UGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywKQEAgLTIzODIxLDYgKzIzODQ2LDcgQEAKIAkJCQk1
MTRDNzY3NTBDRTkyM0ExMDA3RUYzQ0QgLyogUHJvdGVjdGlvblNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUEwNTI1NjEwNTg4NzQwMDBDQzlFOTUgLyogUHJvdGVjdGlvblNwYWNlSGFzaC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGOEUxMUExMjU2NTkyNjAwMjMwRkY3IC8qIFByb3h5U2Vy
dmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTI1Rjg0RTE4MjQyODlEMDBEODRDRDkgLyogQ3J5
cHRvS2V5QUVTLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRjk0NUVDQzE2MUY3RjM2MDA5NzFCQzgg
LyogUHNldWRvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDA4MUZGMDAxNkIwQTJEMzAw
OEFBQTdBIC8qIFB1YmxpY1N1ZmZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTBGQjA4NEIxNEUx
NUM3RTAwQTNEQjk4IC8qIFB1YmxpY1VSTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjM4
MzAsNiArMjM4NTYsNyBAQAogCQkJCTM3OUUzNzE3MTM3MzZBNjYwMEI5RTkxOSAvKiBRdW90ZWRQ
cmludGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAv
KiBRdW90ZXNEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3MjBEMDBCRjIyMDA3MUI3
ODIgLyogUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTI1
Rjg0MjE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjU1QjNEQ0MxMjUxRjEyRDAwM0VGMjY5IC8qIFJhZGlvSW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCNjU4RkZBNjE1MjJFRkFBMDBERDU1OTUgLyogUmFkaW9Ob2Rl
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MTgwODI0NUU1OTAwMUU5QUJDIC8qIFJh
bmdlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0Nzk0LDYgKzI0ODIxLDcgQEAKIAkJCQkxNDQ3NkFB
ODE1REM0QkIxMDAzMDVEQjIgLyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
NjU4MjAyMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwMEI5MzE4ODEzQkE4REJBMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUxMjVGODNBMTgyNDEwNDgwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1B
ZXNDYmNQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwQjkzMThDMTNCQThEQ0MwMDM1QTk0
OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUMyODA0
NjEzOERDMjQxMDA3OUI3RTIgLyogWE1MRXJyb3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3
MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLApA
QCAtMjU2MTAsNiArMjU2MzgsNyBAQAogCQkJCTA3QzU5QjY4MTdGNzg0QkEwMDBGQkNCQiAvKiBN
ZWRpYVNvdXJjZVN0YXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTlBOUM0QTBBQTVFM0JE
MDBCNjk0QjIgLyogRE9NSFRNTEJvZHlFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODUx
ODNCNDMwQUE2OTI2MTAwRjE5RkEzIC8qIERPTUhUTUxCUkVsZW1lbnQubW0gaW4gU291cmNlcyAq
LywKKwkJCQlFMTI1Rjg0RDE4MjQyODlEMDBEODRDRDkgLyogQ3J5cHRvS2V5QUVTLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg1QkE0Q0RFMEFBNjg2MUIwMDg4MDUyRCAvKiBET01IVE1MQnV0dG9u
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRjlCNjU3MEJBMEYzNUUwMDg1NDA2NCAv
KiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1REYyRjhGMEFB
M0M4ODEwMEFENjRDNSAvKiBET01IVE1MQ29sbGVjdGlvbi5tbSBpbiBTb3VyY2VzICovLApAQCAt
MjYzMzAsNiArMjYzNTksNyBAQAogCQkJCTUxMUVGMkM3MTdGMEZEMzUwMEU0RkExNiAvKiBKU0lE
Qk9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTREMTRFMEMyNzVDNjgwMDZC
QzYxNyAvKiBKU0hpc3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFN0IxOTMwRDRFODY5
NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTI1
RjgzRDE4MjQxMUU3MDBEODRDRDkgLyogSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDOTdFNDEyMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTdFNDJDMTA5MTVCMDYwMDEwRDM2MSAvKiBK
U0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEEyREVG
MEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjc2NDcsNiArMjc2NzcsNyBAQAogCQkJCTk3QkM4NDgzMTIzNkZEOTMwMDBDNjE2MSAv
KiBUZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNDYwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTA1
REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTEyNUY4NDExODI0MjUzQTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRo
bUFFU19DQkMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNDgwRDAwNkMxRDAwRUY2RjI2
IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzM0ExNDJF
MEI3RDE4ODYwMEE1M0ZGRCAvKiBUZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1
QjNERDcxMjUxRjEyRDAwM0VGMjY5IC8qIFRleHRGaWVsZElucHV0VHlwZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI3NzE5LDYgKzI3NzUwLDcgQEAKIAkJCQlGRDMxNjBBRTEyQjAyNkY3MDBDMUEz
NTkgLyogVmVjdG9yTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBERTE3MTVEMkEy
MDA2NThEOTggLyogVmlkZW9UcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRTg4RTBFMTE3
MTVEMkEyMDA2NThEOTggLyogVmlkZW9UcmFja0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTEyNUY4NDUxODI0MjVDOTAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VGNDE4Q0UxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0
QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGRkZGOUFEMTU5RDlCMDYwMDIwQkJE
NSAvKiBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MUYwOTlFNjQ5MjAwNTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykK
IAorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oIgogI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1I
bWFjUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCiAK
QEAgLTgwLDYgKzgyLDE3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRB
bGcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0UHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBuYW1lKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChvYmplY3QpOworCisgICAgaWYgKG9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50
aWZpZXIsIHNsb3QpKQorICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlm
aWVyKTsKKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCiBzdGF0aWMgYm9vbCBnZXRI
YXNoQWxnb3JpdGhtKEpTRGljdGlvbmFyeSYgZGljdGlvbmFyeSwgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciYgcmVzdWx0KQogewogICAgIC8vIEZYSU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93
IHRvIHJldHVybiBKU1ZhbHVlcywgYW5kIHVzZSB0aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFs
dWUuCkBAIC05MCwxNSArMTAzLDkgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29yaXRobShKU0Rp
Y3Rpb25hcgogICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCAiaGFzaCIpOwogICAgIFBy
b3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CiAKLSAgICBKU1ZhbHVlIGhhc2ggPSBqc1VuZGVmaW5l
ZCgpOwotICAgIGlmIChvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBz
bG90KSkgewotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaGFzaCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRp
Zmllcik7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgSlNWYWx1ZSBoYXNoID0gZ2V0UHJvcGVydHkoZXhlYywg
b2JqZWN0LCAiaGFzaCIpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGhhc2guaXNVbmRlZmluZWRPck51bGwoKSkgewogICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOwpAQCAtMTA4LDYg
KzExNSwzNSBAQCBzdGF0aWMgYm9vbCBnZXRIYXNoQWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAg
cmV0dXJuIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmll
cihleGVjLCBoYXNoLCByZXN1bHQpOwogfQogCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFlc0NiY1BhcmFtcyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgSlNWYWx1ZSBpdiA9IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9i
amVjdCgpLCAiaXYiKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobUFlc0Ni
Y1BhcmFtcz4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1BZXNDYmNQ
YXJhbXM+KCk7CisKKyAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGl2RGF0YTsKKyAgICBpZiAoIWNy
eXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBpdiwgaXZEYXRhKSkgeworICAgICAg
ICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBpZiAoaXZEYXRhLnNlY29uZCAhPSAxNikgeworICAgICAgICBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJBRVMtQ0JDIGluaXRp
YWxpemF0aW9uIGRhdGEgbXVzdCBiZSAxNiBieXRlcyIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgbWVtY3B5KHJlc3VsdC0+aXYuZGF0YSgpLCBpdkRhdGEuZmlyc3Qs
IGl2RGF0YS5zZWNvbmQpOworCisgICAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOworfQorCiBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUht
YWNQYXJhbXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTE0OCw3ICsxODQsNyBAQCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1
bHQpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlND
cnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdChKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpT
Qzo6SlNWYWx1ZSkKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81OgpAQCAtMTU4LDcg
KzE5NCwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RTQToKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkVDREg6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpBRVNfQ1RSOgorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRF
RF9FUlIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkFFU19DQkM6CisgICAgICAgIHJldHVybiBjcmVhdGVBZXNDYmNQYXJhbXMo
ZXhlYywgdmFsdWUpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NN
QUM6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfR0NNOgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NGQjoKQEAgLTE3Nyw3ICsyMTYsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgfQogfQogCi1z
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdChKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSkK
K3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQogewogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81OgpAQCAtMTg3LDcgKzIyNiwxMCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgY2FzZSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpFQ0RTQToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkVDREg6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ1RS
OgorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19DQkM6CisgICAgICAgIHJldHVybiBjcmVhdGVBZXNDYmNQYXJhbXMoZXhlYywgdmFsdWUp
OwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NNQUM6CiAgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfR0NNOgogICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6QUVTX0NGQjoKQEAgLTQwMywxMSArNDQ1LDExIEBAIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkFFU19DTUFDOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6QUVTX0dDTToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DRkI6
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6SE1BQzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZUhtYWNLZXlQYXJhbXMoZXhlYywgdmFs
dWUpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6REg6CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMToKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8yMjQ6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpTSEFfMjU2OgpAQCAtNDM3LDYgKzQ3OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19DRkI6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDOgogICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6REg6CisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgY2FzZSBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlNIQV8yMjQ6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpT
SEFfMjU2OgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRp
b25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b09wZXJhdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
Q3J5cHRvT3BlcmF0aW9uRGF0YS5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIHNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpT
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8Q3J5cHRvT3BlcmF0
aW9uRGF0YT4mIHJlc3VsdCkKK3sKKyAgICB1bnNpZ25lZCBzZXF1ZW5jZUxlbmd0aDsKKyAgICBK
U09iamVjdCogc2VxdWVuY2UgPSB0b0pTU2VxdWVuY2UoZXhlYywgdmFsdWUsIHNlcXVlbmNlTGVu
Z3RoKTsKKyAgICBpZiAoIXNlcXVlbmNlKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2VxdWVuY2VMZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGl0
ZW0gPSBzZXF1ZW5jZS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAoQXJyYXlCdWZmZXIqIGJ1
ZmZlciA9IHRvQXJyYXlCdWZmZXIoaXRlbSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIGVsc2UgaWYgKFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
IGJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhpdGVtKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlclZpZXctPmJh
c2VBZGRyZXNzKCkpLCBidWZmZXJWaWV3LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiT25seSBBcnJheUJ1ZmZlciBhbmQg
QXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhcnQgb2YgQ3J5cHRvT3BlcmF0aW9uRGF0
YSBzZXF1ZW5jZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENyeXB0b09wZXJhdGlvbkRhdGEm
IHJlc3VsdCkKK3sKKyAgICBpZiAoQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IHRvQXJyYXlCdWZmZXIo
dmFsdWUpKQorICAgICAgICByZXN1bHQgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFy
Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgZWxzZSBpZiAo
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZh
bHVlKSkKKyAgICAgICAgcmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+
KGJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBidWZmZXJWaWV3LT5ieXRlTGVuZ3RoKCkpOwor
ICAgIGVsc2UgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiT25seSBBcnJheUJ1ZmZl
ciBhbmQgQXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVy
YXRpb25EYXRhIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJh
dGlvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3J5cHRvT3BlcmF0aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEpTQ3J5cHRvT3BlcmF0aW9uRGF0YV9oCisjZGVmaW5lIEpTQ3J5
cHRvT3BlcmF0aW9uRGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFC
TEUoU1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBFeGVjU3RhdGU7Citj
bGFzcyBKU1ZhbHVlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgc3RkOjpw
YWlyPGNvbnN0IGNoYXIqLCBzaXplX3Q+IENyeXB0b09wZXJhdGlvbkRhdGE7CisKK2Jvb2wgc2Vx
dWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+Jik7Citib29sIGNyeXB0b09w
ZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgQ3J5
cHRvT3BlcmF0aW9uRGF0YSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKyNlbmRpZiAvLyBKU0NyeXB0b09wZXJhdGlvbkRhdGFf
aAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlw
dG9PcGVyYXRpb25EYXRhLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHJldmlzaW9uIDE1ODQ4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3MywxMyBAQCBpbmxpbmUgdm9pZCBQcm9taXNlV3JhcHBlcjo6cmVqZWN0
KGNvbnN0CiB9CiAKIHRlbXBsYXRlPD4KK2lubGluZSB2b2lkIFByb21pc2VXcmFwcGVyOjpyZWpl
Y3QoY29uc3Qgc3RkOjpudWxscHRyX3QmKQoreworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBtX3Byb21pc2UtPnJlc29sdmVyKCkt
PnJlamVjdElmTm90UmVzb2x2ZWQoZXhlYywgSlNDOjpqc051bGwoKSk7Cit9CisKK3RlbXBsYXRl
PD4KIGlubGluZSB2b2lkIFByb21pc2VXcmFwcGVyOjpmdWxmaWxsPFN0cmluZz4oY29uc3QgU3Ry
aW5nJiByZXN1bHQpCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0
bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5Lmgi
CisjaW5jbHVkZSAiSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9t
aXNlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogCkBAIC01NSw0MiArNTYsNiBAQCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGJvb2wgc2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxDcnlwdG9PcGVyYXRp
b25EYXRhPiYgcmVzdWx0KQotewotICAgIHVuc2lnbmVkIHNlcXVlbmNlTGVuZ3RoOwotICAgIEpT
T2JqZWN0KiBzZXF1ZW5jZSA9IHRvSlNTZXF1ZW5jZShleGVjLCB2YWx1ZSwgc2VxdWVuY2VMZW5n
dGgpOwotICAgIGlmICghc2VxdWVuY2UpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzZXF1ZW5jZUxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgaXRl
bSA9IHNlcXVlbmNlLT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChBcnJheUJ1ZmZlciogYnVm
ZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5i
eXRlTGVuZ3RoKCkpKTsKLSAgICAgICAgZWxzZSBpZiAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
YnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KGl0ZW0pKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyVmlldy0+YmFz
ZUFkZHJlc3MoKSksIGJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSkpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJPbmx5IEFycmF5QnVmZmVyIGFuZCBB
cnJheUJ1ZmZlclZpZXcgb2JqZWN0cyBjYW4gYmUgcGFydCBvZiBDcnlwdG9PcGVyYXRpb25EYXRh
IHNlcXVlbmNlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENyeXB0b09wZXJhdGlv
bkRhdGEmIHJlc3VsdCkKLXsKLSAgICBpZiAoQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IHRvQXJyYXlC
dWZmZXIodmFsdWUpKQotICAgICAgICByZXN1bHQgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2Fz
dDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgZWxz
ZSBpZiAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJW
aWV3KHZhbHVlKSkKLSAgICAgICAgcmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8
Y2hhcio+KGJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCkpLCBidWZmZXJWaWV3LT5ieXRlTGVuZ3Ro
KCkpOwotICAgIGVsc2UgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiT25seSBBcnJh
eUJ1ZmZlciBhbmQgQXJyYXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhcnQgb2YgQ3J5cHRv
T3BlcmF0aW9uRGF0YSBzZXF1ZW5jZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgYm9vbCBjcnlwdG9LZXlGb3JtYXRGcm9tSlNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIENyeXB0b0tleUZvcm1hdCYgcmVz
dWx0KQogewogICAgIFN0cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CkBAIC0xNDYsNiArMTExLDk4IEBAIHN0YXRpYyBib29sIGNyeXB0b0tl
eVVzYWdlc0Zyb21KU1ZhbHVlKEUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorSlNWYWx1ZSBKU1N1
YnRsZUNyeXB0bzo6ZW5jcnlwdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIGF1
dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghYWxnb3JpdGhtKSB7CisgICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIH0KKworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVy
KCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpIHsK
KyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gdG9Dcnlw
dG9LZXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGlmICgha2V5KQorICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAgICBpZiAoIWtleS0+YWxsb3dzKENy
eXB0b0tleVVzYWdlRW5jcnlwdCkpIHsKKyAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRD
b25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCAiS2V5IHVz
YWdlcyBkb2VzIG5vdCBpbmNsdWRlICdlbmNyeXB0JyIpOworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICB9CisKKyAgICBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YTsKKyAgICBp
ZiAoIXNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAg
IEpTUHJvbWlzZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlV2l0aFJlc29sdmVyKGV4ZWMt
PnZtKCksIGdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIHByb21pc2VXcmFwcGVyID0gUHJvbWlz
ZVdyYXBwZXI6OmNyZWF0ZShnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7CisKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBhbGdvcml0aG0tPmVuY3J5cHQoKnBhcmFtZXRlcnMsICprZXks
IGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlV3JhcHBlciksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHByb21pc2U7Cit9CisKK0pTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OmRlY3J5cHQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBhdXRv
IGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIWFsZ29yaXRobSkgeworICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigp
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKSB7Cisg
ICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIH0KKworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IHRvQ3J5cHRv
S2V5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgaWYgKCFrZXktPmFsbG93cyhDcnlw
dG9LZXlVc2FnZURlY3J5cHQpKSB7CisgICAgICAgIG1faW1wbC0+ZG9jdW1lbnQoKS0+YWRkQ29u
c29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIktleSB1c2Fn
ZXMgZG9lcyBub3QgaW5jbHVkZSAnZGVjcnlwdCciKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgfQorCisgICAgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGE7CisgICAgaWYg
KCFzZXF1ZW5jZU9mQ3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBK
U1Byb21pc2UqIHByb21pc2UgPSBKU1Byb21pc2U6OmNyZWF0ZVdpdGhSZXNvbHZlcihleGVjLT52
bSgpLCBnbG9iYWxPYmplY3QoKSk7CisgICAgYXV0byBwcm9taXNlV3JhcHBlciA9IFByb21pc2VX
cmFwcGVyOjpjcmVhdGUoZ2xvYmFsT2JqZWN0KCksIHByb21pc2UpOworCisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgYWxnb3JpdGhtLT5kZWNyeXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBk
YXRhLCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBwZXIpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIH0KKworICAgIHJldHVybiBwcm9taXNlOworfQorCiBKU1ZhbHVlIEpTU3VidGxl
Q3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMykKQEAgLTE4Myw3ICsyNDAsNyBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpz
aWduKEV4ZWNTdGF0ZSogCiAgICAgYXV0byBwcm9taXNlV3JhcHBlciA9IFByb21pc2VXcmFwcGVy
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0KCksIHByb21pc2UpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgYWxnb3JpdGhtLT5zaWduKCpwYXJhbWV0ZXJzLCAqa2V5LmdldCgpLCBkYXRh
LCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBwZXIpLCBlYyk7CisgICAgYWxnb3JpdGhtLT5zaWduKCpw
YXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBwZXIpLCBlYyk7CiAg
ICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0
b0FsZ29yaXRobUFlc0NiY1BhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9BbGdvcml0
aG1BZXNDYmNQYXJhbXNfaAorI2RlZmluZSBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNfaAor
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgPHd0Zi9G
aXhlZEFycmF5Lmg+CisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMgRklOQUwgOiBwdWJs
aWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyB7CitwdWJsaWM6CisgICAgLy8gVGhlIGluaXRp
YWxpemF0aW9uIHZlY3Rvci4gTVVTVCBiZSAxNiBieXRlcy4KKyAgICBGaXhlZEFycmF5PGNoYXIs
IDE2PiBpdjsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorI2Vu
ZGlmIC8vIENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXku
aAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI7CiAKK0VOVU1fQ0xBU1Mo
Q3J5cHRvS2V5Q2xhc3MpIHsKKyAgICBITUFDLAorICAgIEFFUworfTsKKwogY2xhc3MgQ3J5cHRv
S2V5IDogcHVibGljIFJlZkNvdW50ZWQ8Q3J5cHRvS2V5PiB7CiBwdWJsaWM6CiAgICAgQ3J5cHRv
S2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIENyeXB0b0tleVR5cGUsIGJvb2wgZXh0cmFj
dGFibGUsIENyeXB0b0tleVVzYWdlKTsKICAgICB2aXJ0dWFsIH5DcnlwdG9LZXkoKTsKIAorICAg
IHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCA9IDA7CisKICAgICBTdHJp
bmcgdHlwZSgpIGNvbnN0OwogICAgIGJvb2wgZXh0cmFjdGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2V4dHJhY3RhYmxlOyB9CiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRp
b24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRv
S2V5QUVTLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ3J5cHRvS2V5QUVTOjpDcnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBib29sIGV4dHJh
Y3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKKyAgICA6IENyeXB0b0tleShhbGdvcml0aG0s
IENyeXB0b0tleVR5cGU6OlNlY3JldCwgZXh0cmFjdGFibGUsIHVzYWdlKQorICAgICwgbV9rZXko
a2V5KQoreworICAgIEFTU0VSVChhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6QUVTX0NUUgorICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6QUVTX0NCQworICAgICAgICB8fCBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6QUVTX0NNQUMKKyAgICAgICAgfHwgYWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkFFU19HQ00KKyAgICAgICAgfHwgYWxnb3JpdGhtID09IENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OkFFU19DRkIpOworfQorCitDcnlwdG9LZXlBRVM6On5DcnlwdG9LZXlB
RVMoKQoreworfQorCit2b2lkIENyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlv
bihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Cit7Cisg
ICAgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOworICAgIGJ1
aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tleS5zaXplKCkgKiA4KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5QUVTLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRv
S2V5QUVTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleUFF
Uy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleUFFUy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENy
eXB0b0tleUFFU19oCisjZGVmaW5lIENyeXB0b0tleUFFU19oCisKKyNpbmNsdWRlICJDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5LmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ3J5cHRvS2V5QUVTIEZJTkFMIDogcHVibGljIENyeXB0b0tleSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3J5cHRvS2V5QUVTPiBjcmVhdGUoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5
LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5QUVTKGFsZ29yaXRobSwga2V5LCBleHRyYWN0
YWJsZSwgdXNhZ2UpKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q3J5cHRvS2V5QUVTKCk7CisKKyAg
ICB2aXJ0dWFsIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gQ3J5cHRvS2V5Q2xhc3M6OkFFUzsgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXko
KSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorCisgICAgdmlydHVhbCB2b2lkIGJ1aWxkQWxnb3Jp
dGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3Qg
T1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ3J5cHRvS2V5QUVTKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7Cit9OworCitpbmxpbmUgY29u
c3QgQ3J5cHRvS2V5QUVTKiBhc0NyeXB0b0tleUFFUyhjb25zdCBDcnlwdG9LZXkmIGtleSkKK3sK
KyAgICBpZiAoa2V5LmtleUNsYXNzKCkgIT0gQ3J5cHRvS2V5Q2xhc3M6OkFFUykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleUFF
Uyo+KCZrZXkpOworfQorCitpbmxpbmUgQ3J5cHRvS2V5QUVTKiBhc0NyeXB0b0tleUFFUyhDcnlw
dG9LZXkmIGtleSkKK3sKKyAgICBpZiAoa2V5LmtleUNsYXNzKCkgIT0gQ3J5cHRvS2V5Q2xhc3M6
OkFFUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENy
eXB0b0tleUFFUyo+KCZrZXkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworCisjZW5kaWYgLy8gQ3J5cHRvS2V5QUVTX2gK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXlBRVMu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vU3VidGxlQ3J5cHRvLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
U3VidGxlQ3J5cHRvLmlkbAkocmV2aXNpb24gMTU4NDg0KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL1N1YnRsZUNyeXB0by5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICAg
ICBOb0ludGVyZmFjZU9iamVjdCwKICAgICBPcGVyYXRpb25zTm90RGVsZXRhYmxlCiBdIGludGVy
ZmFjZSBTdWJ0bGVDcnlwdG8geworICAgIFtDdXN0b21dIFByb21pc2UgZW5jcnlwdChBbGdvcml0
aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgS2V5IGtleSwgc2VxdWVuY2U8Q3J5cHRvT3BlcmF0aW9u
RGF0YT4gZGF0YSk7CisgICAgW0N1c3RvbV0gUHJvbWlzZSBkZWNyeXB0KEFsZ29yaXRobUlkZW50
aWZpZXIgYWxnb3JpdGhtLCBLZXkga2V5LCBzZXF1ZW5jZTxDcnlwdG9PcGVyYXRpb25EYXRhPiBk
YXRhKTsKICAgICBbQ3VzdG9tXSBQcm9taXNlIHNpZ24oQWxnb3JpdGhtSWRlbnRpZmllciBhbGdv
cml0aG0sIEtleSBrZXksIHNlcXVlbmNlPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGEpOwogICAg
IFtDdXN0b21dIFByb21pc2UgdmVyaWZ5KEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBL
ZXkga2V5LCBDcnlwdG9PcGVyYXRpb25EYXRhIHNpZ25hdHVyZSwgc2VxdWVuY2U8Q3J5cHRvT3Bl
cmF0aW9uRGF0YT4gZGF0YSk7CiAgICAgW0N1c3RvbV0gUHJvbWlzZSBkaWdlc3QoQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIHNlcXVlbmNlPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKKworI2lmIEVOQUJMRShTVUJU
TEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zLmgiCisj
aW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNo
YXIqIGNvbnN0IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnNfbmFtZSA9ICJhZXMtY2JjIjsKKwor
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQygpCit7Cit9CisK
K0NyeXB0b0FsZ29yaXRobUFFU19DQkM6On5DcnlwdG9BbGdvcml0aG1BRVNfQ0JDKCkKK3sKK30K
Kworc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bT4obmV3IENyeXB0b0FsZ29yaXRobUFFU19DQkMpOworfQorCitDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmlkZW50aWZpZXIoKSBjb25zdAoreworICAg
IHJldHVybiBzX2lkZW50aWZpZXI7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6
aW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlwdG9LZXlGb3Jt
YXQgZm9ybWF0LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBib29sIGV4dHJhY3Rh
YmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVy
PiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoZm9ybWF0ICE9IENyeXB0
b0tleUZvcm1hdDo6UmF3KSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgVmVjdG9yPGNoYXI+IGtleURhdGE7CisgICAga2V5RGF0
YS5hcHBlbmQoZGF0YS5maXJzdCwgZGF0YS5zZWNvbmQpOworICAgIFJlZlB0cjxDcnlwdG9LZXlB
RVM+IHJlc3VsdCA9IENyeXB0b0tleUFFUzo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OkFFU19DQkMsIGtleURhdGEsIGV4dHJhY3RhYmxlLCB1c2FnZSk7CisgICAgcHJvbWlzZS0+
ZnVsZmlsbChyZXN1bHQucmVsZWFzZSgpKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDOjpleHBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIENyeXB0b0tl
eUZvcm1hdCwgY29uc3QgQ3J5cHRvS2V5Jiwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVy
PiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KKyAg
ICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VC
VExFX0NSWVBUTykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQ19oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobUFFU19DQkNfaAorCisjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDIEZJTkFM
IDogcHVibGljIENyeXB0b0FsZ29yaXRobSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IHNfbmFtZTsKKyAgICBzdGF0aWMgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBzX2lkZW50aWZpZXIgPSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDOwor
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGNyZWF0ZSgpOwor
CisgICAgdmlydHVhbCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBlbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3Bl
cmF0aW9uRGF0YT4mLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25D
b2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlY3J5cHQoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3RvcjxDcnlwdG9P
cGVyYXRpb25EYXRhPiYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlv
bkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVLZXkoY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdl
LCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhwb3J0
S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlwdG9LZXlGb3JtYXQsIGNv
bnN0IENyeXB0b0tleSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlv
bkNvZGUmKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
KCk7CisgICAgdmlydHVhbCB+Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQygpOworfTsKKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNlbmRpZiAvLyBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5o
CShyZXZpc2lvbiAxNTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlITUFDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNkZWZpbmUgQ3J5cHRv
S2V5SE1BQ19oCiAKICNpbmNsdWRlICJDcnlwdG9LZXkuaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCkBA
IC00Miw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+Q3J5cHRvS2V5SE1B
QygpOwogCisgICAgdmlydHVhbCBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpITUFDOyB9CisKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXImKSBjb25zdCBPVkVSUklERTsKQEAgLTUzLDYgKzU0LDIwIEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPGNoYXI+IG1fa2V5OwogfTsKIAoraW5saW5lIGNvbnN0IENyeXB0b0tleUhNQUMqIGFzQ3J5
cHRvS2V5SE1BQyhjb25zdCBDcnlwdG9LZXkmIGtleSkKK3sKKyAgICBpZiAoa2V5LmtleUNsYXNz
KCkgIT0gQ3J5cHRvS2V5Q2xhc3M6OkhNQUMpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlITUFDKj4oJmtleSk7Cit9CisKK2lu
bGluZSBDcnlwdG9LZXlITUFDKiBhc0NyeXB0b0tleUhNQUMoQ3J5cHRvS2V5JiBrZXkpCit7Cisg
ICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpITUFDKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5cHRvS2V5SE1BQyo+KCZr
ZXkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1VC
VExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oIgorCisjaWYgRU5BQkxFKFNVQlRM
RV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMuaCIKKyNp
bmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiSlNET01Qcm9taXNlLmgiCisjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkNyeXB0
by5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybUFFU19D
QkMoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJh
bXMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25zdCBWZWN0b3I8Q3J5
cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4g
cHJvbWlzZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihwYXJhbWV0ZXJzLml2KSA9PSBr
Q0NCbG9ja1NpemVBRVMxMjgsICJJbml0aWFsaXphdGlvbiB2ZWN0b3Igc2l6ZSBtdXN0IGJlIHRo
ZSBzYW1lIGFzIGFsZ29yaXRobSBibG9jayBzaXplIik7CisKKyAgICBzaXplX3Qga2V5TGVuZ3Ro
SW5CeXRlcyA9IGtleS5rZXkoKS5zaXplKCk7CisgICAgaWYgKGtleUxlbmd0aEluQnl0ZXMgIT0g
MTYgJiYga2V5TGVuZ3RoSW5CeXRlcyAhPSAyNCAmJiBrZXlMZW5ndGhJbkJ5dGVzICE9IDMyKSB7
CisgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIENDQ3J5cHRvclJlZiBjcnlwdG9yOworI2lmIFBMQVRGT1JNKElPUykgfHwgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgQ0NBbGdvcml0aG0gYWVz
QWxnb3JpdGhtID0ga0NDQWxnb3JpdGhtQUVTOworI2Vsc2UKKyAgICBDQ0FsZ29yaXRobSBhZXNB
bGdvcml0aG0gPSBrQ0NBbGdvcml0aG1BRVMxMjg7CisjZW5kaWYKKyAgICBDQ0NyeXB0b3JTdGF0
dXMgc3RhdHVzID0gQ0NDcnlwdG9yQ3JlYXRlKG9wZXJhdGlvbiwgYWVzQWxnb3JpdGhtLCBrQ0NP
cHRpb25QS0NTN1BhZGRpbmcsIGtleS5rZXkoKS5kYXRhKCksIGtleUxlbmd0aEluQnl0ZXMsIHBh
cmFtZXRlcnMuaXYuZGF0YSgpLCAmY3J5cHRvcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAg
ICBwcm9taXNlLT5yZWplY3QobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBzaXplX3QgaW5wdXRTaXplID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGRh
dGEuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpbnB1dFNpemUgKz0gZGF0YVtpXS5z
ZWNvbmQ7CisKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcmVzdWx0KENDQ3J5cHRvckdldE91
dHB1dExlbmd0aChjcnlwdG9yLCBpbnB1dFNpemUsIHRydWUpKTsKKworICAgIHVuc2lnbmVkIGNo
YXIqIHAgPSByZXN1bHQuZGF0YSgpOworICAgIHNpemVfdCByZXN1bHRDaHVua1NpemU7CisgICAg
Zm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBkYXRhLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBzdGF0dXMgPSBDQ0NyeXB0b3JVcGRhdGUoY3J5cHRvciwgZGF0YVtpXS5maXJzdCwg
ZGF0YVtpXS5zZWNvbmQsIHAsIHJlc3VsdC5lbmQoKSAtIHAsICZyZXN1bHRDaHVua1NpemUpOwor
ICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBwcm9taXNlLT5yZWplY3QobnVsbHB0
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcCArPSByZXN1bHRD
aHVua1NpemU7CisgICAgfQorICAgIHN0YXR1cyA9IENDQ3J5cHRvckZpbmFsKGNyeXB0b3IsIHAs
IHJlc3VsdC5lbmQoKSAtIHAsICZyZXN1bHRDaHVua1NpemUpOworICAgIHAgKz0gcmVzdWx0Q2h1
bmtTaXplOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxw
dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKHAgPD0gcmVzdWx0LmVu
ZCgpKTsKKyAgICByZXN1bHQuc2hyaW5rKHAgLSByZXN1bHQuYmVnaW4oKSk7CisKKyAgICBDQ0Ny
eXB0b3JSZWxlYXNlKGNyeXB0b3IpOworCisgICAgcHJvbWlzZS0+ZnVsZmlsbChyZXN1bHQpOwor
fQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmVuY3J5cHQoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0
IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21p
c2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25zdCBDcnlw
dG9BbGdvcml0aG1BZXNDYmNQYXJhbXMmIGFlc0NCQ1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxj
b25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKKyAgICBjb25z
dCBDcnlwdG9LZXlBRVMqIGFlc0tleSA9IGFzQ3J5cHRvS2V5QUVTKGtleSk7CisKKyAgICBpZiAo
IWFlc0tleSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdHJhbnNmb3JtQUVTX0NCQyhrQ0NFbmNyeXB0LCBhZXNDQkNQYXJh
bWV0ZXJzLCAqYWVzS2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlw
dG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBw
cm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1B
ZXNDYmNQYXJhbXMmIGFlc0NCQ1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9B
bGdvcml0aG1BZXNDYmNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKKyAgICBjb25zdCBDcnlwdG9LZXlB
RVMqIGFlc0tleSA9IGFzQ3J5cHRvS2V5QUVTKGtleSk7CisKKyAgICBpZiAoIWFlc0tleSkgewor
ICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdHJhbnNmb3JtQUVTX0NCQyhrQ0NEZWNyeXB0LCBhZXNDQkNQYXJhbWV0ZXJzLCAqYWVz
S2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRo
bUFFU19DQkM6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBi
b29sIC8qZXh0cmFjdGFibGUqLywgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9t
aXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIE5vdCB5ZXQgaW1wbGVt
ZW50ZWQuCisgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNN
YWMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcAkocmV2aXNp
b24gMTU4NDg0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1I
TUFDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgVmVjdG9y
PHVuc2lnbmVkIGNoYXI+IGNhbGN1bGF0ZVNpCiB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNp
Z24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5
cHRvS2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3Rk
Ojp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9
IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJz
KTsKLSAgICBjb25zdCBDcnlwdG9LZXlITUFDJiBobWFjS2V5ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Q3J5cHRvS2V5SE1BQyY+KGtleSk7CisgICAgY29uc3QgQ3J5cHRvS2V5SE1BQyogaG1hY0tleSA9
IGFzQ3J5cHRvS2V5SE1BQyhrZXkpOwogCiAgICAgQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobTsK
ICAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobShobWFjUGFyYW1ldGVycy5oYXNoLCBh
bGdvcml0aG0pKSB7CkBAIC0xMDMsNyArMTAzLDEyIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1B
Qzo6c2lnbihjb25zdCBDcnkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBo
bWFjS2V5LmtleSgpLCBkYXRhKTsKKyAgICBpZiAoIWhtYWNLZXkpIHsKKyAgICAgICAgZWMgPSBO
T1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBo
bWFjS2V5LT5rZXkoKSwgZGF0YSk7CiAKICAgICBwcm9taXNlLT5mdWxmaWxsKHNpZ25hdHVyZSk7
CiB9CkBAIC0xMTEsNyArMTE2LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNv
bnN0IENyeQogdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0
IENyeXB0b09wZXJhdGlvbkRhdGEmIGV4cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8Q3J5
cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4g
cHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGht
SG1hY1BhcmFtcyYgaG1hY1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdv
cml0aG1IbWFjUGFyYW1zJj4ocGFyYW1ldGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5SE1BQyYg
aG1hY0tleSA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleUhNQUMmPihrZXkpOworICAgIGNv
bnN0IENyeXB0b0tleUhNQUMqIGhtYWNLZXkgPSBhc0NyeXB0b0tleUhNQUMoa2V5KTsKIAogICAg
IENDSG1hY0FsZ29yaXRobSBhbGdvcml0aG07CiAgICAgaWYgKCFnZXRDb21tb25DcnlwdG9BbGdv
cml0aG0oaG1hY1BhcmFtZXRlcnMuaGFzaCwgYWxnb3JpdGhtKSkgewpAQCAtMTE5LDcgKzEyNCwx
MiBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnZlcmlmeShjb25zdCBDCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2Fs
Y3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS5rZXkoKSwgZGF0YSk7CisgICAgaWYg
KCFobWFjS2V5KSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2Fs
Y3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS0+a2V5KCksIGRhdGEpOwogCiAgICAg
Ym9vbCByZXN1bHQgPSBzaWduYXR1cmUuc2l6ZSgpID09IGV4cGVjdGVkU2lnbmF0dXJlLnNlY29u
ZCAmJiAhbWVtY21wKHNpZ25hdHVyZS5kYXRhKCksIGV4cGVjdGVkU2lnbmF0dXJlLmZpcnN0LCBz
aWduYXR1cmUuc2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAJKHJldmlzaW9uIDE1ODQ4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlN
YWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU1VC
VExFX0NSWVBUTykKIAorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKICNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1ITUFDLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hB
MS5oIgogCkBAIC0zNSw2ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeTo6cGxhdGZvcm1SZWdpc3RlckFsZ29yaXRobXMoKQogeworICAg
IHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnNfbmFtZSwgQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpj
cmVhdGUpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobUhNQUM6OnNfbmFt
ZSwgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1ITUFD
OjpjcmVhdGUpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobVNIQTE6OnNf
bmFtZSwgQ3J5cHRvQWxnb3JpdGhtU0hBMTo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1T
SEExOjpjcmVhdGUpOwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NDg0KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTMtMTEtMDEg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFdlYkNy
eXB0byBBRVMtQ0JDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjM2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCisKKyAg
ICAgICAgUGFydCBvZiBhZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC5odG1sIHRlc3Qgd2FzIHRha2Vu
IGZyb20gQmxpbmsuCisKKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5
cHQtZGVjcnlwdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUv
YWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNyeXB0
by9zdWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQuaHRt
bDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlw
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvYWVzLWNiYy1l
bmNyeXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcuaHRt
bDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlw
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1jYmMtaW52YWxpZC1s
ZW5ndGgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL2Flcy1j
YmMtaW52YWxpZC1sZW5ndGguaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9h
ZXMtY2JjLXdyb25nLWtleS1jbGFzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNy
eXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbDogQWRkZWQuCisKKyAgICAg
ICAgKiBjcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnktZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGNyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS5odG1sOgorICAgICAgICBDb3JyZWN0
ZWQgYSBkZXNjcmlwdGlvbi4KKworICAgICAgICAqIGNyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2Nv
bW1vbi5qczogKGhleFRvQXJyYXlCdWZmZXIpOiBBZGRlZCBhIGhlbHBlci4KKwogMjAxMy0xMS0w
MSAgSmFlaHVuIExpbSAgPGxqYWVodW4ubGltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVwZGF0
ZSBsYXlvdXQgdGVzdCByZXN1bHRzIGFmdGVyIENTUyBjYWxjKCkgc2ltcGxpZmljYXRpb24KSW5k
ZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Fl
cy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorVGVzdCBBRVMtQ0JDIGVu
Y3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0IGtleS4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0ltcG9ydGluZyBhIHJhdyBBRVMga2V5IGZyb20gc3Ry
aW5nIGxpdGVyYWwuLi4KK1BBU1Mga2V5LnR5cGUgaXMgJ3NlY3JldCcKK1BBU1Mga2V5LmV4dHJh
Y3RhYmxlIGlzIHRydWUKK1BBU1Mga2V5LmFsZ29yaXRobS5uYW1lIGlzICdhZXMtY2JjJworUEFT
UyBrZXkuYWxnb3JpdGhtLmxlbmd0aCBpcyAxOTIKK1BBU1Mga2V5LnVzYWdlcyBpcyBbJ2VuY3J5
cHQnLCAnZGVjcnlwdCddCitVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0Li4uCitQ
QVNTIGJ5dGVBcnJheVRvSGV4U3RyaW5nKG5ldyBVaW50OEFycmF5KGVuY3J5cHRpb25SZXN1bHQp
KSBpcyAnWzRmIDAyIDFkIGIyIDQzIGJjIDYzIDNkIDcxIDc4IDE4IDNhIDlmIGEwIDcxIGU4IGI0
IGQ5IGFkIGE5IGFkIDdkIGVkIGY0IGU1IGU3IDM4IDc2IDNmIDY5IDE0IDVhIDU3IDFiIDI0IDIw
IDEyIGZiIDdhIGUwIDdmIGE5IGJhIGFjIDNkIGYxIDAyIGUwIDA4IGIwIGUyIDc5IDg4IDU5IDg4
IDgxIGQ5IDIwIGE5IGU2IDRmIDU2IDE1IGNkIDYxIDJjIGNkIDc5IDIyIDRiIDM1IDA5IDM1IGQ0
IDVkIGQ2IGE5IDhmIDgxIDc2XScKK0RlY3J5cHRpbmcgaXQgYmFjay4uLgorUEFTUyBuZXcgVWlu
dDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMTkyLWVuY3J5cHQtZGVjcnlwdC1leHBl
Y3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0
ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1k
ZWNyeXB0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvYWVzLWNiYy0xOTItZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisK
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQg
ZnVuY3Rpb25zIHdpdGggYSAyNTYgYml0IGtleS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7
CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRv
dy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIga2V5RGF0YSA9IGhleFRvQXJyYXlCdWZmZXIo
IjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1NjJmOGVhZDI1MjJjNmI3YiIpOwordmFy
IGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYi
KTsKK3ZhciBwbGFpbnRleHQgPSBoZXhUb0FycmF5QnVmZmVyKCI2YmMxYmVlMjJlNDA5Zjk2ZTkz
ZDdlMTE3MzkzMTcyYWFlMmQ4YTU3MWUwM2FjOWM5ZWI3NmZhYzQ1YWY4ZTUxMzBjODFjNDZhMzVj
ZTQxMWU1ZmJjMTE5MWEwYTUyZWZmNjlmMjQ0NWRmNGY5YjE3YWQyYjQxN2JlNjZjMzcxMCIpOwor
dmFyIGV4dHJhY3RhYmxlID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGluZyBhIHJhdyBBRVMga2V5
IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4iKTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJyYXci
LCBrZXlEYXRhLCAiYWVzLWNiYyIsIGV4dHJhY3RhYmxlLCBbImVuY3J5cHQiLCAiZGVjcnlwdCJd
KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3VsdDsKKyAgICBzaG91bGRC
ZSgia2V5LnR5cGUiLCAiJ3NlY3JldCciKTsKKyAgICBzaG91bGRCZSgia2V5LmV4dHJhY3RhYmxl
IiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwgIidhZXMtY2Jj
JyIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICIxOTIiKTsKKyAgICBz
aG91bGRCZSgia2V5LnVzYWdlcyIsICJbJ2VuY3J5cHQnLCAnZGVjcnlwdCddIik7CisKKyAgICBk
ZWJ1ZygiVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWludGV4dC4uLiIpOworICAgIHJldHVy
biBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6IGl2fSwga2V5LCBb
cGxhaW50ZXh0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGVuY3J5cHRpb25S
ZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5nKG5ldyBV
aW50OEFycmF5KGVuY3J5cHRpb25SZXN1bHQpKSIsICInWzRmIDAyIDFkIGIyIDQzIGJjIDYzIDNk
IDcxIDc4IDE4IDNhIDlmIGEwIDcxIGU4IGI0IGQ5IGFkIGE5IGFkIDdkIGVkIGY0IGU1IGU3IDM4
IDc2IDNmIDY5IDE0IDVhIDU3IDFiIDI0IDIwIDEyIGZiIDdhIGUwIDdmIGE5IGJhIGFjIDNkIGYx
IDAyIGUwIDA4IGIwIGUyIDc5IDg4IDU5IDg4IDgxIGQ5IDIwIGE5IGU2IDRmIDU2IDE1IGNkIDYx
IDJjIGNkIDc5IDIyIDRiIDM1IDA5IDM1IGQ0IDVkIGQ2IGE5IDhmIDgxIDc2XSciKTsKKworICAg
IGRlYnVnKCJEZWNyeXB0aW5nIGl0IGJhY2suLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRs
ZS5kZWNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3Jlc3VsdF0pOworfSku
dGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBkZWNyeXB0aW9uUmVzdWx0ID0gcmVzdWx0Owor
ICAgIHNob3VsZEJlKCJuZXcgVWludDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSIsICJwbGFpbnRl
eHQiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9h
ZXMtY2JjLTE5Mi1lbmNyeXB0LWRlY3J5cHQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5
cHQtZGVjcnlwdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRv
L3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRl
Y3J5cHQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3Qg
QUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNyeXB0IGZ1bmN0aW9ucyB3aXRoIGEgMjU2IGJpdCBrZXku
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitJbXBvcnRpbmcgYSByYXcgQUVTIGtl
eSBmcm9tIHN0cmluZyBsaXRlcmFsLi4uCitQQVNTIGtleS50eXBlIGlzICdzZWNyZXQnCitQQVNT
IGtleS5leHRyYWN0YWJsZSBpcyB0cnVlCitQQVNTIGtleS5hbGdvcml0aG0ubmFtZSBpcyAnYWVz
LWNiYycKK1BBU1Mga2V5LmFsZ29yaXRobS5sZW5ndGggaXMgMjU2CitQQVNTIGtleS51c2FnZXMg
aXMgWydlbmNyeXB0JywgJ2RlY3J5cHQnXQorVXNpbmcgdGhlIGtleSB0byBlbmNyeXB0IHBsYWlu
dGV4dC4uLgorUEFTUyBieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhBcnJheShlbmNyeXB0
aW9uUmVzdWx0KSkgaXMgJ1tmNSA4YyA0YyAwNCBkNiBlNSBmMSBiYSA3NyA5ZSBhYiBmYiA1ZiA3
YiBmYiBkNiA5YyBmYyA0ZSA5NiA3ZSBkYiA4MCA4ZCA2NyA5ZiA3NyA3YiBjNiA3MCAyYyA3ZCAz
OSBmMiAzMyA2OSBhOSBkOSBiYSBjZiBhNSAzMCBlMiA2MyAwNCAyMyAxNCA2MSBiMiBlYiAwNSBl
MiBjMyA5YiBlOSBmYyBkYSA2YyAxOSAwNyA4YyA2YSA5ZCAxYiAzZiA0NiAxNyA5NiBkNiBiMCBk
NiBiMiBlMCBjMiBhNyAyYiA0ZCA4MCBlNiA0NF0nCitEZWNyeXB0aW5nIGl0IGJhY2suLi4KK1BB
U1MgbmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkgaXMgcGxhaW50ZXh0CitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLTI1Ni1lbmNyeXB0LWRl
Y3J5cHQtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAs
MCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2
LWVuY3J5cHQtZGVjcnlwdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvYWVzLWNiYy0yNTYtZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQUVTLUNCQyBlbmNyeXB0IGFu
ZCBkZWNyeXB0IGZ1bmN0aW9ucyB3aXRoIGEgMjU2IGJpdCBrZXkuIik7CisKK2pzVGVzdElzQXN5
bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAgd2luZG93LmNyeXB0by5zdWJ0
bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFyIGtleURhdGEgPSBoZXhUb0Fy
cmF5QnVmZmVyKCI2MDNkZWIxMDE1Y2E3MWJlMmI3M2FlZjA4NTdkNzc4MTFmMzUyYzA3M2I2MTA4
ZDcyZDk4MTBhMzA5MTRkZmY0Iik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIw
MzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlC
dWZmZXIoIjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5Yzll
Yjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0
ZjliMTdhZDJiNDE3YmU2NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1
ZygiSW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLiIpOworY3J5
cHRvLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsIGtleURhdGEsICJhZXMtY2JjIiwgZXh0cmFjdGFi
bGUsIFsiZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAg
a2V5ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJrZXkudHlwZSIsICInc2VjcmV0JyIpOworICAg
IHNob3VsZEJlKCJrZXkuZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJrZXku
YWxnb3JpdGhtLm5hbWUiLCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0
aG0ubGVuZ3RoIiwgIjI1NiIpOworICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgIlsnZW5jcnlw
dCcsICdkZWNyeXB0J10iKTsKKworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQg
cGxhaW50ZXh0Li4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTog
ImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKTsKK30pLnRoZW4oZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAgZW5jcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgi
Ynl0ZUFycmF5VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvblJlc3VsdCkpIiwg
IidbZjUgOGMgNGMgMDQgZDYgZTUgZjEgYmEgNzcgOWUgYWIgZmIgNWYgN2IgZmIgZDYgOWMgZmMg
NGUgOTYgN2UgZGIgODAgOGQgNjcgOWYgNzcgN2IgYzYgNzAgMmMgN2QgMzkgZjIgMzMgNjkgYTkg
ZDkgYmEgY2YgYTUgMzAgZTIgNjMgMDQgMjMgMTQgNjEgYjIgZWIgMDUgZTIgYzMgOWIgZTkgZmMg
ZGEgNmMgMTkgMDcgOGMgNmEgOWQgMWIgM2YgNDYgMTcgOTYgZDYgYjAgZDYgYjIgZTAgYzIgYTcg
MmIgNGQgODAgZTYgNDRdJyIpOworCisgICAgZGVidWcoIkRlY3J5cHRpbmcgaXQgYmFjay4uLiIp
OworICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6ICJhZXMtY2JjIiwgaXY6
IGl2fSwga2V5LCBbcmVzdWx0XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGRl
Y3J5cHRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoIm5ldyBVaW50OEFycmF5KGRl
Y3J5cHRpb25SZXN1bHQpIiwgInBsYWludGV4dCIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9
KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtMjU2LWVuY3J5cHQtZGVjcnlwdC5odG1s
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9odG1s
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLWVuY3J5cHQtZGVjcnlwdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNCBAQAorVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1wb3J0aW5nIGEgcmF3IEFFUyBrZXkgZnJv
bSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFTUyBrZXkudHlwZSBpcyAnc2VjcmV0JworUEFTUyBrZXku
ZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFTUyBrZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ2Flcy1jYmMn
CitQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDEyOAorUEFTUyBrZXkudXNhZ2VzIGlzIFsn
ZW5jcnlwdCcsICdkZWNyeXB0J10KK1VzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQu
Li4KK1BBU1MgYnl0ZUFycmF5VG9IZXhTdHJpbmcobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvblJl
c3VsdCkpIGlzICdbNzYgNDkgYWIgYWMgODEgMTkgYjIgNDYgY2UgZTkgOGUgOWIgMTIgZTkgMTkg
N2QgNTAgODYgY2IgOWIgNTAgNzIgMTkgZWUgOTUgZGIgMTEgM2EgOTEgNzYgNzggYjIgNzMgYmUg
ZDYgYjggZTMgYzEgNzQgM2IgNzEgMTYgZTYgOWUgMjIgMjIgOTUgMTYgM2YgZjEgY2EgYTEgNjgg
MWYgYWMgMDkgMTIgMGUgY2EgMzAgNzUgODYgZTEgYTcgOGMgYjggMjggMDcgMjMgMGUgMTMgMjEg
ZDMgZmEgZTAgMGQgMTggY2MgMjAgMTJdJworRGVjcnlwdGluZyBpdCBiYWNrLi4uCitQQVNTIG5l
dyBVaW50OEFycmF5KGRlY3J5cHRpb25SZXN1bHQpIGlzIHBsYWludGV4dAorVGVzdGluZyBpbml0
aWFsaXphdGlvbiB2ZWN0b3IgYmluZGluZ3MuLi4KK1BBU1MgY3J5cHRvLnN1YnRsZS5lbmNyeXB0
KHtuYW1lOiAnQUVTLUNCQycsIGl2OiBudWxsfSwga2V5LCBbcGxhaW50ZXh0XSkgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogT25seSBBcnJheUJ1ZmZlciBhbmQgQXJyYXlCdWZmZXJWaWV3IG9i
amVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVyYXRpb25EYXRhLgorUEFTUyBjcnlwdG8u
c3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJ30sIGtleSwgW3BsYWludGV4dF0pIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9ubHkgQXJyYXlCdWZmZXIgYW5kIEFycmF5QnVmZmVyVmll
dyBvYmplY3RzIGNhbiBiZSBwYXNzZWQgYXMgQ3J5cHRvT3BlcmF0aW9uRGF0YS4KK1BBU1MgY3J5
cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiAzfSwga2V5LCBbcGxhaW50
ZXh0XSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT25seSBBcnJheUJ1ZmZlciBhbmQgQXJy
YXlCdWZmZXJWaWV3IG9iamVjdHMgY2FuIGJlIHBhc3NlZCBhcyBDcnlwdG9PcGVyYXRpb25EYXRh
LgorUEFTUyBjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IG5ldyBV
aW50OEFycmF5KFswXSl9LCBrZXksIFtwbGFpbnRleHRdKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IEFFUy1DQkMgaW5pdGlhbGl6YXRpb24gZGF0YSBtdXN0IGJlIDE2IGJ5dGVzLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQt
ZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAj
IwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1k
ZWNyeXB0LXdpdGgtcGFkZGluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmctZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMt
Y2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkgQEAKK1Rlc3QgQUVTLUNCQyBlbmNyeXB0IGFuZCBkZWNyeXB0IGZ1
bmN0aW9ucyBvbiBhIHBsYWludGV4dCB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mIGJsb2NrIHNp
emUgaW4gbGVuZ3RoLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1wb3J0aW5n
IGEgcmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLgorUEFTUyBrZXkudHlwZSBpcyAn
c2VjcmV0JworUEFTUyBrZXkuZXh0cmFjdGFibGUgaXMgdHJ1ZQorUEFTUyBrZXkuYWxnb3JpdGht
Lm5hbWUgaXMgJ2Flcy1jYmMnCitQQVNTIGtleS5hbGdvcml0aG0ubGVuZ3RoIGlzIDEyOAorUEFT
UyBrZXkudXNhZ2VzIGlzIFsnZW5jcnlwdCcsICdkZWNyeXB0J10KK1VzaW5nIHRoZSBrZXkgdG8g
ZW5jcnlwdCBwbGFpbnRleHQuLi4KKyAgICA9IFs2MyAwMSA5OSBjNSBmMiAwMiBjYyA3MSA2NyBi
YiA4NCBjNiBjNyAyYiAzNCA5ZF0KK0RlY3J5cHRpbmcgaXQgYmFjay4uLgorUEFTUyBuZXcgVWlu
dDhBcnJheShkZWNyeXB0aW9uUmVzdWx0KSBpcyBwbGFpbnRleHQKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFk
ZGluZy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCww
ICsxICMjCit0ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6
IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNy
eXB0LWRlY3J5cHQtd2l0aC1wYWRkaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9hZXMtY2JjLWVuY3J5cHQtZGVjcnlwdC13aXRoLXBhZGRpbmcuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0
LWRlY3J5cHQtd2l0aC1wYWRkaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiVGVzdCBBRVMtQ0JDIGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zIG9uIGEgcGxhaW50
ZXh0IHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgYmxvY2sgc2l6ZSBpbiBsZW5ndGguIik7CisK
K2pzVGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAgd2luZG93
LmNyeXB0by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFyIGtleURh
dGEgPSBoZXhUb0FycmF5QnVmZmVyKCIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyIp
OwordmFyIGl2ID0gaGV4VG9BcnJheUJ1ZmZlcigiMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMw
ZDBlMGYiKTsKK3ZhciBwbGFpbnRleHQgPSBhc2NpaVRvQXJyYXlCdWZmZXIoInRlc3QiKTsKK3Zh
ciBleHRyYWN0YWJsZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBm
cm9tIHN0cmluZyBsaXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwg
a2V5RGF0YSwgImFlcy1jYmMiLCBleHRyYWN0YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSku
dGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUo
ImtleS50eXBlIiwgIidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIs
ICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWNiYyci
KTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiMTI4Iik7CisgICAgc2hv
dWxkQmUoImtleS51c2FnZXMiLCAiWydlbmNyeXB0JywgJ2RlY3J5cHQnXSIpOworCisgICAgZGVi
dWcoIlVzaW5nIHRoZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICByZXR1cm4g
Y3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3Bs
YWludGV4dF0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBwcmludEFjY2VwdGVk
UmVzdWx0KHJlc3VsdCk7CisKKyAgICBkZWJ1ZygiRGVjcnlwdGluZyBpdCBiYWNrLi4uIik7Cisg
ICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9
LCBrZXksIFtyZXN1bHRdKTsKK30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgZGVjcnlw
dGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgibmV3IFVpbnQ4QXJyYXkoZGVjcnlw
dGlvblJlc3VsdCkiLCAicGxhaW50ZXh0Iik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwv
c2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0LXdpdGgtcGFkZGluZy5o
dG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIwordGV4dC9o
dG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvYWVzLWNiYy1lbmNyeXB0LWRlY3J5cHQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtZW5jcnlwdC1k
ZWNyeXB0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBRVMtQ0JD
IGVuY3J5cHQgYW5kIGRlY3J5cHQgZnVuY3Rpb25zLiIpOworCitqc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKKworaWYgKCF3aW5kb3cuc3VidGxlKQorICAgIHdpbmRvdy5jcnlwdG8uc3VidGxlID0gd2lu
ZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7CisKK3ZhciBrZXlEYXRhID0gaGV4VG9BcnJheUJ1ZmZl
cigiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiKTsKK3ZhciBpdiA9IGhleFRvQXJy
YXlCdWZmZXIoIjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmIik7Cit2YXIgcGxhaW50
ZXh0ID0gaGV4VG9BcnJheUJ1ZmZlcigiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmFh
ZTJkOGE1NzFlMDNhYzljOWViNzZmYWM0NWFmOGU1MTMwYzgxYzQ2YTM1Y2U0MTFlNWZiYzExOTFh
MGE1MmVmZjY5ZjI0NDVkZjRmOWIxN2FkMmI0MTdiZTY2YzM3MTAiKTsKK3ZhciBleHRyYWN0YWJs
ZSA9IHRydWU7CisKK2RlYnVnKCJJbXBvcnRpbmcgYSByYXcgQUVTIGtleSBmcm9tIHN0cmluZyBs
aXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3Iiwga2V5RGF0YSwgImFl
cy1jYmMiLCBleHRyYWN0YWJsZSwgWyJlbmNyeXB0IiwgImRlY3J5cHQiXSkudGhlbihmdW5jdGlv
bihyZXN1bHQpIHsKKyAgICBrZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoImtleS50eXBlIiwg
IidzZWNyZXQnIik7CisgICAgc2hvdWxkQmUoImtleS5leHRyYWN0YWJsZSIsICJ0cnVlIik7Cisg
ICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubmFtZSIsICInYWVzLWNiYyciKTsKKyAgICBzaG91
bGRCZSgia2V5LmFsZ29yaXRobS5sZW5ndGgiLCAiMTI4Iik7CisgICAgc2hvdWxkQmUoImtleS51
c2FnZXMiLCAiWydlbmNyeXB0JywgJ2RlY3J5cHQnXSIpOworCisgICAgZGVidWcoIlVzaW5nIHRo
ZSBrZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRs
ZS5lbmNyeXB0KHtuYW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pOwor
fSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBlbmNyeXB0aW9uUmVzdWx0ID0gcmVzdWx0
OworICAgIHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0cmluZyhuZXcgVWludDhBcnJheShlbmNy
eXB0aW9uUmVzdWx0KSkiLCAiJ1s3NiA0OSBhYiBhYyA4MSAxOSBiMiA0NiBjZSBlOSA4ZSA5YiAx
MiBlOSAxOSA3ZCA1MCA4NiBjYiA5YiA1MCA3MiAxOSBlZSA5NSBkYiAxMSAzYSA5MSA3NiA3OCBi
MiA3MyBiZSBkNiBiOCBlMyBjMSA3NCAzYiA3MSAxNiBlNiA5ZSAyMiAyMiA5NSAxNiAzZiBmMSBj
YSBhMSA2OCAxZiBhYyAwOSAxMiAwZSBjYSAzMCA3NSA4NiBlMSBhNyA4YyBiOCAyOCAwNyAyMyAw
ZSAxMyAyMSBkMyBmYSBlMCAwZCAxOCBjYyAyMCAxMl0nIik7CisKKyAgICBkZWJ1ZygiRGVjcnlw
dGluZyBpdCBiYWNrLi4uIik7CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFt
ZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtyZXN1bHRdKTsKK30pLnRoZW4oZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAgZGVjcnlwdGlvblJlc3VsdCA9IHJlc3VsdDsKKyAgICBzaG91bGRCZSgi
bmV3IFVpbnQ4QXJyYXkoZGVjcnlwdGlvblJlc3VsdCkiLCAicGxhaW50ZXh0Iik7CisKKyAgICBk
ZWJ1ZygiVGVzdGluZyBpbml0aWFsaXphdGlvbiB2ZWN0b3IgYmluZGluZ3MuLi4iKTsKKyAgICBz
aG91bGRUaHJvdygiY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQycsIGl2OiBu
dWxsfSwga2V5LCBbcGxhaW50ZXh0XSkiKTsKKyAgICBzaG91bGRUaHJvdygiY3J5cHRvLnN1YnRs
ZS5lbmNyeXB0KHtuYW1lOiAnQUVTLUNCQyd9LCBrZXksIFtwbGFpbnRleHRdKSIpOworICAgIHNo
b3VsZFRocm93KCJjcnlwdG8uc3VidGxlLmVuY3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IDN9
LCBrZXksIFtwbGFpbnRleHRdKSIpOworICAgIHNob3VsZFRocm93KCJjcnlwdG8uc3VidGxlLmVu
Y3J5cHQoe25hbWU6ICdBRVMtQ0JDJywgaXY6IG5ldyBVaW50OEFycmF5KFswXSl9LCBrZXksIFtw
bGFpbnRleHRdKSIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8v
c3VidGxlL2Flcy1jYmMtZW5jcnlwdC1kZWNyeXB0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
Om1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L2h0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWludmFs
aWQtbGVuZ3RoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8v
c3VidGxlL2Flcy1jYmMtaW52YWxpZC1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3RoLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAzODogU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgaWRlbnRpZmllciAnZmluaXNoSlNUZXN0
Jy4gRXhwZWN0ZWQgJyknIHRvIGVuZCBhIGFyZ3VtZW50IGxpc3QuCitGQUlMIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAo
b2YgdHlwZSB1bmRlZmluZWQpLgorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0aC1leHBl
Y3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0
ZXh0L3BsYWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKQWRkZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1pbnZhbGlkLWxlbmd0
aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy1p
bnZhbGlkLWxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1
YnRsZS9hZXMtY2JjLWludmFsaWQtbGVuZ3RoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbigiVGVzdCBhbiB1bnN1cHBvcnRlZCBBRVMga2V5IGxlbmd0aC4iKTsKKworanNUZXN0
SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRv
LnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIga2V5RGF0YSA9IGhl
eFRvQXJyYXlCdWZmZXIoIjhlNzNiMGY3ZGEwZTY0NTJjODEwZjMyYjgwOTA3OWU1NjJmOGVhZDI1
MjJjIik7Cit2YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBh
MGIwYzBkMGUwZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUy
MmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEz
MGM4MWM0NmEzNWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2
NmMzNzEwIik7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1ZygiSW1wb3J0aW5nIGEg
cmF3IEFFUyBrZXkgZnJvbSBzdHJpbmcgbGl0ZXJhbC4uLiIpOworY3J5cHRvLnN1YnRsZS5pbXBv
cnRLZXkoInJhdyIsIGtleURhdGEsICJhZXMtY2JjIiwgZXh0cmFjdGFibGUsIFsiZW5jcnlwdCIs
ICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAga2V5ID0gcmVzdWx0Owor
ICAgIHNob3VsZEJlKCJrZXkudHlwZSIsICInc2VjcmV0JyIpOworICAgIHNob3VsZEJlKCJrZXku
ZXh0cmFjdGFibGUiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLm5hbWUi
LCAiJ2Flcy1jYmMnIik7CisgICAgc2hvdWxkQmUoImtleS5hbGdvcml0aG0ubGVuZ3RoIiwgIjE3
NiIpOworICAgIHNob3VsZEJlKCJrZXkudXNhZ2VzIiwgIlsnZW5jcnlwdCcsICdkZWNyeXB0J10i
KTsKKworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQgcGxhaW50ZXh0Li4uIik7
CisgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZW5jcnlwdCh7bmFtZTogImFlcy1jYmMiLCBpdjog
aXZ9LCBrZXksIFtwbGFpbnRleHRdKTsKK30pLnRoZW4odW5kZWZpbmVkLCBmdW5jdGlvbihyZXN1
bHQpIHsKKyAgICBkZWJ1ZygiRmFpbGVkLCBhcyBleHBlY3RlZC4gTm90ZSB0aGF0IHRoZSBzcGVj
IGRvZXNuJ3QgYXBwZWFyIHRvIGNsZWFybHkgZGVmaW5lIHdoaWNoIHN0ZXAgc2hvdWxkIGZhaWwu
IgorCisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1j
YmMtaW52YWxpZC1sZW5ndGguaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMj
IC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1j
YmMtd3Jvbmcta2V5LWNsYXNzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgY2FsbGluZyBBRVMtQ0JDIGVuY3J5
cHQgd2l0aCBhIEhNQUMga2V5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworSW1w
b3J0aW5nIGEgcmF3IEhNQUMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4KK1VzaW5nIHRoZSBr
ZXkgdG8gZW5jcnlwdCBwbGFpbnRleHQuLi4KK1BBU1MgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHtu
YW1lOiAiYWVzLWNiYyIsIGl2OiBpdn0sIGtleSwgW3BsYWludGV4dF0pIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogTm90U3VwcG9ydGVkRXJyb3I6IERPTSBFeGNlcHRpb24gOS4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2Flcy1jYmMtd3Jvbmcta2V5LWNsYXNzLWV4
cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMK
K3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmVv
bC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9hZXMtY2JjLXdyb25nLWtleS1j
bGFzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNi
Yy13cm9uZy1rZXktY2xhc3MuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0
by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXktY2xhc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0IGNhbGxpbmcgQUVTLUNCQyBlbmNyeXB0IHdpdGggYSBITUFDIGtl
eS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAg
ICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2
YXIgaXYgPSBoZXhUb0FycmF5QnVmZmVyKCIwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUw
ZiIpOwordmFyIHBsYWludGV4dCA9IGhleFRvQXJyYXlCdWZmZXIoIjZiYzFiZWUyMmU0MDlmOTZl
OTNkN2UxMTczOTMxNzJhYWUyZDhhNTcxZTAzYWM5YzllYjc2ZmFjNDVhZjhlNTEzMGM4MWM0NmEz
NWNlNDExZTVmYmMxMTkxYTBhNTJlZmY2OWYyNDQ1ZGY0ZjliMTdhZDJiNDE3YmU2NmMzNzEwIik7
Cit2YXIgaG1hY0tleSA9IGFzY2lpVG9BcnJheUJ1ZmZlcignYScpOwordmFyIGV4dHJhY3RhYmxl
ID0gdHJ1ZTsKKworZGVidWcoIkltcG9ydGluZyBhIHJhdyBITUFDIGtleSBmcm9tIHN0cmluZyBs
aXRlcmFsLi4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgicmF3IiwgaG1hY0tleSwge25h
bWU6ICdobWFjJywgaGFzaDoge25hbWU6ICdzaGEtMSd9fSwgZXh0cmFjdGFibGUsIFsic2lnbiIs
ICJ2ZXJpZnkiLCAiZW5jcnlwdCIsICJkZWNyeXB0Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7
CisgICAga2V5ID0gcmVzdWx0OworICAgIGRlYnVnKCJVc2luZyB0aGUga2V5IHRvIGVuY3J5cHQg
cGxhaW50ZXh0Li4uIik7CisgICAgc2hvdWxkVGhyb3coJ2NyeXB0by5zdWJ0bGUuZW5jcnlwdCh7
bmFtZTogImFlcy1jYmMiLCBpdjogaXZ9LCBrZXksIFtwbGFpbnRleHRdKScpCisKKyAgICBmaW5p
c2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvYWVzLWNiYy13cm9uZy1rZXkt
Y2xhc3MuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMK
K3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlvdXRU
ZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnktZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDE1ODQ4NCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1h
Yy1zaWduLXZlcmlmeS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci1UZXN0IGNyeXB0by5zdWJ0bGUuZGlnZXN0LgorVGVzdCBITUFDIHNpZ24gYW5kIHZlcmlmeSBm
dW5jdGlvbnMuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIApJbmRleDogTGF5b3V0VGVz
dHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwJKHJldmlzaW9uIDE1
ODQ4NCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC05LDcgKzksNyBAQAogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
CiAKIDxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGVzdCBjcnlwdG8uc3VidGxlLmRpZ2VzdC4iKTsK
K2Rlc2NyaXB0aW9uKCJUZXN0IEhNQUMgc2lnbiBhbmQgdmVyaWZ5IGZ1bmN0aW9ucy4iKTsKIAog
anNUZXN0SXNBc3luYyA9IHRydWU7CiAKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUv
cmVzb3VyY2VzL2NvbW1vbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL3Jlc291cmNlcy9jb21tb24uanMJKHJldmlzaW9uIDE1ODQ4NCkKKysrIExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsMTYgQEAgZnVuY3Rpb24gYXNjaWlUb0FycmF5QnVmZmVyKHN0cikKICAgICByZXR1cm4g
bmV3IFVpbnQ4QXJyYXkoY2hhcnMpOwogfQogCitmdW5jdGlvbiBoZXhUb0FycmF5QnVmZmVyKHN0
cikKK3sKKyAgICBpZiAoc3RyLmxlbmd0aCAlIDIpCisgICAgICAgIHRocm93ICJIZXggc3RyaW5n
IGxlbmdodCBtdXN0IGJlIGV2ZW4iOworICAgIHZhciBjaGFycyA9IFtdOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSAyKQorICAgICAgICBjaGFycy5wdXNoKHBhcnNl
SW50KHN0ci5zdWJzdHIoaSwgMiksIDE2KSk7CisgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNo
YXJzKTsKK30KKwogZnVuY3Rpb24gcHJpbnRSZWplY3RlZFJlc3VsdCh2YWx1ZSkKIHsKICAgICBk
ZWJ1ZygiICAgIHJlamVjdGVkIHdpdGggdmFsdWUgb2YgIiArIHZhbHVlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>