<?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>181522</bug_id>
          
          <creation_ts>2018-01-10 22:31:28 -0800</creation_ts>
          <short_desc>[WebAuthN] Import a CBOR coder from Chromium</short_desc>
          <delta_ts>2018-01-22 13:26:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1388113</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-10 22:31:28 -0800</bug_when>
    <thetext>Import a CBOR coder from Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388114</commentid>
    <comment_count>1</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-10 22:31:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/36055729&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388133</commentid>
    <comment_count>2</comment_count>
      <attachid>331034</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-10 23:10:33 -0800</bug_when>
    <thetext>Created attachment 331034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388134</commentid>
    <comment_count>3</comment_count>
      <attachid>331035</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-10 23:15:15 -0800</bug_when>
    <thetext>Created attachment 331035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388136</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-10 23:18:43 -0800</bug_when>
    <thetext>Attachment 331035 did not pass style-queue:

ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.h:88:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.h:95:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.h:98:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.h:101:  additional_information is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.h:111:  encoded_cbor_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:36:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:36:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:123:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:161:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:169:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:179:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:180:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:181:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:183:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:184:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:186:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:187:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:189:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:190:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:192:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:193:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:195:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:196:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:198:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:199:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:201:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:202:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:206:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:210:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:212:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:213:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:215:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:216:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:218:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:219:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:221:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:222:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:224:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:225:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:227:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:228:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:230:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:231:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:235:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:239:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:241:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:244:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:247:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:248:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:291:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:292:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:295:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:296:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:316:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:317:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:320:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:321:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:322:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:325:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_writer_unittest.cpp:469:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:52:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:78:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:86:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:94:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:113:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:122:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:136:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:145:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:235:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:255:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:263:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:314:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_values_unittest.cpp:320:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:76:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:77:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:78:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:79:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:80:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:81:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:82:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:83:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:84:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:85:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:86:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:87:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:88:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:89:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:102:  input_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:102:  error_code_out is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:105:  error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:108:  The parameter name &quot;it&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:109:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:112:  additional_info is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:113:  additional_info is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:114:  num_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:115:  num_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:116:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:117:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:120:  The parameter name &quot;map&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:120:  _key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:121:  string_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:122:  The parameter name &quot;map&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:122:  _key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:123:  additional_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:123:  uint_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:127:  it_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:128:  end_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:129:  error_code_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.h:132:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:37:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:40:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:54:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:124:  simple_value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:143:  additional_information is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:183:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:190:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:191:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:188:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:193:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:194:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:196:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:197:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:199:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_writer.cpp:203:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:36:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:36:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:85:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:93:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:100:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:152:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:235:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:251:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:258:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:259:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:260:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:262:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:263:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:265:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:266:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:268:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:269:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:281:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:286:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:291:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:296:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:302:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:303:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:304:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:306:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:307:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:309:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:310:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:312:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:313:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:325:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:330:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:335:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:340:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:346:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:347:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:350:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:351:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:376:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:383:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:384:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:387:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:388:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:389:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:392:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:498:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:533:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:535:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:536:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:538:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:539:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:604:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:605:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:608:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:609:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:627:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:628:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:629:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:631:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:632:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:634:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:635:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:636:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:640:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:642:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:643:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:644:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:644:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:646:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:647:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:659:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:661:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:662:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:663:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:665:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:666:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:668:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:669:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:671:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:672:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:674:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:675:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:677:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:678:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:709:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:769:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/third_party/cbor/cbor_reader_unittest.cpp:697:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:78:  a_length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:80:  b_length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:102:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:103:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:104:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:105:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:106:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:107:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:108:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:113:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:114:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:115:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:116:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:120:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:122:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:123:  integer_value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:124:  integer_value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:125:  integer_value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:127:  in_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:128:  in_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:130:  in_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:131:  in_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:132:  in_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:134:  in_array is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:135:  in_array is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:137:  in_map is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:138:  in_map is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:140:  in_simple is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:154:  is_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:155:  is_none is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:156:  is_unsigned is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:157:  is_negative is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:158:  is_integer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:159:  is_bytestring is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:160:  is_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:161:  is_array is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:162:  is_map is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:163:  is_simple is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:177:  type_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:180:  simple_value_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:181:  integer_value_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:182:  bytestring_value_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:183:  string_value_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:184:  array_value_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.h:185:  map_value_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:44:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:78:  integer_value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:83:  integer_value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:89:  in_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:95:  in_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:101:  in_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:106:  in_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:112:  in_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:118:  in_array is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:127:  in_array is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:133:  in_map is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:141:  in_map is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:147:  in_simple is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_values.cpp:155:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:42:  initial_data_byte is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:47:  initial_data_byte is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:76:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:79:  error_code
_out is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:79:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:82:  decoded_cbor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:94:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:106:  initial_byte is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:108:  additional_info is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:137:  additional_info is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:139:  additional_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:144:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:140:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:146:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:147:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:149:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:150:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:152:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:153:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:155:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:156:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:166:  int_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:194:  additional_info is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:203:  possibly_unsupported_simple_value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:216:  num_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:223:  cbor_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:233:  num_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:240:  cbor_byte_string is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:247:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:249:  cbor_array is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:251:  cbor_element is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:259:  max_nesting_level is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:261:  cbor_map is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:275:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:286:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:291:  additional_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:291:  uint_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:306:  _key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:315:  string_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_reader.cpp:325:  _key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_binary.h:57:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/Modules/webauthn/third_party/cbor/cbor_binary.h:59:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 324 in 15 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>1388175</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-01-11 02:22:21 -0800</bug_when>
    <thetext>We usually import third party libraries in Source/ThirdParty.
Would it be possible to do that and build a static library?
I would also recommend to archive any change you are making as a separate file so that next time this library is imported, one can reapply the changes more easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388245</commentid>
    <comment_count>6</comment_count>
      <attachid>331035</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-01-11 08:43:42 -0800</bug_when>
    <thetext>Comment on attachment 331035
Patch

I agree with Youenn about locating the sources in &apos;Source/ThirdParty/cbor&apos;. I think you told me that you were able to build this as a stand-alone binary, so let&apos;s just make it a static library (like we do for libwebrtc). r- to make those changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388587</commentid>
    <comment_count>7</comment_count>
      <attachid>331146</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-11 17:43:54 -0800</bug_when>
    <thetext>Created attachment 331146
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388590</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-11 17:46:58 -0800</bug_when>
    <thetext>Attachment 331146 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:60:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:68:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:76:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:95:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:104:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:118:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:127:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:293:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:299:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:84:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:91:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:278:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:283:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:288:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:293:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:322:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:327:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:332:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:337:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:693:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
Total errors found: 21 in 15 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>1388641</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-01-11 19:17:28 -0800</bug_when>
    <thetext>Last 500 characters of output:
d long&apos;) [-Werror,-Wshorten-64-to-32]
    cborByteString.append(m_it, numBytes);
                   ~~~~~~       ^~~~~~~~
2 errors generated.

** BUILD FAILED **</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388643</commentid>
    <comment_count>10</comment_count>
      <attachid>331146</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-01-11 19:22:28 -0800</bug_when>
    <thetext>Comment on attachment 331146
Patch

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

This version looks good. Please fix the 32-bit issues before you land.

&gt; Source/WebCore/Modules/webauthn/cbor/CBORReader.cpp:35
&gt; +#include &lt;math.h&gt;

&lt;cmath&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388644</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-01-11 19:23:40 -0800</bug_when>
    <thetext>Note: wincairo fails due to this:

c:\webkit-ews\webkit\source\webcore\modules\webauthn\cbor\CBORValue.h(44): error C2079: &apos;CBORValue&apos; uses undefined class &apos;cbor::WEBCORE_TESTSUPPORT_EXPORT&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388646</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-01-11 19:24:49 -0800</bug_when>
    <thetext>Our own Windows build has th same error:

c:\cygwin\home\buildbot\webkit\source\webcore\modules\webauthn\cbor\CBORValue.h(44): error C2079: &apos;CBORValue&apos; uses undefined class &apos;cbor::WEBCORE_TESTSUPPORT_EXPORT&apos; (compiling source file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388655</commentid>
    <comment_count>13</comment_count>
      <attachid>331146</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-11 19:32:10 -0800</bug_when>
    <thetext>Comment on attachment 331146
Patch

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

Thanks Brent for r+ my patch.

&gt;&gt; Source/WebCore/Modules/webauthn/cbor/CBORReader.cpp:35
&gt;&gt; +#include &lt;math.h&gt;
&gt; 
&gt; &lt;cmath&gt;?

Removed. Surprisingly, there is no dependences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388656</commentid>
    <comment_count>14</comment_count>
      <attachid>331158</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-11 19:34:16 -0800</bug_when>
    <thetext>Created attachment 331158
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388657</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-11 19:37:08 -0800</bug_when>
    <thetext>Attachment 331158 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:60:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:68:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:76:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:95:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:104:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:118:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:127:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:293:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORValueTest.cpp:299:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:84:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:91:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:278:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:283:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:288:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:293:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:322:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:327:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:332:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:337:  Consider using ASSERT_EQ instead of ASSERT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/CBORReaderTest.cpp:693:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
Total errors found: 21 in 15 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>1388687</commentid>
    <comment_count>16</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-11 21:05:08 -0800</bug_when>
    <thetext>The mac EWS bots looks quite dead. rq+ regardless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388688</commentid>
    <comment_count>17</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-01-11 21:05:16 -0800</bug_when>
    <thetext>The mac EWS bots looks quite dead. rq+ regardless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388695</commentid>
    <comment_count>18</comment_count>
      <attachid>331158</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-11 21:29:05 -0800</bug_when>
    <thetext>Comment on attachment 331158
Patch for landing

Clearing flags on attachment: 331158

Committed r226862: &lt;https://trac.webkit.org/changeset/226862&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331034</attachid>
            <date>2018-01-10 23:10:33 -0800</date>
            <delta_ts>2018-01-10 23:15:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181522-20180110231032.patch</filename>
            <type>text/plain</type>
            <size>135173</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIyZDVmZTQzOGUzZDU1
ZjM5MjBjMDJmMTgyY2ZmMjNjMTgwYjcxYi4uM2YyZmMzOTdlNzIzOGM2ODdlODAzNzFiZDc0NGQy
NjgwNWY5MDgyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDE4LTAxLTEwICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBv
cnQgYSBDQk9SIGNvZGVyIGZyb20gQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTUyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYw
NTU3Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBvcnRzIGEgQ0JPUiBjb2RlciBpbmNsdWRpbmcgZW5jb2RlciBhbmQgZGVj
b2RlciBmcm9tIENocm9taXVtLiBDQk9SIGVuY29kZXIKKyAgICAgICAgaXMgbmVlZGVkIGZvciBX
ZWJBdXRoTiB0byBlbmNvZGUgYXR0ZXN0YXRpb24gb2JqZWN0IGludG8gYmluYXJpZXMuIEFsc28g
ZXh0ZW5zaW9ucyBpZiBzdXBwb3J0CisgICAgICAgIGluIHRoZSBmdXR1cmUuIEltcGxlbWVudGF0
aW5nIGFuZCBtYWludGFpbmluZyBhIGZ1bGx5LWZsZWRnZWQgQ0JPUiBjb2RlciBkb2Vzbid0IHNl
ZW0gdG8KKyAgICAgICAgYWxpZ24gd2l0aCBXZWJLaXQncyBiZXN0IGludGVyZXN0cy4gVGhlcmVm
b3JlLCBpbXBvcnRpbmcgYSBtb3N0IHN1aXRhYmxlIHRoaXJkIHBhcnR5CisgICAgICAgIGltcGxl
bWVudGF0aW9uIHdpbGwgYmUgd2lzZS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBpdCBvbmx5
IGRvZXMgYSBtaW5pbWFsIGNvZGUgY2hhbmdlcyBpbmNsdWRpbmcgc3R5bGUgY2hhbmdlcyB0byB0
aGUgb3JpZ2luYWwKKyAgICAgICAgY29kZWJhc2UgaW4gb3JkZXIgdG8gaGF2ZSBhIGJldHRlciBy
ZWFkYWJpbGl0eSBhbmQgaW50ZWdyYXRlIHdpdGggV2ViS2l0LiBUaG9zZSBjaGFuZ2VzCisgICAg
ICAgIG1pZ2h0IGluY2x1ZGU6CisgICAgICAgICAgICAxLiBTdWJzdGl0dXRlIGRhdGEgc3RydWN0
dXJlcyB0aGF0IGVuam95IGEgYmV0dGVyIFdURiB2ZXJzaW9uLgorICAgICAgICAgICAgMi4gUmVw
bGFjaW5nIG1hcmNvcy4KKyAgICAgICAgICAgIDMuIEltcGxlbWVudGF0aW5nIHdvcmthcm91bmRz
IGZvciBzb21lIGZ1bmN0aW9uYWxpdGllcyB0aGF0IHdlIGxhY2sgZnVuZGFtZW50YWwgdHlwZXMn
IHN1cHBvcnQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2Vzbid0IGludGVuZCB0byBmb3JtYXQg
dGhlIHdob2xlIGNvZGViYXNlIGludG8gV2ViS2l0J3MgY29kaW5nIHN0eWxlcywgd2hpY2gKKyAg
ICAgICAgY291bGQgdGFrZSBzb21lIHRpZGlvdXMgZWZmb3J0cyB3aGlsZSB0aGUgb3V0Y29tZSBp
cyB1bmNsZWFyLgorCisgICAgICAgIENvdmVyZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICog
TW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfYmluYXJ5Lmg6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3JlYWRlci5j
cHA6IEFkZGVkLgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6Q0JPUlJlYWRlcik6CisgICAg
ICAgIChjYm9yOjpDQk9SUmVhZGVyOjp+Q0JPUlJlYWRlcik6CisgICAgICAgIChjYm9yOjpDQk9S
UmVhZGVyOjpSZWFkKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OkRlY29kZUNCT1IpOgor
ICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6UmVhZFZhcmlhZGljTGVuZ3RoSW50ZWdlcik6Cisg
ICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpEZWNvZGVWYWx1ZVRvTmVnYXRpdmUpOgorICAgICAg
ICAoY2Jvcjo6Q0JPUlJlYWRlcjo6RGVjb2RlVmFsdWVUb1Vuc2lnbmVkKToKKyAgICAgICAgKGNi
b3I6OkNCT1JSZWFkZXI6OlJlYWRTaW1wbGVWYWx1ZSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVh
ZGVyOjpSZWFkU3RyaW5nKToKKyAgICAgICAgV29ya2Fyb3VuZHMgYXBwbGllZC4KKyAgICAgICAg
KGNib3I6OkNCT1JSZWFkZXI6OlJlYWRCeXRlcyk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVy
OjpSZWFkQ0JPUkFycmF5KToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OlJlYWRDQk9STWFw
KToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OkNhbkNvbnN1bWUpOgorICAgICAgICAoY2Jv
cjo6Q0JPUlJlYWRlcjo6Q2hlY2tNaW5pbWFsRW5jb2RpbmcpOgorICAgICAgICAoY2Jvcjo6Q0JP
UlJlYWRlcjo6Q2hlY2tFeHRyYW5lb3VzRGF0YSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVy
OjpDaGVja0R1cGxpY2F0ZUtleSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpIYXNWYWxp
ZFVURjhGb3JtYXQpOgorICAgICAgICBXb3JrYXJvdW5kcyBhcHBsaWVkLgorICAgICAgICAoY2Jv
cjo6Q0JPUlJlYWRlcjo6Q2hlY2tPdXRPZk9yZGVyS2V5KToKKyAgICAgICAgKGNib3I6OkNCT1JS
ZWFkZXI6OkdldEVycm9yQ29kZSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpFcnJvckNv
ZGVUb1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9y
L2Nib3JfcmVhZGVyLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRf
cGFydHkvY2Jvci9jYm9yX3ZhbHVlcy5jcHA6IEFkZGVkLgorICAgICAgICAoY2Jvcjo6Q0JPUlZh
bHVlOjpDQk9SVmFsdWUpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjp+Q0JPUlZhbHVlKToK
KyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6Q2xvbmUgY29uc3QpOgorICAgICAgICAoY2Jvcjo6
Q0JPUlZhbHVlOjpHZXRJbnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6
R2V0VW5zaWduZWQgY29uc3QpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjpHZXROZWdhdGl2
ZSBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkdldFN0cmluZyBjb25zdCk6Cisg
ICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkdldEJ5dGVzdHJpbmcgY29uc3QpOgorICAgICAgICAo
Y2Jvcjo6Q0JPUlZhbHVlOjpHZXRBcnJheSBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFs
dWU6OkdldE1hcCBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkdldFNpbXBsZVZh
bHVlIGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6SW50ZXJuYWxNb3ZlQ29uc3Ry
dWN0RnJvbSk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkludGVybmFsQ2xlYW51cCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfdmFsdWVzLmg6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9y
X3dyaXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6fkNCT1JXcml0
ZXIpOgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6V3JpdGUpOgorICAgICAgICAoY2Jvcjo6
Q0JPUldyaXRlcjo6Q0JPUldyaXRlcik6CisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpFbmNv
ZGVDQk9SKToKKyAgICAgICAgV29ya2Fyb3VuZHMgYXBwbGllZC4KKyAgICAgICAgKGNib3I6OkNC
T1JXcml0ZXI6OlN0YXJ0SXRlbSk6CisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpTZXRBZGRp
dGlvbmFsSW5mb3JtYXRpb24pOgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6U2V0VWludCk6
CisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpHZXROdW1VaW50Qnl0ZXMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3dyaXRlci5oOiBBZGRlZC4K
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisKIDIwMTgtMDEtMDIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIE1lbW9yeSBjYWNoZSBzaG91bGQgbm90IHJldXNlIHJlc291cmNlcyB3
aXRoIGRpZmZlcmVudCBjcmVkZW50aWFsIGZldGNoIG9wdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfYmluYXJ5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9i
aW5hcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43N2E1MWUwMzNjMTY2YjU4NDgxYWM3YTNiZjQ3YTllYWExYmQx
ZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90
aGlyZF9wYXJ0eS9jYm9yL2Nib3JfYmluYXJ5LmgKQEAgLTAsMCArMSw1OSBAQAorLy8gQ29weXJp
Z2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Ky8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisv
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8c3RkaW50Lmg+
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgY2JvciB7CisKK25hbWVzcGFjZSBjb25zdGFu
dHMgeworCisvLyBNYXNrIHNlbGVjdGluZyB0aGUgbG93LW9yZGVyIDUgYml0cyBvZiB0aGUgImlu
aXRpYWwgYnl0ZSIsIHdoaWNoIGlzIHdoZXJlCisvLyB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlv
biBpcyBlbmNvZGVkLgorc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGtBZGRpdGlvbmFsSW5mb3Jt
YXRpb25NYXNrID0gMHgxRjsKKy8vIE1hc2sgc2VsZWN0aW5nIHRoZSBoaWdoLW9yZGVyIDMgYml0
cyBvZiB0aGUgImluaXRpYWwgYnl0ZSIsIHdoaWNoIGluZGljYXRlcworLy8gdGhlIG1ham9yIHR5
cGUgb2YgdGhlIGVuY29kZWQgdmFsdWUuCitzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga01ham9y
VHlwZU1hc2sgPSAweEUwOworLy8gSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYml0cyB0aGUgImlu
aXRpYWwgYnl0ZSIgbmVlZHMgdG8gYmUgc2hpZnRlZCB0byB0aGUKKy8vIHJpZ2h0IGFmdGVyIGFw
cGx5aW5nIHxrTWFqb3JUeXBlTWFza3wgdG8gcHJvZHVjZSB0aGUgbWFqb3IgdHlwZSBpbiB0aGUK
Ky8vIGxvd2VybW9zdCBiaXRzLgorc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGtNYWpvclR5cGVC
aXRTaGlmdCA9IDV1OworLy8gSW5kaWNhdGVzIHRoZSBpbnRlZ2VyIGlzIGluIHRoZSBmb2xsb3dp
bmcgYnl0ZS4KK3N0YXRpYyBjb25zdGV4cHIgdWludDhfdCBrQWRkaXRpb25hbEluZm9ybWF0aW9u
MUJ5dGUgPSAyNHU7CisvLyBJbmRpY2F0ZXMgdGhlIGludGVnZXIgaXMgaW4gdGhlIG5leHQgMiBi
eXRlcy4KK3N0YXRpYyBjb25zdGV4cHIgdWludDhfdCBrQWRkaXRpb25hbEluZm9ybWF0aW9uMkJ5
dGVzID0gMjV1OworLy8gSW5kaWNhdGVzIHRoZSBpbnRlZ2VyIGlzIGluIHRoZSBuZXh0IDQgYnl0
ZXMuCitzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga0FkZGl0aW9uYWxJbmZvcm1hdGlvbjRCeXRl
cyA9IDI2dTsKKy8vIEluZGljYXRlcyB0aGUgaW50ZWdlciBpcyBpbiB0aGUgbmV4dCA4IGJ5dGVz
Lgorc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGtBZGRpdGlvbmFsSW5mb3JtYXRpb244Qnl0ZXMg
PSAyN3U7CisKK30gIC8vIG5hbWVzcGFjZSBjb25zdGFudHMKKworfSAgLy8gbmFtZXNwYWNlIGNi
b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFy
dHkvY2Jvci9jYm9yX3JlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhu
L3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9yZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5ZGMxZTUyNTdm
NWY2NjNjNzU5NzlhYzJkNzU2ZGZiNWFiYzIyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9yZWFkZXIuY3Bw
CkBAIC0wLDAgKzEsMzc4IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisv
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjYm9yX3JlYWRlci5oIgor
CisjaW5jbHVkZSAiY2Jvcl9iaW5hcnkuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8
bWF0aC5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBjYm9yIHsKKworbmFtZXNw
YWNlIHsKKworQ0JPUlZhbHVlOjpUeXBlIEdldE1ham9yVHlwZSh1aW50OF90IGluaXRpYWxfZGF0
YV9ieXRlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDQk9SVmFsdWU6OlR5cGU+KChpbml0
aWFsX2RhdGFfYnl0ZSAmIGNvbnN0YW50czo6a01ham9yVHlwZU1hc2spID4+IGNvbnN0YW50czo6
a01ham9yVHlwZUJpdFNoaWZ0KTsKK30KKwordWludDhfdCBHZXRBZGRpdGlvbmFsSW5mbyh1aW50
OF90IGluaXRpYWxfZGF0YV9ieXRlKQoreworICAgIHJldHVybiBpbml0aWFsX2RhdGFfYnl0ZSAm
IGNvbnN0YW50czo6a0FkZGl0aW9uYWxJbmZvcm1hdGlvbk1hc2s7Cit9CisKKy8vIEVycm9yIG1l
c3NhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byBlYWNoIG9mIHRoZSBlcnJvciBjb2Rlcy4KK2NvbnN0
IGNoYXIga05vRXJyb3JbXSA9ICJTdWNjZXNzZnVsbHkgZGVzZXJpYWxpemVkIHRvIGEgQ0JPUiB2
YWx1ZS4iOworY29uc3QgY2hhciBrVW5zdXBwb3J0ZWRNYWpvclR5cGVbXSA9ICJVbnN1cHBvcnRl
ZCBtYWpvciB0eXBlLiI7Citjb25zdCBjaGFyIGtVbmtub3duQWRkaXRpb25hbEluZm9bXSA9ICJV
bmtub3duIGFkZGl0aW9uYWwgaW5mbyBmb3JtYXQgaW4gdGhlIGZpcnN0IGJ5dGUuIjsKK2NvbnN0
IGNoYXIga0luY29tcGxldGVDQk9SRGF0YVtdID0gIlByZW1hdHVyZWx5IHRlcm1pbmF0ZWQgQ0JP
UiBkYXRhIGJ5dGUgYXJyYXkuIjsKK2NvbnN0IGNoYXIga0luY29ycmVjdE1hcEtleVR5cGVbXSA9
ICJNYXAga2V5cyBvdGhlciB0aGFuIHV0Zi04IGVuY29kZWQgc3RyaW5ncyBhcmUgbm90IGFsbG93
ZWQuIjsKK2NvbnN0IGNoYXIga1Rvb011Y2hOZXN0aW5nW10gPSAiVG9vIG11Y2ggbmVzdGluZy4i
OworY29uc3QgY2hhciBrSW52YWxpZFVURjhbXSA9ICJTdHJpbmcgZW5jb2Rpbmcgb3RoZXIgdGhh
biB1dGY4IGFyZSBub3QgYWxsb3dlZC4iOworY29uc3QgY2hhciBrRXh0cmFuZW91c0RhdGFbXSA9
ICJUcmFpbGluZyBkYXRhIGJ5dGVzIGFyZSBub3QgYWxsb3dlZC4iOworY29uc3QgY2hhciBrRHVw
bGljYXRlS2V5W10gPSAiRHVwbGljYXRlIG1hcCBrZXlzIGFyZSBub3QgYWxsb3dlZC4iOworY29u
c3QgY2hhciBrTWFwS2V5T3V0T2ZPcmRlcltdID0gIk1hcCBrZXlzIG11c3QgYmUgc29ydGVkIGJ5
IGJ5dGUgbGVuZ3RoIGFuZCB0aGVuIGJ5IGJ5dGUtd2lzZSBsZXhpY2FsIG9yZGVyLiI7Citjb25z
dCBjaGFyIGtOb25NaW5pbWFsQ0JPUkVuY29kaW5nW10gPSAiVW5zaWduZWQgaW50ZWdlcnMgbXVz
dCBiZSBlbmNvZGVkIHdpdGggbWluaW11bSBudW1iZXIgb2YgYnl0ZXMuIjsKK2NvbnN0IGNoYXIg
a1Vuc3VwcG9ydGVkU2ltcGxlVmFsdWVbXSA9ICJVbnN1cHBvcnRlZCBvciB1bmFzc2lnbmVkIHNp
bXBsZSB2YWx1ZS4iOworY29uc3QgY2hhciBrVW5zdXBwb3J0ZWRGbG9hdGluZ1BvaW50VmFsdWVb
XSA9ICJGbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiI7Citjb25zdCBj
aGFyIGtPdXRPZlJhbmdlSW50ZWdlclZhbHVlW10gPSAiSW50ZWdlciB2YWx1ZXMgbXVzdCBiZSBi
ZXR3ZWVuIElOVDY0X01JTiBhbmQgSU5UNjRfTUFYLiI7CisKK30gLy8gbmFtZXNwYWNlCisKK0NC
T1JSZWFkZXI6OkNCT1JSZWFkZXIoQnl0ZXM6OmNvbnN0X2l0ZXJhdG9yIGl0LCBCeXRlczo6Y29u
c3RfaXRlcmF0b3IgZW5kKQorICAgIDogaXRfKGl0KQorICAgICwgZW5kXyhlbmQpCisgICAgLCBl
cnJvcl9jb2RlXyhEZWNvZGVyRXJyb3I6OkNCT1JfTk9fRVJST1IpCit7Cit9CitDQk9SUmVhZGVy
Ojp+Q0JPUlJlYWRlcigpIHt9CisKKy8vIHN0YXRpYworc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+
IENCT1JSZWFkZXI6OlJlYWQoY29uc3QgQnl0ZXMmIGRhdGEsIERlY29kZXJFcnJvciogZXJyb3Jf
Y29kZV9vdXQsIGludCBtYXhfbmVzdGluZ19sZXZlbCkKK3sKKyAgICBDQk9SUmVhZGVyIHJlYWRl
cihkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVl
PiBkZWNvZGVkX2Nib3IgPSByZWFkZXIuRGVjb2RlQ0JPUihtYXhfbmVzdGluZ19sZXZlbCk7CisK
KyAgICBpZiAoZGVjb2RlZF9jYm9yKQorICAgICAgICByZWFkZXIuQ2hlY2tFeHRyYW5lb3VzRGF0
YSgpOworICAgIGlmIChlcnJvcl9jb2RlX291dCkKKyAgICAgICAgKmVycm9yX2NvZGVfb3V0ID0g
cmVhZGVyLkdldEVycm9yQ29kZSgpOworCisgICAgaWYgKHJlYWRlci5HZXRFcnJvckNvZGUoKSAh
PSBEZWNvZGVyRXJyb3I6OkNCT1JfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgcmV0dXJuIGRlY29kZWRfY2JvcjsKK30KKworc3RkOjpvcHRpb25hbDxDQk9SVmFs
dWU+IENCT1JSZWFkZXI6OkRlY29kZUNCT1IoaW50IG1heF9uZXN0aW5nX2xldmVsKQoreworICAg
IGlmIChtYXhfbmVzdGluZ19sZXZlbCA8IDAgfHwgbWF4X25lc3RpbmdfbGV2ZWwgPiBrQ0JPUk1h
eERlcHRoKSB7CisgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2RlckVycm9yOjpUT09fTVVDSF9O
RVNUSU5HOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlmICgh
Q2FuQ29uc3VtZSgxKSkgeworICAgICAgICBlcnJvcl9jb2RlXyA9IERlY29kZXJFcnJvcjo6SU5D
T01QTEVURV9DQk9SX0RBVEE7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQor
CisgICAgY29uc3QgdWludDhfdCBpbml0aWFsX2J5dGUgPSAqaXRfKys7CisgICAgY29uc3QgYXV0
byBtYWpvcl90eXBlID0gR2V0TWFqb3JUeXBlKGluaXRpYWxfYnl0ZSk7CisgICAgY29uc3QgdWlu
dDhfdCBhZGRpdGlvbmFsX2luZm8gPSBHZXRBZGRpdGlvbmFsSW5mbyhpbml0aWFsX2J5dGUpOwor
CisgICAgdWludDY0X3QgdmFsdWU7CisgICAgaWYgKCFSZWFkVmFyaWFkaWNMZW5ndGhJbnRlZ2Vy
KGFkZGl0aW9uYWxfaW5mbywgJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN3aXRjaCAobWFqb3JfdHlwZSkgeworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpV
TlNJR05FRDoKKyAgICAgICAgcmV0dXJuIERlY29kZVZhbHVlVG9VbnNpZ25lZCh2YWx1ZSk7Cisg
ICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6Ok5FR0FUSVZFOgorICAgICAgICByZXR1cm4gRGVjb2Rl
VmFsdWVUb05lZ2F0aXZlKHZhbHVlKTsKKyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6QllURV9T
VFJJTkc6CisgICAgICAgIHJldHVybiBSZWFkQnl0ZXModmFsdWUpOworICAgIGNhc2UgQ0JPUlZh
bHVlOjpUeXBlOjpTVFJJTkc6CisgICAgICAgIHJldHVybiBSZWFkU3RyaW5nKHZhbHVlKTsKKyAg
ICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6QVJSQVk6CisgICAgICAgIHJldHVybiBSZWFkQ0JPUkFy
cmF5KHZhbHVlLCBtYXhfbmVzdGluZ19sZXZlbCk7CisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6
Ok1BUDoKKyAgICAgICAgcmV0dXJuIFJlYWRDQk9STWFwKHZhbHVlLCBtYXhfbmVzdGluZ19sZXZl
bCk7CisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OlNJTVBMRV9WQUxVRToKKyAgICAgICAgcmV0
dXJuIFJlYWRTaW1wbGVWYWx1ZShhZGRpdGlvbmFsX2luZm8sIHZhbHVlKTsKKyAgICBjYXNlIENC
T1JWYWx1ZTo6VHlwZTo6Tk9ORToKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZXJyb3Jf
Y29kZV8gPSBEZWNvZGVyRXJyb3I6OlVOU1VQUE9SVEVEX01BSk9SX1RZUEU7CisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKworYm9vbCBDQk9SUmVhZGVyOjpSZWFkVmFyaWFkaWNMZW5ndGhJ
bnRlZ2VyKHVpbnQ4X3QgYWRkaXRpb25hbF9pbmZvLCB1aW50NjRfdCogdmFsdWUpCit7CisgICAg
dWludDhfdCBhZGRpdGlvbmFsX2J5dGVzID0gMDsKKyAgICBpZiAoYWRkaXRpb25hbF9pbmZvIDwg
MjQpIHsKKyAgICAgICAgKnZhbHVlID0gYWRkaXRpb25hbF9pbmZvOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoYWRkaXRpb25hbF9pbmZvID09IDI0KSB7CisgICAg
ICAgIGFkZGl0aW9uYWxfYnl0ZXMgPSAxOworICAgIH0KKyAgICBlbHNlIGlmIChhZGRpdGlvbmFs
X2luZm8gPT0gMjUpIHsKKyAgICAgICAgYWRkaXRpb25hbF9ieXRlcyA9IDI7CisgICAgfQorICAg
IGVsc2UgaWYgKGFkZGl0aW9uYWxfaW5mbyA9PSAyNikgeworICAgICAgICBhZGRpdGlvbmFsX2J5
dGVzID0gNDsKKyAgICB9CisgICAgZWxzZSBpZiAoYWRkaXRpb25hbF9pbmZvID09IDI3KSB7Cisg
ICAgICAgIGFkZGl0aW9uYWxfYnl0ZXMgPSA4OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAg
ZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJyb3I6OlVOS05PV05fQURESVRJT05BTF9JTkZPOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFDYW5Db25zdW1lKGFkZGl0aW9u
YWxfYnl0ZXMpKSB7CisgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2RlckVycm9yOjpJTkNPTVBM
RVRFX0NCT1JfREFUQTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVpbnQ2
NF90IGludF9kYXRhID0gMDsKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBhZGRpdGlvbmFs
X2J5dGVzOyArK2kpIHsKKyAgICAgICAgaW50X2RhdGEgPDw9IDg7CisgICAgICAgIGludF9kYXRh
IHw9ICppdF8rKzsKKyAgICB9CisKKyAgICAqdmFsdWUgPSBpbnRfZGF0YTsKKyAgICByZXR1cm4g
Q2hlY2tNaW5pbWFsRW5jb2RpbmcoYWRkaXRpb25hbF9ieXRlcywgaW50X2RhdGEpOworfQorCitz
dGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6RGVjb2RlVmFsdWVUb05lZ2F0aXZl
KHVpbnQ2NF90IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKKyAgICAgICAgZXJyb3Jf
Y29kZV8gPSBEZWNvZGVyRXJyb3I6Ok9VVF9PRl9SQU5HRV9JTlRFR0VSX1ZBTFVFOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4gQ0JPUlZhbHVlKC1zdGF0
aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkgLSAxKTsKK30KKworc3RkOjpvcHRpb25hbDxDQk9SVmFs
dWU+IENCT1JSZWFkZXI6OkRlY29kZVZhbHVlVG9VbnNpZ25lZCh1aW50NjRfdCB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWF4KCkpKSB7CisgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2RlckVycm9y
OjpPVVRfT0ZfUkFOR0VfSU5URUdFUl9WQUxVRTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisgICAgcmV0dXJuIENCT1JWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1
ZSkpOworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6UmVhZFNpbXBs
ZVZhbHVlKHVpbnQ4X3QgYWRkaXRpb25hbF9pbmZvLCB1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICAv
LyBGbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgIGlmIChhZGRp
dGlvbmFsX2luZm8gPiAyNCAmJiBhZGRpdGlvbmFsX2luZm8gPCAyOCkgeworICAgICAgICBlcnJv
cl9jb2RlXyA9IERlY29kZXJFcnJvcjo6VU5TVVBQT1JURURfRkxPQVRJTkdfUE9JTlRfVkFMVUU7
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgQVNTRVJUKHZhbHVl
IDw9IDI1NXUpOworICAgIENCT1JWYWx1ZTo6U2ltcGxlVmFsdWUgcG9zc2libHlfdW5zdXBwb3J0
ZWRfc2ltcGxlX3ZhbHVlID0gc3RhdGljX2Nhc3Q8Q0JPUlZhbHVlOjpTaW1wbGVWYWx1ZT4oc3Rh
dGljX2Nhc3Q8aW50Pih2YWx1ZSkpOworICAgIHN3aXRjaCAocG9zc2libHlfdW5zdXBwb3J0ZWRf
c2ltcGxlX3ZhbHVlKSB7CisgICAgY2FzZSBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpGQUxTRV9W
QUxVRToKKyAgICBjYXNlIENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlRSVUVfVkFMVUU6CisgICAg
Y2FzZSBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpOVUxMX1ZBTFVFOgorICAgIGNhc2UgQ0JPUlZh
bHVlOjpTaW1wbGVWYWx1ZTo6VU5ERUZJTkVEOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKHBv
c3NpYmx5X3Vuc3VwcG9ydGVkX3NpbXBsZV92YWx1ZSk7CisgICAgfQorCisgICAgZXJyb3JfY29k
ZV8gPSBEZWNvZGVyRXJyb3I6OlVOU1VQUE9SVEVEX1NJTVBMRV9WQUxVRTsKKyAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6
UmVhZFN0cmluZyh1aW50NjRfdCBudW1fYnl0ZXMpCit7CisgICAgaWYgKCFDYW5Db25zdW1lKG51
bV9ieXRlcykpIHsKKyAgICAgICAgZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJyb3I6OklOQ09NUExF
VEVfQ0JPUl9EQVRBOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAg
IFN0cmluZyBjYm9yX3N0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoaXRfLCBudW1fYnl0ZXMpOwor
ICAgIGl0XyArPSBudW1fYnl0ZXM7CisKKyAgICAvLyBJbnZhbGlkIFVURjggYnl0ZXMgcHJvZHVj
ZSBhbiBlbXB0eSBXVEZTdHJpbmcuCisgICAgLy8gTm90IHRvIGNvbmZ1c2UgaXQgd2l0aCBhbiBh
Y3R1YWwgZW1wdHkgV1RGU3RyaW5nLgorICAgIGlmICghbnVtX2J5dGVzIHx8IEhhc1ZhbGlkVVRG
OEZvcm1hdChjYm9yX3N0cmluZykpCisgICAgICAgIHJldHVybiBDQk9SVmFsdWUoV1RGTW92ZShj
Ym9yX3N0cmluZykpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8Q0JPUlZhbHVlPiBDQk9SUmVhZGVyOjpSZWFkQnl0ZXModWludDY0X3QgbnVtX2J5dGVzKQor
eworICAgIGlmICghQ2FuQ29uc3VtZShudW1fYnl0ZXMpKSB7CisgICAgICAgIGVycm9yX2NvZGVf
ID0gRGVjb2RlckVycm9yOjpJTkNPTVBMRVRFX0NCT1JfREFUQTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBCeXRlcyBjYm9yX2J5dGVfc3RyaW5nOworICAgIGNi
b3JfYnl0ZV9zdHJpbmcuYXBwZW5kKGl0XywgbnVtX2J5dGVzKTsKKyAgICBpdF8gKz0gbnVtX2J5
dGVzOworCisgICAgcmV0dXJuIENCT1JWYWx1ZShXVEZNb3ZlKGNib3JfYnl0ZV9zdHJpbmcpKTsK
K30KKworc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IENCT1JSZWFkZXI6OlJlYWRDQk9SQXJyYXko
dWludDY0X3QgbGVuZ3RoLCBpbnQgbWF4X25lc3RpbmdfbGV2ZWwpCit7CisgICAgQ0JPUlZhbHVl
OjpBcnJheVZhbHVlIGNib3JfYXJyYXk7CisgICAgd2hpbGUgKGxlbmd0aC0tID4gMCkgeworICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2Jvcl9lbGVtZW50ID0gRGVjb2RlQ0JPUiht
YXhfbmVzdGluZ19sZXZlbCAtIDEpOworICAgICAgICBpZiAoIWNib3JfZWxlbWVudC5oYXNfdmFs
dWUoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGNib3JfYXJy
YXkuYXBwZW5kKFdURk1vdmUoY2Jvcl9lbGVtZW50LnZhbHVlKCkpKTsKKyAgICB9CisgICAgcmV0
dXJuIENCT1JWYWx1ZShXVEZNb3ZlKGNib3JfYXJyYXkpKTsKK30KKworc3RkOjpvcHRpb25hbDxD
Qk9SVmFsdWU+IENCT1JSZWFkZXI6OlJlYWRDQk9STWFwKHVpbnQ2NF90IGxlbmd0aCwgaW50IG1h
eF9uZXN0aW5nX2xldmVsKQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgY2Jvcl9tYXA7Cisg
ICAgd2hpbGUgKGxlbmd0aC0tID4gMCkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1
ZT4ga2V5ID0gRGVjb2RlQ0JPUihtYXhfbmVzdGluZ19sZXZlbCAtIDEpOworICAgICAgICBzdGQ6
Om9wdGlvbmFsPENCT1JWYWx1ZT4gdmFsdWUgPSBEZWNvZGVDQk9SKG1heF9uZXN0aW5nX2xldmVs
IC0gMSk7CisgICAgICAgIGlmICgha2V5Lmhhc192YWx1ZSgpIHx8ICF2YWx1ZS5oYXNfdmFsdWUo
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgLy8gT25seSBD
Qk9SIG1hcHMgd2l0aCBpbnRlZ2VyIG9yIHN0cmluZyB0eXBlIGtleXMgYXJlIGFsbG93ZWQuCisg
ICAgICAgIGlmIChrZXkudmFsdWUoKS50eXBlKCkgIT0gQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcg
JiYga2V5LnZhbHVlKCkudHlwZSgpICE9IENCT1JWYWx1ZTo6VHlwZTo6VU5TSUdORUQpIHsKKyAg
ICAgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2RlckVycm9yOjpJTkNPUlJFQ1RfTUFQX0tFWV9U
WVBFOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIUNoZWNrRHVwbGljYXRlS2V5KGtleS52YWx1ZSgpLCBjYm9yX21hcCkgfHwgIUNoZWNr
T3V0T2ZPcmRlcktleShrZXkudmFsdWUoKSwgY2Jvcl9tYXApKSB7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgY2Jvcl9tYXAuZW1wbGFjZShz
dGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleS52YWx1ZSgpKSwgV1RGTW92ZSh2YWx1ZS52YWx1ZSgp
KSkpOworICAgIH0KKyAgICByZXR1cm4gQ0JPUlZhbHVlKFdURk1vdmUoY2Jvcl9tYXApKTsKK30K
KworYm9vbCBDQk9SUmVhZGVyOjpDYW5Db25zdW1lKHVpbnQ2NF90IGJ5dGVzKQoreworICAgIGlm
IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpkaXN0YW5jZShpdF8sIGVuZF8pKSA+PSBieXRl
cykgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZXJyb3JfY29kZV8gPSBEZWNv
ZGVyRXJyb3I6OklOQ09NUExFVEVfQ0JPUl9EQVRBOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBDQk9SUmVhZGVyOjpDaGVja01pbmltYWxFbmNvZGluZyh1aW50OF90IGFkZGl0aW9uYWxf
Ynl0ZXMsIHVpbnQ2NF90IHVpbnRfZGF0YSkKK3sKKyAgICBpZiAoKGFkZGl0aW9uYWxfYnl0ZXMg
PT0gMSAmJiB1aW50X2RhdGEgPCAyNCkgfHwgdWludF9kYXRhIDw9ICgxVUxMIDw8IDggKiAoYWRk
aXRpb25hbF9ieXRlcyA+PiAxKSkgLSAxKSB7CisgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2Rl
ckVycm9yOjpOT05fTUlOSU1BTF9DQk9SX0VOQ09ESU5HOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENCT1JSZWFkZXI6OkNoZWNrRXh0
cmFuZW91c0RhdGEoKQoreworICAgIGlmIChpdF8gIT0gZW5kXykKKyAgICAgICAgZXJyb3JfY29k
ZV8gPSBEZWNvZGVyRXJyb3I6OkVYVFJBTkVPVVNfREFUQTsKK30KKworYm9vbCBDQk9SUmVhZGVy
OjpDaGVja0R1cGxpY2F0ZUtleShjb25zdCBDQk9SVmFsdWUmIG5ld19rZXksIGNvbnN0IENCT1JW
YWx1ZTo6TWFwVmFsdWUmIG1hcCkKK3sKKyAgICBpZiAobWFwLmZpbmQobmV3X2tleSkgIT0gbWFw
LmVuZCgpKSB7CisgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2RlckVycm9yOjpEVVBMSUNBVEVf
S0VZOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENCT1JSZWFkZXI6Okhhc1ZhbGlkVVRGOEZvcm1hdChjb25zdCBTdHJpbmcmIHN0cmlu
Z19kYXRhKQoreworICAgIC8vIEludmFsaWQgVVRGOCBieXRlcyBwcm9kdWNlIGFuIGVtcHR5IFdU
RlN0cmluZy4KKyAgICBpZiAoc3RyaW5nX2RhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIGVycm9y
X2NvZGVfID0gRGVjb2RlckVycm9yOjpJTlZBTElEX1VURjg7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0JPUlJlYWRlcjo6Q2hlY2tP
dXRPZk9yZGVyS2V5KGNvbnN0IENCT1JWYWx1ZSYgbmV3X2tleSwgY29uc3QgQ0JPUlZhbHVlOjpN
YXBWYWx1ZSYgbWFwKQoreworICAgIGF1dG8gY29tcGFyYXRvciA9IG1hcC5rZXlfY29tcCgpOwor
ICAgIGlmICghbWFwLmVtcHR5KCkgJiYgY29tcGFyYXRvcihuZXdfa2V5LCBtYXAucmJlZ2luKCkt
PmZpcnN0KSkgeworICAgICAgICBlcnJvcl9jb2RlXyA9IERlY29kZXJFcnJvcjo6T1VUX09GX09S
REVSX0tFWTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIENCT1JSZWFkZXI6OkdldEVycm9yQ29kZSgp
Cit7CisgICAgcmV0dXJuIGVycm9yX2NvZGVfOworfQorCisvLyBzdGF0aWMKK2NvbnN0IGNoYXIq
IENCT1JSZWFkZXI6OkVycm9yQ29kZVRvU3RyaW5nKERlY29kZXJFcnJvciBlcnJvcikKK3sKKyAg
ICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6OkNCT1JfTk9fRVJST1I6
CisgICAgICAgIHJldHVybiBrTm9FcnJvcjsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6VU5TVVBQ
T1JURURfTUFKT1JfVFlQRToKKyAgICAgICAgcmV0dXJuIGtVbnN1cHBvcnRlZE1ham9yVHlwZTsK
KyAgICBjYXNlIERlY29kZXJFcnJvcjo6VU5LTk9XTl9BRERJVElPTkFMX0lORk86CisgICAgICAg
IHJldHVybiBrVW5rbm93bkFkZGl0aW9uYWxJbmZvOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpJ
TkNPTVBMRVRFX0NCT1JfREFUQToKKyAgICAgICAgcmV0dXJuIGtJbmNvbXBsZXRlQ0JPUkRhdGE7
CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6OklOQ09SUkVDVF9NQVBfS0VZX1RZUEU6CisgICAgICAg
IHJldHVybiBrSW5jb3JyZWN0TWFwS2V5VHlwZTsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6VE9P
X01VQ0hfTkVTVElORzoKKyAgICAgICAgcmV0dXJuIGtUb29NdWNoTmVzdGluZzsKKyAgICBjYXNl
IERlY29kZXJFcnJvcjo6SU5WQUxJRF9VVEY4OgorICAgICAgICByZXR1cm4ga0ludmFsaWRVVEY4
OworICAgIGNhc2UgRGVjb2RlckVycm9yOjpFWFRSQU5FT1VTX0RBVEE6CisgICAgICAgIHJldHVy
biBrRXh0cmFuZW91c0RhdGE7CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6OkRVUExJQ0FURV9LRVk6
CisgICAgICAgIHJldHVybiBrRHVwbGljYXRlS2V5OworICAgIGNhc2UgRGVjb2RlckVycm9yOjpP
VVRfT0ZfT1JERVJfS0VZOgorICAgICAgICByZXR1cm4ga01hcEtleU91dE9mT3JkZXI7CisgICAg
Y2FzZSBEZWNvZGVyRXJyb3I6Ok5PTl9NSU5JTUFMX0NCT1JfRU5DT0RJTkc6CisgICAgICAgIHJl
dHVybiBrTm9uTWluaW1hbENCT1JFbmNvZGluZzsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6VU5T
VVBQT1JURURfU0lNUExFX1ZBTFVFOgorICAgICAgICByZXR1cm4ga1Vuc3VwcG9ydGVkU2ltcGxl
VmFsdWU7CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6OlVOU1VQUE9SVEVEX0ZMT0FUSU5HX1BPSU5U
X1ZBTFVFOgorICAgICAgICByZXR1cm4ga1Vuc3VwcG9ydGVkRmxvYXRpbmdQb2ludFZhbHVlOwor
ICAgIGNhc2UgRGVjb2RlckVycm9yOjpPVVRfT0ZfUkFOR0VfSU5URUdFUl9WQUxVRToKKyAgICAg
ICAgcmV0dXJuIGtPdXRPZlJhbmdlSW50ZWdlclZhbHVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIlVua25vd24gZXJyb3IgY29k
ZS4iOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgY2JvcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfcmVhZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9y
ZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MDI3Mjg5YjYzY2M3MTQyNzhmY2Y4OGI0MTZlMDM5OWEyNmYx
ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90
aGlyZF9wYXJ0eS9jYm9yL2Nib3JfcmVhZGVyLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8vIENvcHly
aWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJjYm9yX3ZhbHVlcy5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvLyBDb25jaXNl
IEJpbmFyeSBPYmplY3QgUmVwcmVzZW50YXRpb24gKENCT1IpIGRlY29kZXIgYXMgZGVmaW5lZCBi
eQorLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcwNDkuIFRoaXMgZGVjb2RlciBv
bmx5IGFjY2VwdHMgY2Fub25pY2FsCisvLyBDQk9SIGFzIGRlZmluZWQgYnkgc2VjdGlvbiAzLjku
CisvLyBTdXBwb3J0ZWQ6CisvLyAgKiBNYWpvciB0eXBlczoKKy8vICAgICAqIDA6IFVuc2lnbmVk
IGludGVnZXJzLCB1cCB0byA2NC1iaXQuCisvLyAgICAgKiAyOiBCeXRlIHN0cmluZ3MuCisvLyAg
ICAgKiAzOiBVVEYtOCBzdHJpbmdzLgorLy8gICAgICogNDogRGVmaW5pdGUtbGVuZ3RoIGFycmF5
cy4KKy8vICAgICAqIDU6IERlZmluaXRlLWxlbmd0aCBtYXBzLgorLy8gICAgICogNzogU2ltcGxl
IHZhbHVlcy4KKy8vCisvLyBSZXF1aXJlbWVudHMgZm9yIGNhbm9uaWNhbCBDQk9SIHJlcHJlc2Vu
dGF0aW9uOgorLy8gIC0gRHVwbGljYXRlIGtleXMgZm9yIG1hcCBhcmUgbm90IGFsbG93ZWQuCisv
LyAgLSBLZXlzIGZvciBtYXAgbXVzdCBiZSBzb3J0ZWQgZmlyc3QgYnkgbGVuZ3RoIGFuZCB0aGVu
IGJ5IGJ5dGUtd2lzZQorLy8gICAgbGV4aWNhbCBvcmRlci4KKy8vCisvLyBLbm93biBsaW1pdGF0
aW9ucyBhbmQgaW50ZXJwcmV0YXRpb25zIG9mIHRoZSBSRkM6CisvLyAgLSBEb2VzIG5vdCBzdXBw
b3J0IG5lZ2F0aXZlIGludGVnZXJzLCBpbmRlZmluaXRlIGRhdGEgc3RyZWFtcyBhbmQgdGFnZ2lu
Zy4KKy8vICAtIEZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9ucyBhbmQgQlJFQUsgc3RvcCBj
b2RlIGluIG1ham9yCisvLyAgICB0eXBlIDcgYXJlIG5vdCBzdXBwb3J0ZWQuCisvLyAgLSBOb24t
Y2hhcmFjdGVyIGNvZGVwb2ludCBhcmUgbm90IHN1cHBvcnRlZCBmb3IgTWFqb3IgdHlwZSAzLgor
Ly8gIC0gSW5jb21wbGV0ZSBDQk9SIGRhdGEgaXRlbXMgYXJlIHRyZWF0ZWQgYXMgc3ludGF4IGVy
cm9ycy4KKy8vICAtIFRyYWlsaW5nIGRhdGEgYnl0ZXMgYXJlIHRyZWF0ZWQgYXMgZXJyb3JzLgor
Ly8gIC0gVW5rbm93biBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvcm1hdHMgYXJlIHRyZWF0ZWQg
YXMgc3ludGF4IGVycm9ycy4KKy8vICAtIENhbGxlcnMgY2FuIGRlY29kZSBDQk9SIHZhbHVlcyB3
aXRoIGF0IG1vc3QgMTYgbmVzdGVkIGRlcHRoIGxheWVyLiBNb3JlCisvLyAgICBzdHJpY3QgcmVz
dHJpY3Rpb25zIG9uIG5lc3RpbmcgbGF5ZXIgc2l6ZSBvZiBDQk9SIHZhbHVlcyBjYW4gYmUgZW5m
b3JjZWQKKy8vICAgIGJ5IHNldHRpbmcgfG1heF9uZXN0aW5nX2xldmVsfC4KKy8vICAtIE9ubHkg
Q0JPUiBtYXBzIHdpdGggaW50ZWdlciBvciBzdHJpbmcgdHlwZSBrZXlzIGFyZSBzdXBwb3J0ZWQg
ZHVlIHRvIHRoZQorLy8gICAgY29zdCBvZiBzZXJpYWxpemF0aW9uIHdoZW4gc29ydGluZyBtYXAg
a2V5cy4KKy8vICAtIFNpbXBsZSB2YWx1ZXMgdGhhdCBhcmUgdW5hc3NpZ25lZC9yZXNlcnZlZCBh
cyBwZXIgUkZDIDcwNDkgYXJlIG5vdAorLy8gICAgc3VwcG9ydGVkIGFuZCB0cmVhdGVkIGFzIGVy
cm9ycy4KKworbmFtZXNwYWNlIGNib3IgeworCitjbGFzcyBXRUJDT1JFX1RFU1RTVVBQT1JUX0VY
UE9SVCBDQk9SUmVhZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQk9SUmVhZGVyKTsK
K3B1YmxpYzoKKyAgICB1c2luZyBCeXRlcyA9IFZlY3Rvcjx1aW50OF90PjsKKworICAgIGVudW0g
Y2xhc3MgRGVjb2RlckVycm9yIHsKKyAgICAgICAgQ0JPUl9OT19FUlJPUiA9IDAsCisgICAgICAg
IFVOU1VQUE9SVEVEX01BSk9SX1RZUEUsCisgICAgICAgIFVOS05PV05fQURESVRJT05BTF9JTkZP
LAorICAgICAgICBJTkNPTVBMRVRFX0NCT1JfREFUQSwKKyAgICAgICAgSU5DT1JSRUNUX01BUF9L
RVlfVFlQRSwKKyAgICAgICAgVE9PX01VQ0hfTkVTVElORywKKyAgICAgICAgSU5WQUxJRF9VVEY4
LAorICAgICAgICBFWFRSQU5FT1VTX0RBVEEsCisgICAgICAgIERVUExJQ0FURV9LRVksCisgICAg
ICAgIE9VVF9PRl9PUkRFUl9LRVksCisgICAgICAgIE5PTl9NSU5JTUFMX0NCT1JfRU5DT0RJTkcs
CisgICAgICAgIFVOU1VQUE9SVEVEX1NJTVBMRV9WQUxVRSwKKyAgICAgICAgVU5TVVBQT1JURURf
RkxPQVRJTkdfUE9JTlRfVkFMVUUsCisgICAgICAgIE9VVF9PRl9SQU5HRV9JTlRFR0VSX1ZBTFVF
LAorICAgIH07CisKKyAgICAvLyBDQk9SIG5lc3RlZCBkZXB0aCBzdWZmaWNpZW50IGZvciBtb3N0
IHVzZSBjYXNlcy4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtDQk9STWF4RGVwdGggPSAxNjsKKwor
ICAgIH5DQk9SUmVhZGVyKCk7CisKKyAgICAvLyBSZWFkcyBhbmQgcGFyc2VzIHxpbnB1dF9kYXRh
fCBpbnRvIGEgQ0JPUlZhbHVlLiBJZiBhbnkgb25lIG9mIHRoZSBzeW50YXgKKyAgICAvLyBmb3Jt
YXRzIGlzIHZpb2xhdGVkIC1pbmNsdWRpbmcgdW5rbm93biBhZGRpdGlvbmFsIGluZm8gYW5kIGlu
Y29tcGxldGUKKyAgICAvLyBDQk9SIGRhdGEtIHRoZW4gYW4gZW1wdHkgb3B0aW9uYWwgaXMgcmV0
dXJuZWQuIE9wdGlvbmFsIHxlcnJvcl9jb2RlX291dHwKKyAgICAvLyBjYW4gYmUgcHJvdmlkZWQg
YnkgdGhlIGNhbGxlciB0byBvYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dAorICAg
IC8vIGRlY29kaW5nIGZhaWx1cmVzLgorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1
ZT4gUmVhZChjb25zdCBCeXRlcyYgaW5wdXRfZGF0YSwgRGVjb2RlckVycm9yKiBlcnJvcl9jb2Rl
X291dCA9IG51bGxwdHIsIGludCBtYXhfbmVzdGluZ19sZXZlbCA9IGtDQk9STWF4RGVwdGgpOwor
CisgICAgLy8gVHJhbnNsYXRlcyBlcnJvcnMgdG8gaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2Fn
ZXMuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIEVycm9yQ29kZVRvU3RyaW5nKERlY29kZXJFcnJv
ciBlcnJvcl9jb2RlKTsKKworcHJpdmF0ZToKKyAgICBDQk9SUmVhZGVyKEJ5dGVzOjpjb25zdF9p
dGVyYXRvciBpdCwgY29uc3QgQnl0ZXM6OmNvbnN0X2l0ZXJhdG9yIGVuZCk7CisgICAgc3RkOjpv
cHRpb25hbDxDQk9SVmFsdWU+IERlY29kZUNCT1IoaW50IG1heF9uZXN0aW5nX2xldmVsKTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gRGVjb2RlVmFsdWVUb05lZ2F0aXZlKHVpbnQ2NF90
IHZhbHVlKTsKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gRGVjb2RlVmFsdWVUb1Vuc2ln
bmVkKHVpbnQ2NF90IHZhbHVlKTsKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gUmVhZFNp
bXBsZVZhbHVlKHVpbnQ4X3QgYWRkaXRpb25hbF9pbmZvLCB1aW50NjRfdCB2YWx1ZSk7CisgICAg
Ym9vbCBSZWFkVmFyaWFkaWNMZW5ndGhJbnRlZ2VyKHVpbnQ4X3QgYWRkaXRpb25hbF9pbmZvLCB1
aW50NjRfdCogdmFsdWUpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBSZWFkQnl0ZXMo
dWludDY0X3QgbnVtX2J5dGVzKTsKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gUmVhZFN0
cmluZyh1aW50NjRfdCBudW1fYnl0ZXMpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBS
ZWFkQ0JPUkFycmF5KHVpbnQ2NF90IGxlbmd0aCwgaW50IG1heF9uZXN0aW5nX2xldmVsKTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gUmVhZENCT1JNYXAodWludDY0X3QgbGVuZ3RoLCBp
bnQgbWF4X25lc3RpbmdfbGV2ZWwpOworICAgIGJvb2wgQ2FuQ29uc3VtZSh1aW50NjRfdCBieXRl
cyk7CisgICAgdm9pZCBDaGVja0V4dHJhbmVvdXNEYXRhKCk7CisgICAgYm9vbCBDaGVja0R1cGxp
Y2F0ZUtleShjb25zdCBDQk9SVmFsdWUmIG5ld19rZXksIGNvbnN0IENCT1JWYWx1ZTo6TWFwVmFs
dWUmIG1hcCk7CisgICAgYm9vbCBIYXNWYWxpZFVURjhGb3JtYXQoY29uc3QgU3RyaW5nJiBzdHJp
bmdfZGF0YSk7CisgICAgYm9vbCBDaGVja091dE9mT3JkZXJLZXkoY29uc3QgQ0JPUlZhbHVlJiBu
ZXdfa2V5LCBjb25zdCBDQk9SVmFsdWU6Ok1hcFZhbHVlJiBtYXApOworICAgIGJvb2wgQ2hlY2tN
aW5pbWFsRW5jb2RpbmcodWludDhfdCBhZGRpdGlvbmFsX2J5dGVzLCB1aW50NjRfdCB1aW50X2Rh
dGEpOworCisgICAgRGVjb2RlckVycm9yIEdldEVycm9yQ29kZSgpOworCisgICAgQnl0ZXM6OmNv
bnN0X2l0ZXJhdG9yIGl0XzsKKyAgICBjb25zdCBCeXRlczo6Y29uc3RfaXRlcmF0b3IgZW5kXzsK
KyAgICBEZWNvZGVyRXJyb3IgZXJyb3JfY29kZV87Cit9OworCit9ICAvLyBuYW1lc3BhY2UgY2Jv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0
eS9jYm9yL2Nib3JfdmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4v
dGhpcmRfcGFydHkvY2Jvci9jYm9yX3ZhbHVlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VjYjJlZTU5NGQ2
ODcyM2YwMzBlM2I2Y2Y0NzIyYTZjZTNmNWU0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3ZhbHVlcy5jcHAK
QEAgLTAsMCArMSwyOTUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
Ky8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNib3JfdmFsdWVzLmgiCisK
KyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIGNib3Igewor
CitDQk9SVmFsdWU6OkNCT1JWYWx1ZSgpIG5vZXhjZXB0CisgICAgOiB0eXBlXyhUeXBlOjpOT05F
KQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShDQk9SVmFsdWUmJiB0aGF0KSBub2V4Y2Vw
dAoreworICAgIEludGVybmFsTW92ZUNvbnN0cnVjdEZyb20oV1RGTW92ZSh0aGF0KSk7Cit9CisK
K0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKFR5cGUgdHlwZSkKKyAgICA6IHR5cGVfKHR5cGUpCit7Cisg
ICAgLy8gSW5pdGlhbGl6ZSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlLgorICAgIHN3aXRjaCAodHlw
ZV8pIHsKKyAgICBjYXNlIFR5cGU6OlVOU0lHTkVEOgorICAgIGNhc2UgVHlwZTo6TkVHQVRJVkU6
CisgICAgICAgIGludGVnZXJfdmFsdWVfID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZTo6QllURV9TVFJJTkc6CisgICAgICAgIG5ldyAoJmJ5dGVzdHJpbmdfdmFsdWVfKSBCaW5h
cnlWYWx1ZSgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpTVFJJTkc6CisgICAg
ICAgIG5ldyAoJnN0cmluZ192YWx1ZV8pIFN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlOjpBUlJBWToKKyAgICAgICAgbmV3ICgmYXJyYXlfdmFsdWVfKSBBcnJheVZhbHVl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6Ok1BUDoKKyAgICAgICAgbmV3ICgm
bWFwX3ZhbHVlXykgTWFwVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6
U0lNUExFX1ZBTFVFOgorICAgICAgICBzaW1wbGVfdmFsdWVfID0gQ0JPUlZhbHVlOjpTaW1wbGVW
YWx1ZTo6VU5ERUZJTkVEOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpOT05FOgor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitD
Qk9SVmFsdWU6OkNCT1JWYWx1ZShpbnQgaW50ZWdlcl92YWx1ZSkKKyAgICA6IENCT1JWYWx1ZShz
dGF0aWNfY2FzdDxpbnQ2NF90PihpbnRlZ2VyX3ZhbHVlKSkKK3sKK30KKworQ0JPUlZhbHVlOjpD
Qk9SVmFsdWUoaW50NjRfdCBpbnRlZ2VyX3ZhbHVlKQorICAgIDogaW50ZWdlcl92YWx1ZV8oaW50
ZWdlcl92YWx1ZSkKK3sKKyAgICB0eXBlXyA9IGludGVnZXJfdmFsdWUgPj0gMCA/IFR5cGU6OlVO
U0lHTkVEIDogVHlwZTo6TkVHQVRJVkU7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0
IEJpbmFyeVZhbHVlJiBpbl9ieXRlcykKKyAgICA6IHR5cGVfKFR5cGU6OkJZVEVfU1RSSU5HKQor
ICAgICwgYnl0ZXN0cmluZ192YWx1ZV8oaW5fYnl0ZXMpCit7Cit9CisKK0NCT1JWYWx1ZTo6Q0JP
UlZhbHVlKEJpbmFyeVZhbHVlJiYgaW5fYnl0ZXMpIG5vZXhjZXB0CisgICAgOiB0eXBlXyhUeXBl
OjpCWVRFX1NUUklORykKKyAgICAsIGJ5dGVzdHJpbmdfdmFsdWVfKFdURk1vdmUoaW5fYnl0ZXMp
KQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShjb25zdCBjaGFyKiBpbl9zdHJpbmcpCisg
ICAgOiBDQk9SVmFsdWUoU3RyaW5nKGluX3N0cmluZykpCit7Cit9CisKK0NCT1JWYWx1ZTo6Q0JP
UlZhbHVlKFN0cmluZyYmIGluX3N0cmluZykgbm9leGNlcHQKKyAgICA6IHR5cGVfKFR5cGU6OlNU
UklORykKKyAgICAsIHN0cmluZ192YWx1ZV8oV1RGTW92ZShpbl9zdHJpbmcpKQoreworfQorCitD
Qk9SVmFsdWU6OkNCT1JWYWx1ZShjb25zdCBTdHJpbmcmIGluX3N0cmluZykKKyAgICA6IHR5cGVf
KFR5cGU6OlNUUklORykKKyAgICAsIHN0cmluZ192YWx1ZV8oaW5fc3RyaW5nKQoreworfQorCitD
Qk9SVmFsdWU6OkNCT1JWYWx1ZShjb25zdCBBcnJheVZhbHVlJiBpbl9hcnJheSkKKyAgICA6IHR5
cGVfKFR5cGU6OkFSUkFZKQorICAgICwgYXJyYXlfdmFsdWVfKCkKK3sKKyAgICBhcnJheV92YWx1
ZV8ucmVzZXJ2ZUNhcGFjaXR5KGluX2FycmF5LnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRv
JiB2YWwgOiBpbl9hcnJheSkKKyAgICAgICAgYXJyYXlfdmFsdWVfLmFwcGVuZCh2YWwuQ2xvbmUo
KSk7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKEFycmF5VmFsdWUmJiBpbl9hcnJheSkgbm9l
eGNlcHQKKyAgICA6IHR5cGVfKFR5cGU6OkFSUkFZKQorICAgICwgYXJyYXlfdmFsdWVfKFdURk1v
dmUoaW5fYXJyYXkpKQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShjb25zdCBNYXBWYWx1
ZSYgaW5fbWFwKQorICAgIDogdHlwZV8oVHlwZTo6TUFQKQorICAgICwgbWFwX3ZhbHVlXygpCit7
CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGluX21hcCkKKyAgICAgICAgbWFwX3ZhbHVlXy5l
bXBsYWNlX2hpbnQobWFwX3ZhbHVlXy5lbmQoKSwgaXQuZmlyc3QuQ2xvbmUoKSwgaXQuc2Vjb25k
LkNsb25lKCkpOworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShNYXBWYWx1ZSYmIGluX21hcCkg
bm9leGNlcHQKKyAgICA6IHR5cGVfKFR5cGU6Ok1BUCkKKyAgICAsIG1hcF92YWx1ZV8oV1RGTW92
ZShpbl9tYXApKQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShTaW1wbGVWYWx1ZSBpbl9z
aW1wbGUpCisgICAgOiB0eXBlXyhUeXBlOjpTSU1QTEVfVkFMVUUpCisgICAgLCBzaW1wbGVfdmFs
dWVfKGluX3NpbXBsZSkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pihpbl9zaW1wbGUp
ID49IDIwICYmIHN0YXRpY19jYXN0PGludD4oaW5fc2ltcGxlKSA8PSAyMyk7Cit9CisKK0NCT1JW
YWx1ZSYgQ0JPUlZhbHVlOjpvcGVyYXRvcj0oQ0JPUlZhbHVlJiYgdGhhdCkgbm9leGNlcHQKK3sK
KyAgICBJbnRlcm5hbENsZWFudXAoKTsKKyAgICBJbnRlcm5hbE1vdmVDb25zdHJ1Y3RGcm9tKFdU
Rk1vdmUodGhhdCkpOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitDQk9SVmFsdWU6On5DQk9S
VmFsdWUoKQoreworICAgIEludGVybmFsQ2xlYW51cCgpOworfQorCitDQk9SVmFsdWUgQ0JPUlZh
bHVlOjpDbG9uZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlXykgeworICAgIGNhc2UgVHlw
ZTo6Tk9ORToKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZSgpOworICAgIGNhc2UgVHlwZTo6VU5T
SUdORUQ6CisgICAgY2FzZSBUeXBlOjpORUdBVElWRToKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1
ZShpbnRlZ2VyX3ZhbHVlXyk7CisgICAgY2FzZSBUeXBlOjpCWVRFX1NUUklORzoKKyAgICAgICAg
cmV0dXJuIENCT1JWYWx1ZShieXRlc3RyaW5nX3ZhbHVlXyk7CisgICAgY2FzZSBUeXBlOjpTVFJJ
Tkc6CisgICAgICAgIHJldHVybiBDQk9SVmFsdWUoc3RyaW5nX3ZhbHVlXyk7CisgICAgY2FzZSBU
eXBlOjpBUlJBWToKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZShhcnJheV92YWx1ZV8pOworICAg
IGNhc2UgVHlwZTo6TUFQOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKG1hcF92YWx1ZV8pOwor
ICAgIGNhc2UgVHlwZTo6U0lNUExFX1ZBTFVFOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKHNp
bXBsZV92YWx1ZV8pOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBDQk9SVmFsdWUoKTsKK30KKworY29uc3QgaW50NjRfdCYgQ0JPUlZhbHVlOjpHZXRJbnRl
Z2VyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNfaW50ZWdlcigpKTsKKyAgICByZXR1cm4gaW50
ZWdlcl92YWx1ZV87Cit9CisKK2NvbnN0IGludDY0X3QmIENCT1JWYWx1ZTo6R2V0VW5zaWduZWQo
KSBjb25zdAoreworICAgIEFTU0VSVChpc191bnNpZ25lZCgpKTsKKyAgICBBU1NFUlQoaW50ZWdl
cl92YWx1ZV8gPj0gMCk7CisgICAgcmV0dXJuIGludGVnZXJfdmFsdWVfOworfQorCitjb25zdCBp
bnQ2NF90JiBDQk9SVmFsdWU6OkdldE5lZ2F0aXZlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNf
bmVnYXRpdmUoKSk7CisgICAgQVNTRVJUKGludGVnZXJfdmFsdWVfIDwgMCk7CisgICAgcmV0dXJu
IGludGVnZXJfdmFsdWVfOworfQorCitjb25zdCBTdHJpbmcmIENCT1JWYWx1ZTo6R2V0U3RyaW5n
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNfc3RyaW5nKCkpOworICAgIHJldHVybiBzdHJpbmdf
dmFsdWVfOworfQorCitjb25zdCBDQk9SVmFsdWU6OkJpbmFyeVZhbHVlJiBDQk9SVmFsdWU6Okdl
dEJ5dGVzdHJpbmcoKSBjb25zdAoreworICAgIEFTU0VSVChpc19ieXRlc3RyaW5nKCkpOworICAg
IHJldHVybiBieXRlc3RyaW5nX3ZhbHVlXzsKK30KKworY29uc3QgQ0JPUlZhbHVlOjpBcnJheVZh
bHVlJiBDQk9SVmFsdWU6OkdldEFycmF5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNfYXJyYXko
KSk7CisgICAgcmV0dXJuIGFycmF5X3ZhbHVlXzsKK30KKworY29uc3QgQ0JPUlZhbHVlOjpNYXBW
YWx1ZSYgQ0JPUlZhbHVlOjpHZXRNYXAoKSBjb25zdAoreworICAgIEFTU0VSVChpc19tYXAoKSk7
CisgICAgcmV0dXJuIG1hcF92YWx1ZV87Cit9CisKK0NCT1JWYWx1ZTo6U2ltcGxlVmFsdWUgQ0JP
UlZhbHVlOjpHZXRTaW1wbGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzX3NpbXBsZSgp
KTsKKyAgICByZXR1cm4gc2ltcGxlX3ZhbHVlXzsKK30KKwordm9pZCBDQk9SVmFsdWU6OkludGVy
bmFsTW92ZUNvbnN0cnVjdEZyb20oQ0JPUlZhbHVlJiYgdGhhdCkKK3sKKyAgICB0eXBlXyA9IHRo
YXQudHlwZV87CisKKyAgICBzd2l0Y2ggKHR5cGVfKSB7CisgICAgY2FzZSBUeXBlOjpVTlNJR05F
RDoKKyAgICBjYXNlIFR5cGU6Ok5FR0FUSVZFOgorICAgICAgICBpbnRlZ2VyX3ZhbHVlXyA9IHRo
YXQuaW50ZWdlcl92YWx1ZV87CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6OkJZVEVf
U1RSSU5HOgorICAgICAgICBuZXcgKCZieXRlc3RyaW5nX3ZhbHVlXykgQmluYXJ5VmFsdWUoV1RG
TW92ZSh0aGF0LmJ5dGVzdHJpbmdfdmFsdWVfKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGU6OlNUUklORzoKKyAgICAgICAgbmV3ICgmc3RyaW5nX3ZhbHVlXykgU3RyaW5nKFdURk1v
dmUodGhhdC5zdHJpbmdfdmFsdWVfKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6
OkFSUkFZOgorICAgICAgICBuZXcgKCZhcnJheV92YWx1ZV8pIEFycmF5VmFsdWUoV1RGTW92ZSh0
aGF0LmFycmF5X3ZhbHVlXykpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpNQVA6
CisgICAgICAgIG5ldyAoJm1hcF92YWx1ZV8pIE1hcFZhbHVlKFdURk1vdmUodGhhdC5tYXBfdmFs
dWVfKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6OlNJTVBMRV9WQUxVRToKKyAg
ICAgICAgc2ltcGxlX3ZhbHVlXyA9IHRoYXQuc2ltcGxlX3ZhbHVlXzsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZTo6Tk9ORToKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQk9SVmFsdWU6OkludGVybmFsQ2xlYW51cCgp
Cit7CisgICAgc3dpdGNoICh0eXBlXykgeworICAgIGNhc2UgVHlwZTo6QllURV9TVFJJTkc6Cisg
ICAgICAgIGJ5dGVzdHJpbmdfdmFsdWVfLn5CaW5hcnlWYWx1ZSgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFR5cGU6OlNUUklORzoKKyAgICAgICAgc3RyaW5nX3ZhbHVlXy5+U3RyaW5nKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6QVJSQVk6CisgICAgICAgIGFycmF5X3Zh
bHVlXy5+QXJyYXlWYWx1ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6Ok1BUDoK
KyAgICAgICAgbWFwX3ZhbHVlXy5+TWFwVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUeXBlOjpOT05FOgorICAgIGNhc2UgVHlwZTo6VU5TSUdORUQ6CisgICAgY2FzZSBUeXBlOjpO
RUdBVElWRToKKyAgICBjYXNlIFR5cGU6OlNJTVBMRV9WQUxVRToKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHR5cGVfID0gVHlwZTo6Tk9ORTsKK30KKworfSAvLyBuYW1lc3BhY2UgY2Jvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9j
Ym9yL2Nib3JfdmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJk
X3BhcnR5L2Nib3IvY2Jvcl92YWx1ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmZiODZmYmY3Njg1YjU2MDhk
MzMxNjUwMTk0NTk2YzlkZGJkZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfdmFsdWVzLmgKQEAgLTAsMCAr
MSwxOTIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoK
Ky8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
Ky8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxtYXA+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgY2JvciB7CisKKy8vIEEgY2xh
c3MgZm9yIENvbmNpc2UgQmluYXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiAoQ0JPUikgdmFsdWVz
LgorLy8gVGhpcyBkb2VzIG5vdCBzdXBwb3J0OgorLy8gICogRmxvYXRpbmctcG9pbnQgbnVtYmVy
cy4KKy8vICAqIEluZGVmaW5pdGUtbGVuZ3RoIGVuY29kaW5ncy4KK2NsYXNzIFdFQkNPUkVfVEVT
VFNVUFBPUlRfRVhQT1JUIENCT1JWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0JP
UlZhbHVlKTsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ1RBUExlc3MgeworICAgICAgICAvLyBDb21w
YXJpc29uIHByZWRpY2F0ZSB0byBvcmRlciBrZXlzIGluIGEgZGljdGlvbmFyeSBhcyByZXF1aXJl
ZCBieSB0aGUKKyAgICAgICAgLy8gQ2xpZW50LXRvLUF1dGhlbnRpY2F0b3IgUHJvdG9jb2wgKENU
QVApIHNwZWMgMi4wLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgc29ydCBvcmRlciBkZWZp
bmVkIGluIENUQVAgaXM6CisgICAgICAgIC8vICAgKiBJZiB0aGUgbWFqb3IgdHlwZXMgYXJlIGRp
ZmZlcmVudCwgdGhlIG9uZSB3aXRoIHRoZSBsb3dlciB2YWx1ZSBpbgorICAgICAgICAvLyAgICAg
bnVtZXJpY2FsIG9yZGVyIHNvcnRzIGVhcmxpZXIuCisgICAgICAgIC8vICAgKiBJZiB0d28ga2V5
cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzLCB0aGUgc2hvcnRlciBvbmUgc29ydHMgZWFybGllci4K
KyAgICAgICAgLy8gICAqIElmIHR3byBrZXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLCB0aGUgb25l
IHdpdGggdGhlIGxvd2VyIHZhbHVlIGluCisgICAgICAgIC8vICAgICAoYnl0ZS13aXNlKSBsZXhp
Y2FsIG9yZGVyIHNvcnRzIGVhcmxpZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNlZSBzZWN0
aW9uIDYgb2YgaHR0cHM6Ly9maWRvYWxsaWFuY2Uub3JnL3NwZWNzL2ZpZG8tdjIuMC1yZC0yMDE3
MDkyNy8KKyAgICAgICAgLy8gZmlkby1jbGllbnQtdG8tYXV0aGVudGljYXRvci1wcm90b2NvbC12
Mi4wLXJkLTIwMTcwOTI3Lmh0bWwuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRIRSBDVEFQIFNP
UlQgT1JERVIgSU1QTEVNRU5URUQgSEVSRSBESUZGRVJTIEZST00gVEhFIENBTk9OSUNBTCBDQk9S
CisgICAgICAgIC8vIE9SREVSIGRlZmluZWQgaW4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1s
L3JmYzcwNDkjc2VjdGlvbi0zLjksIGluIHRoYXQKKyAgICAgICAgLy8gdGhlIGxhdHRlciBzb3J0
cyBwdXJlbHkgYnkgc2VyaWFsaXNlZCBrZXkgYW5kIGRvZXNuJ3Qgc3BlY2lmeSB0aGF0IG1ham9y
CisgICAgICAgIC8vIHR5cGVzIGFyZSBjb21wYXJlZCBmaXJzdC4gVGh1cyB0aGUgc2hvcnRlc3Qg
a2V5IHNvcnRzIGZpcnN0IGJ5IHRoZSBSRkMKKyAgICAgICAgLy8gcnVsZXMgKGlycmVzcGVjdGl2
ZSBvZiB0aGUgbWFqb3IgdHlwZSksIGJ1dCBtYXkgbm90IGJ5IENUQVAgcnVsZXMuCisgICAgICAg
IGJvb2wgb3BlcmF0b3IoKShjb25zdCBDQk9SVmFsdWUmIGEsIGNvbnN0IENCT1JWYWx1ZSYgYikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKChhLmlzX2ludGVnZXIoKSB8fCBh
LmlzX3N0cmluZygpKSAmJiAoYi5pc19pbnRlZ2VyKCkgfHwgYi5pc19zdHJpbmcoKSkpOworICAg
ICAgICAgICAgaWYgKGEudHlwZSgpICE9IGIudHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBhLnR5cGUoKSA8IGIudHlwZSgpOworICAgICAgICAgICAgc3dpdGNoIChhLnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBUeXBlOjpVTlNJR05FRDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
YS5HZXRJbnRlZ2VyKCkgPCBiLkdldEludGVnZXIoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6
TkVHQVRJVkU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGEuR2V0SW50ZWdlcigpID4gYi5HZXRJ
bnRlZ2VyKCk7CisgICAgICAgICAgICBjYXNlIFR5cGU6OlNUUklORzogeworICAgICAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIGFfc3RyID0gYS5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3QgYV9sZW5ndGggPSBhX3N0ci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBhdXRvJiBiX3N0ciA9IGIuR2V0U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IGJfbGVuZ3RoID0gYl9zdHIubGVuZ3RoKCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
YV9sZW5ndGggIT0gYl9sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhX2xlbmd0
aCA8IGJfbGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBh
cmVMZXNzVGhhbihhX3N0ciwgYl9zdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICB1c2luZyBpc190cmFuc3BhcmVudCA9IHZvaWQ7CisgICAgfTsKKwor
ICAgIHVzaW5nIEJpbmFyeVZhbHVlID0gVmVjdG9yPHVpbnQ4X3Q+OworICAgIHVzaW5nIEFycmF5
VmFsdWUgPSBWZWN0b3I8Q0JPUlZhbHVlPjsKKyAgICB1c2luZyBNYXBWYWx1ZSA9IHN0ZDo6bWFw
PENCT1JWYWx1ZSwgQ0JPUlZhbHVlLCBDVEFQTGVzcz47CisKKyAgICBlbnVtIGNsYXNzIFR5cGUg
eworICAgICAgICBVTlNJR05FRCA9IDAsCisgICAgICAgIE5FR0FUSVZFID0gMSwKKyAgICAgICAg
QllURV9TVFJJTkcgPSAyLAorICAgICAgICBTVFJJTkcgPSAzLAorICAgICAgICBBUlJBWSA9IDQs
CisgICAgICAgIE1BUCA9IDUsCisgICAgICAgIFNJTVBMRV9WQUxVRSA9IDcsCisgICAgICAgIE5P
TkUgPSAtMSwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBTaW1wbGVWYWx1ZSB7CisgICAgICAg
IEZBTFNFX1ZBTFVFID0gMjAsCisgICAgICAgIFRSVUVfVkFMVUUgPSAyMSwKKyAgICAgICAgTlVM
TF9WQUxVRSA9IDIyLAorICAgICAgICBVTkRFRklORUQgPSAyMywKKyAgICB9OworCisgICAgQ0JP
UlZhbHVlKENCT1JWYWx1ZSYmIHRoYXQpIG5vZXhjZXB0OworICAgIENCT1JWYWx1ZSgpIG5vZXhj
ZXB0OyAgLy8gQSBOT05FIHZhbHVlLgorCisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKFR5cGUgdHlw
ZSk7CisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKGludCBpbnRlZ2VyX3ZhbHVlKTsKKyAgICBleHBs
aWNpdCBDQk9SVmFsdWUoaW50NjRfdCBpbnRlZ2VyX3ZhbHVlKTsKKyAgICBleHBsaWNpdCBDQk9S
VmFsdWUodWludDY0X3QgaW50ZWdlcl92YWx1ZSkgPSBkZWxldGU7CisKKyAgICBleHBsaWNpdCBD
Qk9SVmFsdWUoY29uc3QgQmluYXJ5VmFsdWUmIGluX2J5dGVzKTsKKyAgICBleHBsaWNpdCBDQk9S
VmFsdWUoQmluYXJ5VmFsdWUmJiBpbl9ieXRlcykgbm9leGNlcHQ7CisKKyAgICBleHBsaWNpdCBD
Qk9SVmFsdWUoY29uc3QgY2hhciogaW5fc3RyaW5nKTsKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUo
U3RyaW5nJiYgaW5fc3RyaW5nKSBub2V4Y2VwdDsKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoY29u
c3QgU3RyaW5nJiBpbl9zdHJpbmcpOworCisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKGNvbnN0IEFy
cmF5VmFsdWUmIGluX2FycmF5KTsKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoQXJyYXlWYWx1ZSYm
IGluX2FycmF5KSBub2V4Y2VwdDsKKworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShjb25zdCBNYXBW
YWx1ZSYgaW5fbWFwKTsKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoTWFwVmFsdWUmJiBpbl9tYXAp
IG5vZXhjZXB0OworCisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKFNpbXBsZVZhbHVlIGluX3NpbXBs
ZSk7CisKKyAgICBDQk9SVmFsdWUmIG9wZXJhdG9yPShDQk9SVmFsdWUmJiB0aGF0KSBub2V4Y2Vw
dDsKKworICAgIH5DQk9SVmFsdWUoKTsKKworICAgIC8vIENCT1JWYWx1ZSdzIGNvcHkgY29uc3Ry
dWN0b3IgYW5kIGNvcHkgYXNzaWdubWVudCBvcGVyYXRvciBhcmUgZGVsZXRlZC4KKyAgICAvLyBV
c2UgdGhpcyB0byBvYnRhaW4gYSBkZWVwIGNvcHkgZXhwbGljaXRseS4KKyAgICBDQk9SVmFsdWUg
Q2xvbmUoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHZhbHVlIHN0
b3JlZCBieSB0aGUgY3VycmVudCBWYWx1ZSBvYmplY3QuCisgICAgVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gdHlwZV87IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBv
YmplY3QgcmVwcmVzZW50cyBhIGdpdmVuIHR5cGUuCisgICAgYm9vbCBpc190eXBlKFR5cGUgdHlw
ZSkgY29uc3QgeyByZXR1cm4gdHlwZSA9PSB0eXBlXzsgfQorICAgIGJvb2wgaXNfbm9uZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpOT05FOyB9CisgICAgYm9vbCBpc191bnNpZ25l
ZCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpVTlNJR05FRDsgfQorICAgIGJvb2wg
aXNfbmVnYXRpdmUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6TkVHQVRJVkU7IH0K
KyAgICBib29sIGlzX2ludGVnZXIoKSBjb25zdCB7IHJldHVybiBpc191bnNpZ25lZCgpIHx8IGlz
X25lZ2F0aXZlKCk7IH0KKyAgICBib29sIGlzX2J5dGVzdHJpbmcoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gVHlwZTo6QllURV9TVFJJTkc7IH0KKyAgICBib29sIGlzX3N0cmluZygpIGNvbnN0
IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpTVFJJTkc7IH0KKyAgICBib29sIGlzX2FycmF5KCkg
Y29uc3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6OkFSUkFZOyB9CisgICAgYm9vbCBpc19tYXAo
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6TUFQOyB9CisgICAgYm9vbCBpc19zaW1w
bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6U0lNUExFX1ZBTFVFOyB9CisKKyAg
ICAvLyBUaGVzZSB3aWxsIGFsbCBmYXRhbGx5IGFzc2VydCBpZiB0aGUgdHlwZSBkb2Vzbid0IG1h
dGNoLgorICAgIFNpbXBsZVZhbHVlIEdldFNpbXBsZVZhbHVlKCkgY29uc3Q7CisgICAgY29uc3Qg
aW50NjRfdCYgR2V0SW50ZWdlcigpIGNvbnN0OworICAgIGNvbnN0IGludDY0X3QmIEdldFVuc2ln
bmVkKCkgY29uc3Q7CisgICAgY29uc3QgaW50NjRfdCYgR2V0TmVnYXRpdmUoKSBjb25zdDsKKyAg
ICBjb25zdCBCaW5hcnlWYWx1ZSYgR2V0Qnl0ZXN0cmluZygpIGNvbnN0OworICAgIC8vIFJldHVy
bmVkIHN0cmluZyBtYXkgY29udGFpbiBOVUwgY2hhcmFjdGVycy4KKyAgICBjb25zdCBTdHJpbmcm
IEdldFN0cmluZygpIGNvbnN0OworICAgIGNvbnN0IEFycmF5VmFsdWUmIEdldEFycmF5KCkgY29u
c3Q7CisgICAgY29uc3QgTWFwVmFsdWUmIEdldE1hcCgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IFR5cGUgdHlwZV87CisKKyAgICB1bmlvbiB7CisgICAgICAgIFNpbXBsZVZhbHVlIHNpbXBsZV92
YWx1ZV87CisgICAgICAgIGludDY0X3QgaW50ZWdlcl92YWx1ZV87CisgICAgICAgIEJpbmFyeVZh
bHVlIGJ5dGVzdHJpbmdfdmFsdWVfOworICAgICAgICBTdHJpbmcgc3RyaW5nX3ZhbHVlXzsKKyAg
ICAgICAgQXJyYXlWYWx1ZSBhcnJheV92YWx1ZV87CisgICAgICAgIE1hcFZhbHVlIG1hcF92YWx1
ZV87CisgICAgfTsKKworICAgIHZvaWQgSW50ZXJuYWxNb3ZlQ29uc3RydWN0RnJvbShDQk9SVmFs
dWUmJiB0aGF0KTsKKyAgICB2b2lkIEludGVybmFsQ2xlYW51cCgpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgY2JvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90
aGlyZF9wYXJ0eS9jYm9yL2Nib3Jfd3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3dyaXRlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDE0
YWEyY2IyODRkNDg1MjY2MGNjZDRkNjUzZmM3NGM1N2UzNTE5NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3dy
aXRlci5jcHAKQEAgLTAsMCArMSwyMDMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8v
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNib3Jfd3Jp
dGVyLmgiCisKKyNpbmNsdWRlICJjYm9yX2JpbmFyeS5oIgorCituYW1lc3BhY2UgY2JvciB7CisK
K0NCT1JXcml0ZXI6On5DQk9SV3JpdGVyKCkge30KKworLy8gc3RhdGljCitzdGQ6Om9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gQ0JPUldyaXRlcjo6V3JpdGUoY29uc3QgQ0JPUlZhbHVlJiBub2Rl
LCBzaXplX3QgbWF4X25lc3RpbmdfbGV2ZWwpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGNib3I7
CisgICAgQ0JPUldyaXRlciB3cml0ZXIoJmNib3IpOworICAgIGlmICh3cml0ZXIuRW5jb2RlQ0JP
Uihub2RlLCBzdGF0aWNfY2FzdDxpbnQ+KG1heF9uZXN0aW5nX2xldmVsKSkpCisgICAgICAgIHJl
dHVybiBjYm9yOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK0NCT1JXcml0ZXI6OkNC
T1JXcml0ZXIoVmVjdG9yPHVpbnQ4X3Q+KiBjYm9yKQorICAgIDogZW5jb2RlZF9jYm9yXyhjYm9y
KQoreworfQorCitib29sIENCT1JXcml0ZXI6OkVuY29kZUNCT1IoY29uc3QgQ0JPUlZhbHVlJiBu
b2RlLCBpbnQgbWF4X25lc3RpbmdfbGV2ZWwpCit7CisgICAgaWYgKG1heF9uZXN0aW5nX2xldmVs
IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChub2RlLnR5cGUoKSkg
eworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpOT05FOiB7CisgICAgICAgIFN0YXJ0SXRlbShD
Qk9SVmFsdWU6OlR5cGU6OkJZVEVfU1RSSU5HLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gUmVwcmVzZW50cyB1bnNpZ25lZCBpbnRlZ2Vycy4KKyAgICBjYXNlIENC
T1JWYWx1ZTo6VHlwZTo6VU5TSUdORUQ6IHsKKyAgICAgICAgaW50NjRfdCB2YWx1ZSA9IG5vZGUu
R2V0VW5zaWduZWQoKTsKKyAgICAgICAgU3RhcnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6VU5TSUdO
RUQsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBSZXByZXNlbnRzIG5lZ2F0aXZlIGludGVnZXJzLgorICAgIGNhc2Ug
Q0JPUlZhbHVlOjpUeXBlOjpORUdBVElWRTogeworICAgICAgICBpbnQ2NF90IHZhbHVlID0gbm9k
ZS5HZXROZWdhdGl2ZSgpOworICAgICAgICBTdGFydEl0ZW0oQ0JPUlZhbHVlOjpUeXBlOjpORUdB
VElWRSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KC0odmFsdWUgKyAxKSkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBSZXByZXNlbnRzIGEgYnl0ZSBzdHJpbmcuCisgICAg
Y2FzZSBDQk9SVmFsdWU6OlR5cGU6OkJZVEVfU1RSSU5HOiB7CisgICAgICAgIGNvbnN0IENCT1JW
YWx1ZTo6QmluYXJ5VmFsdWUmIGJ5dGVzID0gbm9kZS5HZXRCeXRlc3RyaW5nKCk7CisgICAgICAg
IFN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6OkJZVEVfU1RSSU5HLCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oYnl0ZXMuc2l6ZSgpKSk7CisgICAgICAgIC8vIEFkZCB0aGUgYnl0ZXMuCisgICAgICAg
IGVuY29kZWRfY2Jvcl8tPmFwcGVuZFZlY3RvcihieXRlcyk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkc6IHsKKyAgICAgICAg
Ly8gV1RGU3RyaW5nIHVzZXMgVVRGMTYgYnV0IFJGQzcwNDkgcmVxdWlyZXMgVVRGOAorICAgICAg
ICBhdXRvIHV0ZjhTdHJpbmcgPSBub2RlLkdldFN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgU3Rh
cnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5HLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odXRm
OFN0cmluZy5sZW5ndGgoKSkpOworICAgICAgICAvLyBBZGQgdGhlIGNoYXJhY3RlcnMuCisgICAg
ICAgIGVuY29kZWRfY2Jvcl8tPmFwcGVuZCh1dGY4U3RyaW5nLmRhdGEoKSwgdXRmOFN0cmluZy5s
ZW5ndGgoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFJlcHJlc2Vu
dHMgYW4gYXJyYXkuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OkFSUkFZOiB7CisgICAgICAg
IGNvbnN0IENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSYgYXJyYXkgPSBub2RlLkdldEFycmF5KCk7Cisg
ICAgICAgIFN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6OkFSUkFZLCBhcnJheS5zaXplKCkpOwor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbHVlIDogYXJyYXkpIHsKKyAgICAgICAgICAgIGlm
ICghRW5jb2RlQ0JPUih2YWx1ZSwgbWF4X25lc3RpbmdfbGV2ZWwgLSAxKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgLy8gUmVwcmVzZW50cyBhIG1hcC4KKyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6
TUFQOiB7CisgICAgICAgIGNvbnN0IENCT1JWYWx1ZTo6TWFwVmFsdWUmIG1hcCA9IG5vZGUuR2V0
TWFwKCk7CisgICAgICAgIFN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6Ok1BUCwgbWFwLnNpemUo
KSk7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IG1hcCkgeworICAgICAgICAg
ICAgaWYgKCFFbmNvZGVDQk9SKHZhbHVlLmZpcnN0LCBtYXhfbmVzdGluZ19sZXZlbCAtIDEpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghRW5jb2RlQ0JP
Uih2YWx1ZS5zZWNvbmQsIG1heF9uZXN0aW5nX2xldmVsIC0gMSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIFJlcHJlc2VudHMgYSBzaW1wbGUgdmFsdWUuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5
cGU6OlNJTVBMRV9WQUxVRTogeworICAgICAgICBjb25zdCBDQk9SVmFsdWU6OlNpbXBsZVZhbHVl
IHNpbXBsZV92YWx1ZSA9IG5vZGUuR2V0U2ltcGxlVmFsdWUoKTsKKyAgICAgICAgU3RhcnRJdGVt
KENCT1JWYWx1ZTo6VHlwZTo6U0lNUExFX1ZBTFVFLAorICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHNpbXBsZV92YWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gTk9UUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQk9SV3JpdGVyOjpTdGFydEl0
ZW0oQ0JPUlZhbHVlOjpUeXBlIHR5cGUsIHVpbnQ2NF90IHNpemUpCit7CisgICAgZW5jb2RlZF9j
Ym9yXy0+YXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
eXBlKSA8PCBjb25zdGFudHM6OmtNYWpvclR5cGVCaXRTaGlmdCkpOworICAgIFNldFVpbnQoc2l6
ZSk7Cit9CisKK3ZvaWQgQ0JPUldyaXRlcjo6U2V0QWRkaXRpb25hbEluZm9ybWF0aW9uKHVpbnQ4
X3QgYWRkaXRpb25hbF9pbmZvcm1hdGlvbikKK3sKKyAgICBBU1NFUlQoIWVuY29kZWRfY2Jvcl8t
PmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKChhZGRpdGlvbmFsX2luZm9ybWF0aW9uICYgY29uc3Rh
bnRzOjprQWRkaXRpb25hbEluZm9ybWF0aW9uTWFzaykgPT0gYWRkaXRpb25hbF9pbmZvcm1hdGlv
bik7CisgICAgZW5jb2RlZF9jYm9yXy0+bGFzdCgpIHw9IChhZGRpdGlvbmFsX2luZm9ybWF0aW9u
ICYgY29uc3RhbnRzOjprQWRkaXRpb25hbEluZm9ybWF0aW9uTWFzayk7Cit9CisKK3ZvaWQgQ0JP
UldyaXRlcjo6U2V0VWludCh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBzaXplX3QgY291bnQgPSBH
ZXROdW1VaW50Qnl0ZXModmFsdWUpOworICAgIGludCBzaGlmdCA9IC0xOworICAgIC8vIFZhbHVl
cyB1bmRlciAyNCBhcmUgZW5jb2RlZCBkaXJlY3RseSBpbiB0aGUgaW5pdGlhbCBieXRlLgorICAg
IC8vIE90aGVyd2lzZSwgdGhlIGxhc3QgNSBiaXRzIG9mIHRoZSBpbml0aWFsIGJ5dGUgY29udGFp
bnMgdGhlIGxlbmd0aAorICAgIC8vIG9mIHVuc2lnbmVkIGludGVnZXIsIHdoaWNoIGlzIGVuY29k
ZWQgaW4gZm9sbG93aW5nIGJ5dGVzLgorICAgIHN3aXRjaCAoY291bnQpIHsKKyAgICBjYXNlIDA6
CisgICAgICAgIFNldEFkZGl0aW9uYWxJbmZvcm1hdGlvbihzdGF0aWNfY2FzdDx1aW50OF90Pih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIFNldEFkZGl0aW9u
YWxJbmZvcm1hdGlvbihjb25zdGFudHM6OmtBZGRpdGlvbmFsSW5mb3JtYXRpb24xQnl0ZSk7Cisg
ICAgICAgIHNoaWZ0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBT
ZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oY29uc3RhbnRzOjprQWRkaXRpb25hbEluZm9ybWF0aW9u
MkJ5dGVzKTsKKyAgICAgICAgc2hpZnQgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6
CisgICAgICAgIFNldEFkZGl0aW9uYWxJbmZvcm1hdGlvbihjb25zdGFudHM6OmtBZGRpdGlvbmFs
SW5mb3JtYXRpb240Qnl0ZXMpOworICAgICAgICBzaGlmdCA9IDM7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgODoKKyAgICAgICAgU2V0QWRkaXRpb25hbEluZm9ybWF0aW9uKGNvbnN0YW50czo6
a0FkZGl0aW9uYWxJbmZvcm1hdGlvbjhCeXRlcyk7CisgICAgICAgIHNoaWZ0ID0gNzsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBmb3IgKDsgc2hpZnQgPj0gMDsgc2hpZnQtLSkgewor
ICAgICAgICBlbmNvZGVkX2Nib3JfLT5hcHBlbmQoMHhGRiAmICh2YWx1ZSA+PiAoc2hpZnQgKiA4
KSkpOworICAgIH0KK30KKworc2l6ZV90IENCT1JXcml0ZXI6OkdldE51bVVpbnRCeXRlcyh1aW50
NjRfdCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPCAyNCkgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgZWxzZSBpZiAodmFsdWUgPD0gMHhGRikgeworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisgICAgZWxzZSBpZiAodmFsdWUgPD0gMHhGRkZGKSB7CisgICAgICAgIHJldHVybiAy
OworICAgIH0KKyAgICBlbHNlIGlmICh2YWx1ZSA8PSAweEZGRkZGRkZGKSB7CisgICAgICAgIHJl
dHVybiA0OworICAgIH0KKyAgICByZXR1cm4gODsKK30KKworfSAgLy8gbmFtZXNwYWNlIGNib3IK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkv
Y2Jvci9jYm9yX3dyaXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGly
ZF9wYXJ0eS9jYm9yL2Nib3Jfd3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDEyOTI3ODIyOWJhYjg1NmQz
MGY2OTNlMDdkOTI2ZTg4YzEyZGNmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3dyaXRlci5oCkBAIC0wLDAg
KzEsMTE0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6
CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisv
LyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiY2Jvcl92YWx1ZXMuaCIKKyNpbmNsdWRlIDxzdGRk
ZWYuaD4KKworLy8gQSBiYXNpYyBDb25jaXNlIEJpbmFyeSBPYmplY3QgUmVwcmVzZW50YXRpb24g
KENCT1IpIGVuY29kZXIgYXMgZGVmaW5lZCBieQorLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzcwNDkuIFRoaXMgaXMgYSBnZW5lcmljIGVuY29kZXIgdGhhdCBzdXBwbGllcworLy8g
Y2Fub25pY2FsLCB3ZWxsLWZvcm1lZCBDQk9SIHZhbHVlcyBidXQgZG9lcyBub3QgZ3VhcmFudGVl
IHRoZWlyIHZhbGlkaXR5CisvLyAoc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3
MDQ5I3NlY3Rpb24tMy4yKS4KKy8vIFN1cHBvcnRlZDoKKy8vICAqIE1ham9yIHR5cGVzOgorLy8g
ICAgICogMDogVW5zaWduZWQgaW50ZWdlcnMsIHVwIHRvIElOVDY0X01BWC4KKy8vICAgICAqIDE6
IE5lZ2F0aXZlIGludGVnZXJzLCB0byBJTlQ2NF9NSU4uCisvLyAgICAgKiAyOiBCeXRlIHN0cmlu
Z3MuCisvLyAgICAgKiAzOiBVVEYtOCBzdHJpbmdzLgorLy8gICAgICogNDogQXJyYXlzLCB3aXRo
IHRoZSBudW1iZXIgb2YgZWxlbWVudHMga25vd24gYXQgdGhlIHN0YXJ0LgorLy8gICAgICogNTog
TWFwcywgd2l0aCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGtub3duIGF0IHRoZSBzdGFydAorLy8g
ICAgICAgICAgICAgIG9mIHRoZSBjb250YWluZXIuCisvLyAgICAgKiA3OiBTaW1wbGUgdmFsdWVz
LgorLy8KKy8vIFVuc3VwcG9ydGVkOgorLy8gICogRmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKy8v
ICAqIEluZGVmaW5pdGUtbGVuZ3RoIGVuY29kaW5ncy4KKy8vICAqIFBhcnNpbmcuCisvLworLy8g
UmVxdWlyZW1lbnRzIGZvciBjYW5vbmljYWwgQ0JPUiBhcyBzdWdnZXN0ZWQgYnkgUkZDIDcwNDkg
YXJlOgorLy8gIDEpIEFsbCBtYWpvciBkYXRhIHR5cGVzIGZvciB0aGUgQ0JPUiB2YWx1ZXMgbXVz
dCBiZSBhcyBzaG9ydCBhcyBwb3NzaWJsZS4KKy8vICAgICAgKiBVbnNpZ25lZCBpbnRlZ2VyIGJl
dHdlZW4gMCB0byAyMyBtdXN0IGJlIGV4cHJlc3NlZCBpbiBzYW1lIGJ5dGUgYXMKKy8vICAgICAg
ICAgICAgdGhlIG1ham9yIHR5cGUuCisvLyAgICAgICogMjQgdG8gMjU1IG11c3QgYmUgZXhwcmVz
c2VkIG9ubHkgd2l0aCBhbiBhZGRpdGlvbmFsIHVpbnQ4X3QuCisvLyAgICAgICogMjU2IHRvIDY1
NTM1IG11c3QgYmUgZXhwcmVzc2VkIG9ubHkgd2l0aCBhbiBhZGRpdGlvbmFsIHVpbnQxNl90Lgor
Ly8gICAgICAqIDY1NTM2IHRvIDQyOTQ5NjcyOTUgbXVzdCBiZSBleHByZXNzZWQgb25seSB3aXRo
IGFuIGFkZGl0aW9uYWwKKy8vICAgICAgICAgICAgdWludDMyX3QuICogVGhlIHJ1bGVzIGZvciBl
eHByZXNzaW9uIG9mIGxlbmd0aCBpbiBtYWpvciB0eXBlcworLy8gICAgICAgICAgICAyIHRvIDUg
Zm9sbG93IHRoZSBhYm92ZSBydWxlIGZvciBpbnRlZ2Vycy4KKy8vICAyKSBLZXlzIGluIGV2ZXJ5
IG1hcCBtdXN0IGJlIHNvcnRlZCAoZmlyc3QgYnkgbWFqb3IgdHlwZSwgdGhlbiBieSBrZXkKKy8v
ICAgICAgICAgbGVuZ3RoLCB0aGVuIGJ5IHZhbHVlIGluIGJ5dGUtd2lzZSBsZXhpY2FsIG9yZGVy
KS4KKy8vICAzKSBJbmRlZmluaXRlIGxlbmd0aCBpdGVtcyBtdXN0IGJlIGNvbnZlcnRlZCB0byBk
ZWZpbml0ZSBsZW5ndGggaXRlbXMuCisvLyAgNCkgQWxsIG1hcHMgbXVzdCBub3QgaGF2ZSBkdXBs
aWNhdGUga2V5cy4KKy8vCisvLyBDdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIENCT1JXcml0ZXIg
ZW5jb2RlciBtZWV0cyBhbGwgdGhlIHJlcXVpcmVtZW50cyBvZgorLy8gY2Fub25pY2FsIENCT1Iu
CisKK25hbWVzcGFjZSBjYm9yIHsKKworY2xhc3MgV0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQg
Q0JPUldyaXRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0JPUldyaXRlcik7CitwdWJs
aWM6CisgICAgLy8gRGVmYXVsdCB0aGF0IHNob3VsZCBiZSBzdWZmaWNpZW50bHkgbGFyZ2UgZm9y
IG1vc3QgdXNlIGNhc2VzLgorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0TWF4
TmVzdGluZ0RlcHRoID0gMTY7CisKKyAgICB+Q0JPUldyaXRlcigpOworCisgICAgLy8gUmV0dXJu
cyB0aGUgQ0JPUiBieXRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB8bm9kZXwsIHVubGVzcyBp
dHMgbmVzdGluZworICAgIC8vIGRlcHRoIGlzIGdyZWF0ZXIgdGhhbiB8bWF4X25lc3RpbmdfZGVw
dGh8LCBpbiB3aGljaCBjYXNlIGFuIGVtcHR5IG9wdGlvbmFsCisgICAgLy8gdmFsdWUgaXMgcmV0
dXJuZWQuIFRoZSBuZXN0aW5nIGRlcHRoIG9mIHxub2RlfCBpcyBkZWZpbmVkIGFzIHRoZSBudW1i
ZXIgb2YKKyAgICAvLyBhcnJheXMvbWFwcyB0aGF0IGhhcyB0byBiZSB0cmF2ZXJzZWQgdG8gcmVh
Y2ggdGhlIG1vc3QgbmVzdGVkIENCT1JWYWx1ZQorICAgIC8vIGNvbnRhaW5lZCBpbiB8bm9kZXwu
IFByaW1pdGl2ZSB2YWx1ZXMgYW5kIGVtcHR5IGNvbnRhaW5lcnMgaGF2ZSBuZXN0aW5nCisgICAg
Ly8gZGVwdGhzIG9mIDAuCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBXcml0ZShjb25zdCBDQk9SVmFsdWUmIG5vZGUsIHNpemVfdCBtYXhfbmVzdGluZ19sZXZlbCA9
IGtEZWZhdWx0TWF4TmVzdGluZ0RlcHRoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQk9S
V3JpdGVyKFZlY3Rvcjx1aW50OF90PiogY2Jvcik7CisKKyAgICAvLyBDYWxsZWQgcmVjdXJzaXZl
bHkgdG8gYnVpbGQgdGhlIENCT1IgYnl0ZXN0cmluZy4gV2hlbiBjb21wbGV0ZWQsCisgICAgLy8g
fGVuY29kZWRfY2Jvcl98IHdpbGwgY29udGFpbiB0aGUgQ0JPUi4KKyAgICBib29sIEVuY29kZUNC
T1IoY29uc3QgQ0JPUlZhbHVlJiBub2RlLCBpbnQgbWF4X25lc3RpbmdfbGV2ZWwpOworCisgICAg
Ly8gRW5jb2RlcyB0aGUgdHlwZSBhbmQgc2l6ZSBvZiB0aGUgZGF0YSBiZWluZyBhZGRlZC4KKyAg
ICB2b2lkIFN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGUgdHlwZSwgdWludDY0X3Qgc2l6ZSk7CisK
KyAgICAvLyBFbmNvZGVzIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciB0aGUgZGF0YS4K
KyAgICB2b2lkIFNldEFkZGl0aW9uYWxJbmZvcm1hdGlvbih1aW50OF90IGFkZGl0aW9uYWxfaW5m
b3JtYXRpb24pOworCisgICAgLy8gRW5jb2RlcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlLiBU
aGlzIGlzIHVzZWQgdG8gYm90aCB3cml0ZQorICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIGFuZCB0
byBlbmNvZGUgdGhlIGxlbmd0aHMgb2Ygb3RoZXIgbWFqb3IgdHlwZXMuCisgICAgdm9pZCBTZXRV
aW50KHVpbnQ2NF90IHZhbHVlKTsKKworICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5l
ZWRlZCB0byBzdG9yZSB0aGUgdW5zaWduZWQgaW50ZWdlci4KKyAgICBzaXplX3QgR2V0TnVtVWlu
dEJ5dGVzKHVpbnQ2NF90IHZhbHVlKTsKKworICAgIC8vIEhvbGRzIHRoZSBlbmNvZGVkIENCT1Ig
ZGF0YS4KKyAgICBWZWN0b3I8dWludDhfdD4qIGVuY29kZWRfY2Jvcl87Cit9OworCit9IC8vIG5h
bWVzcGFjZSBjYm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE0YmFmNTkxNGYxMmIyYzY5NzVkNjNiNTg2
Yjg2ZDAxYjdkYmI4Y2IuLmZiYWM1ODZkMGE4NWMzZGNlMDcxMGI2YTRmYjNhNDI5Zjk2NGZiYjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CkBAIC0yNDUsNiArMjQ1LDkgQEAgTW9kdWxlcy93ZWJhdWRpby9XYXZl
U2hhcGVyTm9kZS5jcHAKIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAK
IAogTW9kdWxlcy93ZWJhdXRobi9QdWJsaWNLZXlDcmVkZW50aWFsLmNwcAorTW9kdWxlcy93ZWJh
dXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfcmVhZGVyLmNwcAorTW9kdWxlcy93ZWJhdXRobi90
aGlyZF9wYXJ0eS9jYm9yL2Nib3JfdmFsdWVzLmNwcAorTW9kdWxlcy93ZWJhdXRobi90aGlyZF9w
YXJ0eS9jYm9yL2Nib3Jfd3JpdGVyLmNwcAogCiBNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZl
cnNpb25XcmFwcGVyLmNwcAogTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFz
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBlYzhmMGQ0NTgxNjExY2E1MGY5NWM4NDQ4N2U2YmQwZjZlZTlmZTQxLi4wODgx
ZTU2ZjgwYzgxOTQ5ODgwZTIxYjcyNTFjMWM0NjFmN2ExNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjM2LDYgKzE2MzYs
MTAgQEAKIAkJNTcyMUE5ODcxRUNFNTNCMTAwODEyOTVBIC8qIENyeXB0b0RpZ2VzdEFsZ29yaXRo
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyMUE5
ODYxRUNFNTNCMTAwODEyOTVBIC8qIENyeXB0b0RpZ2VzdEFsZ29yaXRobS5oICovOyB9OwogCQk1
NzIxQTk4QjFFQ0U1NzA0MDA4MTI5NUEgLyogQ3J5cHRvQWxnb3JpdGhtUnNhUHNzUGFyYW1zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzIxQTk4ODFF
Q0U1NzA0MDA4MTI5NUEgLyogQ3J5cHRvQWxnb3JpdGhtUnNhUHNzUGFyYW1zLmggKi87IH07CiAJ
CTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjAxQzZFNTcxOTAwOUM2
MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi87IH07CisJCTU3MzAzQkI5MjAwNkM2RUUwMDM1NTk2
NSAvKiBjYm9yX3ZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTczMDNCQjQyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3JfdmFsdWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTczMDNCQkEyMDA2
QzZFRTAwMzU1OTY1IC8qIGNib3Jfd3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JCNTIwMDZDNkVEMDAzNTU5NjUgLyogY2Jvcl93cml0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1
NzMwM0JCQjIwMDZDNkVFMDAzNTU5NjUgLyogY2Jvcl9iaW5hcnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQkI2MjAwNkM2RUQwMDM1NTk2NSAv
KiBjYm9yX2JpbmFyeS5oICovOyB9OworCQk1NzMwM0JDMTIwMDZFMDBDMDAzNTU5NjUgLyogY2Jv
cl9yZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3MzAzQkJGMjAwNkUwMEMwMDM1NTk2NSAvKiBjYm9yX3JlYWRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MzQ4OTM5MURBQzZCNkUwMERD
MDY2NyAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzM0ODkzODFEQUM2QjZEMDBEQzA2NjcgLyogQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oICovOyB9OwogCQk1NzM5RTEyRjFEQUM3Rjc4MDBFMTQz
ODMgLyogSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzM5RTEyRTFEQUM3Rjc4MDBFMTQzODMgLyogSlND
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggKi87IH07CiAJCTU3NTBBOTc1MUU2OEQwMDAwMDcw
NUM0QSAvKiBDcnlwdG9LZXlFQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTc1MEE5NzMxRTY4RDAwMDAwNzA1QzRBIC8qIENyeXB0b0tleUVDLmggKi87
IH07CkBAIC04MTM5LDYgKzgxNDMsMTMgQEAKIAkJNTcyMUE5OEExRUNFNTcwNDAwODEyOTVBIC8q
IFJzYVBzc1BhcmFtcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUnNhUHNzUGFyYW1zLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkI0
MjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yX3ZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBjYm9yX3ZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
NzMwM0JCNTIwMDZDNkVEMDAzNTU5NjUgLyogY2Jvcl93cml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gY2Jvcl93cml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTczMDNCQjYyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3JfYmluYXJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNib3JfYmluYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTU3MzAzQkI3MjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yX3ZhbHVlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjYm9yX3ZhbHVlcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkI4MjAwNkM2RUQwMDM1NTk2NSAvKiBj
Ym9yX3dyaXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjYm9y
X3dyaXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkJFMjAwNkUw
MDQwMDM1NTk2NSAvKiBjYm9yX3JlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBjYm9yX3JlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTU3MzAzQkJGMjAwNkUwMEMwMDM1NTk2NSAvKiBjYm9yX3JlYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBjYm9yX3JlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1NzM0ODkzODFEQUM2QjZEMDBEQzA2NjcgLyogQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MzlFMTJFMURBQzdG
NzgwMEUxNDM4MyAvKiBKU0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MzlFMTMwMURBQzdGRDEwMEUxNDM4MyAvKiBKU0Ny
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4MDE1LDYgKzE4MDI2LDI4IEBACiAJCQlwYXRoID0gInVuaWZpZWQt
c291cmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1NzMwM0JCMjIw
MDZDNkVEMDAzNTU5NjUgLyogdGhpcmRfcGFydHkgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTU3MzAzQkIzMjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yICov
LAorCQkJKTsKKwkJCXBhdGggPSB0aGlyZF9wYXJ0eTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CisJCTU3MzAzQkIzMjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzMwM0JCNjIwMDZDNkVEMDAz
NTU5NjUgLyogY2Jvcl9iaW5hcnkuaCAqLywKKwkJCQk1NzMwM0JCRTIwMDZFMDA0MDAzNTU5NjUg
LyogY2Jvcl9yZWFkZXIuY3BwICovLAorCQkJCTU3MzAzQkJGMjAwNkUwMEMwMDM1NTk2NSAvKiBj
Ym9yX3JlYWRlci5oICovLAorCQkJCTU3MzAzQkI3MjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yX3Zh
bHVlcy5jcHAgKi8sCisJCQkJNTczMDNCQjQyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3JfdmFsdWVz
LmggKi8sCisJCQkJNTczMDNCQjgyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3Jfd3JpdGVyLmNwcCAq
LywKKwkJCQk1NzMwM0JCNTIwMDZDNkVEMDAzNTU5NjUgLyogY2Jvcl93cml0ZXIuaCAqLywKKwkJ
CSk7CisJCQlwYXRoID0gY2JvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJ
CTU3QzdBNjg4MUU1Njk0NkQwMEM2N0Q3MSAvKiBjcmVkZW50aWFsbWFuYWdlbWVudCAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xODA1NSw2ICsxODA4OCw3
IEBACiAJCTU3RDg0NjJBMUZFQUY1N0YwMENBMzY4MiAvKiB3ZWJhdXRobiAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTczMDNCQjIyMDA2QzZFRDAwMzU1
OTY1IC8qIHRoaXJkX3BhcnR5ICovLAogCQkJCTU3RDg0NjJDMUZFQUY2OEYwMENBMzY4MiAvKiBQ
dWJsaWNLZXlDcmVkZW50aWFsLmNwcCAqLywKIAkJCQk1N0Q4NDYyQjFGRUFGNjhGMDBDQTM2ODIg
LyogUHVibGljS2V5Q3JlZGVudGlhbC5oICovLAogCQkJCTU3RDg0NjJEMUZFQUY2OEYwMENBMzY4
MiAvKiBQdWJsaWNLZXlDcmVkZW50aWFsLmlkbCAqLywKQEAgLTI2NDY0LDYgKzI2NDk4LDEwIEBA
CiAJCQkJMDdCNzExNkQxRDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZpY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA3QjcxMTZGMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDNzM0MTUxOTc3ODk2RDAwNDZCRkM1IC8qIENB
UmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTczMDNCQkIyMDA2QzZFRTAwMzU1OTY1
IC8qIGNib3JfYmluYXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzMwM0JDMTIwMDZFMDBDMDAz
NTU5NjUgLyogY2Jvcl9yZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3MzAzQkI5MjAwNkM2
RUUwMDM1NTk2NSAvKiBjYm9yX3ZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTczMDNCQkEy
MDA2QzZFRTAwMzU1OTY1IC8qIGNib3Jfd3JpdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUw
QjY5RTA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDREY0QjcxNjFFMDBCN0U1MDBFMjM1QTIgLyogQ0RNLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDk0QTVERTFGNzJGNTdCMDBGNTI1QzUgLyogQ0RNQ2xpZW50LmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmOTkwN2Ew
MmY5YzNkOWRhZTk4YTlkMGYwNWI5ZmU5NzhkMTQ3M2U0Li45NGNlZmUxZjdlYjdmY2I5ZGY4MGI3
YWQzMjkyYTYwNTQ5MDc0Y2EzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTgtMDEtMTAgIEppZXdlbiBUYW4gIDxq
aWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aE5dIEltcG9ydCBhIENCT1Ig
Y29kZXIgZnJvbSBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgxNTIyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA1NTcyOT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNo
IGFsc28gaW1wb3J0cyBhbGwgdW5pdCB0ZXN0cyBpbnRvIG91ciBBUEkgdGVzdHMgdG8gZW5zdXJl
IGFsbAorICAgICAgICB3b3JrYXJvdW5kcyBhbmQgbW9kaWZpY2F0aW9uIGFnYWluc3QgdGhlIG9y
aWdpbmFsIGNvZGViYXNlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGFueSBvcmlnaW5hbCBmdW5j
dGlvbmFsaXRpZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvdGhpcmRfcGFydHkvY2Jvci9jYm9yX3JlYWRlcl91bml0dGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl92YWx1ZXNfdW5pdHRlc3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS90aGlyZF9wYXJ0eS9jYm9yL2Nib3Jfd3JpdGVyX3VuaXR0ZXN0
LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjplcSk6CisgICAgICAgIFdvcmth
cm91bmRzIGFwcGxpZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxOC0w
MS0wMiAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0
ZSBDcmVkZW50aWFsIE1hbmFnZW1lbnQgQVBJIGZvciBXZWJBdXRoZW50aWNhdGlvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBiZDBjMDAyMjA5ZTM3YTMxNDdmZjY0NmFmNzU4MDZiNmYyYjQy
NDlmLi5lYTQxNzQ2NGNiNTBhOTI3MDBmMzk0YjE3YjlmYzg3NDc4MDAwZmVkIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjE2LDYgKzIxNiw5IEBACiAJCTU3MTRFQ0JCMUNBOEJGRTQwMDA1
MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNEVDQkExQ0E4QkZE
MTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLzsgfTsK
IAkJNTcxNEVDQkQxQ0E4QzIyQTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJM
Mi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVS
TDIuaHRtbCAqLzsgfTsKIAkJNTcxRjdGRDAxRjI5NjFGQjAwOTQ2NjQ4IC8qIEluZGV4ZWREQlN0
cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzLXdhbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzFGN0ZDRjFGMjk2
MUUxMDA5NDY2NDggLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmls
aXR5LnNxbGl0ZTMtd2FsICovOyB9OworCQk1NzMwM0JBRDIwMDZDNTYxMDAzNTU5NjUgLyogY2Jv
cl93cml0ZXJfdW5pdHRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTczMDNCQUIyMDA2QzU1NDAwMzU1OTY1IC8qIGNib3Jfd3JpdGVyX3VuaXR0
ZXN0LmNwcCAqLzsgfTsKKwkJNTczMDNCQUUyMDA2QzU2MTAwMzU1OTY1IC8qIGNib3JfdmFsdWVz
X3VuaXR0ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MzAzQkFDMjAwNkM1NjAwMDM1NTk2NSAvKiBjYm9yX3ZhbHVlc191bml0dGVzdC5jcHAg
Ki87IH07CisJCTU3MzAzQkMzMjAwNzFFMjMwMDM1NTk2NSAvKiBjYm9yX3JlYWRlcl91bml0dGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMw
M0JDMjIwMDcxRTIyMDAzNTU5NjUgLyogY2Jvcl9yZWFkZXJfdW5pdHRlc3QuY3BwICovOyB9Owog
CQk1NzU5OUUyMTFGMDcxOTE5MDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFj
a3dhcmRDb21wYXRpYmlsaXR5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTc1OTlFMjAxRjA3MTkxNzAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVy
ZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tbSAqLzsgfTsKIAkJNTc1OTlFMjcxRjA3MUFB
MDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0
eS5zcWxpdGUzIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3NTk5RTI0MUYwNzE5MkMwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xv
bmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMyAqLzsgfTsKIAkJNTc1OTlFMjgxRjA3MUFB
MDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0
eS5zcWxpdGUzLXNobSBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NzU5OUUyNjFGMDcxOTJDMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJl
ZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtc2htICovOyB9OwpAQCAtMTM3MSw2
ICsxMzc0LDkgQEAKIAkJNTcxNEVDQkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVz
dE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25s
b2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTcxNEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFs
VVJMMi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3Jp
Z2luYWxVUkwyLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MUY3RkNGMUYy
OTYxRTEwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGli
aWxpdHkuc3FsaXRlMy13YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJk
Q29tcGF0aWJpbGl0eS5zcWxpdGUzLXdhbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTU3MzAzQkFCMjAwNkM1NTQwMDM1NTk2NSAvKiBjYm9yX3dyaXRlcl91bml0dGVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjYm9yX3dyaXRlcl91bml0dGVzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkFDMjAwNkM1NjAwMDM1NTk2
NSAvKiBjYm9yX3ZhbHVlc191bml0dGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBjYm9yX3ZhbHVlc191bml0dGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU3MzAzQkMyMjAwNzFFMjIwMDM1NTk2NSAvKiBjYm9yX3JlYWRlcl91bml0dGVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjYm9yX3JlYWRlcl91
bml0dGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MzVGMDI1MUYzQTRF
QTYwMDBFRTgwMSAvKiBUZXN0V2ViS2l0QVBJLWlPUy5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LmVudGl0bGVt
ZW50czsgcGF0aCA9ICJUZXN0V2ViS2l0QVBJLWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1NzU5OUUyMDFGMDcxOTE3MDBBM0ZCOEMgLyogSW5kZXhlZERC
U3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRD
b21wYXRpYmlsaXR5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzU5OUUyMzFG
MDcxOTJDMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRp
YmlsaXR5V3JpdGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3
YXJkQ29tcGF0aWJpbGl0eVdyaXRlLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMTg3LDYgKzIxOTMsNyBAQAogCQkJCUNEODlEMDM3MUM0RURCMTMwMDA0MEEwNCAvKiBjb2Nv
YSAqLywKIAkJCQlBMUVDMTE4NTFGNDI1M0Q5MDBEMDE0NkUgLyogaW9zICovLAogCQkJCTMxNjJB
RTlBMUU2RjJGOEYwMDBFNERCQyAvKiBtYWMgKi8sCisJCQkJNTczMDNCQTkyMDA2QzRDNTAwMzU1
OTY1IC8qIHRoaXJkX3BhcnR5ICovLAogCQkJCTdBOTA5QTZGMUQ4Nzc0NzUwMDdFMTBGOCAvKiBB
ZmZpbmVUcmFuc2Zvcm0uY3BwICovLAogCQkJCTYzNTRGNEQwMUY3QzNBQjUwMEQ4OURGMyAvKiBB
cHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcCAqLywKIAkJCQk5M0E3MjBFNTE4RjFBMEU4MDBB
ODQ4RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCkBAIC0yMjM0LDYgKzIyNDEsMjQgQEAK
IAkJCXBhdGggPSBXZWJDb3JlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJ
NTczMDNCQTkyMDA2QzRDNTAwMzU1OTY1IC8qIHRoaXJkX3BhcnR5ICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzMwM0JBQTIwMDZDNTJDMDAzNTU5NjUg
LyogY2JvciAqLywKKwkJCSk7CisJCQlwYXRoID0gdGhpcmRfcGFydHk7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworCQk1NzMwM0JBQTIwMDZDNTJDMDAzNTU5NjUgLyogY2JvciAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTczMDNCQzIy
MDA3MUUyMjAwMzU1OTY1IC8qIGNib3JfcmVhZGVyX3VuaXR0ZXN0LmNwcCAqLywKKwkJCQk1NzMw
M0JBQzIwMDZDNTYwMDAzNTU5NjUgLyogY2Jvcl92YWx1ZXNfdW5pdHRlc3QuY3BwICovLAorCQkJ
CTU3MzAzQkFCMjAwNkM1NTQwMDM1NTk2NSAvKiBjYm9yX3dyaXRlcl91bml0dGVzdC5jcHAgKi8s
CisJCQkpOworCQkJcGF0aCA9IGNib3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQk3NTYwOTE3NjE5MjU5QzU5MDA5RUYwNkUgLyogaW9zICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTMyMjAsNyArMzI0NSw2IEBACiAJCQkJN0M4M0RF
RDQxRDBBNTkwQzAwRkVCQ0YzIC8qIEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4
M0RFRTAxRDBBNTkwQzAwRkVCQ0YzIC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0EwNTA5NDExRkI5RjA2NDAwQjMzRkI4IC8qIEpTT05WYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlGRTA1RkIwNjFGRTg0RkI3MDAwOTMyMzAgLyogUG9pc29u
ZWRVbmlxdWVQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMxQzFEOEUxREY4RUY3MjAwNkU5
NzlGIC8qIExFQkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDU0RjkxRjMzOTdC
NDAwQTk3QUE3IC8qIExpZmVjeWNsZUxvZ2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Uy
QzU1NTFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTMyNDAsNiArMzI2NCw5IEBACiAJCQkJRkUwNUZBRUYxRkUwNjQ1QjAwMDkzMjMwIC8qIFBvaXNv
bmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMDVGQUVDMUZEQjUxMEEwMDA5MzIzMCAvKiBQ
b2lzb25lZFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTA1RkFFRDFGREI1MTBFMDAwOTMy
MzAgLyogUG9pc29uZWRSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUwNUZCMDYxRkU4
NEZCNzAwMDkzMjMwIC8qIFBvaXNvbmVkVW5pcXVlUHRyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZFQzhGNEVCMUZFOUY1QUYwMDU2RkQ4QSAvKiBQb2lzb25lZFVuaXF1ZVB0ckZvck5vblRyaXZp
YWxseURlc3RydWN0aWJsZUFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRUM4RjRFNzFG
RTlDOTA1MDA1NkZEOEEgLyogUG9pc29uZWRVbmlxdWVQdHJGb3JUcml2aWFsbHlEZXN0cnVjdGli
bGVBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTNFQzI1NDExRTk2RkQ4NzAwMDgzMUI5
IC8qIFByaW9yaXR5UXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTMxRDBBNTkw
QzAwRkVCQ0YzIC8qIFJlZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYx
NDFEMEE1OTBDMDBGRUJDRjMgLyogUmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzI1Nyw3ICsz
Mjg0LDYgQEAKIAkJCQk3QzgzREYzMjFEMEE1OTBDMDBGRUJDRjMgLyogU3RyaW5nQnVpbGRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0Q0QzI2RTFFMkMwRTZFMDA5Mjk0NzAgLyogU3RyaW5n
Q29uY2F0ZW5hdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzYxRDBBNTkwQzAwRkVC
Q0YzIC8qIFN0cmluZ0hhc2hlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGRUM4RjRFNzFGRTlD
OTA1MDA1NkZEOEEgLyogUG9pc29uZWRVbmlxdWVQdHJGb3JUcml2aWFsbHlEZXN0cnVjdGlibGVB
cnJheXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzcxRDBBNTkwQzAwRkVCQ0YzIC8q
IFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMzgxRDBBNTkwQzAwRkVC
Q0YzIC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYzQTFE
MEE1OTBDMDBGRUJDRjMgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyNjYs
NyArMzI5Miw2IEBACiAJCQkJOTMyOUFBMjkxREUzRjgxRTAwM0FCRDA3IC8qIFRleHRCcmVha0l0
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzREVBODExMUYwQTU4OTAwMENCQzJFOCAv
KiBUaHJlYWRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhBMEQzNTFGRDUwQ0MzMDBF
OThDOEIgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZFQzhGNEVCMUZFOUY1
QUYwMDU2RkQ4QSAvKiBQb2lzb25lZFVuaXF1ZVB0ckZvck5vblRyaXZpYWxseURlc3RydWN0aWJs
ZUFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzExQkQ1RTFFQTk0OTBFMDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQzIwQjgxRENENTQ1
MDAwNTQyRDlFIC8qIFRpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwM0IxRDBBNjAy
NzAwRkVCQ0YzIC8qIFV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0zMzE3LDYg
KzMzNDIsOSBAQAogCQkJCTdDODNFMDQxMUQwQTYzRjIwMEZFQkNGMyAvKiBDYW5kaWRhdGVUZXN0
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUU3MUE0MTFBRTYwMDQ0N0M0QyAvKiBDYW5I
YW5kbGVSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3QzA0NkNBMUU0MjYyQTgwMDcy
MDFFNyAvKiBDQVJpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTczMDNCQzMyMDA3
MUUyMzAwMzU1OTY1IC8qIGNib3JfcmVhZGVyX3VuaXR0ZXN0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTU3MzAzQkFFMjAwNkM1NjEwMDM1NTk2NSAvKiBjYm9yX3ZhbHVlc191bml0dGVzdC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1NzMwM0JBRDIwMDZDNTYxMDAzNTU5NjUgLyogY2Jvcl93cml0
ZXJfdW5pdHRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRTYxQTQxMUFFNjAwNDQ3
QzRDIC8qIENsb3NlRnJvbVdpdGhpbkNyZWF0ZVBhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0NDRTdFQjcxQTQxMUE3RTAwNDQ3QzRDIC8qIENsb3NlTmV3V2luZG93SW5OYXZpZ2F0aW9uUG9s
aWN5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFNTFBNDExQUU2MDA0NDdD
NEMgLyogQ2xvc2VUaGVuVGVybWluYXRlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9y
ZWFkZXJfdW5pdHRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL3Ro
aXJkX3BhcnR5L2Nib3IvY2Jvcl9yZWFkZXJfdW5pdHRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzZGI4
YWVmYjExNzlkNmQ0ZmI3MzU1MWU3YzY2MzNkODc5OGI3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvdGhpcmRfcGFydHkvY2Jvci9jYm9yX3Jl
YWRlcl91bml0dGVzdC5jcHAKQEAgLTAsMCArMSw3NjkgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisv
LyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvY2Jvcl9yZWFkZXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1
dGlsaXR5PgorCisvKiBMZXZlcmFnaW5nIFJGQyA3MDQ5IGV4YW1wbGVzIGZyb20gaHR0cHM6Ly9n
aXRodWIuY29tL2Nib3IvdGVzdC12ZWN0b3JzL2Jsb2IvbWFzdGVyL2FwcGVuZGl4X2EuanNvbi4g
Ki8KK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordXNpbmcgbmFtZXNwYWNlIGNib3I7CisK
K1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkVWludCkKK3sKKyAgICBzdHJ1Y3QgVWludFRl
c3RDYXNlIHsKKyAgICAgICAgY29uc3QgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+IGNib3JfZGF0YTsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IFVpbnRU
ZXN0Q2FzZSBrVWludFRlc3RDYXNlc1tdID0geworICAgICAgICB7IDAsIHsgMHgwMCB9IH0sCisg
ICAgICAgIHsgMSwgeyAweDAxIH0gfSwKKyAgICAgICAgeyAyMywgeyAweDE3IH0gfSwKKyAgICAg
ICAgeyAyNCwgeyAweDE4LCAweDE4IH0gfSwKKyAgICAgICAgeyBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ4X3Q+OjptYXgoKSwgeyAweDE4LCAweGZmIH0gfSwKKyAgICAgICAgeyAxTEwgPDwgOCwg
eyAweDE5LCAweDAxLCAweDAwIH0gfSwKKyAgICAgICAgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQxNl90Pjo6bWF4KCksIHsgMHgxOSwgMHhmZiwgMHhmZiB9IH0sCisgICAgICAgIHsgMUxMIDw8
IDE2LCB7IDB4MWEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgeyAweDFhLCAweGZmLCAweGZmLCAweGZm
LCAweGZmIH0gfSwKKyAgICAgICAgeyAxTEwgPDwgMzIsIHsgMHgxYiwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCisgICAgICAgIHsgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCksCisgICAgICAgICAgICB7IDB4MWIsIDB4N0YsIDB4
RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfSB9LAorICAgIH07CisKKyAg
ICBmb3IgKGNvbnN0IFVpbnRUZXN0Q2FzZSYgdGVzdF9jYXNlIDoga1VpbnRUZXN0Q2FzZXMpIHsK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpSZWFk
KHRlc3RfY2FzZS5jYm9yX2RhdGEpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1
ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBDQk9SVmFs
dWU6OlR5cGU6OlVOU0lHTkVEKTsKKyAgICAgICAgRVhQRUNUX0VRKGNib3IudmFsdWUoKS5HZXRJ
bnRlZ2VyKCksIHRlc3RfY2FzZS52YWx1ZSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJU
ZXN0LCBUZXN0VWludEVuY29kZWRXaXRoTm9uTWluaW11bUJ5dGVMZW5ndGgpCit7CisgICAgc3Rh
dGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBub25fbWluaW1hbF91aW50X2VuY29kaW5nc1tdID0g
eworICAgICAgICAvLyBVaW50IDIzIGVuY29kZWQgd2l0aCAxIGJ5dGUuCisgICAgICAgIHsgMHgx
OCwgMHgxNyB9LAorICAgICAgICAvLyBVaW50IDI1NSBlbmNvZGVkIHdpdGggMiBieXRlcy4KKyAg
ICAgICAgeyAweDE5LCAweDAwLCAweGZmIH0sCisgICAgICAgIC8vIFVpbnQgNjU1MzUgZW5jb2Rl
ZCB3aXRoIDQgYnl0ZS4KKyAgICAgICAgeyAweDFhLCAweDAwLCAweDAwLCAweGZmLCAweGZmIH0s
CisgICAgICAgIC8vIFVpbnQgNDI5NDk2NzI5NSBlbmNvZGVkIHdpdGggOCBieXRlLgorICAgICAg
ICB7IDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYg
fSwKKworICAgICAgICAvLyBXaGVuIGRlY29kaW5nIGJ5dGUgaGFzIG1vcmUgdGhhbiBvbmUgc3lu
dGF4IGVycm9yLCB0aGUgZmlyc3Qgc3ludGF4CisgICAgICAgIC8vIGVycm9yIGVuY291bnRlcmVk
IGR1cmluZyBkZXNlcmlhbGl6YXRpb24gaXMgcmV0dXJuZWQgYXMgdGhlIGVycm9yIGNvZGUuCisg
ICAgICAgIHsKKyAgICAgICAgICAgIDB4YTIsIC8vIG1hcCB3aXRoIG5vbi1taW5pbWFsbHkgZW5j
b2RlZCBrZXkKKyAgICAgICAgICAgIDB4MTcsIC8vIGtleSAyNAorICAgICAgICAgICAgMHg2MSwg
MHg0MiwgLy8gdmFsdWUgOiJCIgorCisgICAgICAgICAgICAweDE4LCAweDE3LCAvLyBrZXkgMjMg
ZW5jb2RlZCB3aXRoIGV4dHJhIGJ5dGUKKyAgICAgICAgICAgIDB4NjEsIDB4NDUgLy8gdmFsdWUg
IkUiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIDB4YTIsIC8vIG1hcCB3aXRo
IG91dCBvZiBvcmRlciBhbmQgbm9uLW1pbmltYWxseSBlbmNvZGVkIGtleQorICAgICAgICAgICAg
MHgxOCwgMHgxNywgLy8ga2V5IDIzIGVuY29kZWQgd2l0aCBleHRyYSBieXRlCisgICAgICAgICAg
ICAweDYxLCAweDQ1LCAvLyB2YWx1ZSAiRSIKKyAgICAgICAgICAgIDB4MTcsIC8vIGtleSAyMwor
ICAgICAgICAgICAgMHg2MSwgMHg0MiAvLyB2YWx1ZSA6IkIiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgIDB4YTIsIC8vIG1hcCB3aXRoIGR1cGxpY2F0ZSBub24tbWluaW1hbGx5
IGVuY29kZWQga2V5CisgICAgICAgICAgICAweDE4LCAweDE3LCAvLyBrZXkgMjMgZW5jb2RlZCB3
aXRoIGV4dHJhIGJ5dGUKKyAgICAgICAgICAgIDB4NjEsIDB4NDUsIC8vIHZhbHVlICJFIgorICAg
ICAgICAgICAgMHgxOCwgMHgxNywgLy8ga2V5IDIzIGVuY29kZWQgd2l0aCBleHRyYSBieXRlCisg
ICAgICAgICAgICAweDYxLCAweDQyIC8vIHZhbHVlIDoiQiIKKyAgICAgICAgfSwKKyAgICB9Owor
CisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yX2NvZGU7CisgICAgZm9yIChjb25z
dCBhdXRvJiBub25fbWluaW1hbF91aW50IDogbm9uX21pbmltYWxfdWludF9lbmNvZGluZ3MpIHsK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpSZWFk
KG5vbl9taW5pbWFsX3VpbnQsICZlcnJvcl9jb2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNi
b3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JS
ZWFkZXI6OkRlY29kZXJFcnJvcjo6Tk9OX01JTklNQUxfQ0JPUl9FTkNPRElORyk7CisgICAgfQor
fQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZE5lZ2F0aXZlSW50KQoreworICAgIHN0
cnVjdCBOZWdhdGl2ZUludFRlc3RDYXNlIHsKKyAgICAgICAgY29uc3QgaW50NjRfdCBuZWdhdGl2
ZV9pbnQ7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBjYm9yX2RhdGE7CisgICAgfTsK
KworICAgIHN0YXRpYyBjb25zdCBOZWdhdGl2ZUludFRlc3RDYXNlIGtOZWdhdGl2ZUludFRlc3RD
YXNlc1tdID0geworICAgICAgICB7IC0xTEwsIHsgMHgyMCB9IH0sCisgICAgICAgIHsgLTI0TEws
IHsgMHgzNyB9IH0sCisgICAgICAgIHsgLTI1TEwsIHsgMHgzOCwgMHgxOCB9IH0sCisgICAgICAg
IHsgLTI1NkxMLCB7IDB4MzgsIDB4ZmYgfSB9LAorICAgICAgICB7IC0xMDAwTEwsIHsgMHgzOSwg
MHgwMywgMHhlNyB9IH0sCisgICAgICAgIHsgLTEwMDAwMDBMTCwgeyAweDNhLCAweDAwLCAweDBm
LCAweDQyLCAweDNmIH0gfSwKKyAgICAgICAgeyAtNDI5NDk2NzI5NkxMLCB7IDB4M2EsIDB4ZmYs
IDB4ZmYsIDB4ZmYsIDB4ZmYgfSB9LAorICAgICAgICB7IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
NjRfdD46Om1pbigpLAorICAgICAgICAgICAgeyAweDNiLCAweDdmLCAweGZmLCAweGZmLCAweGZm
LCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0gfQorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IE5l
Z2F0aXZlSW50VGVzdENhc2UmIHRlc3RfY2FzZSA6IGtOZWdhdGl2ZUludFRlc3RDYXNlcykgewor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQo
dGVzdF9jYXNlLmNib3JfZGF0YSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVl
KCkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLnZhbHVlKCkudHlwZSgpID09IENCT1JWYWx1
ZTo6VHlwZTo6TkVHQVRJVkUpOworICAgICAgICBFWFBFQ1RfRVEoY2Jvci52YWx1ZSgpLkdldElu
dGVnZXIoKSwgdGVzdF9jYXNlLm5lZ2F0aXZlX2ludCk7CisgICAgfQorfQorCitURVNUKENCT1JS
ZWFkZXJUZXN0LCBUZXN0UmVhZEJ5dGVzKQoreworICAgIHN0cnVjdCBCeXRlVGVzdENhc2Ugewor
ICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gdmFsdWU7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiBjYm9yX2RhdGE7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBCeXRlVGVz
dENhc2Uga0J5dGVTdHJpbmdUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAge3t9LCB7MHg0MH19LAor
ICAgICAgICB7ezB4MDEsIDB4MDIsIDB4MDMsIDB4MDR9LCB7MHg0NCwgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNH19LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IEJ5dGVUZXN0Q2FzZSYgdGVzdF9j
YXNlIDoga0J5dGVTdHJpbmdUZXN0Q2FzZXMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9S
VmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpSZWFkKHRlc3RfY2FzZS5jYm9yX2RhdGEpOworICAg
ICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUo
Y2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OkJZVEVfU1RSSU5HKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoY2Jvci52YWx1ZSgpLkdldEJ5dGVzdHJpbmcoKSA9PSB0ZXN0X2Nh
c2UudmFsdWUpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRTdHJp
bmcpCit7CisgICAgc3RydWN0IFN0cmluZ1Rlc3RDYXNlIHsKKyAgICAgICAgY29uc3QgU3RyaW5n
IHZhbHVlOworICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gY2Jvcl9kYXRhOworICAgIH07
CisKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nVGVzdENhc2Uga1N0cmluZ1Rlc3RDYXNlc1tdID0g
eworICAgICAgICB7ICIiLCB7IDB4NjAgfSB9LAorICAgICAgICB7ICJhIiwgeyAweDYxLCAweDYx
IH0gfSwKKyAgICAgICAgeyAiSUVURiIsIHsgMHg2NCwgMHg0OSwgMHg0NSwgMHg1NCwgMHg0NiB9
IH0sCisgICAgICAgIHsgIlwiXFwiLCB7IDB4NjIsIDB4MjIsIDB4NWMgfSB9LAorICAgICAgICB7
IFN0cmluZzo6ZnJvbVVURjgoIlx4YzNceGJjIiksIHsgMHg2MiwgMHhjMywgMHhiYyB9IH0sCisg
ICAgICAgIHsgU3RyaW5nOjpmcm9tVVRGOCgiXHhlNlx4YjBceGI0IiksIHsgMHg2MywgMHhlNiwg
MHhiMCwgMHhiNCB9IH0sCisgICAgICAgIHsgU3RyaW5nOjpmcm9tVVRGOCgiXHhmMFx4OTBceDg1
XHg5MSIpLCB7IDB4NjQsIDB4ZjAsIDB4OTAsIDB4ODUsIDB4OTEgfSB9LAorICAgIH07CisKKyAg
ICBmb3IgKGNvbnN0IFN0cmluZ1Rlc3RDYXNlJiB0ZXN0X2Nhc2UgOiBrU3RyaW5nVGVzdENhc2Vz
KSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6
UmVhZCh0ZXN0X2Nhc2UuY2Jvcl9kYXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNf
dmFsdWUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0gQ0JP
UlZhbHVlOjpUeXBlOjpTVFJJTkcpOworICAgICAgICBFWFBFQ1RfVFJVRShjYm9yLnZhbHVlKCku
R2V0U3RyaW5nKCkgPT0gdGVzdF9jYXNlLnZhbHVlKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJl
YWRlclRlc3QsIFRlc3RSZWFkU3RyaW5nV2l0aE5VTCkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3Ry
dWN0IHsKKyAgICAgICAgY29uc3QgU3RyaW5nIHZhbHVlOworICAgICAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4gY2Jvcl9kYXRhOworICAgIH0ga1N0cmluZ1Rlc3RDYXNlc1tdID0geworICAgICAg
ICB7IFN0cmluZygic3RyaW5nX3dpdGhvdXRfbnVsIiksCisgICAgICAgICAgICB7IDB4NzIsIDB4
NzMsIDB4NzQsIDB4NzIsIDB4NjksIDB4NkUsIDB4NjcsIDB4NUYsIDB4NzcsIDB4NjksIDB4NzQs
IDB4NjgsCisgICAgICAgICAgICAgICAgMHg2RiwgMHg3NSwgMHg3NCwgMHg1RiwgMHg2RSwgMHg3
NSwgMHg2QyB9IH0sCisgICAgICAgIHsgU3RyaW5nKCJudWxfdGVybWluYXRlZF9zdHJpbmdcMCIs
IDIyKSwKKyAgICAgICAgICAgIHsgMHg3NiwgMHg2RSwgMHg3NSwgMHg2QywgMHg1RiwgMHg3NCwg
MHg2NSwgMHg3MiwgMHg2RCwgMHg2OSwgMHg2RSwgMHg2MSwKKyAgICAgICAgICAgICAgICAweDc0
LCAweDY1LCAweDY0LCAweDVGLCAweDczLCAweDc0LCAweDcyLCAweDY5LCAweDZFLCAweDY3LCAw
eDAwIH0gfSwKKyAgICAgICAgeyBTdHJpbmcoImVtYmVkZGVkXDBudWwiLCAxMiksCisgICAgICAg
ICAgICB7IDB4NkMsIDB4NjUsIDB4NkQsIDB4NjIsIDB4NjUsIDB4NjQsIDB4NjQsIDB4NjUsIDB4
NjQsIDB4MDAsIDB4NkUsIDB4NzUsCisgICAgICAgICAgICAgICAgMHg2QyB9IH0sCisgICAgICAg
IHsgU3RyaW5nKCJ0cmFpbGluZ19udWxzXDBcMCIsIDE1KSwKKyAgICAgICAgICAgIHsgMHg2Riwg
MHg3NCwgMHg3MiwgMHg2MSwgMHg2OSwgMHg2QywgMHg2OSwgMHg2RSwgMHg2NywgMHg1RiwgMHg2
RSwgMHg3NSwKKyAgICAgICAgICAgICAgICAweDZDLCAweDczLCAweDAwLCAweDAwIH0gfSwKKyAg
ICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiB0ZXN0X2Nhc2UgOiBrU3RyaW5nVGVzdENhc2Vz
KSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6
UmVhZCh0ZXN0X2Nhc2UuY2Jvcl9kYXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNf
dmFsdWUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0gQ0JP
UlZhbHVlOjpUeXBlOjpTVFJJTkcpOworICAgICAgICBFWFBFQ1RfVFJVRShjYm9yLnZhbHVlKCku
R2V0U3RyaW5nKCkgPT0gdGVzdF9jYXNlLnZhbHVlKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJl
YWRlclRlc3QsIFRlc3RSZWFkU3RyaW5nV2l0aEludmFsaWRCeXRlU2VxdWVuY2VBZnRlck5VTCkK
K3sKKyAgICAvLyBVVEYtOCB2YWxpZGF0aW9uIHNob3VsZCBub3Qgc3RvcCBhdCB0aGUgZmlyc3Qg
TlVMIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLgorICAgIC8vIFRoYXQgaXMsIGEgc3RyaW5nIHdp
dGggYW4gaW52YWxpZCBieXRlIHNlcXVlbmNlIHNob3VsZCBmYWlsIFVURi04CisgICAgLy8gdmFs
aWRhdGlvbiBldmVuIGlmIHRoZSBpbnZhbGlkIGNoYXJhY3RlciBpcyBsb2NhdGVkIGFmdGVyIG9u
ZSBvciBtb3JlIE5VTAorICAgIC8vIGNoYXJhY3RlcnMuIEhlcmUsIDB4QTYgaXMgYW4gdW5leHBl
Y3RlZCBjb250aW51YXRpb24gYnl0ZS4KKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
IHN0cmluZ193aXRoX2ludmFsaWRfY29udGludWF0aW9uX2J5dGUgPSB7CisgICAgICAgIDB4NjMs
IDB4MDAsIDB4MDAsIDB4QTYKKyAgICB9OworICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBl
cnJvcl9jb2RlOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRl
cjo6UmVhZChzdHJpbmdfd2l0aF9pbnZhbGlkX2NvbnRpbnVhdGlvbl9ieXRlLCAmZXJyb3JfY29k
ZSk7CisgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVF
KGVycm9yX2NvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpJTlZBTElEX1VURjgpOwor
fQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZEFycmF5KQoreworICAgIHN0YXRpYyBj
b25zdCBWZWN0b3I8dWludDhfdD4ga0FycmF5VGVzdENhc2VDYm9yID0geworICAgICAgICAweDk4
LCAweDE5LCAgLy8gYXJyYXkgb2YgMjUgZWxlbWVudHMKKyAgICAgICAgMHgwMSwgMHgwMiwgMHgw
MywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywK
KyAgICAgICAgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwg
MHgxNSwgMHgxNiwgMHgxNywgMHgxOCwKKyAgICAgICAgMHgxOCwgMHgxOCwgMHgxOSwKKyAgICB9
OworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpSZWFk
KGtBcnJheVRlc3RDYXNlQ2Jvcik7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7
CisgICAgY29uc3QgQ0JPUlZhbHVlIGNib3JfYXJyYXkgPSBXVEZNb3ZlKGNib3IudmFsdWUoKSk7
CisgICAgQVNTRVJUX1RSVUUoY2Jvcl9hcnJheS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpB
UlJBWSk7CisgICAgQVNTRVJUX0VRKGNib3JfYXJyYXkuR2V0QXJyYXkoKS5zaXplKCksIDI1KTsK
KworICAgIFZlY3RvcjxDQk9SVmFsdWU+IGFycmF5OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MjU7IGkrKykgeworICAgICAgICBBU1NFUlRfVFJVRShjYm9yX2FycmF5LkdldEFycmF5KClbaV0u
dHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6VU5TSUdORUQpOworICAgICAgICBFWFBFQ1RfRVEo
Y2Jvcl9hcnJheS5HZXRBcnJheSgpW2ldLkdldEludGVnZXIoKSwKKyAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDY0X3Q+KGkgKyAxKSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFk
ZXJUZXN0LCBUZXN0UmVhZE1hcFdpdGhNYXBWYWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+IGtNYXBUZXN0Q2FzZUNib3IgPSB7CisgICAgICAgIDB4YTQsICAvLyBtYXAg
d2l0aCA0IGtleSB2YWx1ZSBwYWlyczoKKyAgICAgICAgMHgxOCwgMHgxOCwgIC8vIDI0CisgICAg
ICAgIDB4NjMsIDB4NjEsIDB4NjIsIDB4NjMsICAvLyAiYWJjIgorCisgICAgICAgIDB4NjAsICAv
LyAiIgorICAgICAgICAweDYxLCAweDJlLCAgLy8gIi4iCisKKyAgICAgICAgMHg2MSwgMHg2Miwg
IC8vICJiIgorICAgICAgICAweDYxLCAweDQyLCAgLy8gIkIiCisKKyAgICAgICAgMHg2MiwgMHg2
MSwgMHg2MSwgIC8vICJhYSIKKyAgICAgICAgMHg2MiwgMHg0MSwgMHg0MSwgIC8vICJBQSIKKyAg
ICB9OworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpS
ZWFkKGtNYXBUZXN0Q2FzZUNib3IpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkp
OworICAgIGNvbnN0IENCT1JWYWx1ZSBjYm9yX3ZhbCA9IFdURk1vdmUoY2Jvci52YWx1ZSgpKTsK
KyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNQVAp
OworICAgIEFTU0VSVF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5zaXplKCksIDR1KTsKKworICAgIGNv
bnN0IENCT1JWYWx1ZSBrZXlfdWludCgyNCk7CisgICAgQVNTRVJUX0VRKGNib3JfdmFsLkdldE1h
cCgpLmNvdW50KGtleV91aW50KSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JfdmFsLkdldE1h
cCgpLmZpbmQoa2V5X3VpbnQpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U1RS
SU5HKTsKKyAgICBFWFBFQ1RfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV91aW50KS0+
c2Vjb25kLkdldFN0cmluZygpID09ICJhYmMiKTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlf
ZW1wdHlfc3RyaW5nKCIiKTsKKyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQo
a2V5X2VtcHR5X3N0cmluZyksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAo
KS5maW5kKGtleV9lbXB0eV9zdHJpbmcpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlw
ZTo6U1RSSU5HKTsKKyAgICBFWFBFQ1RfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV9l
bXB0eV9zdHJpbmcpLT5zZWNvbmQuR2V0U3RyaW5nKCkgPT0gIi4iKTsKKworICAgIGNvbnN0IENC
T1JWYWx1ZSBrZXlfYigiYiIpOworICAgIEFTU0VSVF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5jb3Vu
dChrZXlfYiksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtl
eV9iKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlNUUklORyk7CisgICAgRVhQ
RUNUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfYiktPnNlY29uZC5HZXRTdHJpbmco
KSA9PSAiQiIpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleV9hYSgiYWEiKTsKKyAgICBBU1NF
UlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQoa2V5X2FhKSwgMXUpOworICAgIEFTU0VSVF9U
UlVFKGNib3JfdmFsLkdldE1hcCgpLmZpbmQoa2V5X2FhKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9S
VmFsdWU6OlR5cGU6OlNUUklORyk7CisgICAgRVhQRUNUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCku
ZmluZChrZXlfYWEpLT5zZWNvbmQuR2V0U3RyaW5nKCkgPT0gIkFBIik7Cit9CisKK1RFU1QoQ0JP
UlJlYWRlclRlc3QsIFRlc3RSZWFkTWFwV2l0aEludGVnZXJLZXlzKQoreworICAgIHN0YXRpYyBj
b25zdCBWZWN0b3I8dWludDhfdD4ga01hcFdpdGhJbnRlZ2VyS2V5Q2JvciA9IHsKKyAgICAgICAg
MHhBNCwgICAgICAgICAgICAgICAgIC8vIG1hcCB3aXRoIDQga2V5IHZhbHVlIHBhaXJzCisgICAg
ICAgIDB4MDEsICAgICAgICAgICAgICAvLyBrZXkgOiAxCisgICAgICAgIDB4NjEsIDB4NjEsICAg
ICAgICAvLyB2YWx1ZSA6ICJhIgorCisgICAgICAgIDB4MDksICAgICAgICAgICAgICAvLyBrZXkg
OiA5CisgICAgICAgIDB4NjEsIDB4NjIsICAgICAgICAvLyB2YWx1ZSA6ICJiIgorCisgICAgICAg
IDB4MTksIDB4MDMsIDB4RTcsICAvLyBrZXkgOiA5OTkKKyAgICAgICAgMHg2MSwgMHg2MywgICAg
ICAgIC8vIHZhbHVlICJjIgorCisgICAgICAgIDB4MTksIDB4MDQsIDB4NTcsICAvLyBrZXkgOiAx
MTExCisgICAgICAgIDB4NjEsIDB4NjQsICAgICAgICAvLyB2YWx1ZSA6ICJkIgorICAgIH07CisK
KyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoa01h
cFdpdGhJbnRlZ2VyS2V5Q2Jvcik7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7
CisgICAgY29uc3QgQ0JPUlZhbHVlIGNib3JfdmFsID0gV1RGTW92ZShjYm9yLnZhbHVlKCkpOwor
ICAgIEFTU0VSVF9UUlVFKGNib3JfdmFsLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6Ok1BUCk7
CisgICAgQVNTRVJUX0VRKGNib3JfdmFsLkdldE1hcCgpLnNpemUoKSwgNHUpOworCisgICAgY29u
c3QgQ0JPUlZhbHVlIGtleV8xKDEpOworICAgIEFTU0VSVF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5j
b3VudChrZXlfMSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5k
KGtleV8xKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlNUUklORyk7CisgICAg
QVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfMSktPnNlY29uZC5HZXRTdHJp
bmcoKSA9PSAiYSIpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleV85KDkpOworICAgIEFTU0VS
VF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5jb3VudChrZXlfOSksIDF1KTsKKyAgICBBU1NFUlRfVFJV
RShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV85KS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFs
dWU6OlR5cGU6OlNUUklORyk7CisgICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmlu
ZChrZXlfOSktPnNlY29uZC5HZXRTdHJpbmcoKSA9PSAiYiIpOworCisgICAgY29uc3QgQ0JPUlZh
bHVlIGtleV85OTkoOTk5KTsKKyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQo
a2V5Xzk5OSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtl
eV85OTkpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5HKTsKKyAgICBB
U1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV85OTkpLT5zZWNvbmQuR2V0U3Ry
aW5nKCkgPT0gImMiKTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlfMTExMSgxMTExKTsKKyAg
ICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQoa2V5XzExMTEpLCAxdSk7CisgICAg
QVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfMTExMSktPnNlY29uZC50eXBl
KCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcpOworICAgIEFTU0VSVF9UUlVFKGNib3JfdmFs
LkdldE1hcCgpLmZpbmQoa2V5XzExMTEpLT5zZWNvbmQuR2V0U3RyaW5nKCkgPT0gImQiKTsKK30K
KworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRNYXBXaXRoQXJyYXkpCit7CisgICAgc3Rh
dGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTWFwQXJyYXlUZXN0Q2FzZUNib3IgPSB7CisgICAg
ICAgIDB4YTIsICAvLyBtYXAgb2YgMiBwYWlycworICAgICAgICAweDYxLCAweDYxLCAgLy8gImEi
CisgICAgICAgIDB4MDEsCisKKyAgICAgICAgMHg2MSwgMHg2MiwgIC8vICJiIgorICAgICAgICAw
eDgyLCAgICAgICAgLy8gYXJyYXkgd2l0aCAyIGVsZW1lbnRzCisgICAgICAgIDB4MDIsCisgICAg
ICAgIDB4MDMsCisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0g
Q0JPUlJlYWRlcjo6UmVhZChrTWFwQXJyYXlUZXN0Q2FzZUNib3IpOworICAgIEFTU0VSVF9UUlVF
KGNib3IuaGFzX3ZhbHVlKCkpOworICAgIGNvbnN0IENCT1JWYWx1ZSBjYm9yX3ZhbCA9IFdURk1v
dmUoY2Jvci52YWx1ZSgpKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC50eXBlKCkgPT0gQ0JP
UlZhbHVlOjpUeXBlOjpNQVApOworICAgIEFTU0VSVF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5zaXpl
KCksIDJ1KTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlfYSgiYSIpOworICAgIEFTU0VSVF9F
UShjYm9yX3ZhbC5HZXRNYXAoKS5jb3VudChrZXlfYSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShj
Ym9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6
OlR5cGU6OlVOU0lHTkVEKTsKKyAgICBFWFBFQ1RfRVEoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChr
ZXlfYSktPnNlY29uZC5HZXRJbnRlZ2VyKCksIDF1KTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBr
ZXlfYigiYiIpOworICAgIEFTU0VSVF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5jb3VudChrZXlfYiks
IDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV9iKS0+c2Vj
b25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OkFSUkFZKTsKKworICAgIGNvbnN0IENCT1JW
YWx1ZSBuZXN0ZWRfYXJyYXkgPSBjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV9iKS0+c2Vjb25k
LkNsb25lKCk7CisgICAgQVNTRVJUX0VRKG5lc3RlZF9hcnJheS5HZXRBcnJheSgpLnNpemUoKSwg
MnUpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIEFTU0VSVF9U
UlVFKG5lc3RlZF9hcnJheS5HZXRBcnJheSgpW2ldLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6
OlVOU0lHTkVEKTsKKyAgICAgICAgRVhQRUNUX0VRKG5lc3RlZF9hcnJheS5HZXRBcnJheSgpW2ld
LkdldEludGVnZXIoKSwKKyAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KGkg
KyAyKSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZE5lc3RlZE1h
cCkKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtOZXN0ZWRNYXBUZXN0Q2Fz
ZSA9IHsKKyAgICAgICAgMHhhMiwgIC8vIG1hcCBvZiAyIHBhaXJzCisgICAgICAgIDB4NjEsIDB4
NjEsICAvLyAiYSIKKyAgICAgICAgMHgwMSwKKworICAgICAgICAweDYxLCAweDYyLCAgLy8gImIi
CisgICAgICAgIDB4YTIsICAgICAgICAvLyBtYXAgb2YgMiBwYWlycworICAgICAgICAweDYxLCAw
eDYzLCAgLy8gImMiCisgICAgICAgIDB4MDIsCisKKyAgICAgICAgMHg2MSwgMHg2NCwgIC8vICJk
IgorICAgICAgICAweDAzLAorICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4g
Y2JvciA9IENCT1JSZWFkZXI6OlJlYWQoa05lc3RlZE1hcFRlc3RDYXNlKTsKKyAgICBBU1NFUlRf
VFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICBjb25zdCBDQk9SVmFsdWUgY2Jvcl92YWwgPSBX
VEZNb3ZlKGNib3IudmFsdWUoKSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwudHlwZSgpID09
IENCT1JWYWx1ZTo6VHlwZTo6TUFQKTsKKyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCku
c2l6ZSgpLCAydSk7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5X2EoImEiKTsKKyAgICBBU1NF
UlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQoa2V5X2EpLCAxdSk7CisgICAgQVNTRVJUX1RS
VUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZh
bHVlOjpUeXBlOjpVTlNJR05FRCk7CisgICAgRVhQRUNUX0VRKGNib3JfdmFsLkdldE1hcCgpLmZp
bmQoa2V5X2EpLT5zZWNvbmQuR2V0SW50ZWdlcigpLCAxdSk7CisKKyAgICBjb25zdCBDQk9SVmFs
dWUga2V5X2IoImIiKTsKKyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQoa2V5
X2IpLCAxdSk7CisgICAgY29uc3QgQ0JPUlZhbHVlIG5lc3RlZF9tYXAgPSBjYm9yX3ZhbC5HZXRN
YXAoKS5maW5kKGtleV9iKS0+c2Vjb25kLkNsb25lKCk7CisgICAgQVNTRVJUX1RSVUUobmVzdGVk
X21hcC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNQVApOworICAgIEFTU0VSVF9FUShuZXN0
ZWRfbWFwLkdldE1hcCgpLnNpemUoKSwgMnUpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleV9j
KCJjIik7CisgICAgQVNTRVJUX0VRKG5lc3RlZF9tYXAuR2V0TWFwKCkuY291bnQoa2V5X2MpLCAx
dSk7CisgICAgQVNTRVJUX1RSVUUobmVzdGVkX21hcC5HZXRNYXAoKS5maW5kKGtleV9jKS0+c2Vj
b25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlVOU0lHTkVEKTsKKyAgICBFWFBFQ1RfRVEo
bmVzdGVkX21hcC5HZXRNYXAoKS5maW5kKGtleV9jKS0+c2Vjb25kLkdldEludGVnZXIoKSwgMnUp
OworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleV9kKCJkIik7CisgICAgQVNTRVJUX0VRKG5lc3Rl
ZF9tYXAuR2V0TWFwKCkuY291bnQoa2V5X2QpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUobmVzdGVk
X21hcC5HZXRNYXAoKS5maW5kKGtleV9kKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5
cGU6OlVOU0lHTkVEKTsKKyAgICBFWFBFQ1RfRVEobmVzdGVkX21hcC5HZXRNYXAoKS5maW5kKGtl
eV9kKS0+c2Vjb25kLkdldEludGVnZXIoKSwgM3UpOworfQorCitURVNUKENCT1JSZWFkZXJUZXN0
LCBUZXN0SW50ZWdlclJhbmdlKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4g
a01heFBvc2l0aXZlSW50ID0geworICAgICAgICAweDFiLCAweDdGLCAweEZGLCAweEZGLCAweEZG
LCAweEZGLCAweEZGLCAweEZGLCAweEZGCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+IGtNaW5OZWdhdGl2ZUludCA9IHsKKyAgICAgICAgMHgzYiwgMHg3RiwgMHhGRiwg
MHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRgorICAgIH07CisKKyAgICBzdGQ6Om9w
dGlvbmFsPENCT1JWYWx1ZT4gbWF4X3Bvc2l0aXZlX2ludCA9IENCT1JSZWFkZXI6OlJlYWQoa01h
eFBvc2l0aXZlSW50KTsKKyAgICBBU1NFUlRfVFJVRShtYXhfcG9zaXRpdmVfaW50Lmhhc192YWx1
ZSgpKTsKKyAgICBFWFBFQ1RfRVEobWF4X3Bvc2l0aXZlX2ludC52YWx1ZSgpLkdldEludGVnZXIo
KSwgSU5UNjRfTUFYKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBtaW5fbmVnYXRp
dmVfaW50ID0gQ0JPUlJlYWRlcjo6UmVhZChrTWluTmVnYXRpdmVJbnQpOworICAgIEFTU0VSVF9U
UlVFKG1pbl9uZWdhdGl2ZV9pbnQuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9FUShtaW5fbmVn
YXRpdmVfaW50LnZhbHVlKCkuR2V0SW50ZWdlcigpLCBJTlQ2NF9NSU4pOworfQorCitURVNUKENC
T1JSZWFkZXJUZXN0LCBUZXN0SW50ZWdlck91dE9mUmFuZ2VFcnJvcikKK3sKKyAgICBzdGF0aWMg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtPdXRPZlJhbmdlUG9zaXRpdmVJbnQgPSB7CisgICAgICAg
IDB4MWIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyAg
ICB9OworCisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrT3V0T2ZSYW5nZU5lZ2F0
aXZlSW50ID0geworICAgICAgICAweDNiLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwCisgICAgfTsKKworICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBl
cnJvcl9jb2RlOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBwb3NpdGl2ZV9pbnRfb3V0
X29mX3JhbmdlX2Nib3IgPSBDQk9SUmVhZGVyOjpSZWFkKGtPdXRPZlJhbmdlUG9zaXRpdmVJbnQs
ICZlcnJvcl9jb2RlKTsKKyAgICBFWFBFQ1RfRkFMU0UocG9zaXRpdmVfaW50X291dF9vZl9yYW5n
ZV9jYm9yLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JS
ZWFkZXI6OkRlY29kZXJFcnJvcjo6T1VUX09GX1JBTkdFX0lOVEVHRVJfVkFMVUUpOworCisgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IG5lZ2F0aXZlX2ludF9vdXRfb2ZfcmFuZ2VfY2JvciA9
IENCT1JSZWFkZXI6OlJlYWQoa091dE9mUmFuZ2VOZWdhdGl2ZUludCwgJmVycm9yX2NvZGUpOwor
ICAgIEVYUEVDVF9GQUxTRShuZWdhdGl2ZV9pbnRfb3V0X29mX3JhbmdlX2Nib3IuaGFzX3ZhbHVl
KCkpOworICAgIEVYUEVDVF9UUlVFKGVycm9yX2NvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVy
cm9yOjpPVVRfT0ZfUkFOR0VfSU5URUdFUl9WQUxVRSk7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRl
c3QsIFRlc3RSZWFkU2ltcGxlVmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7Cisg
ICAgICAgIGNvbnN0IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWUgdmFsdWU7CisgICAgICAgIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiBjYm9yX2RhdGE7CisgICAgfSBrU2ltcGxlVmFsdWVUZXN0Q2FzZXNb
XSA9IHsKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpGQUxTRV9WQUxVRSwgeyAw
eGY0IH0gfSwKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpUUlVFX1ZBTFVFLCB7
IDB4ZjUgfSB9LAorICAgICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6Ok5VTExfVkFMVUUs
IHsgMHhmNiB9IH0sCisgICAgICAgIHsgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VU5ERUZJTkVE
LCB7IDB4ZjcgfSB9LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRlc3RfY2FzZSA6
IGtTaW1wbGVWYWx1ZVRlc3RDYXNlcykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1
ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQodGVzdF9jYXNlLmNib3JfZGF0YSk7CisgICAgICAg
IEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9y
LnZhbHVlKCkudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U0lNUExFX1ZBTFVFKTsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoY2Jvci52YWx1ZSgpLkdldFNpbXBsZVZhbHVlKCkgPT0gdGVzdF9jYXNl
LnZhbHVlKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkVW5zdXBw
b3J0ZWRGbG9hdGluZ1BvaW50TnVtYmVycykKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+IGZsb2F0aW5nX3BvaW50X2Nib3JzW10gPSB7CisgICAgICAgIC8vIDE2IGJpdCBmbG9h
dGluZyBwb2ludCB2YWx1ZS4KKyAgICAgICAgeyAweGY5LCAweDEwLCAweDAwIH0sCisgICAgICAg
IC8vIDMyIGJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZS4KKyAgICAgICAgeyAweGZhLCAweDEwLCAw
eDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgIC8vIDY0IGJpdCBmbG9hdGluZyBwb2ludCB2YWx1
ZS4KKyAgICAgICAgeyAweGZiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwIH0KKyAgICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiB1bnN1cHBvcnRlZF9m
bG9hdGluZ19wb2ludCA6IGZsb2F0aW5nX3BvaW50X2Nib3JzKSB7CisgICAgICAgIENCT1JSZWFk
ZXI6OkRlY29kZXJFcnJvciBlcnJvcl9jb2RlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JW
YWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQodW5zdXBwb3J0ZWRfZmxvYXRpbmdfcG9pbnQs
ICZlcnJvcl9jb2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09CisgICAgICAgICAgICAgICAgICBDQk9S
UmVhZGVyOjpEZWNvZGVyRXJyb3I6OlVOU1VQUE9SVEVEX0ZMT0FUSU5HX1BPSU5UX1ZBTFVFKTsK
KyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RJbmNvbXBsZXRlQ0JPUkRhdGFF
cnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGluY29tcGxldGVfY2Jv
cl9saXN0W10gPSB7CisgICAgICAgIC8vIEFkZGl0aW9uYWwgaW5mbyBieXRlIGNvcnJlc3BvbmRz
IHRvIHVuc2lnbmVkIGludCB0aGF0IGNvcnJlc3BvbmRzCisgICAgICAgIC8vIHRvIDIgYWRkaXRp
b25hbCBieXRlcy4gQnV0IGFjdHVhbCBkYXRhIGVuY29kZWQgIGluIG9uZSBieXRlLgorICAgICAg
ICB7IDB4MTksIDB4MDMgfSwKKyAgICAgICAgLy8gQ0JPUiBieXRlc3RyaW5nIG9mIGxlbmd0aCAz
IGVuY29kZWQgd2l0aCBhZGRpdGlvbmFsIGluZm8gb2YgbGVuZ3RoIDQuCisgICAgICAgIHsgMHg0
NCwgMHgwMSwgMHgwMiwgMHgwMyB9LAorICAgICAgICAvLyBDQk9SIHN0cmluZyBkYXRhICJJRVRG
IiBvZiBsZW5ndGggNCBlbmNvZGVkIHdpdGggYWRkaXRpb25hbCBpbmZvIG9mCisgICAgICAgIC8v
IGxlbmd0aCA1LgorICAgICAgICB7IDB4NjUsIDB4NDksIDB4NDUsIDB4NTQsIDB4NDYgfSwKKyAg
ICAgICAgLy8gQ0JPUiBhcnJheSBvZiBsZW5ndGggMSBlbmNvZGVkIHdpdGggYWRkaXRpb25hbCBp
bmZvIG9mIGxlbmd0aCAyLgorICAgICAgICB7IDB4ODIsIDB4MDIgfSwKKyAgICAgICAgLy8gQ0JP
UiBtYXAgd2l0aCBzaW5nbGUga2V5IHZhbHVlIHBhaXIgZW5jb2RlZCB3aXRoIGFkZGl0aW9uYWwg
aW5mbyBvZgorICAgICAgICAvLyBsZW5ndGggMi4KKyAgICAgICAgeyAweGEyLCAweDYxLCAweDYx
LCAweDAxIH0sCisgICAgfTsKKworICAgIGZvciAoY29uc3QgYXV0byYgaW5jb21wbGV0ZV9kYXRh
IDogaW5jb21wbGV0ZV9jYm9yX2xpc3QpIHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVy
cm9yIGVycm9yX2NvZGU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0g
Q0JPUlJlYWRlcjo6UmVhZChpbmNvbXBsZXRlX2RhdGEsICZlcnJvcl9jb2RlKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJv
cl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6SU5DT01QTEVURV9DQk9SX0RBVEEp
OworICAgIH0KK30KKworLy8gV2hpbGUgUkZDIDcwNDkgYWxsb3dzIENCT1IgbWFwIGtleXMgd2l0
aCBhbGwgdHlwZXMsIGN1cnJlbnQgZGVjb2RlciBvbmx5CisvLyBzdXBwb3J0cyB1bnNpZ25lZCBp
bnRlZ2VyIGFuZCBzdHJpbmcga2V5cy4KK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RVbnN1cHBv
cnRlZE1hcEtleUZvcm1hdEVycm9yKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhf
dD4ga01hcFdpdGhVaW50S2V5ID0geworICAgICAgICAweGEyLCAgICAgICAgLy8gbWFwIG9mIDIg
cGFpcnMKKworICAgICAgICAweDgyLCAweDAxLCAweDAyLCAgLy8gaW52YWxpZCBrZXkgOiBbMSwg
Ml0KKyAgICAgICAgMHgwMiwgICAgICAgICAgICAgIC8vIHZhbHVlIDogMgorCisgICAgICAgIDB4
NjEsIDB4NjQsICAvLyBrZXkgOiAiZCIKKyAgICAgICAgMHgwMywgICAgICAgIC8vIHZhbHVlIDog
MworICAgIH07CisKKyAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JfY29kZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoa01hcFdp
dGhVaW50S2V5LCAmZXJyb3JfY29kZSk7CisgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVl
KCkpOworICAgIEVYUEVDVF9UUlVFKGVycm9yX2NvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVy
cm9yOjpJTkNPUlJFQ1RfTUFQX0tFWV9UWVBFKTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwg
VGVzdFVua25vd25BZGRpdGlvbmFsSW5mb0Vycm9yKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0
b3I8dWludDhfdD4ga1Vua25vd25BZGRpdGlvbmFsSW5mb0xpc3RbXSA9IHsKKyAgICAgICAgLy8g
IklFVEYiIGVuY29kZWQgd2l0aCBtYWpvciB0eXBlIDMgYW5kIGFkZGl0aW9uYWwgaW5mbyBvZiAy
OC4KKyAgICAgICAgeyAweDdDLCAweDQ5LCAweDQ1LCAweDU0LCAweDQ2IH0sCisgICAgICAgIC8v
ICJcIlxcIiBlbmNvZGVkIHdpdGggbWFqb3IgdHlwZSAzIGFuZCBhZGRpdGlvbmFsIGluZm8gb2Yg
MjkuCisgICAgICAgIHsgMHg3RCwgMHgyMiwgMHg1YyB9LAorICAgICAgICAvLyAiXHhjM1x4YmMi
IGVuY29kZWQgd2l0aCBtYWpvciB0eXBlIDMgYW5kIGFkZGl0aW9uYWwgaW5mbyBvZiAzMC4KKyAg
ICAgICAgeyAweDdFLCAweGMzLCAweGJjIH0sCisgICAgICAgIC8vICJceGU2XHhiMFx4YjQiIGVu
Y29kZWQgd2l0aCBtYWpvciB0eXBlIDMgYW5kIGFkZGl0aW9uYWwgaW5mbyBvZiAzMS4KKyAgICAg
ICAgeyAweDdGLCAweGU2LCAweGIwLCAweGI0IH0sCisgICAgICAgIC8vIE1ham9yIHR5cGUgNywg
YWRkaXRpb25hbCBpbmZvcm1hdGlvbiAyODogdW5hc3NpZ25lZC4KKyAgICAgICAgeyAweEZDIH0s
CisgICAgICAgIC8vIE1ham9yIHR5cGUgNywgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiAyOTogdW5h
c3NpZ25lZC4KKyAgICAgICAgeyAweEZEIH0sCisgICAgICAgIC8vIE1ham9yIHR5cGUgNywgYWRk
aXRpb25hbCBpbmZvcm1hdGlvbiAzMDogdW5hc3NpZ25lZC4KKyAgICAgICAgeyAweEZFIH0sCisg
ICAgICAgIC8vIE1ham9yIHR5cGUgNywgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiAzMTogImJyZWFr
IiBzdG9wIGNvZGUgZm9yCisgICAgICAgIC8vIGluZGVmaW5pdGUtbGVuZ3RoIGl0ZW1zLgorICAg
ICAgICB7IDB4RkYgfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiBpbmNvcnJlY3Rf
Y2JvciA6IGtVbmtub3duQWRkaXRpb25hbEluZm9MaXN0KSB7CisgICAgICAgIENCT1JSZWFkZXI6
OkRlY29kZXJFcnJvciBlcnJvcl9jb2RlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1
ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoaW5jb3JyZWN0X2Nib3IsICZlcnJvcl9jb2RlKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1Rf
VFJVRShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6VU5LTk9XTl9BRERJ
VElPTkFMX0lORk8pOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFRvb011
Y2hOZXN0aW5nRXJyb3IpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrWmVy
b0RlcHRoQ0JPUkxpc3RbXSA9IHsKKyAgICAgICAgLy8gVW5zaWduZWQgaW50IHdpdGggdmFsdWUg
MTAwLgorICAgICAgICB7IDB4MTgsIDB4NjQgfSwKKyAgICAgICAgLy8gQ0JPUiBieXRlc3RyaW5n
IG9mIGxlbmd0aCA0LgorICAgICAgICB7IDB4NDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfSwK
KyAgICAgICAgLy8gQ0JPUiBzdHJpbmcgb2YgY29ycmVzcG9uZGluZyB0byAiSUVURi4KKyAgICAg
ICAgeyAweDY0LCAweDQ5LCAweDQ1LCAweDU0LCAweDQ2IH0sCisgICAgICAgIC8vIEVtcHR5IENC
T1IgYXJyYXkuCisgICAgICAgIHsgMHg4MCB9LAorICAgICAgICAvLyBFbXB0eSBDQk9SIE1hcAor
ICAgICAgICB7IDB4YTAgfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiB6ZXJvX2Rl
cHRoX2RhdGEgOiBrWmVyb0RlcHRoQ0JPUkxpc3QpIHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6RGVj
b2RlckVycm9yIGVycm9yX2NvZGU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBj
Ym9yID0gQ0JPUlJlYWRlcjo6UmVhZCh6ZXJvX2RlcHRoX2RhdGEsICZlcnJvcl9jb2RlLCAwKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKGVycm9yX2NvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpDQk9SX05PX0VSUk9S
KTsKKyAgICB9CisKKyAgICAvLyBDb3JyZXNwb25kcyB0byBhIENCT1Igc3RydWN0dXJlIHdpdGgg
YSBuZXN0aW5nIGRlcHRoIG9mIDI6CisgICAgLy8gICAgICB7ImEiOiAxLAorICAgIC8vICAgICAg
ICJiIjogWzIsIDNdfQorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4ga05lc3RlZENC
T1JEYXRhID0geworICAgICAgICAweGEyLCAgLy8gbWFwIG9mIDIgcGFpcnMKKyAgICAgICAgMHg2
MSwgMHg2MSwgIC8vICJhIgorICAgICAgICAweDAxLAorCisgICAgICAgIDB4NjEsIDB4NjIsICAv
LyAiYiIKKyAgICAgICAgMHg4MiwgICAgICAgIC8vIGFycmF5IHdpdGggMiBlbGVtZW50cworICAg
ICAgICAweDAyLAorICAgICAgICAweDAzLAorICAgIH07CisKKyAgICBDQk9SUmVhZGVyOjpEZWNv
ZGVyRXJyb3IgZXJyb3JfY29kZTsKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2Jvcl9z
aW5nbGVfbGF5ZXJfbWF4ID0gQ0JPUlJlYWRlcjo6UmVhZChrTmVzdGVkQ0JPUkRhdGEsICZlcnJv
cl9jb2RlLCAxKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2Jvcl9zaW5nbGVfbGF5ZXJfbWF4Lmhhc192
YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29k
ZXJFcnJvcjo6VE9PX01VQ0hfTkVTVElORyk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1
ZT4gY2Jvcl9kb3VibGVfbGF5ZXJfbWF4ID0gQ0JPUlJlYWRlcjo6UmVhZChrTmVzdGVkQ0JPUkRh
dGEsICZlcnJvcl9jb2RlLCAyKTsKKyAgICBFWFBFQ1RfVFJVRShjYm9yX2RvdWJsZV9sYXllcl9t
YXguaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKGVycm9yX2NvZGUgPT0gQ0JPUlJlYWRl
cjo6RGVjb2RlckVycm9yOjpDQk9SX05PX0VSUk9SKTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVz
dCwgVGVzdE91dE9mT3JkZXJLZXlFcnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+IGtNYXBzV2l0aFVuc29ydGVkS2V5c1tdID0geworICAgICAgICB7MHhhMiwgIC8vIG1h
cCB3aXRoIDIga2V5cyB3aXRoIHNhbWUgbWFqb3IgdHlwZSBhbmQgbGVuZ3RoCisgICAgICAgICAg
ICAweDYxLCAweDYyLCAgLy8ga2V5ICJiIgorICAgICAgICAgICAgMHg2MSwgMHg0MiwgIC8vIHZh
bHVlIDoiQiIKKworICAgICAgICAgICAgMHg2MSwgMHg2MSwgIC8vIGtleSAiYSIgKG91dCBvZiBv
cmRlciBieXRlLXdpc2UgbGV4aWNhbGx5KQorICAgICAgICAgICAgMHg2MSwgMHg0NSAgIC8vIHZh
bHVlICJFIgorICAgICAgICB9LAorICAgICAgICB7MHhhMiwgIC8vIG1hcCB3aXRoIDIga2V5cyB3
aXRoIGRpZmZlcmVudCBtYWpvciB0eXBlCisgICAgICAgICAgICAweDYxLCAweDYyLCAgICAgICAg
Ly8ga2V5ICJiIgorICAgICAgICAgICAgMHgwMiwgICAgICAgICAgICAgIC8vIHZhbHVlIDIKKwor
ICAgICAgICAgICAgLy8ga2V5IDEwMDAgKG91dCBvZiBvcmRlciBzaW5jZSBsb3dlciBtYWpvciB0
eXBlIHNvcnRzIGZpcnN0KQorICAgICAgICAgICAgMHgxOSwgMHgwMywgMHhlOCwKKyAgICAgICAg
ICAgIDB4NjEsIDB4NjEsICAgICAgICAvLyB2YWx1ZSBhCisgICAgICAgIH0sCisgICAgICAgIHsw
eGEyLCAgLy8gbWFwIHdpdGggMiBrZXlzIHdpdGggc2FtZSBtYWpvciB0eXBlCisgICAgICAgICAg
ICAweDE5LCAweDAzLCAweGU4LCAgLy8ga2V5IDEwMDAgIChvdXQgb2Ygb3JkZXIgZHVlIHRvIGxv
bmdlciBsZW5ndGgpCisgICAgICAgICAgICAweDYxLCAweDYxLCAgICAgICAgLy92YWx1ZSAiYSIK
KworICAgICAgICAgICAgMHgwYSwgICAgICAgICAgICAgIC8vIGtleSAxMAorICAgICAgICAgICAg
MHg2MSwgMHg2Mn0sICAgICAgIC8vIHZhbHVlICJiIgorICAgIH07CisKKyAgICBDQk9SUmVhZGVy
OjpEZWNvZGVyRXJyb3IgZXJyb3JfY29kZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVuc29ydGVk
X21hcCA6IGtNYXBzV2l0aFVuc29ydGVkS2V5cykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENC
T1JWYWx1ZT4gY2JvciA9CisgICAgICAgIENCT1JSZWFkZXI6OlJlYWQodW5zb3J0ZWRfbWFwLCAm
ZXJyb3JfY29kZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6
Ok9VVF9PRl9PUkRFUl9LRVkpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVz
dER1cGxpY2F0ZUtleUVycm9yKSB7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBr
TWFwV2l0aER1cGxpY2F0ZUtleSA9IHsKKyAgICAgICAgMHhhNiwgIC8vIG1hcCBvZiA2IHBhaXJz
OgorICAgICAgICAweDYwLCAgLy8gIiIKKyAgICAgICAgMHg2MSwgMHgyZSwgIC8vICIuIgorCisg
ICAgICAgIDB4NjEsIDB4NjIsICAvLyAiYiIKKyAgICAgICAgMHg2MSwgMHg0MiwgIC8vICJCIgor
CisgICAgICAgIDB4NjEsIDB4NjIsICAvLyAiYiIgKER1cGxpY2F0ZSBrZXkpCisgICAgICAgIDB4
NjEsIDB4NDMsICAvLyAiQyIKKworICAgICAgICAweDYxLCAweDY0LCAgLy8gImQiCisgICAgICAg
IDB4NjEsIDB4NDQsICAvLyAiRCIKKworICAgICAgICAweDYxLCAweDY1LCAgLy8gImUiCisgICAg
ICAgIDB4NjEsIDB4NDQsICAvLyAiRCIKKworICAgICAgICAweDYyLCAweDYxLCAweDYxLCAgLy8g
ImFhIgorICAgICAgICAweDYyLCAweDQxLCAweDQxLCAgLy8gIkFBIgorICAgIH07CisKKyAgICBD
Qk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JfY29kZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8
Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6UmVhZChrTWFwV2l0aER1cGxpY2F0ZUtleSwg
JmVycm9yX2NvZGUpOworICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICBF
WFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6RFVQTElD
QVRFX0tFWSk7Cit9CisKKy8vIExldmVyYWdpbmcgTWFya3VzIEt1aG7igJlzIFVURi04IGRlY29k
ZXIgc3RyZXNzIHRlc3QuIFNlZQorLy8gaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vj
cy9leGFtcGxlcy9VVEYtOC10ZXN0LnR4dCBmb3IgZGV0YWlscy4KK1RFU1QoQ0JPUlJlYWRlclRl
c3QsIFRlc3RJbmNvcnJlY3RTdHJpbmdFbmNvZGluZ0Vycm9yKQoreworICAgIHN0YXRpYyBjb25z
dCBWZWN0b3I8dWludDhfdD4gdXRmOF9jaGFyYWN0ZXJfZW5jb2RpbmdzW10gPSB7CisgICAgICAg
IC8vIENvcnJlc3BvbmRzIHRvIHV0ZjggZW5jb2Rpbmcgb2YgIu2fvyIgKHNlY3Rpb24gMi4zLjEg
b2Ygc3RyZXNzIHRlc3QpLgorICAgICAgICB7IDB4NjMsIDB4RUQsIDB4OUYsIDB4QkYgfSwKKyAg
ICAgICAgLy8gQ29ycmVzcG9uZHMgdG8gdXRmOCBlbmNvZGluZyBvZiAi7oCAIiAoc2VjdGlvbiAy
LjMuMiBvZiBzdHJlc3MgdGVzdCkuCisgICAgICAgIHsgMHg2MywgMHhFRSwgMHg4MCwgMHg4MCB9
LAorICAgICAgICAvLyBDb3JyZXNwb25kcyB0byB1dGY4IGVuY29kaW5nIG9mICLvv70iICAoc2Vj
dGlvbiAyLjMuMyBvZiBzdHJlc3MgdGVzdCkuCisgICAgICAgIHsgMHg2MywgMHhFRiwgMHhCRiwg
MHhCRCB9LAorICAgIH07CisKKyAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JfY29k
ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNib3JfYnl0ZSA6IHV0ZjhfY2hhcmFjdGVyX2VuY29k
aW5ncykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY29ycmVjdGx5X2VuY29k
ZWRfY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoY2Jvcl9ieXRlLCAmZXJyb3JfY29kZSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGNvcnJlY3RseV9lbmNvZGVkX2Nib3IuaGFzX3ZhbHVlKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6
Q0JPUl9OT19FUlJPUik7CisgICAgfQorCisgICAgLy8gSW5jb3JyZWN0IFVURjggZW5jb2Rpbmcg
cmVmZXJlbmNlZCBieSBzZWN0aW9uIDMuNS4zIG9mIHRoZSBzdHJlc3MgdGVzdC4KKyAgICBWZWN0
b3I8dWludDhfdD4gaW1wb3NzaWJsZV91dGZfYnl0ZXsgMHg2NCwgMHhmZSwgMHhmZSwgMHhmZiwg
MHhmZiB9OworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBpbmNvcnJlY3RseV9lbmNvZGVk
X2Nib3IgPSBDQk9SUmVhZGVyOjpSZWFkKGltcG9zc2libGVfdXRmX2J5dGUsICZlcnJvcl9jb2Rl
KTsKKyAgICBFWFBFQ1RfRkFMU0UoaW5jb3JyZWN0bHlfZW5jb2RlZF9jYm9yLmhhc192YWx1ZSgp
KTsKKyAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJv
cjo6SU5WQUxJRF9VVEY4KTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdEV4dHJhbmVv
dXNDQk9SRGF0YUVycm9yKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4gemVy
b19wYWRkZWRfY2Jvcl9saXN0W10gPSB7CisgICAgICAgIC8vIDEgZXh0cmEgYnl0ZSBhZnRlciBh
IDItYnl0ZSB1bnNpZ25lZCBpbnQuCisgICAgICAgIHsgMHgxOSwgMHgwMywgMHgwNSwgMHgwMCB9
LAorICAgICAgICAvLyAxIGV4dHJhIGJ5dGUgYWZ0ZXIgYSA0LWJ5dGUgY2JvciBieXRlIGFycmF5
LgorICAgICAgICB7IDB4NDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDAgfSwKKyAgICAg
ICAgLy8gMSBleHRyYSBieXRlIGFmdGVyIGEgNC1ieXRlIHN0cmluZy4KKyAgICAgICAgeyAweDY0
LCAweDQ5LCAweDQ1LCAweDU0LCAweDQ2LCAweDAwIH0sCisgICAgICAgIC8vIDEgZXh0cmEgYnl0
ZSBhZnRlciBDQk9SIGFycmF5IG9mIGxlbmd0aCAyLgorICAgICAgICB7IDB4ODIsIDB4MDEsIDB4
MDIsIDB4MDAgfSwKKyAgICAgICAgLy8gMSBleHRyYSBrZXkgdmFsdWUgcGFpciBhZnRlciBDQk9S
IG1hcCBvZiBzaXplIDIuCisgICAgICAgIHsgMHhhMSwgMHg2MSwgMHg2MywgMHgwMiwgMHg2MSwg
MHg2NCwgMHgwMyB9LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGV4dHJhbmVvdXNf
Y2Jvcl9kYXRhIDogemVyb19wYWRkZWRfY2Jvcl9saXN0KSB7CisgICAgICAgIENCT1JSZWFkZXI6
OkRlY29kZXJFcnJvciBlcnJvcl9jb2RlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1
ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoZXh0cmFuZW91c19jYm9yX2RhdGEsICZlcnJvcl9j
b2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBF
WFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6RVhUUkFO
RU9VU19EQVRBKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RVbnN1cHBv
cnRlZFNpbXBsZXZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4gdW5z
dXBwb3J0ZWRfc2ltcGxlX3ZhbHVlc1tdID0geworICAgICAgICAvLyBTaW1wbGUgdmFsdWUgKDAs
IHVuYXNzaWduZWQpCisgICAgICAgIHsgMHhFMCB9LAorICAgICAgICAvLyBTaW1wbGUgdmFsdWUg
KDE5LCB1bmFzc2lnbmVkKQorICAgICAgICB7IDB4RjMgfSwKKyAgICAgICAgLy8gU2ltcGxlIHZh
bHVlICgyNCwgcmVzZXJ2ZWQpCisgICAgICAgIHsgMHhGOCwgMHgxOCB9LAorICAgICAgICAvLyBT
aW1wbGUgdmFsdWUgKDI4LCByZXNlcnZlZCkKKyAgICAgICAgeyAweEY4LCAweDFDIH0sCisgICAg
ICAgIC8vIFNpbXBsZSB2YWx1ZSAoMjksIHJlc2VydmVkKQorICAgICAgICB7IDB4RjgsIDB4MUQg
fSwKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgzMCwgcmVzZXJ2ZWQpCisgICAgICAgIHsgMHhG
OCwgMHgxRSB9LAorICAgICAgICAvLyBTaW1wbGUgdmFsdWUgKDMxLCByZXNlcnZlZCkKKyAgICAg
ICAgeyAweEY4LCAweDFGIH0sCisgICAgICAgIC8vIFNpbXBsZSB2YWx1ZSAoMzIsIHVuYXNzaWdu
ZWQpCisgICAgICAgIHsgMHhGOCwgMHgyMCB9LAorICAgICAgICAvLyBTaW1wbGUgdmFsdWUgKDI1
NSwgdW5hc3NpZ25lZCkKKyAgICAgICAgeyAweEY4LCAweEZGIH0sCisgICAgfTsKKworICAgIGZv
ciAoY29uc3QgYXV0byYgdW5zdXBwb3J0ZWRfc2ltcGxlX3ZhbCA6IHVuc3VwcG9ydGVkX3NpbXBs
ZV92YWx1ZXMpIHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yX2NvZGU7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6UmVh
ZCh1bnN1cHBvcnRlZF9zaW1wbGVfdmFsLCAmZXJyb3JfY29kZSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29kZSA9
PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OlVOU1VQUE9SVEVEX1NJTVBMRV9WQUxVRSk7Cisg
ICAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl92YWx1
ZXNfdW5pdHRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL3RoaXJk
X3BhcnR5L2Nib3IvY2Jvcl92YWx1ZXNfdW5pdHRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmYjRiMzVh
MGZiMjZmNTk3ZWY3NDM1ZDQwZDNjODVhOWJjZDU1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvdGhpcmRfcGFydHkvY2Jvci9jYm9yX3ZhbHVl
c191bml0dGVzdC5jcHAKQEAgLTAsMCArMSw0MDIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9jYm9yX3ZhbHVlcy5oPgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCit1c2luZyBuYW1lc3BhY2UgY2JvcjsKKworVEVTVChDQk9SVmFs
dWVzVGVzdCwgVGVzdE5vdGhyb3cpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlPENCT1JWYWx1ZT46OnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgIklzTm90aHJvd01vdmVDb25zdHJ1Y3RpYmxlIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX25vdGhyb3dfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPENCT1JWYWx1ZT46OnZhbHVlLAorICAg
ICAgICAgICAgICAgICAgIklzTm90aHJvd0RlZmF1bHRDb25zdHJ1Y3RpYmxlIik7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxDQk9SVmFsdWUsIFN0cmlu
ZyYmPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAiSXNOb3Rocm93TW92ZUNvbnN0cnVjdGli
bGVGcm9tU3RyaW5nIik7CisgICAgc3RhdGljX2Fzc2VydCgKKyAgICAgICAgICAgICAgICAgIHN0
ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPENCT1JWYWx1ZSwgQ0JPUlZhbHVlOjpCaW5hcnlW
YWx1ZSYmPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAiSXNOb3Rocm93TW92ZUNvbnN0cnVj
dGlibGVGcm9tQnl0ZXN0cmluZyIpOworICAgIHN0YXRpY19hc3NlcnQoCisgICAgICAgICAgICAg
ICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxDQk9SVmFsdWUsIENCT1JWYWx1ZTo6
QXJyYXlWYWx1ZSYmPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAiSXNOb3Rocm93TW92ZUNv
bnN0cnVjdGlibGVGcm9tQXJyYXkiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbm90aHJv
d19tb3ZlX2Fzc2lnbmFibGU8Q0JPUlZhbHVlPjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAi
SXNOb3Rocm93TW92ZUFzc2lnbmFibGUiKTsKK30KKworLy8gVGVzdCBjb25zdHJ1Y3RvcnMKK1RF
U1QoQ0JPUlZhbHVlc1Rlc3QsIENvbnN0cnVjdFVuc2lnbmVkKQoreworICAgIENCT1JWYWx1ZSB2
YWx1ZSgzNyk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCA9PSB2
YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9FUSgzN3UsIHZhbHVlLkdldEludGVnZXIoKSk7Cit9
CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvbnN0cnVjdE5lZ2F0aXZlKQoreworICAgIENCT1JW
YWx1ZSB2YWx1ZSgtMSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpORUdBVElW
RSA9PSB2YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9FUSgtMSwgdmFsdWUuR2V0SW50ZWdlcigp
KTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgQ29uc3RydWN0U3RyaW5nRnJvbUNvbnN0Q2hh
clB0cikKK3sKKyAgICBjb25zdCBjaGFyKiBzdHIgPSAiZm9vYmFyIjsKKyAgICBDQk9SVmFsdWUg
dmFsdWUoc3RyKTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNUUklORyA9PSB2
YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKCJmb29iYXIiID09IHZhbHVlLkdldFN0cmlu
ZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgQ29uc3RydWN0U3RyaW5nRnJvbVdURlN0
cmluZ0NvbnN0UmVmKQoreworICAgIFN0cmluZyBzdHIgPSAiZm9vYmFyIjsKKyAgICBDQk9SVmFs
dWUgdmFsdWUoc3RyKTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNUUklORyA9
PSB2YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKCJmb29iYXIiID09IHZhbHVlLkdldFN0
cmluZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgQ29uc3RydWN0U3RyaW5nRnJvbVdU
RlN0cmluZ1JlZlJlZikKK3sKKyAgICBTdHJpbmcgc3RyID0gImZvb2JhciI7CisgICAgQ0JPUlZh
bHVlIHZhbHVlKFdURk1vdmUoc3RyKSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBl
OjpTVFJJTkcgPT0gdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSgiZm9vYmFyIiA9PSB2
YWx1ZS5HZXRTdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvbnN0cnVjdEJ5
dGVzdHJpbmcpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKENCT1JWYWx1ZTo6QmluYXJ5VmFsdWUo
eyAweEYsIDB4MCwgMHgwLCAweEIsIDB4QSwgMHgyIH0pKTsKKyAgICBBU1NFUlRfVFJVRShDQk9S
VmFsdWU6OlR5cGU6OkJZVEVfU1RSSU5HID09IHZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX1RS
VUUoQ0JPUlZhbHVlOjpCaW5hcnlWYWx1ZSh7IDB4RiwgMHgwLCAweDAsIDB4QiwgMHhBLCAweDIg
fSkgPT0gdmFsdWUuR2V0Qnl0ZXN0cmluZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwg
Q29uc3RydWN0QXJyYXkpCit7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGFycmF5OworICAg
IGFycmF5LmFwcGVuZChDQk9SVmFsdWUoImZvbyIpKTsKKyAgICB7CisgICAgICAgIENCT1JWYWx1
ZSB2YWx1ZShhcnJheSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QVJS
QVkgPT0gdmFsdWUudHlwZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDF1LCB2YWx1ZS5HZXRBcnJh
eSgpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5H
ID09IHZhbHVlLkdldEFycmF5KClbMF0udHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoImZv
byIgPT0gdmFsdWUuR2V0QXJyYXkoKVswXS5HZXRTdHJpbmcoKSk7CisgICAgfQorCisgICAgYXJy
YXkubGFzdCgpID0gQ0JPUlZhbHVlKCJiYXIiKTsKKyAgICB7CisgICAgICAgIENCT1JWYWx1ZSB2
YWx1ZShXVEZNb3ZlKGFycmF5KSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlw
ZTo6QVJSQVkgPT0gdmFsdWUudHlwZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDF1LCB2YWx1ZS5H
ZXRBcnJheSgpLnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6
U1RSSU5HID09IHZhbHVlLkdldEFycmF5KClbMF0udHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoImJhciIgPT0gdmFsdWUuR2V0QXJyYXkoKVswXS5HZXRTdHJpbmcoKSk7CisgICAgfQorfQor
CitURVNUKENCT1JWYWx1ZXNUZXN0LCBDb25zdHJ1Y3RNYXApCit7CisgICAgQ0JPUlZhbHVlOjpN
YXBWYWx1ZSBtYXA7CisgICAgY29uc3QgQ0JPUlZhbHVlIGtleV9mb28oImZvbyIpOworICAgIG1h
cFtDQk9SVmFsdWUoImZvbyIpXSA9IENCT1JWYWx1ZSgiYmFyIik7CisgICAgeworICAgICAgICBD
Qk9SVmFsdWUgdmFsdWUobWFwKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBl
OjpNQVAgPT0gdmFsdWUudHlwZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKHZhbHVlLkdldE1hcCgp
LmNvdW50KGtleV9mb28pLCAxdSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlw
ZTo6U1RSSU5HID09IHZhbHVlLkdldE1hcCgpLmZpbmQoa2V5X2ZvbyktPnNlY29uZC50eXBlKCkp
OworICAgICAgICBFWFBFQ1RfVFJVRSgiYmFyIiA9PSB2YWx1ZS5HZXRNYXAoKS5maW5kKGtleV9m
b28pLT5zZWNvbmQuR2V0U3RyaW5nKCkpOworICAgIH0KKworICAgIG1hcFtDQk9SVmFsdWUoImZv
byIpXSA9IENCT1JWYWx1ZSgiYmF6Iik7CisgICAgeworICAgICAgICBDQk9SVmFsdWUgdmFsdWUo
V1RGTW92ZShtYXApKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpNQVAg
PT0gdmFsdWUudHlwZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKHZhbHVlLkdldE1hcCgpLmNvdW50
KGtleV9mb28pLCAxdSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U1RS
SU5HID09IHZhbHVlLkdldE1hcCgpLmZpbmQoa2V5X2ZvbyktPnNlY29uZC50eXBlKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRSgiYmF6IiA9PSB2YWx1ZS5HZXRNYXAoKS5maW5kKGtleV9mb28pLT5z
ZWNvbmQuR2V0U3RyaW5nKCkpOworICAgIH0KK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgQ29u
c3RydWN0U2ltcGxlVmFsdWUpCit7CisgICAgQ0JPUlZhbHVlIGZhbHNlX3ZhbHVlKENCT1JWYWx1
ZTo6U2ltcGxlVmFsdWU6OkZBTFNFX1ZBTFVFKTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6
OlR5cGU6OlNJTVBMRV9WQUxVRSA9PSBmYWxzZV92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9U
UlVFKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OkZBTFNFX1ZBTFVFID09IGZhbHNlX3ZhbHVlLkdl
dFNpbXBsZVZhbHVlKCkpOworCisgICAgQ0JPUlZhbHVlIHRydWVfdmFsdWUoQ0JPUlZhbHVlOjpT
aW1wbGVWYWx1ZTo6VFJVRV9WQUxVRSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBl
OjpTSU1QTEVfVkFMVUUgPT0gdHJ1ZV92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKENC
T1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlRSVUVfVkFMVUUgPT0gdHJ1ZV92YWx1ZS5HZXRTaW1wbGVW
YWx1ZSgpKTsKKworICAgIENCT1JWYWx1ZSBudWxsX3ZhbHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFs
dWU6Ok5VTExfVkFMVUUpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U0lNUExF
X1ZBTFVFID09IG51bGxfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6
OlNpbXBsZVZhbHVlOjpOVUxMX1ZBTFVFID09IG51bGxfdmFsdWUuR2V0U2ltcGxlVmFsdWUoKSk7
CisKKyAgICBDQk9SVmFsdWUgdW5kZWZpbmVkX3ZhbHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6
OlVOREVGSU5FRCk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTSU1QTEVfVkFM
VUUgPT0gdW5kZWZpbmVkX3ZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVl
OjpTaW1wbGVWYWx1ZTo6VU5ERUZJTkVEID09IHVuZGVmaW5lZF92YWx1ZS5HZXRTaW1wbGVWYWx1
ZSgpKTsKK30KKworLy8gVGVzdCBjb3B5IGNvbnN0cnVjdG9ycworVEVTVChDQk9SVmFsdWVzVGVz
dCwgQ29weVVuc2lnbmVkKQoreworICAgIENCT1JWYWx1ZSB2YWx1ZSg3NCk7CisgICAgQ0JPUlZh
bHVlIGNvcGllZF92YWx1ZSh2YWx1ZS5DbG9uZSgpKTsKKyAgICBBU1NFUlRfVFJVRSh2YWx1ZS50
eXBlKCkgPT0gY29waWVkX3ZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKHZhbHVlLkdldElu
dGVnZXIoKSwgY29waWVkX3ZhbHVlLkdldEludGVnZXIoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxh
bms7CisKKyAgICBibGFuayA9IHZhbHVlLkNsb25lKCk7CisgICAgQVNTRVJUX1RSVUUodmFsdWUu
dHlwZSgpID09IGJsYW5rLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKHZhbHVlLkdldEludGVnZXIo
KSwgYmxhbmsuR2V0SW50ZWdlcigpKTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgQ29weU5l
Z2F0aXZlSW50KQoreworICAgIENCT1JWYWx1ZSB2YWx1ZSgtNzQpOworICAgIENCT1JWYWx1ZSBj
b3BpZWRfdmFsdWUodmFsdWUuQ2xvbmUoKSk7CisgICAgQVNTRVJUX1RSVUUodmFsdWUudHlwZSgp
ID09IGNvcGllZF92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5HZXRJbnRlZ2Vy
KCksIGNvcGllZF92YWx1ZS5HZXRJbnRlZ2VyKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOwor
CisgICAgYmxhbmsgPSB2YWx1ZS5DbG9uZSgpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUo
KSA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5HZXRJbnRlZ2VyKCksIGJs
YW5rLkdldEludGVnZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvcHlTdHJpbmcp
Cit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKCJmb29iYXIiKTsKKyAgICBDQk9SVmFsdWUgY29waWVk
X3ZhbHVlKHZhbHVlLkNsb25lKCkpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBj
b3BpZWRfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS5HZXRTdHJpbmcoKSA9
PSBjb3BpZWRfdmFsdWUuR2V0U3RyaW5nKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisg
ICAgYmxhbmsgPSB2YWx1ZS5DbG9uZSgpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUoKSA9
PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLkdldFN0cmluZygpID09IGJs
YW5rLkdldFN0cmluZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgQ29weUJ5dGVzdHJp
bmcpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKENCT1JWYWx1ZTo6QmluYXJ5VmFsdWUoeyAweEYs
IDB4MCwgMHgwLCAweEIsIDB4QSwgMHgyIH0pKTsKKyAgICBDQk9SVmFsdWUgY29waWVkX3ZhbHVl
KHZhbHVlLkNsb25lKCkpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBjb3BpZWRf
dmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS5HZXRCeXRlc3RyaW5nKCkgPT0g
Y29waWVkX3ZhbHVlLkdldEJ5dGVzdHJpbmcoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisK
KyAgICBibGFuayA9IHZhbHVlLkNsb25lKCk7CisgICAgQVNTRVJUX1RSVUUodmFsdWUudHlwZSgp
ID09IGJsYW5rLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUuR2V0Qnl0ZXN0cmluZygp
ID09IGJsYW5rLkdldEJ5dGVzdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENv
cHlBcnJheSkKK3sKKyAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgYXJyYXk7CisgICAgYXJyYXku
YXBwZW5kKDEyMyk7CisgICAgQ0JPUlZhbHVlIHZhbHVlKFdURk1vdmUoYXJyYXkpKTsKKworICAg
IENCT1JWYWx1ZSBjb3BpZWRfdmFsdWUodmFsdWUuQ2xvbmUoKSk7CisgICAgQVNTRVJUX0VRKDF1
LCBjb3BpZWRfdmFsdWUuR2V0QXJyYXkoKS5zaXplKCkpOworICAgIEFTU0VSVF9UUlVFKGNvcGll
ZF92YWx1ZS5HZXRBcnJheSgpWzBdLmlzX3Vuc2lnbmVkKCkpOworICAgIEVYUEVDVF9FUSh2YWx1
ZS5HZXRBcnJheSgpWzBdLkdldEludGVnZXIoKSwKKyAgICAgICAgICAgICAgY29waWVkX3ZhbHVl
LkdldEFycmF5KClbMF0uR2V0SW50ZWdlcigpKTsKKworICAgIENCT1JWYWx1ZSBibGFuazsKKyAg
ICBibGFuayA9IHZhbHVlLkNsb25lKCk7CisgICAgRVhQRUNUX0VRKDF1LCBibGFuay5HZXRBcnJh
eSgpLnNpemUoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvcHlNYXApCit7CisgICAg
Q0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAgQ0JPUlZhbHVlIGtleV9hKCJhIik7CisgICAg
bWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxMjMpOworICAgIENCT1JWYWx1ZSB2YWx1
ZShXVEZNb3ZlKG1hcCkpOworCisgICAgQ0JPUlZhbHVlIGNvcGllZF92YWx1ZSh2YWx1ZS5DbG9u
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIGNvcGllZF92YWx1ZS5HZXRNYXAoKS5zaXplKCkpOwor
ICAgIEFTU0VSVF9FUSh2YWx1ZS5HZXRNYXAoKS5jb3VudChrZXlfYSksIDF1KTsKKyAgICBBU1NF
UlRfRVEoY29waWVkX3ZhbHVlLkdldE1hcCgpLmNvdW50KGtleV9hKSwgMXUpOworICAgIEFTU0VS
VF9UUlVFKGNvcGllZF92YWx1ZS5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLmlzX3Vuc2ln
bmVkKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25k
LkdldEludGVnZXIoKSwKKyAgICAgICAgICAgICAgY29waWVkX3ZhbHVlLkdldE1hcCgpLmZpbmQo
a2V5X2EpLT5zZWNvbmQuR2V0SW50ZWdlcigpKTsKKworICAgIENCT1JWYWx1ZSBibGFuazsKKyAg
ICBibGFuayA9IHZhbHVlLkNsb25lKCk7CisgICAgRVhQRUNUX0VRKDF1LCBibGFuay5HZXRNYXAo
KS5zaXplKCkpOworICAgIEFTU0VSVF9FUShibGFuay5HZXRNYXAoKS5jb3VudChrZXlfYSksIDF1
KTsKKyAgICBBU1NFUlRfVFJVRShibGFuay5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLmlz
X3Vuc2lnbmVkKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5HZXRNYXAoKS5maW5kKGtleV9hKS0+
c2Vjb25kLkdldEludGVnZXIoKSwKKyAgICAgICAgICAgICAgYmxhbmsuR2V0TWFwKCkuZmluZChr
ZXlfYSktPnNlY29uZC5HZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBD
b3B5U2ltcGxlVmFsdWUpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKENCT1JWYWx1ZTo6U2ltcGxl
VmFsdWU6OlRSVUVfVkFMVUUpOworICAgIENCT1JWYWx1ZSBjb3BpZWRfdmFsdWUodmFsdWUuQ2xv
bmUoKSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUudHlwZSgpID09IGNvcGllZF92YWx1ZS50eXBl
KCkpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLkdldFNpbXBsZVZhbHVlKCkgPT0gY29waWVkX3Zh
bHVlLkdldFNpbXBsZVZhbHVlKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxh
bmsgPSB2YWx1ZS5DbG9uZSgpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBibGFu
ay50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLkdldFNpbXBsZVZhbHVlKCkgPT0gYmxh
bmsuR2V0U2ltcGxlVmFsdWUoKSk7Cit9CisKKy8vIFRlc3QgbW92ZSBjb25zdHJ1Y3RvcnMgYW5k
IG1vdmUtYXNzaWdubWVudAorVEVTVChDQk9SVmFsdWVzVGVzdCwgTW92ZVVuc2lnbmVkKQorewor
ICAgIENCT1JWYWx1ZSB2YWx1ZSg3NCk7CisgICAgQ0JPUlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1v
dmUodmFsdWUpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlVOU0lHTkVEID09
IG1vdmVkX3ZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKDc0dSwgbW92ZWRfdmFsdWUuR2V0
SW50ZWdlcigpKTsKKworICAgIENCT1JWYWx1ZSBibGFuazsKKworICAgIGJsYW5rID0gQ0JPUlZh
bHVlKDY1NCk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCA9PSBi
bGFuay50eXBlKCkpOworICAgIEVYUEVDVF9FUSg2NTR1LCBibGFuay5HZXRJbnRlZ2VyKCkpOwor
fQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBNb3ZlTmVnYXRpdmVJbnRlZ2VyKQoreworICAgIENC
T1JWYWx1ZSB2YWx1ZSgtNzQpOworICAgIENCT1JWYWx1ZSBtb3ZlZF92YWx1ZShXVEZNb3ZlKHZh
bHVlKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpORUdBVElWRSA9PSBtb3Zl
ZF92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9FUSgtNzQsIG1vdmVkX3ZhbHVlLkdldEludGVn
ZXIoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisKKyAgICBibGFuayA9IENCT1JWYWx1ZSgt
NjU0KTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlR5cGU6Ok5FR0FUSVZFID09IGJsYW5r
LnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKC02NTQsIGJsYW5rLkdldEludGVnZXIoKSk7Cit9CisK
K1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIE1vdmVTdHJpbmcpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVl
KCJmb29iYXIiKTsKKyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1ZSkpOwor
ICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5HID09IG1vdmVkX3ZhbHVlLnR5
cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoImZvb2JhciIgPT0gbW92ZWRfdmFsdWUuR2V0U3RyaW5n
KCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSBDQk9SVmFsdWUoImZv
b2JhciIpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5HID09IGJsYW5r
LnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoImZvb2JhciIgPT0gYmxhbmsuR2V0U3RyaW5nKCkp
OworfQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBNb3ZlQnl0ZXN0cmluZykKK3sKKyAgICBjb25z
dCBDQk9SVmFsdWU6OkJpbmFyeVZhbHVlIGJ5dGVzKHsgMHhGLCAweDAsIDB4MCwgMHhCLCAweEEs
IDB4MiB9KTsKKyAgICBDQk9SVmFsdWUgdmFsdWUoYnl0ZXMpOworICAgIENCT1JWYWx1ZSBtb3Zl
ZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBl
OjpCWVRFX1NUUklORyA9PSBtb3ZlZF92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKGJ5
dGVzID09IG1vdmVkX3ZhbHVlLkdldEJ5dGVzdHJpbmcoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxh
bms7CisKKyAgICBibGFuayA9IENCT1JWYWx1ZShieXRlcyk7CisgICAgRVhQRUNUX1RSVUUoQ0JP
UlZhbHVlOjpUeXBlOjpCWVRFX1NUUklORyA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9U
UlVFKGJ5dGVzID09IGJsYW5rLkdldEJ5dGVzdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVl
c1Rlc3QsIE1vdmVDb25zdHJ1Y3RNYXApCit7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7
CisgICAgY29uc3QgQ0JPUlZhbHVlIGtleV9hKCJhIik7CisgICAgbWFwW0NCT1JWYWx1ZSgiYSIp
XSA9IENCT1JWYWx1ZSgxMjMpOworCisgICAgQ0JPUlZhbHVlIHZhbHVlKFdURk1vdmUobWFwKSk7
CisgICAgQ0JPUlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1vdmUodmFsdWUpKTsKKyAgICBBU1NFUlRf
VFJVRShDQk9SVmFsdWU6OlR5cGU6Ok1BUCA9PSBtb3ZlZF92YWx1ZS50eXBlKCkpOworICAgIEFT
U0VSVF9FUShtb3ZlZF92YWx1ZS5HZXRNYXAoKS5jb3VudChrZXlfYSksIDF1KTsKKyAgICBBU1NF
UlRfVFJVRShtb3ZlZF92YWx1ZS5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLmlzX3Vuc2ln
bmVkKCkpOworICAgIEVYUEVDVF9FUSgxMjN1LCBtb3ZlZF92YWx1ZS5HZXRNYXAoKS5maW5kKGtl
eV9hKS0+c2Vjb25kLkdldEludGVnZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIE1v
dmVBc3NpZ25NYXApCit7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAgY29uc3Qg
Q0JPUlZhbHVlIGtleV9hKCJhIik7CisgICAgbWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1
ZSgxMjMpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworICAgIGJsYW5rID0gQ0JPUlZhbHVlKFdU
Rk1vdmUobWFwKSk7CisgICAgQVNTRVJUX1RSVUUoYmxhbmsuaXNfbWFwKCkpOworICAgIEFTU0VS
VF9FUShibGFuay5HZXRNYXAoKS5jb3VudChrZXlfYSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShi
bGFuay5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLmlzX3Vuc2lnbmVkKCkpOworICAgIEVY
UEVDVF9FUSgxMjN1LCBibGFuay5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLkdldEludGVn
ZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIE1vdmVBcnJheSkKK3sKKyAgICBDQk9S
VmFsdWU6OkFycmF5VmFsdWUgYXJyYXk7CisgICAgYXJyYXkuYXBwZW5kKDEyMyk7CisgICAgQ0JP
UlZhbHVlIHZhbHVlKGFycmF5KTsKKyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2
YWx1ZSkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QVJSQVkgPT0gbW92ZWRf
dmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTIzdSwgbW92ZWRfdmFsdWUuR2V0QXJyYXko
KS5sYXN0KCkuR2V0SW50ZWdlcigpKTsKKworICAgIENCT1JWYWx1ZSBibGFuazsKKyAgICBibGFu
ayA9IENCT1JWYWx1ZShXVEZNb3ZlKGFycmF5KSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVl
OjpUeXBlOjpBUlJBWSA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9FUSgxMjN1LCBibGFu
ay5HZXRBcnJheSgpLmxhc3QoKS5HZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNU
ZXN0LCBNb3ZlU2ltcGxlVmFsdWUpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKENCT1JWYWx1ZTo6
U2ltcGxlVmFsdWU6OlVOREVGSU5FRCk7CisgICAgQ0JPUlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1v
dmUodmFsdWUpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNJTVBMRV9WQUxV
RSA9PSBtb3ZlZF92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6U2lt
cGxlVmFsdWU6OlVOREVGSU5FRCA9PSBtb3ZlZF92YWx1ZS5HZXRTaW1wbGVWYWx1ZSgpKTsKKwor
ICAgIENCT1JWYWx1ZSBibGFuazsKKworICAgIGJsYW5rID0gQ0JPUlZhbHVlKENCT1JWYWx1ZTo6
U2ltcGxlVmFsdWU6OlVOREVGSU5FRCk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBl
OjpTSU1QTEVfVkFMVUUgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFs
dWU6OlNpbXBsZVZhbHVlOjpVTkRFRklORUQgPT0gYmxhbmsuR2V0U2ltcGxlVmFsdWUoKSk7Cit9
CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIFNlbGZTd2FwKQoreworICAgIENCT1JWYWx1ZSB0ZXN0
KDEpOworICAgIHN0ZDo6c3dhcCh0ZXN0LCB0ZXN0KTsKKyAgICBFWFBFQ1RfRVEodGVzdC5HZXRJ
bnRlZ2VyKCksIDF1KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3Iv
Y2Jvcl93cml0ZXJfdW5pdHRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl93cml0ZXJfdW5pdHRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhmYjdjOWM1OWQyNTVlODQwNjAzNTMyYjkzNjA3YzJkZDNkMTMyZmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvdGhpcmRfcGFydHkvY2Jvci9j
Ym9yX3dyaXRlcl91bml0dGVzdC5jcHAKQEAgLTAsMCArMSw0NjkgQEAKKy8vIENvcHlyaWdodCAy
MDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4K
Ky8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9jYm9yX3dyaXRlci5oPgorCisjaW5jbHVkZSA8bGltaXRzPgorCisv
KiBMZXZlcmFnaW5nIFJGQyA3MDQ5IGV4YW1wbGVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Ni
b3IvdGVzdC12ZWN0b3JzL2Jsb2IvbWFzdGVyL2FwcGVuZGl4X2EuanNvbi4gKi8KK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKwordXNpbmcgbmFtZXNwYWNlIGNib3I7CisKK2Jvb2wgZXEoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBjYm9yLCBjb25zdCBDU3RyaW5nJiBleHBlY3QpCit7CisgICAg
aWYgKGNib3Iuc2l6ZSgpICE9IGV4cGVjdC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiAhbWVtY21wKGNib3IuZGF0YSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihleHBlY3QuZGF0YSgpKSwgY2Jvci5zaXplKCkpOworfQorCitib29sIGVxKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY2JvciwgY29uc3QgdWludDhfdCogZXhwZWN0LCBjb25zdCBz
aXplX3QgZXhwZWN0TGVuZ3RoKQoreworICAgIGlmIChjYm9yLnNpemUoKSAhPSBleHBlY3RMZW5n
dGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW1lbWNtcChjYm9yLmRhdGEo
KSwgZXhwZWN0LCBleHBlY3RMZW5ndGgpOworfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0
V3JpdGVVaW50KQoreworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgY29uc3QgaW50NjRf
dCB2YWx1ZTsKKyAgICAgICAgY29uc3QgQ1N0cmluZyBjYm9yOworICAgIH0gVWludFRlc3RDYXNl
OworCisgICAgc3RhdGljIGNvbnN0IFVpbnRUZXN0Q2FzZSBrVWludFRlc3RDYXNlc1tdID0gewor
ICAgICAgICAvLyBSZW1pbmRlcjogbXVzdCBzcGVjaWZ5IGxlbmd0aCB3aGVuIGNyZWF0aW5nIHN0
cmluZyBwaWVjZXMKKyAgICAgICAgLy8gd2l0aCBudWxsIGJ5dGVzLCBlbHNlIHRoZSBzdHJpbmcg
d2lsbCB0cnVuY2F0ZSBwcmVtYXR1cmVseS4KKyAgICAgICAgezAsIENTdHJpbmcoIlx4MDAiLCAx
KX0sCisgICAgICAgIHsxLCBDU3RyaW5nKCJceDAxIil9LAorICAgICAgICB7MTAsIENTdHJpbmco
Ilx4MGEiKX0sCisgICAgICAgIHsyMywgQ1N0cmluZygiXHgxNyIpfSwKKyAgICAgICAgezI0LCBD
U3RyaW5nKCJceDE4XHgxOCIpfSwKKyAgICAgICAgezI1LCBDU3RyaW5nKCJceDE4XHgxOSIpfSwK
KyAgICAgICAgezEwMCwgQ1N0cmluZygiXHgxOFx4NjQiKX0sCisgICAgICAgIHsxMDAwLCBDU3Ry
aW5nKCJceDE5XHgwM1x4ZTgiKX0sCisgICAgICAgIHsxMDAwMDAwLCBDU3RyaW5nKCJceDFhXHgw
MFx4MGZceDQyXHg0MCIsIDUpfSwKKyAgICAgICAgezB4RkZGRkZGRkYsIENTdHJpbmcoIlx4MWFc
eGZmXHhmZlx4ZmZceGZmIil9LAorICAgICAgICB7MHgxMDAwMDAwMDAsCisgICAgICAgICAgICBD
U3RyaW5nKCJceDFiXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDAiLCA5KX0sCisgICAg
ICAgIHtzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSwKKyAgICAgICAgICAgIENT
dHJpbmcoIlx4MWJceDdmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIpfQorICAgIH07CisK
KyAgICBmb3IgKGNvbnN0IFVpbnRUZXN0Q2FzZSYgdGVzdF9jYXNlIDoga1VpbnRUZXN0Q2FzZXMp
IHsKKyAgICAgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKHRlc3Rf
Y2FzZS52YWx1ZSkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0X2Nhc2UuY2JvcikpOworICAg
IH0KK30KKworVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlTmVnYXRpdmVJbnRlZ2VyKQor
eworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICBjb25zdCBpbnQ2NF90IG5lZ2F0
aXZlX2ludDsKKyAgICAgICAgY29uc3QgQ1N0cmluZyBjYm9yOworICAgIH0ga05lZ2F0aXZlSW50
VGVzdENhc2VzW10gPSB7CisgICAgICAgIHsgLTFMTCwgQ1N0cmluZygiXHgyMCIpIH0sCisgICAg
ICAgIHsgLTEwTEwsIENTdHJpbmcoIlx4MjkiKSB9LAorICAgICAgICB7IC0yM0xMLCBDU3RyaW5n
KCJceDM2IikgfSwKKyAgICAgICAgeyAtMjRMTCwgQ1N0cmluZygiXHgzNyIpIH0sCisgICAgICAg
IHsgLTI1TEwsIENTdHJpbmcoIlx4MzhceDE4IikgfSwKKyAgICAgICAgeyAtMTAwTEwsIENTdHJp
bmcoIlx4MzhceDYzIikgfSwKKyAgICAgICAgeyAtMTAwMExMLCBDU3RyaW5nKCJceDM5XHgwM1x4
ZTciKSB9LAorICAgICAgICB7IC00Mjk0OTY3Mjk2TEwsIENTdHJpbmcoIlx4M2FceGZmXHhmZlx4
ZmZceGZmIikgfSwKKyAgICAgICAgeyAtNDI5NDk2NzI5N0xMLAorICAgICAgICAgICAgQ1N0cmlu
ZygiXHgzYlx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwIiwgOSkgfSwKKyAgICAgICAg
eyBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSwKKyAgICAgICAgICAgIENTdHJp
bmcoIlx4M2JceDdmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIpIH0sCisgICAgfTsKKwor
ICAgIGZvciAoY29uc3QgYXV0byYgdGVzdF9jYXNlIDoga05lZ2F0aXZlSW50VGVzdENhc2VzKSB7
CisgICAgICAgIGF1dG8gY2JvciA9IENCT1JXcml0ZXI6OldyaXRlKENCT1JWYWx1ZSh0ZXN0X2Nh
c2UubmVnYXRpdmVfaW50KSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkp
OworICAgICAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIHRlc3RfY2FzZS5jYm9yKSk7
CisgICAgfQorfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVCeXRlcykKK3sKKyAg
ICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBieXRlczsK
KyAgICAgICAgY29uc3QgQ1N0cmluZyBjYm9yOworICAgIH0gQnl0ZXNUZXN0Q2FzZTsKKworICAg
IHN0YXRpYyBjb25zdCBCeXRlc1Rlc3RDYXNlIGtCeXRlc1Rlc3RDYXNlc1tdID0geworICAgICAg
ICB7IHt9LCBDU3RyaW5nKCJceDQwIikgfSwKKyAgICAgICAgeyB7IDB4MDEsIDB4MDIsIDB4MDMs
IDB4MDQgfSwgQ1N0cmluZygiXHg0NFx4MDFceDAyXHgwM1x4MDQiKSB9LAorICAgIH07CisKKyAg
ICBmb3IgKGNvbnN0IEJ5dGVzVGVzdENhc2UmIHRlc3RfY2FzZSA6IGtCeXRlc1Rlc3RDYXNlcykg
eworICAgICAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUodGVzdF9j
YXNlLmJ5dGVzKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIHRlc3RfY2FzZS5jYm9yKSk7CisgICAg
fQorfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVTdHJpbmcpCit7CisgICAgdHlw
ZWRlZiBzdHJ1Y3QgeworICAgICAgICBjb25zdCBTdHJpbmcgc3RyaW5nOworICAgICAgICBjb25z
dCBDU3RyaW5nIGNib3I7CisgICAgfSBTdHJpbmdUZXN0Q2FzZTsKKworICAgIHN0YXRpYyBjb25z
dCBTdHJpbmdUZXN0Q2FzZSBrU3RyaW5nVGVzdENhc2VzW10gPSB7CisgICAgICAgIHsgIiIsIENT
dHJpbmcoIlx4NjAiKSB9LAorICAgICAgICB7ICJhIiwgQ1N0cmluZygiXHg2MVx4NjEiKSB9LAor
ICAgICAgICB7ICJJRVRGIiwgQ1N0cmluZygiXHg2NFx4NDlceDQ1XHg1NFx4NDYiKSB9LAorICAg
ICAgICB7ICJcIlxcIiwgQ1N0cmluZygiXHg2Mlx4MjJceDVjIikgfSwKKyAgICAgICAgeyBTdHJp
bmc6OmZyb21VVEY4KCJceGMzXHhiYyIpLCBDU3RyaW5nKCJceDYyXHhjM1x4YmMiKSB9LAorICAg
ICAgICB7IFN0cmluZzo6ZnJvbVVURjgoIlx4ZTZceGIwXHhiNCIpLCBDU3RyaW5nKCJceDYzXHhl
Nlx4YjBceGI0IikgfSwKKyAgICAgICAgeyBTdHJpbmc6OmZyb21VVEY4KCJceGYwXHg5MFx4ODVc
eDkxIiksIENTdHJpbmcoIlx4NjRceGYwXHg5MFx4ODVceDkxIikgfQorICAgIH07CisKKyAgICBm
b3IgKGNvbnN0IFN0cmluZ1Rlc3RDYXNlJiB0ZXN0X2Nhc2UgOiBrU3RyaW5nVGVzdENhc2VzKSB7
CisgICAgICAgIGF1dG8gY2JvciA9IENCT1JXcml0ZXI6OldyaXRlKENCT1JWYWx1ZSh0ZXN0X2Nh
c2Uuc3RyaW5nKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIHRlc3RfY2FzZS5jYm9yKSk7CisgICAg
fQorfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVBcnJheSkKK3sKKyAgICBzdGF0
aWMgY29uc3QgdWludDhfdCBrQXJyYXlUZXN0Q2FzZUNib3JbXSA9IHsKKyAgICAgICAgMHg5OCwg
MHgxOSwgIC8vIGFycmF5IG9mIDI1IGVsZW1lbnRzCisgICAgICAgIDB4MDEsIDB4MDIsIDB4MDMs
IDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCisg
ICAgICAgIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4
MTUsIDB4MTYsIDB4MTcsIDB4MTgsCisgICAgICAgIDB4MTgsIDB4MTgsIDB4MTksCisgICAgfTsK
KyAgICBWZWN0b3I8Q0JPUlZhbHVlPiBhcnJheTsKKyAgICBmb3IgKGludDY0X3QgaSA9IDE7IGkg
PD0gMjU7IGkrKykgeworICAgICAgICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKGkpKTsKKyAgICB9
CisgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKGFycmF5KSk7Cisg
ICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZXEoY2Jv
ci52YWx1ZSgpLCBrQXJyYXlUZXN0Q2FzZUNib3IsIHNpemVvZihrQXJyYXlUZXN0Q2FzZUNib3Ip
KSk7Cit9CisKK1RFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZU1hcFdpdGhNYXBWYWx1ZSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBrTWFwVGVzdENhc2VDYm9yW10gPSB7CisgICAg
ICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKyAgICAgICAgMHhiNiwgIC8vIG1hcCBvZiA4IHBhaXJz
OgorICAgICAgICAweDAwLCAgICAgICAgICAvLyBrZXkgMAorICAgICAgICAweDYxLCAweDYxLCAg
ICAvLyB2YWx1ZSAiYSIKKworICAgICAgICAweDE3LCAgICAgICAgICAvLyBrZXkgMjMKKyAgICAg
ICAgMHg2MSwgIDB4NjIsICAgLy8gdmFsdWUgImIiCisKKyAgICAgICAgMHgxOCwgMHgxOCwgICAg
Ly8ga2V5IDI0CisgICAgICAgIDB4NjEsIDB4NjMsICAvLyB2YWx1ZSAiYyIKKworICAgICAgICAw
eDE4LCAweEZGLCAgICAgICAgLy8ga2V5IDI1NQorICAgICAgICAweDYxLCAgMHg2NCwgICAgICAg
Ly8gdmFsdWUgImQiCisKKyAgICAgICAgMHgxOSwgMHgwMSwgMHgwMCwgIC8vIGtleSAyNTYKKyAg
ICAgICAgMHg2MSwgMHg2NSwgICAgICAgIC8vIHZhbHVlICJlIgorCisgICAgICAgIDB4MTksIDB4
RkYsIDB4RkYsICAvLyBrZXkgNjU1MzUKKyAgICAgICAgMHg2MSwgIDB4NjYsICAgICAgIC8vIHZh
bHVlICJmIgorCisgICAgICAgIDB4MUEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsICAgLy8ga2V5
IDY1NTM2CisgICAgICAgIDB4NjEsIDB4NjcsICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUg
ImciCisKKyAgICAgICAgMHgxQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgICAvLyBrZXkgNDI5
NDk2NzI5NQorICAgICAgICAweDYxLCAweDY4LCAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVl
ICJoIgorCisgICAgICAgIC8vIGtleSA0Mjk0OTY3Mjk2CisgICAgICAgIDB4MUIsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4NjEsIDB4
NjksICAvLyAgdmFsdWUgImkiCisKKyAgICAgICAgLy8ga2V5IElOVDY0X01BWAorICAgICAgICAw
eDFiLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAg
ICAgICAweDYxLCAweDZhLCAgLy8gIHZhbHVlICJqIgorCisgICAgICAgIDB4MjAsICAgICAgICAg
IC8vIGtleSAtMQorICAgICAgICAweDYxLCAweDZiLCAgICAvLyB2YWx1ZSAiayIKKworICAgICAg
ICAweDM3LCAgICAgICAgICAvLyBrZXkgLTI0CisgICAgICAgIDB4NjEsICAweDZjLCAgIC8vIHZh
bHVlICJsIgorCisgICAgICAgIDB4MzgsIDB4MTgsICAgIC8vIGtleSAtMjUKKyAgICAgICAgMHg2
MSwgMHg2ZCwgIC8vIHZhbHVlICJtIgorCisgICAgICAgIDB4MzgsIDB4RkYsICAgICAgICAvLyBr
ZXkgLTI1NgorICAgICAgICAweDYxLCAweDZlLCAgICAgICAvLyB2YWx1ZSAibiIKKworICAgICAg
ICAweDM5LCAweDAxLCAweDAwLCAgLy8ga2V5IC0yNTcKKyAgICAgICAgMHg2MSwgMHg2ZiwgICAg
ICAgIC8vIHZhbHVlICJvIgorCisgICAgICAgIDB4M0EsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAs
ICAgLy8ga2V5IC02NTUzNworICAgICAgICAweDYxLCAweDcwLCAgICAgICAgICAgICAgICAgICAg
IC8vIHZhbHVlICJwIgorCisgICAgICAgIDB4M0EsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsICAg
Ly8ga2V5IC00Mjk0OTY3Mjk2CisgICAgICAgIDB4NjEsIDB4NzEsICAgICAgICAgICAgICAgICAg
ICAgLy8gdmFsdWUgInEiCisKKyAgICAgICAgLy8ga2V5IC00Mjk0OTY3Mjk3CisgICAgICAgIDB4
M0IsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAg
ICAgIDB4NjEsIDB4NzIsICAvLyAgdmFsdWUgInIiCisKKyAgICAgICAgLy8ga2V5IElOVDY0X01J
TgorICAgICAgICAweDNiLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZm
LCAweGZmLAorICAgICAgICAweDYxLCAweDczLCAgLy8gIHZhbHVlICJzIgorCisgICAgICAgIDB4
NjAsICAgICAgICAvLyBrZXkgIiIKKyAgICAgICAgMHg2MSwgMHgyZSwgIC8vIHZhbHVlICIuIgor
CisgICAgICAgIDB4NjEsIDB4NjUsICAvLyBrZXkgImUiCisgICAgICAgIDB4NjEsIDB4NDUsICAv
LyB2YWx1ZSAiRSIKKworICAgICAgICAweDYyLCAweDYxLCAweDYxLCAgLy8ga2V5ICJhYSIKKyAg
ICAgICAgMHg2MiwgMHg0MSwgMHg0MSwgIC8vIHZhbHVlICJBQSIKKyAgICAgICAgLy8gY2xhbmct
Zm9ybWF0IG9uCisgICAgfTsKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIG1hcDsKKyAgICAvLyBT
aG9ydGVyIHN0cmluZ3Mgc29ydCBmaXJzdCBpbiBDVEFQLCB0aHVzIHRoZSDigJxhYeKAnSB2YWx1
ZSBzaG91bGQgYmUKKyAgICAvLyBzZXJpYWxpc2VkIGxhc3QgaW4gdGhlIG1hcC4KKyAgICBtYXBb
Q0JPUlZhbHVlKCJhYSIpXSA9IENCT1JWYWx1ZSgiQUEiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKCJl
IildID0gQ0JPUlZhbHVlKCJFIik7CisgICAgLy8gVGhlIGVtcHR5IHN0cmluZyBpcyBzaG9ydGVy
IHRoYW4gYWxsIG90aGVycywgc28gc2hvdWxkIGFwcGVhciBmaXJzdCBhbW9uZworICAgIC8vIHRo
ZSBzdHJpbmdzLgorICAgIG1hcFtDQk9SVmFsdWUoIiIpXSA9IENCT1JWYWx1ZSgiLiIpOworICAg
IC8vIE1hcCBrZXlzIGFyZSBzb3J0ZWQgYnkgbWFqb3IgdHlwZSwgYnkgYnl0ZSBsZW5ndGgsIGFu
ZCB0aGVuIGJ5CisgICAgLy8gYnl0ZS13aXNlIGxleGljYWwgb3JkZXIuIFNvIGFsbCBpbnRlZ2Vy
IHR5cGUga2V5cyBzaG91bGQgYXBwZWFyIGJlZm9yZQorICAgIC8vIGtleSAiIiBhbmQgYWxsIHBv
c2l0aXZlIGludGVnZXIga2V5cyBzaG91bGQgYXBwZWFyIGJlZm9yZSBuZWdhdGl2ZSBpbnRlZ2Vy
CisgICAgLy8ga2V5cy4KKyAgICBtYXBbQ0JPUlZhbHVlKC0xKV0gPSBDQk9SVmFsdWUoImsiKTsK
KyAgICBtYXBbQ0JPUlZhbHVlKC0yNCldID0gQ0JPUlZhbHVlKCJsIik7CisgICAgbWFwW0NCT1JW
YWx1ZSgtMjUpXSA9IENCT1JWYWx1ZSgibSIpOworICAgIG1hcFtDQk9SVmFsdWUoLTI1NildID0g
Q0JPUlZhbHVlKCJuIik7CisgICAgbWFwW0NCT1JWYWx1ZSgtMjU3KV0gPSBDQk9SVmFsdWUoIm8i
KTsKKyAgICBtYXBbQ0JPUlZhbHVlKC02NTUzNyldID0gQ0JPUlZhbHVlKCJwIik7CisgICAgbWFw
W0NCT1JWYWx1ZShpbnQ2NF90KC00Mjk0OTY3Mjk2KSldID0gQ0JPUlZhbHVlKCJxIik7CisgICAg
bWFwW0NCT1JWYWx1ZShpbnQ2NF90KC00Mjk0OTY3Mjk3KSldID0gQ0JPUlZhbHVlKCJyIik7Cisg
ICAgbWFwW0NCT1JWYWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSldID0g
Q0JPUlZhbHVlKCJzIik7CisgICAgbWFwW0NCT1JWYWx1ZSgwKV0gPSBDQk9SVmFsdWUoImEiKTsK
KyAgICBtYXBbQ0JPUlZhbHVlKDIzKV0gPSBDQk9SVmFsdWUoImIiKTsKKyAgICBtYXBbQ0JPUlZh
bHVlKDI0KV0gPSBDQk9SVmFsdWUoImMiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDhfdD46Om1heCgpKV0gPSBDQk9SVmFsdWUoImQiKTsKKyAgICBtYXBbQ0JP
UlZhbHVlKDI1NildID0gQ0JPUlZhbHVlKCJlIik7CisgICAgbWFwW0NCT1JWYWx1ZShzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpXSA9IENCT1JWYWx1ZSgiZiIpOworICAgIG1h
cFtDQk9SVmFsdWUoNjU1MzYpXSA9IENCT1JWYWx1ZSgiZyIpOworICAgIG1hcFtDQk9SVmFsdWUo
aW50NjRfdChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKV0gPSBDQk9SVmFs
dWUoImgiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKGludDY0X3QoNDI5NDk2NzI5NikpXSA9IENCT1JW
YWx1ZSgiaSIpOworICAgIG1hcFtDQk9SVmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWF4KCkpXSA9IENCT1JWYWx1ZSgiaiIpOworICAgIGF1dG8gY2JvciA9IENCT1JXcml0ZXI6
OldyaXRlKENCT1JWYWx1ZShtYXApKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgp
KTsKKyAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIGtNYXBUZXN0Q2FzZUNib3IsIHNp
emVvZihrTWFwVGVzdENhc2VDYm9yKSkpOworfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0
V3JpdGVNYXBXaXRoQXJyYXkpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga01hcEFycmF5
VGVzdENhc2VDYm9yW10gPSB7CisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKyAgICAgICAg
MHhhMiwgIC8vIG1hcCBvZiAyIHBhaXJzCisgICAgICAgIDB4NjEsIDB4NjEsICAvLyAiYSIKKyAg
ICAgICAgMHgwMSwKKworICAgICAgICAweDYxLCAweDYyLCAgLy8gImIiCisgICAgICAgIDB4ODIs
ICAgICAgICAvLyBhcnJheSB3aXRoIDIgZWxlbWVudHMKKyAgICAgICAgMHgwMiwKKyAgICAgICAg
MHgwMywKKyAgICAgICAgLy8gY2xhbmctZm9ybWF0IG9uCisgICAgfTsKKyAgICBDQk9SVmFsdWU6
Ok1hcFZhbHVlIG1hcDsKKyAgICBtYXBbQ0JPUlZhbHVlKCJhIildID0gQ0JPUlZhbHVlKDEpOwor
ICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSBhcnJheTsKKyAgICBhcnJheS5hcHBlbmQoQ0JPUlZh
bHVlKDIpKTsKKyAgICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDMpKTsKKyAgICBtYXBbQ0JPUlZh
bHVlKCJiIildID0gQ0JPUlZhbHVlKGFycmF5KTsKKyAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVy
OjpXcml0ZShDQk9SVmFsdWUobWFwKSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUo
KSk7CisgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCBrTWFwQXJyYXlUZXN0Q2FzZUNi
b3IsIHNpemVvZihrTWFwQXJyYXlUZXN0Q2FzZUNib3IpKSk7Cit9CisKK1RFU1QoQ0JPUldyaXRl
clRlc3QsIFRlc3RXcml0ZU5lc3RlZE1hcCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBr
TmVzdGVkTWFwVGVzdENhc2VbXSA9IHsKKyAgICAgICAgLy8gY2xhbmctZm9ybWF0IG9mZgorICAg
ICAgICAweGEyLCAgLy8gbWFwIG9mIDIgcGFpcnMKKyAgICAgICAgMHg2MSwgMHg2MSwgIC8vICJh
IgorICAgICAgICAweDAxLAorCisgICAgICAgIDB4NjEsIDB4NjIsICAvLyAiYiIKKyAgICAgICAg
MHhhMiwgICAgICAgIC8vIG1hcCBvZiAyIHBhaXJzCisgICAgICAgIDB4NjEsIDB4NjMsICAvLyAi
YyIKKyAgICAgICAgMHgwMiwKKworICAgICAgICAweDYxLCAweDY0LCAgLy8gImQiCisgICAgICAg
IDB4MDMsCisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorICAgIH07CisgICAgQ0JPUlZhbHVl
OjpNYXBWYWx1ZSBtYXA7CisgICAgbWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxKTsK
KyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIG5lc3RlZF9tYXA7CisgICAgbmVzdGVkX21hcFtDQk9S
VmFsdWUoImMiKV0gPSBDQk9SVmFsdWUoMik7CisgICAgbmVzdGVkX21hcFtDQk9SVmFsdWUoImQi
KV0gPSBDQk9SVmFsdWUoMyk7CisgICAgbWFwW0NCT1JWYWx1ZSgiYiIpXSA9IENCT1JWYWx1ZShu
ZXN0ZWRfbWFwKTsKKyAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUo
bWFwKSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RS
VUUoZXEoY2Jvci52YWx1ZSgpLCBrTmVzdGVkTWFwVGVzdENhc2UsIHNpemVvZihrTmVzdGVkTWFw
VGVzdENhc2UpKSk7Cit9CisKK1RFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZVNpbXBsZVZh
bHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICBDQk9SVmFsdWU6OlNp
bXBsZVZhbHVlIHNpbXBsZV92YWx1ZTsKKyAgICAgICAgY29uc3QgQ1N0cmluZyBjYm9yOworICAg
IH0ga1NpbXBsZVRlc3RDYXNlW10gPSB7CisgICAgICAgIHsgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1
ZTo6RkFMU0VfVkFMVUUsIENTdHJpbmcoIlx4ZjQiKSB9LAorICAgICAgICB7IENCT1JWYWx1ZTo6
U2ltcGxlVmFsdWU6OlRSVUVfVkFMVUUsIENTdHJpbmcoIlx4ZjUiKSB9LAorICAgICAgICB7IENC
T1JWYWx1ZTo6U2ltcGxlVmFsdWU6Ok5VTExfVkFMVUUsIENTdHJpbmcoIlx4ZjYiKSB9LAorICAg
ICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlVOREVGSU5FRCwgQ1N0cmluZygiXHhmNyIp
IH0KKyAgICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiB0ZXN0X2Nhc2UgOiBrU2ltcGxlVGVz
dENhc2UpIHsKKyAgICAgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVl
KHRlc3RfY2FzZS5zaW1wbGVfdmFsdWUpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNf
dmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwgdGVzdF9jYXNl
LmNib3IpKTsKKyAgICB9Cit9CisKKy8vIEZvciBtYWpvciB0eXBlIDAsIDIsIDMsIGVtcHR5IENC
T1IgYXJyYXksIGFuZCBlbXB0eSBDQk9SIG1hcCwgdGhlIG5lc3RpbmcKKy8vIGRlcHRoIGlzIGV4
cGVjdGVkIHRvIGJlIDAgc2luY2UgdGhlIENCT1IgZGVjb2RlciBkb2VzIG5vdCBuZWVkIHRvIHBh
cnNlCisvLyBhbnkgbmVzdGVkIENCT1IgdmFsdWUgZWxlbWVudHMuCitURVNUKENCT1JXcml0ZXJU
ZXN0LCBUZXN0V3JpdGVTaW5nbGVMYXllcikKK3sKKyAgICBjb25zdCBDQk9SVmFsdWUgc2ltcGxl
X3VpbnQgPSBDQk9SVmFsdWUoMSk7CisgICAgY29uc3QgQ0JPUlZhbHVlIHNpbXBsZV9zdHJpbmcg
PSBDQk9SVmFsdWUoImEiKTsKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gYnl0ZV9kYXRhID0g
eyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgY29uc3QgQ0JPUlZhbHVlIHNpbXBsZV9i
eXRlc3RyaW5nID0gQ0JPUlZhbHVlKGJ5dGVfZGF0YSk7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZh
bHVlIGVtcHR5X2Nib3JfYXJyYXk7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBlbXB0eV9jYm9y
X21hcDsKKyAgICBjb25zdCBDQk9SVmFsdWUgZW1wdHlfYXJyYXlfdmFsdWUgPSBDQk9SVmFsdWUo
ZW1wdHlfY2Jvcl9hcnJheSk7CisgICAgY29uc3QgQ0JPUlZhbHVlIGVtcHR5X21hcF92YWx1ZSA9
IENCT1JWYWx1ZShlbXB0eV9jYm9yX21hcCk7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIHNp
bXBsZV9hcnJheTsKKyAgICBzaW1wbGVfYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgyKSk7CisgICAg
Q0JPUlZhbHVlOjpNYXBWYWx1ZSBzaW1wbGVfbWFwOworICAgIHNpbXBsZV9tYXBbQ0JPUlZhbHVl
KCJiIildID0gQ0JPUlZhbHVlKDMpOworICAgIGNvbnN0IENCT1JWYWx1ZSBzaW5nbGVfbGF5ZXJf
Y2Jvcl9tYXAgPSBDQk9SVmFsdWUoc2ltcGxlX21hcCk7CisgICAgY29uc3QgQ0JPUlZhbHVlIHNp
bmdsZV9sYXllcl9jYm9yX2FycmF5ID0gQ0JPUlZhbHVlKHNpbXBsZV9hcnJheSk7CisKKyAgICBF
WFBFQ1RfVFJVRShDQk9SV3JpdGVyOjpXcml0ZShzaW1wbGVfdWludCwgMCkuaGFzX3ZhbHVlKCkp
OworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6OldyaXRlKHNpbXBsZV9zdHJpbmcsIDApLmhh
c192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjpXcml0ZShzaW1wbGVfYnl0
ZXN0cmluZywgMCkuaGFzX3ZhbHVlKCkpOworCisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6
V3JpdGUoZW1wdHlfYXJyYXlfdmFsdWUsIDApLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShDQk9SV3JpdGVyOjpXcml0ZShlbXB0eV9tYXBfdmFsdWUsIDApLmhhc192YWx1ZSgpKTsKKwor
ICAgIEVYUEVDVF9GQUxTRShDQk9SV3JpdGVyOjpXcml0ZShzaW5nbGVfbGF5ZXJfY2Jvcl9hcnJh
eSwgMCkuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6OldyaXRlKHNp
bmdsZV9sYXllcl9jYm9yX2FycmF5LCAxKS5oYXNfdmFsdWUoKSk7CisKKyAgICBFWFBFQ1RfRkFM
U0UoQ0JPUldyaXRlcjo6V3JpdGUoc2luZ2xlX2xheWVyX2Nib3JfbWFwLCAwKS5oYXNfdmFsdWUo
KSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6V3JpdGUoc2luZ2xlX2xheWVyX2Nib3Jf
bWFwLCAxKS5oYXNfdmFsdWUoKSk7Cit9CisKKy8vIE1ham9yIHR5cGUgNSBuZXN0ZWQgQ0JPUiBt
YXAgdmFsdWUgd2l0aCBmb2xsb3dpbmcgc3RydWN0dXJlLgorLy8gICAgIHsiYSI6IDEsCisvLyAg
ICAgICJiIjogeyJjIjogMiwKKy8vICAgICAgICAgICAgImQiOiAzfX0KK1RFU1QoQ0JPUldyaXRl
clRlc3QsIE5lc3RlZE1hcHMpCit7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBjYm9yX21hcDsK
KyAgICBjYm9yX21hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMSk7CisgICAgQ0JPUlZh
bHVlOjpNYXBWYWx1ZSBuZXN0ZWRfbWFwOworICAgIG5lc3RlZF9tYXBbQ0JPUlZhbHVlKCJjIild
ID0gQ0JPUlZhbHVlKDIpOworICAgIG5lc3RlZF9tYXBbQ0JPUlZhbHVlKCJkIildID0gQ0JPUlZh
bHVlKDMpOworICAgIGNib3JfbWFwW0NCT1JWYWx1ZSgiYiIpXSA9IENCT1JWYWx1ZShuZXN0ZWRf
bWFwKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUoY2Jvcl9t
YXApLCAyKS5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKENCT1JXcml0ZXI6OldyaXRl
KENCT1JWYWx1ZShjYm9yX21hcCksIDEpLmhhc192YWx1ZSgpKTsKK30KKworLy8gVGVzdGluZyBX
cml0ZSgpIGZ1bmN0aW9uIGZvciBmb2xsb3dpbmcgQ0JPUiBzdHJ1Y3R1cmUgd2l0aCBkZXB0aCBv
ZiAzLgorLy8gICAgIFsxLAorLy8gICAgICAyLAorLy8gICAgICAzLAorLy8gICAgICB7ImEiOiAx
LAorLy8gICAgICAgImIiOiB7ImMiOiAyLAorLy8gICAgICAgICAgICAgImQiOiAzfX1dCitURVNU
KENCT1JXcml0ZXJUZXN0LCBVbmJhbGFuY2VkTmVzdGVkQ29udGFpbmVycykKK3sKKyAgICBDQk9S
VmFsdWU6OkFycmF5VmFsdWUgY2Jvcl9hcnJheTsKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIGNi
b3JfbWFwOworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbmVzdGVkX21hcDsKKworICAgIGNib3Jf
bWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxKTsKKyAgICBuZXN0ZWRfbWFwW0NCT1JW
YWx1ZSgiYyIpXSA9IENCT1JWYWx1ZSgyKTsKKyAgICBuZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiZCIp
XSA9IENCT1JWYWx1ZSgzKTsKKyAgICBjYm9yX21hcFtDQk9SVmFsdWUoImIiKV0gPSBDQk9SVmFs
dWUobmVzdGVkX21hcCk7CisgICAgY2Jvcl9hcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDEpKTsKKyAg
ICBjYm9yX2FycmF5LmFwcGVuZChDQk9SVmFsdWUoMikpOworICAgIGNib3JfYXJyYXkuYXBwZW5k
KENCT1JWYWx1ZSgzKSk7CisgICAgY2Jvcl9hcnJheS5hcHBlbmQoQ0JPUlZhbHVlKGNib3JfbWFw
KSk7CisKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUoY2Jvcl9h
cnJheSksIDMpLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6V3Jp
dGUoQ0JPUlZhbHVlKGNib3JfYXJyYXkpLCAyKS5oYXNfdmFsdWUoKSk7Cit9CisKKy8vIFRlc3Rp
bmcgV3JpdGUoKSBmdW5jdGlvbiBmb3IgZm9sbG93aW5nIENCT1Igc3RydWN0dXJlLgorLy8gICAg
IHsiYSI6IDEsCisvLyAgICAgICJiIjogeyJjIjogMiwKKy8vICAgICAgICAgICAgImQiOiAzCisv
LyAgICAgICAgICAgICJoIjogeyAiZSI6IDQsCisvLyAgICAgICAgICAgICAgICAgICAiZiI6IDUs
CisvLyAgICAgICAgICAgICAgICAgICAiZyI6IFs2LCA3LCBbOF1dfX19CisvLyBTaW5jZSBhYm92
ZSBDQk9SIGNvbnRhaW5zIDUgbmVzdGluZyBsZXZlbHMuIFRodXMsIFdyaXRlKCkgaXMgZXhwZWN0
ZWQgdG8KKy8vIHJldHVybiBlbXB0eSBvcHRpb25hbCBvYmplY3Qgd2hlbiBtYXhpbXVtIG5lc3Rp
bmcgbGF5ZXIgc2l6ZSBpcyBzZXQgdG8gNC4KK1RFU1QoQ0JPUldyaXRlclRlc3QsIE92ZXJseU5l
c3RlZENCT1IpCit7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAgQ0JPUlZhbHVl
OjpNYXBWYWx1ZSBuZXN0ZWRfbWFwOworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgaW5uZXJfbmVz
dGVkX21hcDsKKyAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgaW5uZXJfYXJyYXk7CisgICAgQ0JP
UlZhbHVlOjpBcnJheVZhbHVlIGFycmF5OworCisgICAgbWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENC
T1JWYWx1ZSgxKTsKKyAgICBuZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiYyIpXSA9IENCT1JWYWx1ZSgy
KTsKKyAgICBuZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiZCIpXSA9IENCT1JWYWx1ZSgzKTsKKyAgICBp
bm5lcl9uZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiZSIpXSA9IENCT1JWYWx1ZSg0KTsKKyAgICBpbm5l
cl9uZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiZiIpXSA9IENCT1JWYWx1ZSg1KTsKKyAgICBpbm5lcl9h
cnJheS5hcHBlbmQoQ0JPUlZhbHVlKDYpKTsKKyAgICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDYp
KTsKKyAgICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDcpKTsKKyAgICBhcnJheS5hcHBlbmQoQ0JP
UlZhbHVlKGlubmVyX2FycmF5KSk7CisgICAgaW5uZXJfbmVzdGVkX21hcFtDQk9SVmFsdWUoImci
KV0gPSBDQk9SVmFsdWUoYXJyYXkpOworICAgIG5lc3RlZF9tYXBbQ0JPUlZhbHVlKCJoIildID0g
Q0JPUlZhbHVlKGlubmVyX25lc3RlZF9tYXApOworICAgIG1hcFtDQk9SVmFsdWUoImIiKV0gPSBD
Qk9SVmFsdWUobmVzdGVkX21hcCk7CisKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjpXcml0
ZShDQk9SVmFsdWUobWFwKSwgNSkuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9GQUxTRShDQk9S
V3JpdGVyOjpXcml0ZShDQk9SVmFsdWUobWFwKSwgNCkuaGFzX3ZhbHVlKCkpOworfQorCit9ICAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331035</attachid>
            <date>2018-01-10 23:15:15 -0800</date>
            <delta_ts>2018-01-11 17:43:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181522-20180110231514.patch</filename>
            <type>text/plain</type>
            <size>133044</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2N2M3Zjk1YWQzM2Y0
Y2ZmNzQ4NzJhMjdjMjM2MDhlZmI5YzFiNi4uYmFiYTQ4MDdjYTA2NmNiNDM5ZjZiODExNTg4Zjhl
NmNlYWFlYWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDE4LTAxLTEwICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBv
cnQgYSBDQk9SIGNvZGVyIGZyb20gQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTUyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYw
NTU3Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBvcnRzIGEgQ0JPUiBjb2RlciBpbmNsdWRpbmcgZW5jb2RlciBhbmQgZGVj
b2RlciBmcm9tIENocm9taXVtLiBDQk9SIGVuY29kZXIKKyAgICAgICAgaXMgbmVlZGVkIGZvciBX
ZWJBdXRoTiB0byBlbmNvZGUgYXR0ZXN0YXRpb24gb2JqZWN0IGludG8gYmluYXJpZXMuIEFsc28g
ZXh0ZW5zaW9ucyBpZiBzdXBwb3J0CisgICAgICAgIGluIHRoZSBmdXR1cmUuIEltcGxlbWVudGF0
aW5nIGFuZCBtYWludGFpbmluZyBhIGZ1bGx5LWZsZWRnZWQgQ0JPUiBjb2RlciBkb2Vzbid0IHNl
ZW0gdG8KKyAgICAgICAgYWxpZ24gd2l0aCBXZWJLaXQncyBiZXN0IGludGVyZXN0cy4gVGhlcmVm
b3JlLCBpbXBvcnRpbmcgYSBtb3N0IHN1aXRhYmxlIHRoaXJkIHBhcnR5CisgICAgICAgIGltcGxl
bWVudGF0aW9uIHdpbGwgYmUgd2lzZS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBpdCBvbmx5
IGRvZXMgYSBtaW5pbWFsIGNvZGUgY2hhbmdlcyBpbmNsdWRpbmcgc3R5bGUgY2hhbmdlcyB0byB0
aGUgb3JpZ2luYWwKKyAgICAgICAgY29kZWJhc2UgaW4gb3JkZXIgdG8gaGF2ZSBhIGJldHRlciBy
ZWFkYWJpbGl0eSBhbmQgaW50ZWdyYXRlIHdpdGggV2ViS2l0LiBUaG9zZSBjaGFuZ2VzCisgICAg
ICAgIG1pZ2h0IGluY2x1ZGU6CisgICAgICAgICAgICAxLiBTdWJzdGl0dXRlIGRhdGEgc3RydWN0
dXJlcyB0aGF0IGVuam95IGEgYmV0dGVyIFdURiB2ZXJzaW9uLgorICAgICAgICAgICAgMi4gUmVw
bGFjaW5nIG1hcmNvcy4KKyAgICAgICAgICAgIDMuIEltcGxlbWVudGF0aW5nIHdvcmthcm91bmRz
IGZvciBzb21lIGZ1bmN0aW9uYWxpdGllcyB0aGF0IHdlIGxhY2sgZnVuZGFtZW50YWwgdHlwZXMn
IHN1cHBvcnQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2Vzbid0IGludGVuZCB0byBmb3JtYXQg
dGhlIHdob2xlIGNvZGViYXNlIGludG8gV2ViS2l0J3MgY29kaW5nIHN0eWxlcywgd2hpY2gKKyAg
ICAgICAgY291bGQgdGFrZSBzb21lIHRpZGlvdXMgZWZmb3J0cyB3aGlsZSB0aGUgb3V0Y29tZSBp
cyB1bmNsZWFyLgorCisgICAgICAgIENvdmVyZWQgYnkgQVBJIHRlc3RzLgorCisgICAgICAgICog
TW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfYmluYXJ5Lmg6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3JlYWRlci5j
cHA6IEFkZGVkLgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6Q0JPUlJlYWRlcik6CisgICAg
ICAgIChjYm9yOjpDQk9SUmVhZGVyOjp+Q0JPUlJlYWRlcik6CisgICAgICAgIChjYm9yOjpDQk9S
UmVhZGVyOjpSZWFkKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OkRlY29kZUNCT1IpOgor
ICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6UmVhZFZhcmlhZGljTGVuZ3RoSW50ZWdlcik6Cisg
ICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpEZWNvZGVWYWx1ZVRvTmVnYXRpdmUpOgorICAgICAg
ICAoY2Jvcjo6Q0JPUlJlYWRlcjo6RGVjb2RlVmFsdWVUb1Vuc2lnbmVkKToKKyAgICAgICAgKGNi
b3I6OkNCT1JSZWFkZXI6OlJlYWRTaW1wbGVWYWx1ZSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVh
ZGVyOjpSZWFkU3RyaW5nKToKKyAgICAgICAgV29ya2Fyb3VuZHMgYXBwbGllZC4KKyAgICAgICAg
KGNib3I6OkNCT1JSZWFkZXI6OlJlYWRCeXRlcyk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVy
OjpSZWFkQ0JPUkFycmF5KToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OlJlYWRDQk9STWFw
KToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OkNhbkNvbnN1bWUpOgorICAgICAgICAoY2Jv
cjo6Q0JPUlJlYWRlcjo6Q2hlY2tNaW5pbWFsRW5jb2RpbmcpOgorICAgICAgICAoY2Jvcjo6Q0JP
UlJlYWRlcjo6Q2hlY2tFeHRyYW5lb3VzRGF0YSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVy
OjpDaGVja0R1cGxpY2F0ZUtleSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpIYXNWYWxp
ZFVURjhGb3JtYXQpOgorICAgICAgICBXb3JrYXJvdW5kcyBhcHBsaWVkLgorICAgICAgICAoY2Jv
cjo6Q0JPUlJlYWRlcjo6Q2hlY2tPdXRPZk9yZGVyS2V5KToKKyAgICAgICAgKGNib3I6OkNCT1JS
ZWFkZXI6OkdldEVycm9yQ29kZSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpFcnJvckNv
ZGVUb1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9y
L2Nib3JfcmVhZGVyLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRf
cGFydHkvY2Jvci9jYm9yX3ZhbHVlcy5jcHA6IEFkZGVkLgorICAgICAgICAoY2Jvcjo6Q0JPUlZh
bHVlOjpDQk9SVmFsdWUpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjp+Q0JPUlZhbHVlKToK
KyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6Q2xvbmUgY29uc3QpOgorICAgICAgICAoY2Jvcjo6
Q0JPUlZhbHVlOjpHZXRJbnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6
R2V0VW5zaWduZWQgY29uc3QpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjpHZXROZWdhdGl2
ZSBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkdldFN0cmluZyBjb25zdCk6Cisg
ICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkdldEJ5dGVzdHJpbmcgY29uc3QpOgorICAgICAgICAo
Y2Jvcjo6Q0JPUlZhbHVlOjpHZXRBcnJheSBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFs
dWU6OkdldE1hcCBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkdldFNpbXBsZVZh
bHVlIGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6SW50ZXJuYWxNb3ZlQ29uc3Ry
dWN0RnJvbSk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OkludGVybmFsQ2xlYW51cCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfdmFsdWVzLmg6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9y
X3dyaXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6fkNCT1JXcml0
ZXIpOgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6V3JpdGUpOgorICAgICAgICAoY2Jvcjo6
Q0JPUldyaXRlcjo6Q0JPUldyaXRlcik6CisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpFbmNv
ZGVDQk9SKToKKyAgICAgICAgV29ya2Fyb3VuZHMgYXBwbGllZC4KKyAgICAgICAgKGNib3I6OkNC
T1JXcml0ZXI6OlN0YXJ0SXRlbSk6CisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpTZXRBZGRp
dGlvbmFsSW5mb3JtYXRpb24pOgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6U2V0VWludCk6
CisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpHZXROdW1VaW50Qnl0ZXMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3dyaXRlci5oOiBBZGRlZC4K
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisKIDIwMTgtMDEtMTAgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtp
QHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBDcm9zcy1wcm90b2NvbCwgY3Jvc3Mtc2l0ZSBz
Y3JpcHRpbmcgKFhQWFNTKSB1c2luZyBIVE1MIGZvcm1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9iaW5hcnkuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX2JpbmFy
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3YTUxZTAzM2MxNjZiNTg0ODFhYzdhM2JmNDdhOWVhYTFiZDFmZjkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJk
X3BhcnR5L2Nib3IvY2Jvcl9iaW5hcnkuaApAQCAtMCwwICsxLDU5IEBACisvLyBDb3B5cmlnaHQg
MjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24u
CisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBjYm9yIHsKKworbmFtZXNwYWNlIGNvbnN0YW50cyB7
CisKKy8vIE1hc2sgc2VsZWN0aW5nIHRoZSBsb3ctb3JkZXIgNSBiaXRzIG9mIHRoZSAiaW5pdGlh
bCBieXRlIiwgd2hpY2ggaXMgd2hlcmUKKy8vIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGlz
IGVuY29kZWQuCitzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga0FkZGl0aW9uYWxJbmZvcm1hdGlv
bk1hc2sgPSAweDFGOworLy8gTWFzayBzZWxlY3RpbmcgdGhlIGhpZ2gtb3JkZXIgMyBiaXRzIG9m
IHRoZSAiaW5pdGlhbCBieXRlIiwgd2hpY2ggaW5kaWNhdGVzCisvLyB0aGUgbWFqb3IgdHlwZSBv
ZiB0aGUgZW5jb2RlZCB2YWx1ZS4KK3N0YXRpYyBjb25zdGV4cHIgdWludDhfdCBrTWFqb3JUeXBl
TWFzayA9IDB4RTA7CisvLyBJbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBiaXRzIHRoZSAiaW5pdGlh
bCBieXRlIiBuZWVkcyB0byBiZSBzaGlmdGVkIHRvIHRoZQorLy8gcmlnaHQgYWZ0ZXIgYXBwbHlp
bmcgfGtNYWpvclR5cGVNYXNrfCB0byBwcm9kdWNlIHRoZSBtYWpvciB0eXBlIGluIHRoZQorLy8g
bG93ZXJtb3N0IGJpdHMuCitzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga01ham9yVHlwZUJpdFNo
aWZ0ID0gNXU7CisvLyBJbmRpY2F0ZXMgdGhlIGludGVnZXIgaXMgaW4gdGhlIGZvbGxvd2luZyBi
eXRlLgorc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGtBZGRpdGlvbmFsSW5mb3JtYXRpb24xQnl0
ZSA9IDI0dTsKKy8vIEluZGljYXRlcyB0aGUgaW50ZWdlciBpcyBpbiB0aGUgbmV4dCAyIGJ5dGVz
Lgorc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGtBZGRpdGlvbmFsSW5mb3JtYXRpb24yQnl0ZXMg
PSAyNXU7CisvLyBJbmRpY2F0ZXMgdGhlIGludGVnZXIgaXMgaW4gdGhlIG5leHQgNCBieXRlcy4K
K3N0YXRpYyBjb25zdGV4cHIgdWludDhfdCBrQWRkaXRpb25hbEluZm9ybWF0aW9uNEJ5dGVzID0g
MjZ1OworLy8gSW5kaWNhdGVzIHRoZSBpbnRlZ2VyIGlzIGluIHRoZSBuZXh0IDggYnl0ZXMuCitz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga0FkZGl0aW9uYWxJbmZvcm1hdGlvbjhCeXRlcyA9IDI3
dTsKKworfSAgLy8gbmFtZXNwYWNlIGNvbnN0YW50cworCit9ICAvLyBuYW1lc3BhY2UgY2Jvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9j
Ym9yL2Nib3JfcmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhp
cmRfcGFydHkvY2Jvci9jYm9yX3JlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzlkYzFlNTI1N2Y1ZjY2
M2M3NTk3OWFjMmQ3NTZkZmI1YWJjMjI0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3JlYWRlci5jcHAKQEAg
LTAsMCArMSwzNzggQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8v
IG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisv
LworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNib3JfcmVhZGVyLmgiCisKKyNp
bmNsdWRlICJjYm9yX2JpbmFyeS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxtYXRo
Lmg+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIGNib3IgeworCituYW1lc3BhY2Ug
eworCitDQk9SVmFsdWU6OlR5cGUgR2V0TWFqb3JUeXBlKHVpbnQ4X3QgaW5pdGlhbF9kYXRhX2J5
dGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENCT1JWYWx1ZTo6VHlwZT4oKGluaXRpYWxf
ZGF0YV9ieXRlICYgY29uc3RhbnRzOjprTWFqb3JUeXBlTWFzaykgPj4gY29uc3RhbnRzOjprTWFq
b3JUeXBlQml0U2hpZnQpOworfQorCit1aW50OF90IEdldEFkZGl0aW9uYWxJbmZvKHVpbnQ4X3Qg
aW5pdGlhbF9kYXRhX2J5dGUpCit7CisgICAgcmV0dXJuIGluaXRpYWxfZGF0YV9ieXRlICYgY29u
c3RhbnRzOjprQWRkaXRpb25hbEluZm9ybWF0aW9uTWFzazsKK30KKworLy8gRXJyb3IgbWVzc2Fn
ZXMgdGhhdCBjb3JyZXNwb25kIHRvIGVhY2ggb2YgdGhlIGVycm9yIGNvZGVzLgorY29uc3QgY2hh
ciBrTm9FcnJvcltdID0gIlN1Y2Nlc3NmdWxseSBkZXNlcmlhbGl6ZWQgdG8gYSBDQk9SIHZhbHVl
LiI7Citjb25zdCBjaGFyIGtVbnN1cHBvcnRlZE1ham9yVHlwZVtdID0gIlVuc3VwcG9ydGVkIG1h
am9yIHR5cGUuIjsKK2NvbnN0IGNoYXIga1Vua25vd25BZGRpdGlvbmFsSW5mb1tdID0gIlVua25v
d24gYWRkaXRpb25hbCBpbmZvIGZvcm1hdCBpbiB0aGUgZmlyc3QgYnl0ZS4iOworY29uc3QgY2hh
ciBrSW5jb21wbGV0ZUNCT1JEYXRhW10gPSAiUHJlbWF0dXJlbHkgdGVybWluYXRlZCBDQk9SIGRh
dGEgYnl0ZSBhcnJheS4iOworY29uc3QgY2hhciBrSW5jb3JyZWN0TWFwS2V5VHlwZVtdID0gIk1h
cCBrZXlzIG90aGVyIHRoYW4gdXRmLTggZW5jb2RlZCBzdHJpbmdzIGFyZSBub3QgYWxsb3dlZC4i
OworY29uc3QgY2hhciBrVG9vTXVjaE5lc3RpbmdbXSA9ICJUb28gbXVjaCBuZXN0aW5nLiI7Citj
b25zdCBjaGFyIGtJbnZhbGlkVVRGOFtdID0gIlN0cmluZyBlbmNvZGluZyBvdGhlciB0aGFuIHV0
ZjggYXJlIG5vdCBhbGxvd2VkLiI7Citjb25zdCBjaGFyIGtFeHRyYW5lb3VzRGF0YVtdID0gIlRy
YWlsaW5nIGRhdGEgYnl0ZXMgYXJlIG5vdCBhbGxvd2VkLiI7Citjb25zdCBjaGFyIGtEdXBsaWNh
dGVLZXlbXSA9ICJEdXBsaWNhdGUgbWFwIGtleXMgYXJlIG5vdCBhbGxvd2VkLiI7Citjb25zdCBj
aGFyIGtNYXBLZXlPdXRPZk9yZGVyW10gPSAiTWFwIGtleXMgbXVzdCBiZSBzb3J0ZWQgYnkgYnl0
ZSBsZW5ndGggYW5kIHRoZW4gYnkgYnl0ZS13aXNlIGxleGljYWwgb3JkZXIuIjsKK2NvbnN0IGNo
YXIga05vbk1pbmltYWxDQk9SRW5jb2RpbmdbXSA9ICJVbnNpZ25lZCBpbnRlZ2VycyBtdXN0IGJl
IGVuY29kZWQgd2l0aCBtaW5pbXVtIG51bWJlciBvZiBieXRlcy4iOworY29uc3QgY2hhciBrVW5z
dXBwb3J0ZWRTaW1wbGVWYWx1ZVtdID0gIlVuc3VwcG9ydGVkIG9yIHVuYXNzaWduZWQgc2ltcGxl
IHZhbHVlLiI7Citjb25zdCBjaGFyIGtVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnRWYWx1ZVtdID0g
IkZsb2F0aW5nIHBvaW50IG51bWJlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIjsKK2NvbnN0IGNoYXIg
a091dE9mUmFuZ2VJbnRlZ2VyVmFsdWVbXSA9ICJJbnRlZ2VyIHZhbHVlcyBtdXN0IGJlIGJldHdl
ZW4gSU5UNjRfTUlOIGFuZCBJTlQ2NF9NQVguIjsKKworfSAvLyBuYW1lc3BhY2UKKworQ0JPUlJl
YWRlcjo6Q0JPUlJlYWRlcihCeXRlczo6Y29uc3RfaXRlcmF0b3IgaXQsIEJ5dGVzOjpjb25zdF9p
dGVyYXRvciBlbmQpCisgICAgOiBpdF8oaXQpCisgICAgLCBlbmRfKGVuZCkKKyAgICAsIGVycm9y
X2NvZGVfKERlY29kZXJFcnJvcjo6Q0JPUl9OT19FUlJPUikKK3sKK30KK0NCT1JSZWFkZXI6On5D
Qk9SUmVhZGVyKCkge30KKworLy8gc3RhdGljCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JP
UlJlYWRlcjo6UmVhZChjb25zdCBCeXRlcyYgZGF0YSwgRGVjb2RlckVycm9yKiBlcnJvcl9jb2Rl
X291dCwgaW50IG1heF9uZXN0aW5nX2xldmVsKQoreworICAgIENCT1JSZWFkZXIgcmVhZGVyKGRh
dGEuYmVnaW4oKSwgZGF0YS5lbmQoKSk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGRl
Y29kZWRfY2JvciA9IHJlYWRlci5EZWNvZGVDQk9SKG1heF9uZXN0aW5nX2xldmVsKTsKKworICAg
IGlmIChkZWNvZGVkX2Nib3IpCisgICAgICAgIHJlYWRlci5DaGVja0V4dHJhbmVvdXNEYXRhKCk7
CisgICAgaWYgKGVycm9yX2NvZGVfb3V0KQorICAgICAgICAqZXJyb3JfY29kZV9vdXQgPSByZWFk
ZXIuR2V0RXJyb3JDb2RlKCk7CisKKyAgICBpZiAocmVhZGVyLkdldEVycm9yQ29kZSgpICE9IERl
Y29kZXJFcnJvcjo6Q0JPUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICByZXR1cm4gZGVjb2RlZF9jYm9yOworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4g
Q0JPUlJlYWRlcjo6RGVjb2RlQ0JPUihpbnQgbWF4X25lc3RpbmdfbGV2ZWwpCit7CisgICAgaWYg
KG1heF9uZXN0aW5nX2xldmVsIDwgMCB8fCBtYXhfbmVzdGluZ19sZXZlbCA+IGtDQk9STWF4RGVw
dGgpIHsKKyAgICAgICAgZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJyb3I6OlRPT19NVUNIX05FU1RJ
Tkc7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKCFDYW5D
b25zdW1lKDEpKSB7CisgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2RlckVycm9yOjpJTkNPTVBM
RVRFX0NCT1JfREFUQTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBjb25zdCB1aW50OF90IGluaXRpYWxfYnl0ZSA9ICppdF8rKzsKKyAgICBjb25zdCBhdXRvIG1h
am9yX3R5cGUgPSBHZXRNYWpvclR5cGUoaW5pdGlhbF9ieXRlKTsKKyAgICBjb25zdCB1aW50OF90
IGFkZGl0aW9uYWxfaW5mbyA9IEdldEFkZGl0aW9uYWxJbmZvKGluaXRpYWxfYnl0ZSk7CisKKyAg
ICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoIVJlYWRWYXJpYWRpY0xlbmd0aEludGVnZXIoYWRk
aXRpb25hbF9pbmZvLCAmdmFsdWUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3dpdGNoIChtYWpvcl90eXBlKSB7CisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OlVOU0lH
TkVEOgorICAgICAgICByZXR1cm4gRGVjb2RlVmFsdWVUb1Vuc2lnbmVkKHZhbHVlKTsKKyAgICBj
YXNlIENCT1JWYWx1ZTo6VHlwZTo6TkVHQVRJVkU6CisgICAgICAgIHJldHVybiBEZWNvZGVWYWx1
ZVRvTmVnYXRpdmUodmFsdWUpOworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpCWVRFX1NUUklO
RzoKKyAgICAgICAgcmV0dXJuIFJlYWRCeXRlcyh2YWx1ZSk7CisgICAgY2FzZSBDQk9SVmFsdWU6
OlR5cGU6OlNUUklORzoKKyAgICAgICAgcmV0dXJuIFJlYWRTdHJpbmcodmFsdWUpOworICAgIGNh
c2UgQ0JPUlZhbHVlOjpUeXBlOjpBUlJBWToKKyAgICAgICAgcmV0dXJuIFJlYWRDQk9SQXJyYXko
dmFsdWUsIG1heF9uZXN0aW5nX2xldmVsKTsKKyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6TUFQ
OgorICAgICAgICByZXR1cm4gUmVhZENCT1JNYXAodmFsdWUsIG1heF9uZXN0aW5nX2xldmVsKTsK
KyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6U0lNUExFX1ZBTFVFOgorICAgICAgICByZXR1cm4g
UmVhZFNpbXBsZVZhbHVlKGFkZGl0aW9uYWxfaW5mbywgdmFsdWUpOworICAgIGNhc2UgQ0JPUlZh
bHVlOjpUeXBlOjpOT05FOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBlcnJvcl9jb2Rl
XyA9IERlY29kZXJFcnJvcjo6VU5TVVBQT1JURURfTUFKT1JfVFlQRTsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitib29sIENCT1JSZWFkZXI6OlJlYWRWYXJpYWRpY0xlbmd0aEludGVn
ZXIodWludDhfdCBhZGRpdGlvbmFsX2luZm8sIHVpbnQ2NF90KiB2YWx1ZSkKK3sKKyAgICB1aW50
OF90IGFkZGl0aW9uYWxfYnl0ZXMgPSAwOworICAgIGlmIChhZGRpdGlvbmFsX2luZm8gPCAyNCkg
eworICAgICAgICAqdmFsdWUgPSBhZGRpdGlvbmFsX2luZm87CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBlbHNlIGlmIChhZGRpdGlvbmFsX2luZm8gPT0gMjQpIHsKKyAgICAgICAg
YWRkaXRpb25hbF9ieXRlcyA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKGFkZGl0aW9uYWxfaW5m
byA9PSAyNSkgeworICAgICAgICBhZGRpdGlvbmFsX2J5dGVzID0gMjsKKyAgICB9CisgICAgZWxz
ZSBpZiAoYWRkaXRpb25hbF9pbmZvID09IDI2KSB7CisgICAgICAgIGFkZGl0aW9uYWxfYnl0ZXMg
PSA0OworICAgIH0KKyAgICBlbHNlIGlmIChhZGRpdGlvbmFsX2luZm8gPT0gMjcpIHsKKyAgICAg
ICAgYWRkaXRpb25hbF9ieXRlcyA9IDg7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBlcnJv
cl9jb2RlXyA9IERlY29kZXJFcnJvcjo6VU5LTk9XTl9BRERJVElPTkFMX0lORk87CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUNhbkNvbnN1bWUoYWRkaXRpb25hbF9i
eXRlcykpIHsKKyAgICAgICAgZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJyb3I6OklOQ09NUExFVEVf
Q0JPUl9EQVRBOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdWludDY0X3Qg
aW50X2RhdGEgPSAwOworICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGFkZGl0aW9uYWxfYnl0
ZXM7ICsraSkgeworICAgICAgICBpbnRfZGF0YSA8PD0gODsKKyAgICAgICAgaW50X2RhdGEgfD0g
Kml0XysrOworICAgIH0KKworICAgICp2YWx1ZSA9IGludF9kYXRhOworICAgIHJldHVybiBDaGVj
a01pbmltYWxFbmNvZGluZyhhZGRpdGlvbmFsX2J5dGVzLCBpbnRfZGF0YSk7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8Q0JPUlZhbHVlPiBDQk9SUmVhZGVyOjpEZWNvZGVWYWx1ZVRvTmVnYXRpdmUodWlu
dDY0X3QgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkgeworICAgICAgICBlcnJvcl9jb2Rl
XyA9IERlY29kZXJFcnJvcjo6T1VUX09GX1JBTkdFX0lOVEVHRVJfVkFMVUU7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorICAgIHJldHVybiBDQk9SVmFsdWUoLXN0YXRpY19j
YXN0PGludDY0X3Q+KHZhbHVlKSAtIDEpOworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4g
Q0JPUlJlYWRlcjo6RGVjb2RlVmFsdWVUb1Vuc2lnbmVkKHVpbnQ2NF90IHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptYXgoKSkpIHsKKyAgICAgICAgZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJyb3I6Ok9V
VF9PRl9SQU5HRV9JTlRFR0VSX1ZBTFVFOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0KKyAgICByZXR1cm4gQ0JPUlZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBDQk9SUmVhZGVyOjpSZWFkU2ltcGxlVmFs
dWUodWludDhfdCBhZGRpdGlvbmFsX2luZm8sIHVpbnQ2NF90IHZhbHVlKQoreworICAgIC8vIEZs
b2F0aW5nIHBvaW50IG51bWJlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgaWYgKGFkZGl0aW9u
YWxfaW5mbyA+IDI0ICYmIGFkZGl0aW9uYWxfaW5mbyA8IDI4KSB7CisgICAgICAgIGVycm9yX2Nv
ZGVfID0gRGVjb2RlckVycm9yOjpVTlNVUFBPUlRFRF9GTE9BVElOR19QT0lOVF9WQUxVRTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBBU1NFUlQodmFsdWUgPD0g
MjU1dSk7CisgICAgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZSBwb3NzaWJseV91bnN1cHBvcnRlZF9z
aW1wbGVfdmFsdWUgPSBzdGF0aWNfY2FzdDxDQk9SVmFsdWU6OlNpbXBsZVZhbHVlPihzdGF0aWNf
Y2FzdDxpbnQ+KHZhbHVlKSk7CisgICAgc3dpdGNoIChwb3NzaWJseV91bnN1cHBvcnRlZF9zaW1w
bGVfdmFsdWUpIHsKKyAgICBjYXNlIENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OkZBTFNFX1ZBTFVF
OgorICAgIGNhc2UgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VFJVRV9WQUxVRToKKyAgICBjYXNl
IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6Ok5VTExfVkFMVUU6CisgICAgY2FzZSBDQk9SVmFsdWU6
OlNpbXBsZVZhbHVlOjpVTkRFRklORUQ6CisgICAgICAgIHJldHVybiBDQk9SVmFsdWUocG9zc2li
bHlfdW5zdXBwb3J0ZWRfc2ltcGxlX3ZhbHVlKTsKKyAgICB9CisKKyAgICBlcnJvcl9jb2RlXyA9
IERlY29kZXJFcnJvcjo6VU5TVVBQT1JURURfU0lNUExFX1ZBTFVFOworICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBDQk9SUmVhZGVyOjpSZWFk
U3RyaW5nKHVpbnQ2NF90IG51bV9ieXRlcykKK3sKKyAgICBpZiAoIUNhbkNvbnN1bWUobnVtX2J5
dGVzKSkgeworICAgICAgICBlcnJvcl9jb2RlXyA9IERlY29kZXJFcnJvcjo6SU5DT01QTEVURV9D
Qk9SX0RBVEE7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgU3Ry
aW5nIGNib3Jfc3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChpdF8sIG51bV9ieXRlcyk7CisgICAg
aXRfICs9IG51bV9ieXRlczsKKworICAgIC8vIEludmFsaWQgVVRGOCBieXRlcyBwcm9kdWNlIGFu
IGVtcHR5IFdURlN0cmluZy4KKyAgICAvLyBOb3QgdG8gY29uZnVzZSBpdCB3aXRoIGFuIGFjdHVh
bCBlbXB0eSBXVEZTdHJpbmcuCisgICAgaWYgKCFudW1fYnl0ZXMgfHwgSGFzVmFsaWRVVEY4Rm9y
bWF0KGNib3Jfc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZShXVEZNb3ZlKGNib3Jf
c3RyaW5nKSk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RkOjpvcHRpb25hbDxD
Qk9SVmFsdWU+IENCT1JSZWFkZXI6OlJlYWRCeXRlcyh1aW50NjRfdCBudW1fYnl0ZXMpCit7Cisg
ICAgaWYgKCFDYW5Db25zdW1lKG51bV9ieXRlcykpIHsKKyAgICAgICAgZXJyb3JfY29kZV8gPSBE
ZWNvZGVyRXJyb3I6OklOQ09NUExFVEVfQ0JPUl9EQVRBOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIEJ5dGVzIGNib3JfYnl0ZV9zdHJpbmc7CisgICAgY2Jvcl9i
eXRlX3N0cmluZy5hcHBlbmQoaXRfLCBudW1fYnl0ZXMpOworICAgIGl0XyArPSBudW1fYnl0ZXM7
CisKKyAgICByZXR1cm4gQ0JPUlZhbHVlKFdURk1vdmUoY2Jvcl9ieXRlX3N0cmluZykpOworfQor
CitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6UmVhZENCT1JBcnJheSh1aW50
NjRfdCBsZW5ndGgsIGludCBtYXhfbmVzdGluZ19sZXZlbCkKK3sKKyAgICBDQk9SVmFsdWU6OkFy
cmF5VmFsdWUgY2Jvcl9hcnJheTsKKyAgICB3aGlsZSAobGVuZ3RoLS0gPiAwKSB7CisgICAgICAg
IHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yX2VsZW1lbnQgPSBEZWNvZGVDQk9SKG1heF9u
ZXN0aW5nX2xldmVsIC0gMSk7CisgICAgICAgIGlmICghY2Jvcl9lbGVtZW50Lmhhc192YWx1ZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgY2Jvcl9hcnJheS5h
cHBlbmQoV1RGTW92ZShjYm9yX2VsZW1lbnQudmFsdWUoKSkpOworICAgIH0KKyAgICByZXR1cm4g
Q0JPUlZhbHVlKFdURk1vdmUoY2Jvcl9hcnJheSkpOworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JW
YWx1ZT4gQ0JPUlJlYWRlcjo6UmVhZENCT1JNYXAodWludDY0X3QgbGVuZ3RoLCBpbnQgbWF4X25l
c3RpbmdfbGV2ZWwpCit7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBjYm9yX21hcDsKKyAgICB3
aGlsZSAobGVuZ3RoLS0gPiAwKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBr
ZXkgPSBEZWNvZGVDQk9SKG1heF9uZXN0aW5nX2xldmVsIC0gMSk7CisgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q0JPUlZhbHVlPiB2YWx1ZSA9IERlY29kZUNCT1IobWF4X25lc3RpbmdfbGV2ZWwgLSAx
KTsKKyAgICAgICAgaWYgKCFrZXkuaGFzX3ZhbHVlKCkgfHwgIXZhbHVlLmhhc192YWx1ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICAvLyBPbmx5IENCT1Ig
bWFwcyB3aXRoIGludGVnZXIgb3Igc3RyaW5nIHR5cGUga2V5cyBhcmUgYWxsb3dlZC4KKyAgICAg
ICAgaWYgKGtleS52YWx1ZSgpLnR5cGUoKSAhPSBDQk9SVmFsdWU6OlR5cGU6OlNUUklORyAmJiBr
ZXkudmFsdWUoKS50eXBlKCkgIT0gQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCkgeworICAgICAg
ICAgICAgZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJyb3I6OklOQ09SUkVDVF9NQVBfS0VZX1RZUEU7
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisgICAgICAgIGlm
ICghQ2hlY2tEdXBsaWNhdGVLZXkoa2V5LnZhbHVlKCksIGNib3JfbWFwKSB8fCAhQ2hlY2tPdXRP
Zk9yZGVyS2V5KGtleS52YWx1ZSgpLCBjYm9yX21hcCkpIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBjYm9yX21hcC5lbXBsYWNlKHN0ZDo6
bWFrZV9wYWlyKFdURk1vdmUoa2V5LnZhbHVlKCkpLCBXVEZNb3ZlKHZhbHVlLnZhbHVlKCkpKSk7
CisgICAgfQorICAgIHJldHVybiBDQk9SVmFsdWUoV1RGTW92ZShjYm9yX21hcCkpOworfQorCiti
b29sIENCT1JSZWFkZXI6OkNhbkNvbnN1bWUodWludDY0X3QgYnl0ZXMpCit7CisgICAgaWYgKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6OmRpc3RhbmNlKGl0XywgZW5kXykpID49IGJ5dGVzKSB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlcnJvcl9jb2RlXyA9IERlY29kZXJF
cnJvcjo6SU5DT01QTEVURV9DQk9SX0RBVEE7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IENCT1JSZWFkZXI6OkNoZWNrTWluaW1hbEVuY29kaW5nKHVpbnQ4X3QgYWRkaXRpb25hbF9ieXRl
cywgdWludDY0X3QgdWludF9kYXRhKQoreworICAgIGlmICgoYWRkaXRpb25hbF9ieXRlcyA9PSAx
ICYmIHVpbnRfZGF0YSA8IDI0KSB8fCB1aW50X2RhdGEgPD0gKDFVTEwgPDwgOCAqIChhZGRpdGlv
bmFsX2J5dGVzID4+IDEpKSAtIDEpIHsKKyAgICAgICAgZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJy
b3I6Ok5PTl9NSU5JTUFMX0NCT1JfRU5DT0RJTkc7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0JPUlJlYWRlcjo6Q2hlY2tFeHRyYW5l
b3VzRGF0YSgpCit7CisgICAgaWYgKGl0XyAhPSBlbmRfKQorICAgICAgICBlcnJvcl9jb2RlXyA9
IERlY29kZXJFcnJvcjo6RVhUUkFORU9VU19EQVRBOworfQorCitib29sIENCT1JSZWFkZXI6OkNo
ZWNrRHVwbGljYXRlS2V5KGNvbnN0IENCT1JWYWx1ZSYgbmV3X2tleSwgY29uc3QgQ0JPUlZhbHVl
OjpNYXBWYWx1ZSYgbWFwKQoreworICAgIGlmIChtYXAuZmluZChuZXdfa2V5KSAhPSBtYXAuZW5k
KCkpIHsKKyAgICAgICAgZXJyb3JfY29kZV8gPSBEZWNvZGVyRXJyb3I6OkRVUExJQ0FURV9LRVk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgQ0JPUlJlYWRlcjo6SGFzVmFsaWRVVEY4Rm9ybWF0KGNvbnN0IFN0cmluZyYgc3RyaW5nX2Rh
dGEpCit7CisgICAgLy8gSW52YWxpZCBVVEY4IGJ5dGVzIHByb2R1Y2UgYW4gZW1wdHkgV1RGU3Ry
aW5nLgorICAgIGlmIChzdHJpbmdfZGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZXJyb3JfY29k
ZV8gPSBEZWNvZGVyRXJyb3I6OklOVkFMSURfVVRGODsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQk9SUmVhZGVyOjpDaGVja091dE9m
T3JkZXJLZXkoY29uc3QgQ0JPUlZhbHVlJiBuZXdfa2V5LCBjb25zdCBDQk9SVmFsdWU6Ok1hcFZh
bHVlJiBtYXApCit7CisgICAgYXV0byBjb21wYXJhdG9yID0gbWFwLmtleV9jb21wKCk7CisgICAg
aWYgKCFtYXAuZW1wdHkoKSAmJiBjb21wYXJhdG9yKG5ld19rZXksIG1hcC5yYmVnaW4oKS0+Zmly
c3QpKSB7CisgICAgICAgIGVycm9yX2NvZGVfID0gRGVjb2RlckVycm9yOjpPVVRfT0ZfT1JERVJf
S0VZOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgQ0JPUlJlYWRlcjo6R2V0RXJyb3JDb2RlKCkKK3sK
KyAgICByZXR1cm4gZXJyb3JfY29kZV87Cit9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciogQ0JP
UlJlYWRlcjo6RXJyb3JDb2RlVG9TdHJpbmcoRGVjb2RlckVycm9yIGVycm9yKQoreworICAgIHN3
aXRjaCAoZXJyb3IpIHsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6Q0JPUl9OT19FUlJPUjoKKyAg
ICAgICAgcmV0dXJuIGtOb0Vycm9yOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpVTlNVUFBPUlRF
RF9NQUpPUl9UWVBFOgorICAgICAgICByZXR1cm4ga1Vuc3VwcG9ydGVkTWFqb3JUeXBlOworICAg
IGNhc2UgRGVjb2RlckVycm9yOjpVTktOT1dOX0FERElUSU9OQUxfSU5GTzoKKyAgICAgICAgcmV0
dXJuIGtVbmtub3duQWRkaXRpb25hbEluZm87CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6OklOQ09N
UExFVEVfQ0JPUl9EQVRBOgorICAgICAgICByZXR1cm4ga0luY29tcGxldGVDQk9SRGF0YTsKKyAg
ICBjYXNlIERlY29kZXJFcnJvcjo6SU5DT1JSRUNUX01BUF9LRVlfVFlQRToKKyAgICAgICAgcmV0
dXJuIGtJbmNvcnJlY3RNYXBLZXlUeXBlOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpUT09fTVVD
SF9ORVNUSU5HOgorICAgICAgICByZXR1cm4ga1Rvb011Y2hOZXN0aW5nOworICAgIGNhc2UgRGVj
b2RlckVycm9yOjpJTlZBTElEX1VURjg6CisgICAgICAgIHJldHVybiBrSW52YWxpZFVURjg7Cisg
ICAgY2FzZSBEZWNvZGVyRXJyb3I6OkVYVFJBTkVPVVNfREFUQToKKyAgICAgICAgcmV0dXJuIGtF
eHRyYW5lb3VzRGF0YTsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6RFVQTElDQVRFX0tFWToKKyAg
ICAgICAgcmV0dXJuIGtEdXBsaWNhdGVLZXk7CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6Ok9VVF9P
Rl9PUkRFUl9LRVk6CisgICAgICAgIHJldHVybiBrTWFwS2V5T3V0T2ZPcmRlcjsKKyAgICBjYXNl
IERlY29kZXJFcnJvcjo6Tk9OX01JTklNQUxfQ0JPUl9FTkNPRElORzoKKyAgICAgICAgcmV0dXJu
IGtOb25NaW5pbWFsQ0JPUkVuY29kaW5nOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpVTlNVUFBP
UlRFRF9TSU1QTEVfVkFMVUU6CisgICAgICAgIHJldHVybiBrVW5zdXBwb3J0ZWRTaW1wbGVWYWx1
ZTsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6VU5TVVBQT1JURURfRkxPQVRJTkdfUE9JTlRfVkFM
VUU6CisgICAgICAgIHJldHVybiBrVW5zdXBwb3J0ZWRGbG9hdGluZ1BvaW50VmFsdWU7CisgICAg
Y2FzZSBEZWNvZGVyRXJyb3I6Ok9VVF9PRl9SQU5HRV9JTlRFR0VSX1ZBTFVFOgorICAgICAgICBy
ZXR1cm4ga091dE9mUmFuZ2VJbnRlZ2VyVmFsdWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiVW5rbm93biBlcnJvciBjb2RlLiI7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBjYm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9yZWFkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFydHkvY2Jvci9jYm9yX3JlYWRl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQwMjcyODliNjNjYzcxNDI3OGZjZjg4YjQxNmUwMzk5YTI2ZjFmYjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJk
X3BhcnR5L2Nib3IvY2Jvcl9yZWFkZXIuaApAQCAtMCwwICsxLDEzMiBAQAorLy8gQ29weXJpZ2h0
IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9u
LgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgImNib3JfdmFsdWVzLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8vIENvbmNpc2UgQmlu
YXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiAoQ0JPUikgZGVjb2RlciBhcyBkZWZpbmVkIGJ5Cisv
LyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzA0OS4gVGhpcyBkZWNvZGVyIG9ubHkg
YWNjZXB0cyBjYW5vbmljYWwKKy8vIENCT1IgYXMgZGVmaW5lZCBieSBzZWN0aW9uIDMuOS4KKy8v
IFN1cHBvcnRlZDoKKy8vICAqIE1ham9yIHR5cGVzOgorLy8gICAgICogMDogVW5zaWduZWQgaW50
ZWdlcnMsIHVwIHRvIDY0LWJpdC4KKy8vICAgICAqIDI6IEJ5dGUgc3RyaW5ncy4KKy8vICAgICAq
IDM6IFVURi04IHN0cmluZ3MuCisvLyAgICAgKiA0OiBEZWZpbml0ZS1sZW5ndGggYXJyYXlzLgor
Ly8gICAgICogNTogRGVmaW5pdGUtbGVuZ3RoIG1hcHMuCisvLyAgICAgKiA3OiBTaW1wbGUgdmFs
dWVzLgorLy8KKy8vIFJlcXVpcmVtZW50cyBmb3IgY2Fub25pY2FsIENCT1IgcmVwcmVzZW50YXRp
b246CisvLyAgLSBEdXBsaWNhdGUga2V5cyBmb3IgbWFwIGFyZSBub3QgYWxsb3dlZC4KKy8vICAt
IEtleXMgZm9yIG1hcCBtdXN0IGJlIHNvcnRlZCBmaXJzdCBieSBsZW5ndGggYW5kIHRoZW4gYnkg
Ynl0ZS13aXNlCisvLyAgICBsZXhpY2FsIG9yZGVyLgorLy8KKy8vIEtub3duIGxpbWl0YXRpb25z
IGFuZCBpbnRlcnByZXRhdGlvbnMgb2YgdGhlIFJGQzoKKy8vICAtIERvZXMgbm90IHN1cHBvcnQg
bmVnYXRpdmUgaW50ZWdlcnMsIGluZGVmaW5pdGUgZGF0YSBzdHJlYW1zIGFuZCB0YWdnaW5nLgor
Ly8gIC0gRmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25zIGFuZCBCUkVBSyBzdG9wIGNvZGUg
aW4gbWFqb3IKKy8vICAgIHR5cGUgNyBhcmUgbm90IHN1cHBvcnRlZC4KKy8vICAtIE5vbi1jaGFy
YWN0ZXIgY29kZXBvaW50IGFyZSBub3Qgc3VwcG9ydGVkIGZvciBNYWpvciB0eXBlIDMuCisvLyAg
LSBJbmNvbXBsZXRlIENCT1IgZGF0YSBpdGVtcyBhcmUgdHJlYXRlZCBhcyBzeW50YXggZXJyb3Jz
LgorLy8gIC0gVHJhaWxpbmcgZGF0YSBieXRlcyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMuCisvLyAg
LSBVbmtub3duIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9ybWF0cyBhcmUgdHJlYXRlZCBhcyBz
eW50YXggZXJyb3JzLgorLy8gIC0gQ2FsbGVycyBjYW4gZGVjb2RlIENCT1IgdmFsdWVzIHdpdGgg
YXQgbW9zdCAxNiBuZXN0ZWQgZGVwdGggbGF5ZXIuIE1vcmUKKy8vICAgIHN0cmljdCByZXN0cmlj
dGlvbnMgb24gbmVzdGluZyBsYXllciBzaXplIG9mIENCT1IgdmFsdWVzIGNhbiBiZSBlbmZvcmNl
ZAorLy8gICAgYnkgc2V0dGluZyB8bWF4X25lc3RpbmdfbGV2ZWx8LgorLy8gIC0gT25seSBDQk9S
IG1hcHMgd2l0aCBpbnRlZ2VyIG9yIHN0cmluZyB0eXBlIGtleXMgYXJlIHN1cHBvcnRlZCBkdWUg
dG8gdGhlCisvLyAgICBjb3N0IG9mIHNlcmlhbGl6YXRpb24gd2hlbiBzb3J0aW5nIG1hcCBrZXlz
LgorLy8gIC0gU2ltcGxlIHZhbHVlcyB0aGF0IGFyZSB1bmFzc2lnbmVkL3Jlc2VydmVkIGFzIHBl
ciBSRkMgNzA0OSBhcmUgbm90CisvLyAgICBzdXBwb3J0ZWQgYW5kIHRyZWF0ZWQgYXMgZXJyb3Jz
LgorCituYW1lc3BhY2UgY2JvciB7CisKK2NsYXNzIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JU
IENCT1JSZWFkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENCT1JSZWFkZXIpOworcHVi
bGljOgorICAgIHVzaW5nIEJ5dGVzID0gVmVjdG9yPHVpbnQ4X3Q+OworCisgICAgZW51bSBjbGFz
cyBEZWNvZGVyRXJyb3IgeworICAgICAgICBDQk9SX05PX0VSUk9SID0gMCwKKyAgICAgICAgVU5T
VVBQT1JURURfTUFKT1JfVFlQRSwKKyAgICAgICAgVU5LTk9XTl9BRERJVElPTkFMX0lORk8sCisg
ICAgICAgIElOQ09NUExFVEVfQ0JPUl9EQVRBLAorICAgICAgICBJTkNPUlJFQ1RfTUFQX0tFWV9U
WVBFLAorICAgICAgICBUT09fTVVDSF9ORVNUSU5HLAorICAgICAgICBJTlZBTElEX1VURjgsCisg
ICAgICAgIEVYVFJBTkVPVVNfREFUQSwKKyAgICAgICAgRFVQTElDQVRFX0tFWSwKKyAgICAgICAg
T1VUX09GX09SREVSX0tFWSwKKyAgICAgICAgTk9OX01JTklNQUxfQ0JPUl9FTkNPRElORywKKyAg
ICAgICAgVU5TVVBQT1JURURfU0lNUExFX1ZBTFVFLAorICAgICAgICBVTlNVUFBPUlRFRF9GTE9B
VElOR19QT0lOVF9WQUxVRSwKKyAgICAgICAgT1VUX09GX1JBTkdFX0lOVEVHRVJfVkFMVUUsCisg
ICAgfTsKKworICAgIC8vIENCT1IgbmVzdGVkIGRlcHRoIHN1ZmZpY2llbnQgZm9yIG1vc3QgdXNl
IGNhc2VzLgorICAgIHN0YXRpYyBjb25zdCBpbnQga0NCT1JNYXhEZXB0aCA9IDE2OworCisgICAg
fkNCT1JSZWFkZXIoKTsKKworICAgIC8vIFJlYWRzIGFuZCBwYXJzZXMgfGlucHV0X2RhdGF8IGlu
dG8gYSBDQk9SVmFsdWUuIElmIGFueSBvbmUgb2YgdGhlIHN5bnRheAorICAgIC8vIGZvcm1hdHMg
aXMgdmlvbGF0ZWQgLWluY2x1ZGluZyB1bmtub3duIGFkZGl0aW9uYWwgaW5mbyBhbmQgaW5jb21w
bGV0ZQorICAgIC8vIENCT1IgZGF0YS0gdGhlbiBhbiBlbXB0eSBvcHRpb25hbCBpcyByZXR1cm5l
ZC4gT3B0aW9uYWwgfGVycm9yX2NvZGVfb3V0fAorICAgIC8vIGNhbiBiZSBwcm92aWRlZCBieSB0
aGUgY2FsbGVyIHRvIG9idGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0CisgICAgLy8g
ZGVjb2RpbmcgZmFpbHVyZXMuCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBS
ZWFkKGNvbnN0IEJ5dGVzJiBpbnB1dF9kYXRhLCBEZWNvZGVyRXJyb3IqIGVycm9yX2NvZGVfb3V0
ID0gbnVsbHB0ciwgaW50IG1heF9uZXN0aW5nX2xldmVsID0ga0NCT1JNYXhEZXB0aCk7CisKKyAg
ICAvLyBUcmFuc2xhdGVzIGVycm9ycyB0byBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlcy4K
KyAgICBzdGF0aWMgY29uc3QgY2hhciogRXJyb3JDb2RlVG9TdHJpbmcoRGVjb2RlckVycm9yIGVy
cm9yX2NvZGUpOworCitwcml2YXRlOgorICAgIENCT1JSZWFkZXIoQnl0ZXM6OmNvbnN0X2l0ZXJh
dG9yIGl0LCBjb25zdCBCeXRlczo6Y29uc3RfaXRlcmF0b3IgZW5kKTsKKyAgICBzdGQ6Om9wdGlv
bmFsPENCT1JWYWx1ZT4gRGVjb2RlQ0JPUihpbnQgbWF4X25lc3RpbmdfbGV2ZWwpOworICAgIHN0
ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBEZWNvZGVWYWx1ZVRvTmVnYXRpdmUodWludDY0X3QgdmFs
dWUpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBEZWNvZGVWYWx1ZVRvVW5zaWduZWQo
dWludDY0X3QgdmFsdWUpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBSZWFkU2ltcGxl
VmFsdWUodWludDhfdCBhZGRpdGlvbmFsX2luZm8sIHVpbnQ2NF90IHZhbHVlKTsKKyAgICBib29s
IFJlYWRWYXJpYWRpY0xlbmd0aEludGVnZXIodWludDhfdCBhZGRpdGlvbmFsX2luZm8sIHVpbnQ2
NF90KiB2YWx1ZSk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IFJlYWRCeXRlcyh1aW50
NjRfdCBudW1fYnl0ZXMpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBSZWFkU3RyaW5n
KHVpbnQ2NF90IG51bV9ieXRlcyk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IFJlYWRD
Qk9SQXJyYXkodWludDY0X3QgbGVuZ3RoLCBpbnQgbWF4X25lc3RpbmdfbGV2ZWwpOworICAgIHN0
ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBSZWFkQ0JPUk1hcCh1aW50NjRfdCBsZW5ndGgsIGludCBt
YXhfbmVzdGluZ19sZXZlbCk7CisgICAgYm9vbCBDYW5Db25zdW1lKHVpbnQ2NF90IGJ5dGVzKTsK
KyAgICB2b2lkIENoZWNrRXh0cmFuZW91c0RhdGEoKTsKKyAgICBib29sIENoZWNrRHVwbGljYXRl
S2V5KGNvbnN0IENCT1JWYWx1ZSYgbmV3X2tleSwgY29uc3QgQ0JPUlZhbHVlOjpNYXBWYWx1ZSYg
bWFwKTsKKyAgICBib29sIEhhc1ZhbGlkVVRGOEZvcm1hdChjb25zdCBTdHJpbmcmIHN0cmluZ19k
YXRhKTsKKyAgICBib29sIENoZWNrT3V0T2ZPcmRlcktleShjb25zdCBDQk9SVmFsdWUmIG5ld19r
ZXksIGNvbnN0IENCT1JWYWx1ZTo6TWFwVmFsdWUmIG1hcCk7CisgICAgYm9vbCBDaGVja01pbmlt
YWxFbmNvZGluZyh1aW50OF90IGFkZGl0aW9uYWxfYnl0ZXMsIHVpbnQ2NF90IHVpbnRfZGF0YSk7
CisKKyAgICBEZWNvZGVyRXJyb3IgR2V0RXJyb3JDb2RlKCk7CisKKyAgICBCeXRlczo6Y29uc3Rf
aXRlcmF0b3IgaXRfOworICAgIGNvbnN0IEJ5dGVzOjpjb25zdF9pdGVyYXRvciBlbmRfOworICAg
IERlY29kZXJFcnJvciBlcnJvcl9jb2RlXzsKK307CisKK30gIC8vIG5hbWVzcGFjZSBjYm9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Ni
b3IvY2Jvcl92YWx1ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGly
ZF9wYXJ0eS9jYm9yL2Nib3JfdmFsdWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWNiMmVlNTk0ZDY4NzIz
ZjAzMGUzYjZjZjQ3MjJhNmNlM2Y1ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfdmFsdWVzLmNwcApAQCAt
MCwwICsxLDI5NSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY2Jvcl92YWx1ZXMuaCIKKworI2lu
Y2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2UgY2JvciB7CisKK0NC
T1JWYWx1ZTo6Q0JPUlZhbHVlKCkgbm9leGNlcHQKKyAgICA6IHR5cGVfKFR5cGU6Ok5PTkUpCit7
Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKENCT1JWYWx1ZSYmIHRoYXQpIG5vZXhjZXB0Cit7
CisgICAgSW50ZXJuYWxNb3ZlQ29uc3RydWN0RnJvbShXVEZNb3ZlKHRoYXQpKTsKK30KKworQ0JP
UlZhbHVlOjpDQk9SVmFsdWUoVHlwZSB0eXBlKQorICAgIDogdHlwZV8odHlwZSkKK3sKKyAgICAv
LyBJbml0aWFsaXplIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgc3dpdGNoICh0eXBlXykg
eworICAgIGNhc2UgVHlwZTo6VU5TSUdORUQ6CisgICAgY2FzZSBUeXBlOjpORUdBVElWRToKKyAg
ICAgICAgaW50ZWdlcl92YWx1ZV8gPSAwOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBl
OjpCWVRFX1NUUklORzoKKyAgICAgICAgbmV3ICgmYnl0ZXN0cmluZ192YWx1ZV8pIEJpbmFyeVZh
bHVlKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6OlNUUklORzoKKyAgICAgICAg
bmV3ICgmc3RyaW5nX3ZhbHVlXykgU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGU6OkFSUkFZOgorICAgICAgICBuZXcgKCZhcnJheV92YWx1ZV8pIEFycmF5VmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6TUFQOgorICAgICAgICBuZXcgKCZtYXBf
dmFsdWVfKSBNYXBWYWx1ZSgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpTSU1Q
TEVfVkFMVUU6CisgICAgICAgIHNpbXBsZV92YWx1ZV8gPSBDQk9SVmFsdWU6OlNpbXBsZVZhbHVl
OjpVTkRFRklORUQ7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6Ok5PTkU6CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0NCT1JW
YWx1ZTo6Q0JPUlZhbHVlKGludCBpbnRlZ2VyX3ZhbHVlKQorICAgIDogQ0JPUlZhbHVlKHN0YXRp
Y19jYXN0PGludDY0X3Q+KGludGVnZXJfdmFsdWUpKQoreworfQorCitDQk9SVmFsdWU6OkNCT1JW
YWx1ZShpbnQ2NF90IGludGVnZXJfdmFsdWUpCisgICAgOiBpbnRlZ2VyX3ZhbHVlXyhpbnRlZ2Vy
X3ZhbHVlKQoreworICAgIHR5cGVfID0gaW50ZWdlcl92YWx1ZSA+PSAwID8gVHlwZTo6VU5TSUdO
RUQgOiBUeXBlOjpORUdBVElWRTsKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoY29uc3QgQmlu
YXJ5VmFsdWUmIGluX2J5dGVzKQorICAgIDogdHlwZV8oVHlwZTo6QllURV9TVFJJTkcpCisgICAg
LCBieXRlc3RyaW5nX3ZhbHVlXyhpbl9ieXRlcykKK3sKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFs
dWUoQmluYXJ5VmFsdWUmJiBpbl9ieXRlcykgbm9leGNlcHQKKyAgICA6IHR5cGVfKFR5cGU6OkJZ
VEVfU1RSSU5HKQorICAgICwgYnl0ZXN0cmluZ192YWx1ZV8oV1RGTW92ZShpbl9ieXRlcykpCit7
Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IGNoYXIqIGluX3N0cmluZykKKyAgICA6
IENCT1JWYWx1ZShTdHJpbmcoaW5fc3RyaW5nKSkKK3sKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFs
dWUoU3RyaW5nJiYgaW5fc3RyaW5nKSBub2V4Y2VwdAorICAgIDogdHlwZV8oVHlwZTo6U1RSSU5H
KQorICAgICwgc3RyaW5nX3ZhbHVlXyhXVEZNb3ZlKGluX3N0cmluZykpCit7Cit9CisKK0NCT1JW
YWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IFN0cmluZyYgaW5fc3RyaW5nKQorICAgIDogdHlwZV8oVHlw
ZTo6U1RSSU5HKQorICAgICwgc3RyaW5nX3ZhbHVlXyhpbl9zdHJpbmcpCit7Cit9CisKK0NCT1JW
YWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IEFycmF5VmFsdWUmIGluX2FycmF5KQorICAgIDogdHlwZV8o
VHlwZTo6QVJSQVkpCisgICAgLCBhcnJheV92YWx1ZV8oKQoreworICAgIGFycmF5X3ZhbHVlXy5y
ZXNlcnZlQ2FwYWNpdHkoaW5fYXJyYXkuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bCA6IGluX2FycmF5KQorICAgICAgICBhcnJheV92YWx1ZV8uYXBwZW5kKHZhbC5DbG9uZSgpKTsK
K30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoQXJyYXlWYWx1ZSYmIGluX2FycmF5KSBub2V4Y2Vw
dAorICAgIDogdHlwZV8oVHlwZTo6QVJSQVkpCisgICAgLCBhcnJheV92YWx1ZV8oV1RGTW92ZShp
bl9hcnJheSkpCit7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IE1hcFZhbHVlJiBp
bl9tYXApCisgICAgOiB0eXBlXyhUeXBlOjpNQVApCisgICAgLCBtYXBfdmFsdWVfKCkKK3sKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogaW5fbWFwKQorICAgICAgICBtYXBfdmFsdWVfLmVtcGxh
Y2VfaGludChtYXBfdmFsdWVfLmVuZCgpLCBpdC5maXJzdC5DbG9uZSgpLCBpdC5zZWNvbmQuQ2xv
bmUoKSk7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKE1hcFZhbHVlJiYgaW5fbWFwKSBub2V4
Y2VwdAorICAgIDogdHlwZV8oVHlwZTo6TUFQKQorICAgICwgbWFwX3ZhbHVlXyhXVEZNb3ZlKGlu
X21hcCkpCit7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKFNpbXBsZVZhbHVlIGluX3NpbXBs
ZSkKKyAgICA6IHR5cGVfKFR5cGU6OlNJTVBMRV9WQUxVRSkKKyAgICAsIHNpbXBsZV92YWx1ZV8o
aW5fc2ltcGxlKQoreworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGluX3NpbXBsZSkgPj0g
MjAgJiYgc3RhdGljX2Nhc3Q8aW50Pihpbl9zaW1wbGUpIDw9IDIzKTsKK30KKworQ0JPUlZhbHVl
JiBDQk9SVmFsdWU6Om9wZXJhdG9yPShDQk9SVmFsdWUmJiB0aGF0KSBub2V4Y2VwdAoreworICAg
IEludGVybmFsQ2xlYW51cCgpOworICAgIEludGVybmFsTW92ZUNvbnN0cnVjdEZyb20oV1RGTW92
ZSh0aGF0KSk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0NCT1JWYWx1ZTo6fkNCT1JWYWx1
ZSgpCit7CisgICAgSW50ZXJuYWxDbGVhbnVwKCk7Cit9CisKK0NCT1JWYWx1ZSBDQk9SVmFsdWU6
OkNsb25lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGVfKSB7CisgICAgY2FzZSBUeXBlOjpO
T05FOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKCk7CisgICAgY2FzZSBUeXBlOjpVTlNJR05F
RDoKKyAgICBjYXNlIFR5cGU6Ok5FR0FUSVZFOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKGlu
dGVnZXJfdmFsdWVfKTsKKyAgICBjYXNlIFR5cGU6OkJZVEVfU1RSSU5HOgorICAgICAgICByZXR1
cm4gQ0JPUlZhbHVlKGJ5dGVzdHJpbmdfdmFsdWVfKTsKKyAgICBjYXNlIFR5cGU6OlNUUklORzoK
KyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZShzdHJpbmdfdmFsdWVfKTsKKyAgICBjYXNlIFR5cGU6
OkFSUkFZOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKGFycmF5X3ZhbHVlXyk7CisgICAgY2Fz
ZSBUeXBlOjpNQVA6CisgICAgICAgIHJldHVybiBDQk9SVmFsdWUobWFwX3ZhbHVlXyk7CisgICAg
Y2FzZSBUeXBlOjpTSU1QTEVfVkFMVUU6CisgICAgICAgIHJldHVybiBDQk9SVmFsdWUoc2ltcGxl
X3ZhbHVlXyk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IENCT1JWYWx1ZSgpOworfQorCitjb25zdCBpbnQ2NF90JiBDQk9SVmFsdWU6OkdldEludGVnZXIo
KSBjb25zdAoreworICAgIEFTU0VSVChpc19pbnRlZ2VyKCkpOworICAgIHJldHVybiBpbnRlZ2Vy
X3ZhbHVlXzsKK30KKworY29uc3QgaW50NjRfdCYgQ0JPUlZhbHVlOjpHZXRVbnNpZ25lZCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlzX3Vuc2lnbmVkKCkpOworICAgIEFTU0VSVChpbnRlZ2VyX3Zh
bHVlXyA+PSAwKTsKKyAgICByZXR1cm4gaW50ZWdlcl92YWx1ZV87Cit9CisKK2NvbnN0IGludDY0
X3QmIENCT1JWYWx1ZTo6R2V0TmVnYXRpdmUoKSBjb25zdAoreworICAgIEFTU0VSVChpc19uZWdh
dGl2ZSgpKTsKKyAgICBBU1NFUlQoaW50ZWdlcl92YWx1ZV8gPCAwKTsKKyAgICByZXR1cm4gaW50
ZWdlcl92YWx1ZV87Cit9CisKK2NvbnN0IFN0cmluZyYgQ0JPUlZhbHVlOjpHZXRTdHJpbmcoKSBj
b25zdAoreworICAgIEFTU0VSVChpc19zdHJpbmcoKSk7CisgICAgcmV0dXJuIHN0cmluZ192YWx1
ZV87Cit9CisKK2NvbnN0IENCT1JWYWx1ZTo6QmluYXJ5VmFsdWUmIENCT1JWYWx1ZTo6R2V0Qnl0
ZXN0cmluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzX2J5dGVzdHJpbmcoKSk7CisgICAgcmV0
dXJuIGJ5dGVzdHJpbmdfdmFsdWVfOworfQorCitjb25zdCBDQk9SVmFsdWU6OkFycmF5VmFsdWUm
IENCT1JWYWx1ZTo6R2V0QXJyYXkoKSBjb25zdAoreworICAgIEFTU0VSVChpc19hcnJheSgpKTsK
KyAgICByZXR1cm4gYXJyYXlfdmFsdWVfOworfQorCitjb25zdCBDQk9SVmFsdWU6Ok1hcFZhbHVl
JiBDQk9SVmFsdWU6OkdldE1hcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzX21hcCgpKTsKKyAg
ICByZXR1cm4gbWFwX3ZhbHVlXzsKK30KKworQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZSBDQk9SVmFs
dWU6OkdldFNpbXBsZVZhbHVlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNfc2ltcGxlKCkpOwor
ICAgIHJldHVybiBzaW1wbGVfdmFsdWVfOworfQorCit2b2lkIENCT1JWYWx1ZTo6SW50ZXJuYWxN
b3ZlQ29uc3RydWN0RnJvbShDQk9SVmFsdWUmJiB0aGF0KQoreworICAgIHR5cGVfID0gdGhhdC50
eXBlXzsKKworICAgIHN3aXRjaCAodHlwZV8pIHsKKyAgICBjYXNlIFR5cGU6OlVOU0lHTkVEOgor
ICAgIGNhc2UgVHlwZTo6TkVHQVRJVkU6CisgICAgICAgIGludGVnZXJfdmFsdWVfID0gdGhhdC5p
bnRlZ2VyX3ZhbHVlXzsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6QllURV9TVFJJ
Tkc6CisgICAgICAgIG5ldyAoJmJ5dGVzdHJpbmdfdmFsdWVfKSBCaW5hcnlWYWx1ZShXVEZNb3Zl
KHRoYXQuYnl0ZXN0cmluZ192YWx1ZV8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlw
ZTo6U1RSSU5HOgorICAgICAgICBuZXcgKCZzdHJpbmdfdmFsdWVfKSBTdHJpbmcoV1RGTW92ZSh0
aGF0LnN0cmluZ192YWx1ZV8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6QVJS
QVk6CisgICAgICAgIG5ldyAoJmFycmF5X3ZhbHVlXykgQXJyYXlWYWx1ZShXVEZNb3ZlKHRoYXQu
YXJyYXlfdmFsdWVfKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6Ok1BUDoKKyAg
ICAgICAgbmV3ICgmbWFwX3ZhbHVlXykgTWFwVmFsdWUoV1RGTW92ZSh0aGF0Lm1hcF92YWx1ZV8p
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6U0lNUExFX1ZBTFVFOgorICAgICAg
ICBzaW1wbGVfdmFsdWVfID0gdGhhdC5zaW1wbGVfdmFsdWVfOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUeXBlOjpOT05FOgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENCT1JWYWx1ZTo6SW50ZXJuYWxDbGVhbnVwKCkKK3sK
KyAgICBzd2l0Y2ggKHR5cGVfKSB7CisgICAgY2FzZSBUeXBlOjpCWVRFX1NUUklORzoKKyAgICAg
ICAgYnl0ZXN0cmluZ192YWx1ZV8ufkJpbmFyeVZhbHVlKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVHlwZTo6U1RSSU5HOgorICAgICAgICBzdHJpbmdfdmFsdWVfLn5TdHJpbmcoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpBUlJBWToKKyAgICAgICAgYXJyYXlfdmFsdWVf
Ln5BcnJheVZhbHVlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6TUFQOgorICAg
ICAgICBtYXBfdmFsdWVfLn5NYXBWYWx1ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5
cGU6Ok5PTkU6CisgICAgY2FzZSBUeXBlOjpVTlNJR05FRDoKKyAgICBjYXNlIFR5cGU6Ok5FR0FU
SVZFOgorICAgIGNhc2UgVHlwZTo6U0lNUExFX1ZBTFVFOgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgdHlwZV8gPSBUeXBlOjpOT05FOworfQorCit9IC8vIG5hbWVzcGFjZSBjYm9yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Nib3Iv
Y2Jvcl92YWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vdGhpcmRfcGFy
dHkvY2Jvci9jYm9yX3ZhbHVlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiZmI4NmZiZjc2ODViNTYwOGQzMzE2
NTAxOTQ1OTZjOWRkYmRmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl92YWx1ZXMuaApAQCAtMCwwICsxLDE5
MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBjYm9yIHsKKworLy8gQSBjbGFzcyBm
b3IgQ29uY2lzZSBCaW5hcnkgT2JqZWN0IFJlcHJlc2VudGF0aW9uIChDQk9SKSB2YWx1ZXMuCisv
LyBUaGlzIGRvZXMgbm90IHN1cHBvcnQ6CisvLyAgKiBGbG9hdGluZy1wb2ludCBudW1iZXJzLgor
Ly8gICogSW5kZWZpbml0ZS1sZW5ndGggZW5jb2RpbmdzLgorY2xhc3MgV0VCQ09SRV9URVNUU1VQ
UE9SVF9FWFBPUlQgQ0JPUlZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQk9SVmFs
dWUpOworcHVibGljOgorICAgIHN0cnVjdCBDVEFQTGVzcyB7CisgICAgICAgIC8vIENvbXBhcmlz
b24gcHJlZGljYXRlIHRvIG9yZGVyIGtleXMgaW4gYSBkaWN0aW9uYXJ5IGFzIHJlcXVpcmVkIGJ5
IHRoZQorICAgICAgICAvLyBDbGllbnQtdG8tQXV0aGVudGljYXRvciBQcm90b2NvbCAoQ1RBUCkg
c3BlYyAyLjAuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBzb3J0IG9yZGVyIGRlZmluZWQg
aW4gQ1RBUCBpczoKKyAgICAgICAgLy8gICAqIElmIHRoZSBtYWpvciB0eXBlcyBhcmUgZGlmZmVy
ZW50LCB0aGUgb25lIHdpdGggdGhlIGxvd2VyIHZhbHVlIGluCisgICAgICAgIC8vICAgICBudW1l
cmljYWwgb3JkZXIgc29ydHMgZWFybGllci4KKyAgICAgICAgLy8gICAqIElmIHR3byBrZXlzIGhh
dmUgZGlmZmVyZW50IGxlbmd0aHMsIHRoZSBzaG9ydGVyIG9uZSBzb3J0cyBlYXJsaWVyLgorICAg
ICAgICAvLyAgICogSWYgdHdvIGtleXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgsIHRoZSBvbmUgd2l0
aCB0aGUgbG93ZXIgdmFsdWUgaW4KKyAgICAgICAgLy8gICAgIChieXRlLXdpc2UpIGxleGljYWwg
b3JkZXIgc29ydHMgZWFybGllci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2VlIHNlY3Rpb24g
NiBvZiBodHRwczovL2ZpZG9hbGxpYW5jZS5vcmcvc3BlY3MvZmlkby12Mi4wLXJkLTIwMTcwOTI3
LworICAgICAgICAvLyBmaWRvLWNsaWVudC10by1hdXRoZW50aWNhdG9yLXByb3RvY29sLXYyLjAt
cmQtMjAxNzA5MjcuaHRtbC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVEhFIENUQVAgU09SVCBP
UkRFUiBJTVBMRU1FTlRFRCBIRVJFIERJRkZFUlMgRlJPTSBUSEUgQ0FOT05JQ0FMIENCT1IKKyAg
ICAgICAgLy8gT1JERVIgZGVmaW5lZCBpbiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZj
NzA0OSNzZWN0aW9uLTMuOSwgaW4gdGhhdAorICAgICAgICAvLyB0aGUgbGF0dGVyIHNvcnRzIHB1
cmVseSBieSBzZXJpYWxpc2VkIGtleSBhbmQgZG9lc24ndCBzcGVjaWZ5IHRoYXQgbWFqb3IKKyAg
ICAgICAgLy8gdHlwZXMgYXJlIGNvbXBhcmVkIGZpcnN0LiBUaHVzIHRoZSBzaG9ydGVzdCBrZXkg
c29ydHMgZmlyc3QgYnkgdGhlIFJGQworICAgICAgICAvLyBydWxlcyAoaXJyZXNwZWN0aXZlIG9m
IHRoZSBtYWpvciB0eXBlKSwgYnV0IG1heSBub3QgYnkgQ1RBUCBydWxlcy4KKyAgICAgICAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IENCT1JWYWx1ZSYgYSwgY29uc3QgQ0JPUlZhbHVlJiBiKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoKGEuaXNfaW50ZWdlcigpIHx8IGEuaXNf
c3RyaW5nKCkpICYmIChiLmlzX2ludGVnZXIoKSB8fCBiLmlzX3N0cmluZygpKSk7CisgICAgICAg
ICAgICBpZiAoYS50eXBlKCkgIT0gYi50eXBlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGEu
dHlwZSgpIDwgYi50eXBlKCk7CisgICAgICAgICAgICBzd2l0Y2ggKGEudHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIFR5cGU6OlVOU0lHTkVEOgorICAgICAgICAgICAgICAgIHJldHVybiBhLkdl
dEludGVnZXIoKSA8IGIuR2V0SW50ZWdlcigpOworICAgICAgICAgICAgY2FzZSBUeXBlOjpORUdB
VElWRToKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5HZXRJbnRlZ2VyKCkgPiBiLkdldEludGVn
ZXIoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6U1RSSU5HOiB7CisgICAgICAgICAgICAgICAg
Y29uc3QgYXV0byYgYV9zdHIgPSBhLkdldFN0cmluZygpOworICAgICAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBhX2xlbmd0aCA9IGFfc3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGJfc3RyID0gYi5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3QgYl9sZW5ndGggPSBiX3N0ci5sZW5ndGgoKTsKKworICAgICAgICAgICAgICAgIGlmIChhX2xl
bmd0aCAhPSBiX2xlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFfbGVuZ3RoIDwg
Yl9sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZUxl
c3NUaGFuKGFfc3RyLCBiX3N0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIHVzaW5nIGlzX3RyYW5zcGFyZW50ID0gdm9pZDsKKyAgICB9OworCisgICAg
dXNpbmcgQmluYXJ5VmFsdWUgPSBWZWN0b3I8dWludDhfdD47CisgICAgdXNpbmcgQXJyYXlWYWx1
ZSA9IFZlY3RvcjxDQk9SVmFsdWU+OworICAgIHVzaW5nIE1hcFZhbHVlID0gc3RkOjptYXA8Q0JP
UlZhbHVlLCBDQk9SVmFsdWUsIENUQVBMZXNzPjsKKworICAgIGVudW0gY2xhc3MgVHlwZSB7Cisg
ICAgICAgIFVOU0lHTkVEID0gMCwKKyAgICAgICAgTkVHQVRJVkUgPSAxLAorICAgICAgICBCWVRF
X1NUUklORyA9IDIsCisgICAgICAgIFNUUklORyA9IDMsCisgICAgICAgIEFSUkFZID0gNCwKKyAg
ICAgICAgTUFQID0gNSwKKyAgICAgICAgU0lNUExFX1ZBTFVFID0gNywKKyAgICAgICAgTk9ORSA9
IC0xLAorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIFNpbXBsZVZhbHVlIHsKKyAgICAgICAgRkFM
U0VfVkFMVUUgPSAyMCwKKyAgICAgICAgVFJVRV9WQUxVRSA9IDIxLAorICAgICAgICBOVUxMX1ZB
TFVFID0gMjIsCisgICAgICAgIFVOREVGSU5FRCA9IDIzLAorICAgIH07CisKKyAgICBDQk9SVmFs
dWUoQ0JPUlZhbHVlJiYgdGhhdCkgbm9leGNlcHQ7CisgICAgQ0JPUlZhbHVlKCkgbm9leGNlcHQ7
ICAvLyBBIE5PTkUgdmFsdWUuCisKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoVHlwZSB0eXBlKTsK
KyAgICBleHBsaWNpdCBDQk9SVmFsdWUoaW50IGludGVnZXJfdmFsdWUpOworICAgIGV4cGxpY2l0
IENCT1JWYWx1ZShpbnQ2NF90IGludGVnZXJfdmFsdWUpOworICAgIGV4cGxpY2l0IENCT1JWYWx1
ZSh1aW50NjRfdCBpbnRlZ2VyX3ZhbHVlKSA9IGRlbGV0ZTsKKworICAgIGV4cGxpY2l0IENCT1JW
YWx1ZShjb25zdCBCaW5hcnlWYWx1ZSYgaW5fYnl0ZXMpOworICAgIGV4cGxpY2l0IENCT1JWYWx1
ZShCaW5hcnlWYWx1ZSYmIGluX2J5dGVzKSBub2V4Y2VwdDsKKworICAgIGV4cGxpY2l0IENCT1JW
YWx1ZShjb25zdCBjaGFyKiBpbl9zdHJpbmcpOworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShTdHJp
bmcmJiBpbl9zdHJpbmcpIG5vZXhjZXB0OworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShjb25zdCBT
dHJpbmcmIGluX3N0cmluZyk7CisKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoY29uc3QgQXJyYXlW
YWx1ZSYgaW5fYXJyYXkpOworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShBcnJheVZhbHVlJiYgaW5f
YXJyYXkpIG5vZXhjZXB0OworCisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKGNvbnN0IE1hcFZhbHVl
JiBpbl9tYXApOworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShNYXBWYWx1ZSYmIGluX21hcCkgbm9l
eGNlcHQ7CisKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoU2ltcGxlVmFsdWUgaW5fc2ltcGxlKTsK
KworICAgIENCT1JWYWx1ZSYgb3BlcmF0b3I9KENCT1JWYWx1ZSYmIHRoYXQpIG5vZXhjZXB0Owor
CisgICAgfkNCT1JWYWx1ZSgpOworCisgICAgLy8gQ0JPUlZhbHVlJ3MgY29weSBjb25zdHJ1Y3Rv
ciBhbmQgY29weSBhc3NpZ25tZW50IG9wZXJhdG9yIGFyZSBkZWxldGVkLgorICAgIC8vIFVzZSB0
aGlzIHRvIG9idGFpbiBhIGRlZXAgY29weSBleHBsaWNpdGx5LgorICAgIENCT1JWYWx1ZSBDbG9u
ZSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgc3RvcmVk
IGJ5IHRoZSBjdXJyZW50IFZhbHVlIG9iamVjdC4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiB0eXBlXzsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IG9iamVj
dCByZXByZXNlbnRzIGEgZ2l2ZW4gdHlwZS4KKyAgICBib29sIGlzX3R5cGUoVHlwZSB0eXBlKSBj
b25zdCB7IHJldHVybiB0eXBlID09IHR5cGVfOyB9CisgICAgYm9vbCBpc19ub25lKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IFR5cGU6Ok5PTkU7IH0KKyAgICBib29sIGlzX3Vuc2lnbmVkKCkg
Y29uc3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6OlVOU0lHTkVEOyB9CisgICAgYm9vbCBpc19u
ZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpORUdBVElWRTsgfQorICAg
IGJvb2wgaXNfaW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIGlzX3Vuc2lnbmVkKCkgfHwgaXNfbmVn
YXRpdmUoKTsgfQorICAgIGJvb2wgaXNfYnl0ZXN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUo
KSA9PSBUeXBlOjpCWVRFX1NUUklORzsgfQorICAgIGJvb2wgaXNfc3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IFR5cGU6OlNUUklORzsgfQorICAgIGJvb2wgaXNfYXJyYXkoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6QVJSQVk7IH0KKyAgICBib29sIGlzX21hcCgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpNQVA7IH0KKyAgICBib29sIGlzX3NpbXBsZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpTSU1QTEVfVkFMVUU7IH0KKworICAgIC8v
IFRoZXNlIHdpbGwgYWxsIGZhdGFsbHkgYXNzZXJ0IGlmIHRoZSB0eXBlIGRvZXNuJ3QgbWF0Y2gu
CisgICAgU2ltcGxlVmFsdWUgR2V0U2ltcGxlVmFsdWUoKSBjb25zdDsKKyAgICBjb25zdCBpbnQ2
NF90JiBHZXRJbnRlZ2VyKCkgY29uc3Q7CisgICAgY29uc3QgaW50NjRfdCYgR2V0VW5zaWduZWQo
KSBjb25zdDsKKyAgICBjb25zdCBpbnQ2NF90JiBHZXROZWdhdGl2ZSgpIGNvbnN0OworICAgIGNv
bnN0IEJpbmFyeVZhbHVlJiBHZXRCeXRlc3RyaW5nKCkgY29uc3Q7CisgICAgLy8gUmV0dXJuZWQg
c3RyaW5nIG1heSBjb250YWluIE5VTCBjaGFyYWN0ZXJzLgorICAgIGNvbnN0IFN0cmluZyYgR2V0
U3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3QgQXJyYXlWYWx1ZSYgR2V0QXJyYXkoKSBjb25zdDsK
KyAgICBjb25zdCBNYXBWYWx1ZSYgR2V0TWFwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVHlw
ZSB0eXBlXzsKKworICAgIHVuaW9uIHsKKyAgICAgICAgU2ltcGxlVmFsdWUgc2ltcGxlX3ZhbHVl
XzsKKyAgICAgICAgaW50NjRfdCBpbnRlZ2VyX3ZhbHVlXzsKKyAgICAgICAgQmluYXJ5VmFsdWUg
Ynl0ZXN0cmluZ192YWx1ZV87CisgICAgICAgIFN0cmluZyBzdHJpbmdfdmFsdWVfOworICAgICAg
ICBBcnJheVZhbHVlIGFycmF5X3ZhbHVlXzsKKyAgICAgICAgTWFwVmFsdWUgbWFwX3ZhbHVlXzsK
KyAgICB9OworCisgICAgdm9pZCBJbnRlcm5hbE1vdmVDb25zdHJ1Y3RGcm9tKENCT1JWYWx1ZSYm
IHRoYXQpOworICAgIHZvaWQgSW50ZXJuYWxDbGVhbnVwKCk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBjYm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJk
X3BhcnR5L2Nib3IvY2Jvcl93cml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3Jfd3JpdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMTRhYTJj
YjI4NGQ0ODUyNjYwY2NkNGQ2NTNmYzc0YzU3ZTM1MTk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3Jfd3JpdGVy
LmNwcApAQCAtMCwwICsxLDIwMyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisv
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY2Jvcl93cml0ZXIu
aCIKKworI2luY2x1ZGUgImNib3JfYmluYXJ5LmgiCisKK25hbWVzcGFjZSBjYm9yIHsKKworQ0JP
UldyaXRlcjo6fkNCT1JXcml0ZXIoKSB7fQorCisvLyBzdGF0aWMKK3N0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBDQk9SV3JpdGVyOjpXcml0ZShjb25zdCBDQk9SVmFsdWUmIG5vZGUsIHNp
emVfdCBtYXhfbmVzdGluZ19sZXZlbCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gY2JvcjsKKyAg
ICBDQk9SV3JpdGVyIHdyaXRlcigmY2Jvcik7CisgICAgaWYgKHdyaXRlci5FbmNvZGVDQk9SKG5v
ZGUsIHN0YXRpY19jYXN0PGludD4obWF4X25lc3RpbmdfbGV2ZWwpKSkKKyAgICAgICAgcmV0dXJu
IGNib3I7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworQ0JPUldyaXRlcjo6Q0JPUldy
aXRlcihWZWN0b3I8dWludDhfdD4qIGNib3IpCisgICAgOiBlbmNvZGVkX2Nib3JfKGNib3IpCit7
Cit9CisKK2Jvb2wgQ0JPUldyaXRlcjo6RW5jb2RlQ0JPUihjb25zdCBDQk9SVmFsdWUmIG5vZGUs
IGludCBtYXhfbmVzdGluZ19sZXZlbCkKK3sKKyAgICBpZiAobWF4X25lc3RpbmdfbGV2ZWwgPCAw
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG5vZGUudHlwZSgpKSB7Cisg
ICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6Ok5PTkU6IHsKKyAgICAgICAgU3RhcnRJdGVtKENCT1JW
YWx1ZTo6VHlwZTo6QllURV9TVFJJTkcsIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBSZXByZXNlbnRzIHVuc2lnbmVkIGludGVnZXJzLgorICAgIGNhc2UgQ0JPUlZh
bHVlOjpUeXBlOjpVTlNJR05FRDogeworICAgICAgICBpbnQ2NF90IHZhbHVlID0gbm9kZS5HZXRV
bnNpZ25lZCgpOworICAgICAgICBTdGFydEl0ZW0oQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIC8vIFJlcHJlc2VudHMgbmVnYXRpdmUgaW50ZWdlcnMuCisgICAgY2FzZSBDQk9S
VmFsdWU6OlR5cGU6Ok5FR0FUSVZFOiB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBub2RlLkdl
dE5lZ2F0aXZlKCk7CisgICAgICAgIFN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6Ok5FR0FUSVZF
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oLSh2YWx1ZSArIDEpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIC8vIFJlcHJlc2VudHMgYSBieXRlIHN0cmluZy4KKyAgICBjYXNl
IENCT1JWYWx1ZTo6VHlwZTo6QllURV9TVFJJTkc6IHsKKyAgICAgICAgY29uc3QgQ0JPUlZhbHVl
OjpCaW5hcnlWYWx1ZSYgYnl0ZXMgPSBub2RlLkdldEJ5dGVzdHJpbmcoKTsKKyAgICAgICAgU3Rh
cnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6QllURV9TVFJJTkcsIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihieXRlcy5zaXplKCkpKTsKKyAgICAgICAgLy8gQWRkIHRoZSBieXRlcy4KKyAgICAgICAgZW5j
b2RlZF9jYm9yXy0+YXBwZW5kVmVjdG9yKGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OlNUUklORzogeworICAgICAgICAvLyBX
VEZTdHJpbmcgdXNlcyBVVEYxNiBidXQgUkZDNzA0OSByZXF1aXJlcyBVVEY4CisgICAgICAgIGF1
dG8gdXRmOFN0cmluZyA9IG5vZGUuR2V0U3RyaW5nKCkudXRmOCgpOworICAgICAgICBTdGFydEl0
ZW0oQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1dGY4U3Ry
aW5nLmxlbmd0aCgpKSk7CisgICAgICAgIC8vIEFkZCB0aGUgY2hhcmFjdGVycy4KKyAgICAgICAg
ZW5jb2RlZF9jYm9yXy0+YXBwZW5kKHV0ZjhTdHJpbmcuZGF0YSgpLCB1dGY4U3RyaW5nLmxlbmd0
aCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUmVwcmVzZW50cyBh
biBhcnJheS4KKyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6QVJSQVk6IHsKKyAgICAgICAgY29u
c3QgQ0JPUlZhbHVlOjpBcnJheVZhbHVlJiBhcnJheSA9IG5vZGUuR2V0QXJyYXkoKTsKKyAgICAg
ICAgU3RhcnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6QVJSQVksIGFycmF5LnNpemUoKSk7CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBhcnJheSkgeworICAgICAgICAgICAgaWYgKCFF
bmNvZGVDQk9SKHZhbHVlLCBtYXhfbmVzdGluZ19sZXZlbCAtIDEpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBSZXByZXNlbnRzIGEgbWFwLgorICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpNQVA6
IHsKKyAgICAgICAgY29uc3QgQ0JPUlZhbHVlOjpNYXBWYWx1ZSYgbWFwID0gbm9kZS5HZXRNYXAo
KTsKKyAgICAgICAgU3RhcnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6TUFQLCBtYXAuc2l6ZSgpKTsK
KworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbHVlIDogbWFwKSB7CisgICAgICAgICAgICBp
ZiAoIUVuY29kZUNCT1IodmFsdWUuZmlyc3QsIG1heF9uZXN0aW5nX2xldmVsIC0gMSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFFbmNvZGVDQk9SKHZh
bHVlLnNlY29uZCwgbWF4X25lc3RpbmdfbGV2ZWwgLSAxKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gUmVwcmVzZW50cyBhIHNpbXBsZSB2YWx1ZS4KKyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6
U0lNUExFX1ZBTFVFOiB7CisgICAgICAgIGNvbnN0IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWUgc2lt
cGxlX3ZhbHVlID0gbm9kZS5HZXRTaW1wbGVWYWx1ZSgpOworICAgICAgICBTdGFydEl0ZW0oQ0JP
UlZhbHVlOjpUeXBlOjpTSU1QTEVfVkFMVUUsCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oc2ltcGxlX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBOT1RSRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENCT1JXcml0ZXI6OlN0YXJ0SXRlbShD
Qk9SVmFsdWU6OlR5cGUgdHlwZSwgdWludDY0X3Qgc2l6ZSkKK3sKKyAgICBlbmNvZGVkX2Nib3Jf
LT5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUp
IDw8IGNvbnN0YW50czo6a01ham9yVHlwZUJpdFNoaWZ0KSk7CisgICAgU2V0VWludChzaXplKTsK
K30KKwordm9pZCBDQk9SV3JpdGVyOjpTZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24odWludDhfdCBh
ZGRpdGlvbmFsX2luZm9ybWF0aW9uKQoreworICAgIEFTU0VSVCghZW5jb2RlZF9jYm9yXy0+aXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoKGFkZGl0aW9uYWxfaW5mb3JtYXRpb24gJiBjb25zdGFudHM6
OmtBZGRpdGlvbmFsSW5mb3JtYXRpb25NYXNrKSA9PSBhZGRpdGlvbmFsX2luZm9ybWF0aW9uKTsK
KyAgICBlbmNvZGVkX2Nib3JfLT5sYXN0KCkgfD0gKGFkZGl0aW9uYWxfaW5mb3JtYXRpb24gJiBj
b25zdGFudHM6OmtBZGRpdGlvbmFsSW5mb3JtYXRpb25NYXNrKTsKK30KKwordm9pZCBDQk9SV3Jp
dGVyOjpTZXRVaW50KHVpbnQ2NF90IHZhbHVlKQoreworICAgIHNpemVfdCBjb3VudCA9IEdldE51
bVVpbnRCeXRlcyh2YWx1ZSk7CisgICAgaW50IHNoaWZ0ID0gLTE7CisgICAgLy8gVmFsdWVzIHVu
ZGVyIDI0IGFyZSBlbmNvZGVkIGRpcmVjdGx5IGluIHRoZSBpbml0aWFsIGJ5dGUuCisgICAgLy8g
T3RoZXJ3aXNlLCB0aGUgbGFzdCA1IGJpdHMgb2YgdGhlIGluaXRpYWwgYnl0ZSBjb250YWlucyB0
aGUgbGVuZ3RoCisgICAgLy8gb2YgdW5zaWduZWQgaW50ZWdlciwgd2hpY2ggaXMgZW5jb2RlZCBp
biBmb2xsb3dpbmcgYnl0ZXMuCisgICAgc3dpdGNoIChjb3VudCkgeworICAgIGNhc2UgMDoKKyAg
ICAgICAgU2V0QWRkaXRpb25hbEluZm9ybWF0aW9uKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgU2V0QWRkaXRpb25hbElu
Zm9ybWF0aW9uKGNvbnN0YW50czo6a0FkZGl0aW9uYWxJbmZvcm1hdGlvbjFCeXRlKTsKKyAgICAg
ICAgc2hpZnQgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIFNldEFk
ZGl0aW9uYWxJbmZvcm1hdGlvbihjb25zdGFudHM6OmtBZGRpdGlvbmFsSW5mb3JtYXRpb24yQnl0
ZXMpOworICAgICAgICBzaGlmdCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAg
ICAgICAgU2V0QWRkaXRpb25hbEluZm9ybWF0aW9uKGNvbnN0YW50czo6a0FkZGl0aW9uYWxJbmZv
cm1hdGlvbjRCeXRlcyk7CisgICAgICAgIHNoaWZ0ID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSA4OgorICAgICAgICBTZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oY29uc3RhbnRzOjprQWRk
aXRpb25hbEluZm9ybWF0aW9uOEJ5dGVzKTsKKyAgICAgICAgc2hpZnQgPSA3OworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGZvciAoOyBzaGlmdCA+PSAwOyBzaGlmdC0tKSB7CisgICAg
ICAgIGVuY29kZWRfY2Jvcl8tPmFwcGVuZCgweEZGICYgKHZhbHVlID4+IChzaGlmdCAqIDgpKSk7
CisgICAgfQorfQorCitzaXplX3QgQ0JPUldyaXRlcjo6R2V0TnVtVWludEJ5dGVzKHVpbnQ2NF90
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA8IDI0KSB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBlbHNlIGlmICh2YWx1ZSA8PSAweEZGKSB7CisgICAgICAgIHJldHVybiAxOworICAg
IH0KKyAgICBlbHNlIGlmICh2YWx1ZSA8PSAweEZGRkYpIHsKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHZhbHVlIDw9IDB4RkZGRkZGRkYpIHsKKyAgICAgICAgcmV0dXJu
IDQ7CisgICAgfQorICAgIHJldHVybiA4OworfQorCit9ICAvLyBuYW1lc3BhY2UgY2JvcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9y
L2Nib3Jfd3JpdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3Bh
cnR5L2Nib3IvY2Jvcl93cml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTI5Mjc4MjI5YmFiODU2ZDMwZjY5
M2UwN2Q5MjZlODhjMTJkY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi90aGlyZF9wYXJ0eS9jYm9yL2Nib3Jfd3JpdGVyLmgKQEAgLTAsMCArMSwx
MTQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJjYm9yX3ZhbHVlcy5oIgorI2luY2x1ZGUgPHN0ZGRlZi5o
PgorCisvLyBBIGJhc2ljIENvbmNpc2UgQmluYXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiAoQ0JP
UikgZW5jb2RlciBhcyBkZWZpbmVkIGJ5CisvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwv
cmZjNzA0OS4gVGhpcyBpcyBhIGdlbmVyaWMgZW5jb2RlciB0aGF0IHN1cHBsaWVzCisvLyBjYW5v
bmljYWwsIHdlbGwtZm9ybWVkIENCT1IgdmFsdWVzIGJ1dCBkb2VzIG5vdCBndWFyYW50ZWUgdGhl
aXIgdmFsaWRpdHkKKy8vIChzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcwNDkj
c2VjdGlvbi0zLjIpLgorLy8gU3VwcG9ydGVkOgorLy8gICogTWFqb3IgdHlwZXM6CisvLyAgICAg
KiAwOiBVbnNpZ25lZCBpbnRlZ2VycywgdXAgdG8gSU5UNjRfTUFYLgorLy8gICAgICogMTogTmVn
YXRpdmUgaW50ZWdlcnMsIHRvIElOVDY0X01JTi4KKy8vICAgICAqIDI6IEJ5dGUgc3RyaW5ncy4K
Ky8vICAgICAqIDM6IFVURi04IHN0cmluZ3MuCisvLyAgICAgKiA0OiBBcnJheXMsIHdpdGggdGhl
IG51bWJlciBvZiBlbGVtZW50cyBrbm93biBhdCB0aGUgc3RhcnQuCisvLyAgICAgKiA1OiBNYXBz
LCB3aXRoIHRoZSBudW1iZXIgb2YgZWxlbWVudHMga25vd24gYXQgdGhlIHN0YXJ0CisvLyAgICAg
ICAgICAgICAgb2YgdGhlIGNvbnRhaW5lci4KKy8vICAgICAqIDc6IFNpbXBsZSB2YWx1ZXMuCisv
LworLy8gVW5zdXBwb3J0ZWQ6CisvLyAgKiBGbG9hdGluZy1wb2ludCBudW1iZXJzLgorLy8gICog
SW5kZWZpbml0ZS1sZW5ndGggZW5jb2RpbmdzLgorLy8gICogUGFyc2luZy4KKy8vCisvLyBSZXF1
aXJlbWVudHMgZm9yIGNhbm9uaWNhbCBDQk9SIGFzIHN1Z2dlc3RlZCBieSBSRkMgNzA0OSBhcmU6
CisvLyAgMSkgQWxsIG1ham9yIGRhdGEgdHlwZXMgZm9yIHRoZSBDQk9SIHZhbHVlcyBtdXN0IGJl
IGFzIHNob3J0IGFzIHBvc3NpYmxlLgorLy8gICAgICAqIFVuc2lnbmVkIGludGVnZXIgYmV0d2Vl
biAwIHRvIDIzIG11c3QgYmUgZXhwcmVzc2VkIGluIHNhbWUgYnl0ZSBhcworLy8gICAgICAgICAg
ICB0aGUgbWFqb3IgdHlwZS4KKy8vICAgICAgKiAyNCB0byAyNTUgbXVzdCBiZSBleHByZXNzZWQg
b25seSB3aXRoIGFuIGFkZGl0aW9uYWwgdWludDhfdC4KKy8vICAgICAgKiAyNTYgdG8gNjU1MzUg
bXVzdCBiZSBleHByZXNzZWQgb25seSB3aXRoIGFuIGFkZGl0aW9uYWwgdWludDE2X3QuCisvLyAg
ICAgICogNjU1MzYgdG8gNDI5NDk2NzI5NSBtdXN0IGJlIGV4cHJlc3NlZCBvbmx5IHdpdGggYW4g
YWRkaXRpb25hbAorLy8gICAgICAgICAgICB1aW50MzJfdC4gKiBUaGUgcnVsZXMgZm9yIGV4cHJl
c3Npb24gb2YgbGVuZ3RoIGluIG1ham9yIHR5cGVzCisvLyAgICAgICAgICAgIDIgdG8gNSBmb2xs
b3cgdGhlIGFib3ZlIHJ1bGUgZm9yIGludGVnZXJzLgorLy8gIDIpIEtleXMgaW4gZXZlcnkgbWFw
IG11c3QgYmUgc29ydGVkIChmaXJzdCBieSBtYWpvciB0eXBlLCB0aGVuIGJ5IGtleQorLy8gICAg
ICAgICBsZW5ndGgsIHRoZW4gYnkgdmFsdWUgaW4gYnl0ZS13aXNlIGxleGljYWwgb3JkZXIpLgor
Ly8gIDMpIEluZGVmaW5pdGUgbGVuZ3RoIGl0ZW1zIG11c3QgYmUgY29udmVydGVkIHRvIGRlZmlu
aXRlIGxlbmd0aCBpdGVtcy4KKy8vICA0KSBBbGwgbWFwcyBtdXN0IG5vdCBoYXZlIGR1cGxpY2F0
ZSBrZXlzLgorLy8KKy8vIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgQ0JPUldyaXRlciBlbmNv
ZGVyIG1lZXRzIGFsbCB0aGUgcmVxdWlyZW1lbnRzIG9mCisvLyBjYW5vbmljYWwgQ0JPUi4KKwor
bmFtZXNwYWNlIGNib3IgeworCitjbGFzcyBXRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9SVCBDQk9S
V3JpdGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQk9SV3JpdGVyKTsKK3B1YmxpYzoK
KyAgICAvLyBEZWZhdWx0IHRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnRseSBsYXJnZSBmb3IgbW9z
dCB1c2UgY2FzZXMuCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRNYXhOZXN0
aW5nRGVwdGggPSAxNjsKKworICAgIH5DQk9SV3JpdGVyKCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBDQk9SIGJ5dGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHxub2RlfCwgdW5sZXNzIGl0cyBu
ZXN0aW5nCisgICAgLy8gZGVwdGggaXMgZ3JlYXRlciB0aGFuIHxtYXhfbmVzdGluZ19kZXB0aHws
IGluIHdoaWNoIGNhc2UgYW4gZW1wdHkgb3B0aW9uYWwKKyAgICAvLyB2YWx1ZSBpcyByZXR1cm5l
ZC4gVGhlIG5lc3RpbmcgZGVwdGggb2YgfG5vZGV8IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBv
ZgorICAgIC8vIGFycmF5cy9tYXBzIHRoYXQgaGFzIHRvIGJlIHRyYXZlcnNlZCB0byByZWFjaCB0
aGUgbW9zdCBuZXN0ZWQgQ0JPUlZhbHVlCisgICAgLy8gY29udGFpbmVkIGluIHxub2RlfC4gUHJp
bWl0aXZlIHZhbHVlcyBhbmQgZW1wdHkgY29udGFpbmVycyBoYXZlIG5lc3RpbmcKKyAgICAvLyBk
ZXB0aHMgb2YgMC4KKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IFdy
aXRlKGNvbnN0IENCT1JWYWx1ZSYgbm9kZSwgc2l6ZV90IG1heF9uZXN0aW5nX2xldmVsID0ga0Rl
ZmF1bHRNYXhOZXN0aW5nRGVwdGgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENCT1JXcml0
ZXIoVmVjdG9yPHVpbnQ4X3Q+KiBjYm9yKTsKKworICAgIC8vIENhbGxlZCByZWN1cnNpdmVseSB0
byBidWlsZCB0aGUgQ0JPUiBieXRlc3RyaW5nLiBXaGVuIGNvbXBsZXRlZCwKKyAgICAvLyB8ZW5j
b2RlZF9jYm9yX3wgd2lsbCBjb250YWluIHRoZSBDQk9SLgorICAgIGJvb2wgRW5jb2RlQ0JPUihj
b25zdCBDQk9SVmFsdWUmIG5vZGUsIGludCBtYXhfbmVzdGluZ19sZXZlbCk7CisKKyAgICAvLyBF
bmNvZGVzIHRoZSB0eXBlIGFuZCBzaXplIG9mIHRoZSBkYXRhIGJlaW5nIGFkZGVkLgorICAgIHZv
aWQgU3RhcnRJdGVtKENCT1JWYWx1ZTo6VHlwZSB0eXBlLCB1aW50NjRfdCBzaXplKTsKKworICAg
IC8vIEVuY29kZXMgdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBkYXRhLgorICAg
IHZvaWQgU2V0QWRkaXRpb25hbEluZm9ybWF0aW9uKHVpbnQ4X3QgYWRkaXRpb25hbF9pbmZvcm1h
dGlvbik7CisKKyAgICAvLyBFbmNvZGVzIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUuIFRoaXMg
aXMgdXNlZCB0byBib3RoIHdyaXRlCisgICAgLy8gdW5zaWduZWQgaW50ZWdlcnMgYW5kIHRvIGVu
Y29kZSB0aGUgbGVuZ3RocyBvZiBvdGhlciBtYWpvciB0eXBlcy4KKyAgICB2b2lkIFNldFVpbnQo
dWludDY0X3QgdmFsdWUpOworCisgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVk
IHRvIHN0b3JlIHRoZSB1bnNpZ25lZCBpbnRlZ2VyLgorICAgIHNpemVfdCBHZXROdW1VaW50Qnl0
ZXModWludDY0X3QgdmFsdWUpOworCisgICAgLy8gSG9sZHMgdGhlIGVuY29kZWQgQ0JPUiBkYXRh
LgorICAgIFZlY3Rvcjx1aW50OF90PiogZW5jb2RlZF9jYm9yXzsKK307CisKK30gLy8gbmFtZXNw
YWNlIGNib3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZmM5YWNjY2IzY2U2NTVkNDFmNWE3MmI2ZWJkNTdj
YjM5NmVhNTNhZC4uZGFhYTVlOTgwZTk1NWNhYmQ2OTYzNmQ2ODM5OWQyZmZlYjMxYmE3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTI0NSw2ICsyNDUsOSBAQCBNb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFw
ZXJOb2RlLmNwcAogTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAogCiBN
b2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCitNb2R1bGVzL3dlYmF1dGhu
L3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9yZWFkZXIuY3BwCitNb2R1bGVzL3dlYmF1dGhuL3RoaXJk
X3BhcnR5L2Nib3IvY2Jvcl92YWx1ZXMuY3BwCitNb2R1bGVzL3dlYmF1dGhuL3RoaXJkX3BhcnR5
L2Nib3IvY2Jvcl93cml0ZXIuY3BwCiAKIE1vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuY3BwCiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGUxNDg5ZWFiMmIxNGMzZjJjNjZkMDJhOWFlZGNlY2YzNWRlMmNlYzUuLjdlNWRiZjA5
MTI2MzM4ZGI0MmZhNjIyOWNhOTllOGQ4YWU3M2JlMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NDEsNiArMTY0MSwxMCBA
QAogCQk1NzIxQTk4NzFFQ0U1M0IxMDA4MTI5NUEgLyogQ3J5cHRvRGlnZXN0QWxnb3JpdGhtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzIxQTk4NjFF
Q0U1M0IxMDA4MTI5NUEgLyogQ3J5cHRvRGlnZXN0QWxnb3JpdGhtLmggKi87IH07CiAJCTU3MjFB
OThCMUVDRTU3MDQwMDgxMjk1QSAvKiBDcnlwdG9BbGdvcml0aG1Sc2FQc3NQYXJhbXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MjFBOTg4MUVDRTU3
MDQwMDgxMjk1QSAvKiBDcnlwdG9BbGdvcml0aG1Sc2FQc3NQYXJhbXMuaCAqLzsgfTsKIAkJNTcy
QTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkg
LyogU2ltdWxhdGVkQ2xpY2suaCAqLzsgfTsKKwkJNTczMDNCQjkyMDA2QzZFRTAwMzU1OTY1IC8q
IGNib3JfdmFsdWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzMwM0JCNDIwMDZDNkVEMDAzNTU5NjUgLyogY2Jvcl92YWx1ZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NzMwM0JCQTIwMDZDNkVF
MDAzNTU5NjUgLyogY2Jvcl93cml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU3MzAzQkI1MjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yX3dyaXRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3MzAz
QkJCMjAwNkM2RUUwMDM1NTk2NSAvKiBjYm9yX2JpbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTczMDNCQjYyMDA2QzZFRDAwMzU1OTY1IC8qIGNi
b3JfYmluYXJ5LmggKi87IH07CisJCTU3MzAzQkMxMjAwNkUwMEMwMDM1NTk2NSAvKiBjYm9yX3Jl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcz
MDNCQkYyMDA2RTAwQzAwMzU1OTY1IC8qIGNib3JfcmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTczNDg5MzkxREFDNkI2RTAwREMwNjY3
IC8qIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzQ4OTM4MURBQzZCNkQwMERDMDY2NyAvKiBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzLmggKi87IH07CiAJCTU3MzlFMTJGMURBQzdGNzgwMEUxNDM4MyAv
KiBKU0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzlFMTJFMURBQzdGNzgwMEUxNDM4MyAvKiBKU0NyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJNTc1MEE5NzUxRTY4RDAwMDAwNzA1QzRB
IC8qIENyeXB0b0tleUVDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzUwQTk3MzFFNjhEMDAwMDA3MDVDNEEgLyogQ3J5cHRvS2V5RUMuaCAqLzsgfTsK
QEAgLTgxNjgsNiArODE3MiwxMyBAQAogCQk1NzIxQTk4QTFFQ0U1NzA0MDA4MTI5NUEgLyogUnNh
UHNzUGFyYW1zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBSc2FQc3NQYXJhbXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVs
YXRlZENsaWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXVs
YXRlZENsaWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTczMDNCQjQyMDA2
QzZFRDAwMzU1OTY1IC8qIGNib3JfdmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGNib3JfdmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAz
QkI1MjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yX3dyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBjYm9yX3dyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1NzMwM0JCNjIwMDZDNkVEMDAzNTU5NjUgLyogY2Jvcl9iaW5hcnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gY2Jvcl9iaW5hcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTczMDNCQjcyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3JfdmFsdWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGNib3JfdmFsdWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTczMDNCQjgyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3Jf
d3JpdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGNib3Jfd3Jp
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTczMDNCQkUyMDA2RTAwNDAw
MzU1OTY1IC8qIGNib3JfcmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IGNib3JfcmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTcz
MDNCQkYyMDA2RTAwQzAwMzU1OTY1IC8qIGNib3JfcmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGNib3JfcmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU3MzQ4OTM4MURBQzZCNkQwMERDMDY2NyAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTczOUUxMkUxREFDN0Y3ODAw
RTE0MzgzIC8qIEpTQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTczOUUxMzAxREFDN0ZEMTAwRTE0MzgzIC8qIEpTQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTgwNTYsNiArMTgwNjcsMjggQEAKIAkJCXBhdGggPSAidW5pZmllZC1zb3Vy
Y2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTU3MzAzQkIyMjAwNkM2
RUQwMDM1NTk2NSAvKiB0aGlyZF9wYXJ0eSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNTczMDNCQjMyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3IgKi8sCisJ
CQkpOworCQkJcGF0aCA9IHRoaXJkX3BhcnR5OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJNTczMDNCQjMyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3IgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTU3MzAzQkI2MjAwNkM2RUQwMDM1NTk2
NSAvKiBjYm9yX2JpbmFyeS5oICovLAorCQkJCTU3MzAzQkJFMjAwNkUwMDQwMDM1NTk2NSAvKiBj
Ym9yX3JlYWRlci5jcHAgKi8sCisJCQkJNTczMDNCQkYyMDA2RTAwQzAwMzU1OTY1IC8qIGNib3Jf
cmVhZGVyLmggKi8sCisJCQkJNTczMDNCQjcyMDA2QzZFRDAwMzU1OTY1IC8qIGNib3JfdmFsdWVz
LmNwcCAqLywKKwkJCQk1NzMwM0JCNDIwMDZDNkVEMDAzNTU5NjUgLyogY2Jvcl92YWx1ZXMuaCAq
LywKKwkJCQk1NzMwM0JCODIwMDZDNkVEMDAzNTU5NjUgLyogY2Jvcl93cml0ZXIuY3BwICovLAor
CQkJCTU3MzAzQkI1MjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yX3dyaXRlci5oICovLAorCQkJKTsK
KwkJCXBhdGggPSBjYm9yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNTdD
N0E2ODgxRTU2OTQ2RDAwQzY3RDcxIC8qIGNyZWRlbnRpYWxtYW5hZ2VtZW50ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE4MDk2LDYgKzE4MTI5LDcgQEAK
IAkJNTdEODQ2MkExRkVBRjU3RjAwQ0EzNjgyIC8qIHdlYmF1dGhuICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzMwM0JCMjIwMDZDNkVEMDAzNTU5NjUg
LyogdGhpcmRfcGFydHkgKi8sCiAJCQkJNTdEODQ2MkMxRkVBRjY4RjAwQ0EzNjgyIC8qIFB1Ymxp
Y0tleUNyZWRlbnRpYWwuY3BwICovLAogCQkJCTU3RDg0NjJCMUZFQUY2OEYwMENBMzY4MiAvKiBQ
dWJsaWNLZXlDcmVkZW50aWFsLmggKi8sCiAJCQkJNTdEODQ2MkQxRkVBRjY4RjAwQ0EzNjgyIC8q
IFB1YmxpY0tleUNyZWRlbnRpYWwuaWRsICovLApAQCAtMjY1MTgsNiArMjY1NTIsMTAgQEAKIAkJ
CQkwN0I3MTE2RDFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDdCNzExNkYxRDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZpY2VNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREM3MzQxNTE5Nzc4OTZEMDA0NkJGQzUgLyogQ0FSaW5n
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzMwM0JCQjIwMDZDNkVFMDAzNTU5NjUgLyog
Y2Jvcl9iaW5hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3MzAzQkMxMjAwNkUwMEMwMDM1NTk2
NSAvKiBjYm9yX3JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTczMDNCQjkyMDA2QzZFRTAw
MzU1OTY1IC8qIGNib3JfdmFsdWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzMwM0JCQTIwMDZD
NkVFMDAzNTU5NjUgLyogY2Jvcl93cml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNjlF
MDk5REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
RjRCNzE2MUUwMEI3RTUwMEUyMzVBMiAvKiBDRE0uaCBpbiBIZWFkZXJzICovLAogCQkJCUNEOTRB
NURFMUY3MkY1N0IwMEY1MjVDNSAvKiBDRE1DbGllbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJhZTVkYTVmNWUy
NDc4MmVlYmU5NGQ4OGVjZWQxYmZiNTA1ZjViOTguLjZlNTg2NjYzNGNhZTgyYTUzMjllMDNhZjM3
YThkNDA4MDAyMzM5M2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxOC0wMS0xMCAgSmlld2VuIFRhbiAgPGppZXdl
bl90YW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJBdXRoTl0gSW1wb3J0IGEgQ0JPUiBjb2Rl
ciBmcm9tIENocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODE1MjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MDU1NzI5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBpbXBvcnRzIGFsbCB1bml0IHRlc3RzIGludG8gb3VyIEFQSSB0ZXN0cyB0byBlbnN1cmUgYWxs
CisgICAgICAgIHdvcmthcm91bmRzIGFuZCBtb2RpZmljYXRpb24gYWdhaW5zdCB0aGUgb3JpZ2lu
YWwgY29kZWJhc2UgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgYW55IG9yaWdpbmFsIGZ1bmN0aW9u
YWxpdGllcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfcmVhZGVyX3VuaXR0ZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvdGhpcmRfcGFydHkvY2Jvci9jYm9yX3ZhbHVlc191bml0dGVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl93cml0ZXJfdW5pdHRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmVxKToKKyAgICAgICAgV29ya2Fyb3Vu
ZHMgYXBwbGllZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE4LTAxLTEw
ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVG9vbHMvZ3RrL2luc3RhbGwtZGVwZW5kZW5jaWVzOiBQYWNrYWdlcyBnZW9jbHVlLCBy
dWJ5LWhpZ2hsaW5lLCB4b3JnLXV0aWxzIGRvIG5vdCBleGlzdCBpbiBBcmNoIExpbnV4CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDI0OTk2YjI3MjgzYmFlNzA1ZjQxZmQ3MzQ4MWNhNjJmYTZm
ZmYzZjUuLjQ1NTE5NTdhZmU2YjhhZjg2YTg1NmUwZmYyYTdkYzA2ZDA5MmMzZjYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yMTgsNiArMjE4LDkgQEAKIAkJNTcxNEVDQkIxQ0E4QkZFNDAw
MDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQTFDQThC
RkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovOyB9
OwogCQk1NzE0RUNCRDFDQThDMjJBMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxV
UkwyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTcxNEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFs
VVJMMi5odG1sICovOyB9OwogCQk1NzFGN0ZEMDFGMjk2MUZCMDA5NDY2NDggLyogSW5kZXhlZERC
U3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MUY3RkNGMUYy
OTYxRTEwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGli
aWxpdHkuc3FsaXRlMy13YWwgKi87IH07CisJCTU3MzAzQkFEMjAwNkM1NjEwMDM1NTk2NSAvKiBj
Ym9yX3dyaXRlcl91bml0dGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzMwM0JBQjIwMDZDNTU0MDAzNTU5NjUgLyogY2Jvcl93cml0ZXJfdW5p
dHRlc3QuY3BwICovOyB9OworCQk1NzMwM0JBRTIwMDZDNTYxMDAzNTU5NjUgLyogY2Jvcl92YWx1
ZXNfdW5pdHRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTczMDNCQUMyMDA2QzU2MDAwMzU1OTY1IC8qIGNib3JfdmFsdWVzX3VuaXR0ZXN0LmNw
cCAqLzsgfTsKKwkJNTczMDNCQzMyMDA3MUUyMzAwMzU1OTY1IC8qIGNib3JfcmVhZGVyX3VuaXR0
ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
MzAzQkMyMjAwNzFFMjIwMDM1NTk2NSAvKiBjYm9yX3JlYWRlcl91bml0dGVzdC5jcHAgKi87IH07
CiAJCTU3NTk5RTIxMUYwNzE5MTkwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVC
YWNrd2FyZENvbXBhdGliaWxpdHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzU5OUUyMDFGMDcxOTE3MDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0
dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5Lm1tICovOyB9OwogCQk1NzU5OUUyNzFGMDcx
QUEwMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmls
aXR5LnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTc1OTlFMjQxRjA3MTkyQzAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRD
bG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzICovOyB9OwogCQk1NzU5OUUyODFGMDcx
QUEwMDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmls
aXR5LnNxbGl0ZTMtc2htIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU3NTk5RTI2MUYwNzE5MkMwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1
cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy1zaG0gKi87IH07CkBAIC0xMzc5
LDYgKzEzODIsOSBAQAogCQk1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1
ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93
bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1NzE0RUNCQzFDQThDMjE4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2lu
YWxVUkwyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RP
cmlnaW5hbFVSTDIuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxRjdGQ0Yx
RjI5NjFFMTAwOTQ2NjQ4IC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0
aWJpbGl0eS5zcWxpdGUzLXdhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dh
cmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTczMDNCQUIyMDA2QzU1NDAwMzU1OTY1IC8qIGNib3Jfd3JpdGVyX3VuaXR0ZXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGNib3Jfd3JpdGVyX3VuaXR0ZXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTczMDNCQUMyMDA2QzU2MDAwMzU1
OTY1IC8qIGNib3JfdmFsdWVzX3VuaXR0ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IGNib3JfdmFsdWVzX3VuaXR0ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTczMDNCQzIyMDA3MUUyMjAwMzU1OTY1IC8qIGNib3JfcmVhZGVyX3VuaXR0
ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGNib3JfcmVhZGVy
X3VuaXR0ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTczNUYwMjUxRjNB
NEVBNjAwMEVFODAxIC8qIFRlc3RXZWJLaXRBUEktaU9TLmVudGl0bGVtZW50cyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QuZW50aXRs
ZW1lbnRzOyBwYXRoID0gIlRlc3RXZWJLaXRBUEktaU9TLmVudGl0bGVtZW50cyI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTk5RTIwMUYwNzE5MTcwMEEzRkI4QyAvKiBJbmRleGVk
REJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2Fy
ZENvbXBhdGliaWxpdHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTk5RTIz
MUYwNzE5MkMwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBh
dGliaWxpdHlXcml0ZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFj
a3dhcmRDb21wYXRpYmlsaXR5V3JpdGUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxOTksNiArMjIwNSw3IEBACiAJCQkJQ0Q4OUQwMzcxQzRFREIxMzAwMDQwQTA0IC8qIGNv
Y29hICovLAogCQkJCUExRUMxMTg1MUY0MjUzRDkwMEQwMTQ2RSAvKiBpb3MgKi8sCiAJCQkJMzE2
MkFFOUExRTZGMkY4RjAwMEU0REJDIC8qIG1hYyAqLywKKwkJCQk1NzMwM0JBOTIwMDZDNEM1MDAz
NTU5NjUgLyogdGhpcmRfcGFydHkgKi8sCiAJCQkJN0E5MDlBNkYxRDg3NzQ3NTAwN0UxMEY4IC8q
IEFmZmluZVRyYW5zZm9ybS5jcHAgKi8sCiAJCQkJNjM1NEY0RDAxRjdDM0FCNTAwRDg5REYzIC8q
IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwICovLAogCQkJCTkzQTcyMEU1MThGMUEwRTgw
MEE4NDhFMSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAqLywKQEAgLTIyNDYsNiArMjI1MywyNCBA
QAogCQkJcGF0aCA9IFdlYkNvcmU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQk1NzMwM0JBOTIwMDZDNEM1MDAzNTU5NjUgLyogdGhpcmRfcGFydHkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTU3MzAzQkFBMjAwNkM1MkMwMDM1NTk2
NSAvKiBjYm9yICovLAorCQkJKTsKKwkJCXBhdGggPSB0aGlyZF9wYXJ0eTsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTU3MzAzQkFBMjAwNkM1MkMwMDM1NTk2NSAvKiBjYm9y
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1NzMwM0JD
MjIwMDcxRTIyMDAzNTU5NjUgLyogY2Jvcl9yZWFkZXJfdW5pdHRlc3QuY3BwICovLAorCQkJCTU3
MzAzQkFDMjAwNkM1NjAwMDM1NTk2NSAvKiBjYm9yX3ZhbHVlc191bml0dGVzdC5jcHAgKi8sCisJ
CQkJNTczMDNCQUIyMDA2QzU1NDAwMzU1OTY1IC8qIGNib3Jfd3JpdGVyX3VuaXR0ZXN0LmNwcCAq
LywKKwkJCSk7CisJCQlwYXRoID0gY2JvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTc1NjA5MTc2MTkyNTlDNTkwMDlFRjA2RSAvKiBpb3MgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMzMzMSw2ICszMzU2LDkgQEAKIAkJCQk3Qzgz
RTA0MTFEMEE2M0YyMDBGRUJDRjMgLyogQ2FuZGlkYXRlVGVzdHMubW0gaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0VFNzFBNDExQUU2MDA0NDdDNEMgLyogQ2FuSGFuZGxlUmVxdWVzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwN0MwNDZDQTFFNDI2MkE4MDA3MjAxRTcgLyogQ0FSaW5nQnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTU3MzAzQkMzMjAwNzFFMjMwMDM1NTk2NSAvKiBjYm9y
X3JlYWRlcl91bml0dGVzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1NzMwM0JBRTIwMDZDNTYx
MDAzNTU5NjUgLyogY2Jvcl92YWx1ZXNfdW5pdHRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTczMDNCQUQyMDA2QzU2MTAwMzU1OTY1IC8qIGNib3Jfd3JpdGVyX3VuaXR0ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDQ0U3RUU2MUE0MTFBRTYwMDQ0N0M0QyAvKiBDbG9zZUZyb21XaXRo
aW5DcmVhdGVQYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUI3MUE0MTFBN0UwMDQ0
N0M0QyAvKiBDbG9zZU5ld1dpbmRvd0luTmF2aWdhdGlvblBvbGljeURlbGVnYXRlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFRTUxQTQxMUFFNjAwNDQ3QzRDIC8qIENsb3NlVGhlblRlcm1p
bmF0ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfcmVhZGVyX3VuaXR0ZXN0LmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS90aGlyZF9wYXJ0eS9jYm9yL2Nib3Jf
cmVhZGVyX3VuaXR0ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2RiOGFlZmIxMTc5ZDZkNGZiNzM1NTFl
N2M2NjMzZDg3OThiNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl9yZWFkZXJfdW5pdHRlc3QuY3BwCkBA
IC0wLDAgKzEsNzY5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisv
LyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL2Nib3JfcmVhZGVy
Lmg+CisKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworLyogTGV2ZXJh
Z2luZyBSRkMgNzA0OSBleGFtcGxlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9jYm9yL3Rlc3Qt
dmVjdG9ycy9ibG9iL21hc3Rlci9hcHBlbmRpeF9hLmpzb24uICovCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK3VzaW5nIG5hbWVzcGFjZSBjYm9yOworCitURVNUKENCT1JSZWFkZXJUZXN0
LCBUZXN0UmVhZFVpbnQpCit7CisgICAgc3RydWN0IFVpbnRUZXN0Q2FzZSB7CisgICAgICAgIGNv
bnN0IGludDY0X3QgdmFsdWU7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBjYm9yX2Rh
dGE7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBVaW50VGVzdENhc2Uga1VpbnRUZXN0Q2Fz
ZXNbXSA9IHsKKyAgICAgICAgeyAwLCB7IDB4MDAgfSB9LAorICAgICAgICB7IDEsIHsgMHgwMSB9
IH0sCisgICAgICAgIHsgMjMsIHsgMHgxNyB9IH0sCisgICAgICAgIHsgMjQsIHsgMHgxOCwgMHgx
OCB9IH0sCisgICAgICAgIHsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCksIHsg
MHgxOCwgMHhmZiB9IH0sCisgICAgICAgIHsgMUxMIDw8IDgsIHsgMHgxOSwgMHgwMSwgMHgwMCB9
IH0sCisgICAgICAgIHsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpLCB7IDB4
MTksIDB4ZmYsIDB4ZmYgfSB9LAorICAgICAgICB7IDFMTCA8PCAxNiwgeyAweDFhLCAweDAwLCAw
eDAxLCAweDAwLCAweDAwIH0gfSwKKyAgICAgICAgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksIHsgMHgxYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9IH0sCisgICAgICAg
IHsgMUxMIDw8IDMyLCB7IDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1heCgpLAorICAgICAgICAgICAgeyAweDFiLCAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZG
LCAweEZGLCAweEZGLCAweEZGIH0gfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBVaW50VGVz
dENhc2UmIHRlc3RfY2FzZSA6IGtVaW50VGVzdENhc2VzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6UmVhZCh0ZXN0X2Nhc2UuY2Jvcl9kYXRh
KTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEFTU0VS
VF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCk7
CisgICAgICAgIEVYUEVDVF9FUShjYm9yLnZhbHVlKCkuR2V0SW50ZWdlcigpLCB0ZXN0X2Nhc2Uu
dmFsdWUpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFVpbnRFbmNvZGVk
V2l0aE5vbk1pbmltdW1CeXRlTGVuZ3RoKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWlu
dDhfdD4gbm9uX21pbmltYWxfdWludF9lbmNvZGluZ3NbXSA9IHsKKyAgICAgICAgLy8gVWludCAy
MyBlbmNvZGVkIHdpdGggMSBieXRlLgorICAgICAgICB7IDB4MTgsIDB4MTcgfSwKKyAgICAgICAg
Ly8gVWludCAyNTUgZW5jb2RlZCB3aXRoIDIgYnl0ZXMuCisgICAgICAgIHsgMHgxOSwgMHgwMCwg
MHhmZiB9LAorICAgICAgICAvLyBVaW50IDY1NTM1IGVuY29kZWQgd2l0aCA0IGJ5dGUuCisgICAg
ICAgIHsgMHgxYSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiB9LAorICAgICAgICAvLyBVaW50IDQy
OTQ5NjcyOTUgZW5jb2RlZCB3aXRoIDggYnl0ZS4KKyAgICAgICAgeyAweDFiLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisKKyAgICAgICAgLy8gV2hl
biBkZWNvZGluZyBieXRlIGhhcyBtb3JlIHRoYW4gb25lIHN5bnRheCBlcnJvciwgdGhlIGZpcnN0
IHN5bnRheAorICAgICAgICAvLyBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgZGVzZXJpYWxpemF0
aW9uIGlzIHJldHVybmVkIGFzIHRoZSBlcnJvciBjb2RlLgorICAgICAgICB7CisgICAgICAgICAg
ICAweGEyLCAvLyBtYXAgd2l0aCBub24tbWluaW1hbGx5IGVuY29kZWQga2V5CisgICAgICAgICAg
ICAweDE3LCAvLyBrZXkgMjQKKyAgICAgICAgICAgIDB4NjEsIDB4NDIsIC8vIHZhbHVlIDoiQiIK
KworICAgICAgICAgICAgMHgxOCwgMHgxNywgLy8ga2V5IDIzIGVuY29kZWQgd2l0aCBleHRyYSBi
eXRlCisgICAgICAgICAgICAweDYxLCAweDQ1IC8vIHZhbHVlICJFIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAweGEyLCAvLyBtYXAgd2l0aCBvdXQgb2Ygb3JkZXIgYW5kIG5v
bi1taW5pbWFsbHkgZW5jb2RlZCBrZXkKKyAgICAgICAgICAgIDB4MTgsIDB4MTcsIC8vIGtleSAy
MyBlbmNvZGVkIHdpdGggZXh0cmEgYnl0ZQorICAgICAgICAgICAgMHg2MSwgMHg0NSwgLy8gdmFs
dWUgIkUiCisgICAgICAgICAgICAweDE3LCAvLyBrZXkgMjMKKyAgICAgICAgICAgIDB4NjEsIDB4
NDIgLy8gdmFsdWUgOiJCIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAweGEy
LCAvLyBtYXAgd2l0aCBkdXBsaWNhdGUgbm9uLW1pbmltYWxseSBlbmNvZGVkIGtleQorICAgICAg
ICAgICAgMHgxOCwgMHgxNywgLy8ga2V5IDIzIGVuY29kZWQgd2l0aCBleHRyYSBieXRlCisgICAg
ICAgICAgICAweDYxLCAweDQ1LCAvLyB2YWx1ZSAiRSIKKyAgICAgICAgICAgIDB4MTgsIDB4MTcs
IC8vIGtleSAyMyBlbmNvZGVkIHdpdGggZXh0cmEgYnl0ZQorICAgICAgICAgICAgMHg2MSwgMHg0
MiAvLyB2YWx1ZSA6IkIiCisgICAgICAgIH0sCisgICAgfTsKKworICAgIENCT1JSZWFkZXI6OkRl
Y29kZXJFcnJvciBlcnJvcl9jb2RlOworICAgIGZvciAoY29uc3QgYXV0byYgbm9uX21pbmltYWxf
dWludCA6IG5vbl9taW5pbWFsX3VpbnRfZW5jb2RpbmdzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6UmVhZChub25fbWluaW1hbF91aW50LCAm
ZXJyb3JfY29kZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6
Ok5PTl9NSU5JTUFMX0NCT1JfRU5DT0RJTkcpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVy
VGVzdCwgVGVzdFJlYWROZWdhdGl2ZUludCkKK3sKKyAgICBzdHJ1Y3QgTmVnYXRpdmVJbnRUZXN0
Q2FzZSB7CisgICAgICAgIGNvbnN0IGludDY0X3QgbmVnYXRpdmVfaW50OworICAgICAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4gY2Jvcl9kYXRhOworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3Qg
TmVnYXRpdmVJbnRUZXN0Q2FzZSBrTmVnYXRpdmVJbnRUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAg
eyAtMUxMLCB7IDB4MjAgfSB9LAorICAgICAgICB7IC0yNExMLCB7IDB4MzcgfSB9LAorICAgICAg
ICB7IC0yNUxMLCB7IDB4MzgsIDB4MTggfSB9LAorICAgICAgICB7IC0yNTZMTCwgeyAweDM4LCAw
eGZmIH0gfSwKKyAgICAgICAgeyAtMTAwMExMLCB7IDB4MzksIDB4MDMsIDB4ZTcgfSB9LAorICAg
ICAgICB7IC0xMDAwMDAwTEwsIHsgMHgzYSwgMHgwMCwgMHgwZiwgMHg0MiwgMHgzZiB9IH0sCisg
ICAgICAgIHsgLTQyOTQ5NjcyOTZMTCwgeyAweDNhLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0g
fSwKKyAgICAgICAgeyBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSwKKyAgICAg
ICAgICAgIHsgMHgzYiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwg
MHhmZiB9IH0KKyAgICB9OworCisgICAgZm9yIChjb25zdCBOZWdhdGl2ZUludFRlc3RDYXNlJiB0
ZXN0X2Nhc2UgOiBrTmVnYXRpdmVJbnRUZXN0Q2FzZXMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25h
bDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpSZWFkKHRlc3RfY2FzZS5jYm9yX2RhdGEp
OworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJU
X1RSVUUoY2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6Ok5FR0FUSVZFKTsK
KyAgICAgICAgRVhQRUNUX0VRKGNib3IudmFsdWUoKS5HZXRJbnRlZ2VyKCksIHRlc3RfY2FzZS5u
ZWdhdGl2ZV9pbnQpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRC
eXRlcykKK3sKKyAgICBzdHJ1Y3QgQnl0ZVRlc3RDYXNlIHsKKyAgICAgICAgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+IHZhbHVlOworICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gY2Jvcl9kYXRh
OworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgQnl0ZVRlc3RDYXNlIGtCeXRlU3RyaW5nVGVz
dENhc2VzW10gPSB7CisgICAgICAgIHt7fSwgezB4NDB9fSwKKyAgICAgICAge3sweDAxLCAweDAy
LCAweDAzLCAweDA0fSwgezB4NDQsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDR9fSwKKyAgICB9Owor
CisgICAgZm9yIChjb25zdCBCeXRlVGVzdENhc2UmIHRlc3RfY2FzZSA6IGtCeXRlU3RyaW5nVGVz
dENhc2VzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJl
YWRlcjo6UmVhZCh0ZXN0X2Nhc2UuY2Jvcl9kYXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jv
ci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkg
PT0gQ0JPUlZhbHVlOjpUeXBlOjpCWVRFX1NUUklORyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNi
b3IudmFsdWUoKS5HZXRCeXRlc3RyaW5nKCkgPT0gdGVzdF9jYXNlLnZhbHVlKTsKKyAgICB9Cit9
CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkU3RyaW5nKQoreworICAgIHN0cnVjdCBT
dHJpbmdUZXN0Q2FzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyB2YWx1ZTsKKyAgICAgICAgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+IGNib3JfZGF0YTsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
IFN0cmluZ1Rlc3RDYXNlIGtTdHJpbmdUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAgeyAiIiwgeyAw
eDYwIH0gfSwKKyAgICAgICAgeyAiYSIsIHsgMHg2MSwgMHg2MSB9IH0sCisgICAgICAgIHsgIklF
VEYiLCB7IDB4NjQsIDB4NDksIDB4NDUsIDB4NTQsIDB4NDYgfSB9LAorICAgICAgICB7ICJcIlxc
IiwgeyAweDYyLCAweDIyLCAweDVjIH0gfSwKKyAgICAgICAgeyBTdHJpbmc6OmZyb21VVEY4KCJc
eGMzXHhiYyIpLCB7IDB4NjIsIDB4YzMsIDB4YmMgfSB9LAorICAgICAgICB7IFN0cmluZzo6ZnJv
bVVURjgoIlx4ZTZceGIwXHhiNCIpLCB7IDB4NjMsIDB4ZTYsIDB4YjAsIDB4YjQgfSB9LAorICAg
ICAgICB7IFN0cmluZzo6ZnJvbVVURjgoIlx4ZjBceDkwXHg4NVx4OTEiKSwgeyAweDY0LCAweGYw
LCAweDkwLCAweDg1LCAweDkxIH0gfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBTdHJpbmdU
ZXN0Q2FzZSYgdGVzdF9jYXNlIDoga1N0cmluZ1Rlc3RDYXNlcykgeworICAgICAgICBzdGQ6Om9w
dGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQodGVzdF9jYXNlLmNib3Jf
ZGF0YSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBB
U1NFUlRfVFJVRShjYm9yLnZhbHVlKCkudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5H
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Jvci52YWx1ZSgpLkdldFN0cmluZygpID09IHRlc3Rf
Y2FzZS52YWx1ZSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZFN0
cmluZ1dpdGhOVUwpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNvbnN0
IFN0cmluZyB2YWx1ZTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGNib3JfZGF0YTsK
KyAgICB9IGtTdHJpbmdUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAgeyBTdHJpbmcoInN0cmluZ193
aXRob3V0X251bCIpLAorICAgICAgICAgICAgeyAweDcyLCAweDczLCAweDc0LCAweDcyLCAweDY5
LCAweDZFLCAweDY3LCAweDVGLCAweDc3LCAweDY5LCAweDc0LCAweDY4LAorICAgICAgICAgICAg
ICAgIDB4NkYsIDB4NzUsIDB4NzQsIDB4NUYsIDB4NkUsIDB4NzUsIDB4NkMgfSB9LAorICAgICAg
ICB7IFN0cmluZygibnVsX3Rlcm1pbmF0ZWRfc3RyaW5nXDAiLCAyMiksCisgICAgICAgICAgICB7
IDB4NzYsIDB4NkUsIDB4NzUsIDB4NkMsIDB4NUYsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NkQsIDB4
NjksIDB4NkUsIDB4NjEsCisgICAgICAgICAgICAgICAgMHg3NCwgMHg2NSwgMHg2NCwgMHg1Riwg
MHg3MywgMHg3NCwgMHg3MiwgMHg2OSwgMHg2RSwgMHg2NywgMHgwMCB9IH0sCisgICAgICAgIHsg
U3RyaW5nKCJlbWJlZGRlZFwwbnVsIiwgMTIpLAorICAgICAgICAgICAgeyAweDZDLCAweDY1LCAw
eDZELCAweDYyLCAweDY1LCAweDY0LCAweDY0LCAweDY1LCAweDY0LCAweDAwLCAweDZFLCAweDc1
LAorICAgICAgICAgICAgICAgIDB4NkMgfSB9LAorICAgICAgICB7IFN0cmluZygidHJhaWxpbmdf
bnVsc1wwXDAiLCAxNSksCisgICAgICAgICAgICB7IDB4NkYsIDB4NzQsIDB4NzIsIDB4NjEsIDB4
NjksIDB4NkMsIDB4NjksIDB4NkUsIDB4NjcsIDB4NUYsIDB4NkUsIDB4NzUsCisgICAgICAgICAg
ICAgICAgMHg2QywgMHg3MywgMHgwMCwgMHgwMCB9IH0sCisgICAgfTsKKworICAgIGZvciAoY29u
c3QgYXV0byYgdGVzdF9jYXNlIDoga1N0cmluZ1Rlc3RDYXNlcykgeworICAgICAgICBzdGQ6Om9w
dGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQodGVzdF9jYXNlLmNib3Jf
ZGF0YSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBB
U1NFUlRfVFJVRShjYm9yLnZhbHVlKCkudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5H
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Jvci52YWx1ZSgpLkdldFN0cmluZygpID09IHRlc3Rf
Y2FzZS52YWx1ZSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZFN0
cmluZ1dpdGhJbnZhbGlkQnl0ZVNlcXVlbmNlQWZ0ZXJOVUwpCit7CisgICAgLy8gVVRGLTggdmFs
aWRhdGlvbiBzaG91bGQgbm90IHN0b3AgYXQgdGhlIGZpcnN0IE5VTCBjaGFyYWN0ZXIgaW4gdGhl
IHN0cmluZy4KKyAgICAvLyBUaGF0IGlzLCBhIHN0cmluZyB3aXRoIGFuIGludmFsaWQgYnl0ZSBz
ZXF1ZW5jZSBzaG91bGQgZmFpbCBVVEYtOAorICAgIC8vIHZhbGlkYXRpb24gZXZlbiBpZiB0aGUg
aW52YWxpZCBjaGFyYWN0ZXIgaXMgbG9jYXRlZCBhZnRlciBvbmUgb3IgbW9yZSBOVUwKKyAgICAv
LyBjaGFyYWN0ZXJzLiBIZXJlLCAweEE2IGlzIGFuIHVuZXhwZWN0ZWQgY29udGludWF0aW9uIGJ5
dGUuCisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzdHJpbmdfd2l0aF9pbnZhbGlk
X2NvbnRpbnVhdGlvbl9ieXRlID0geworICAgICAgICAweDYzLCAweDAwLCAweDAwLCAweEE2Cisg
ICAgfTsKKyAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JfY29kZTsKKyAgICBzdGQ6
Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoc3RyaW5nX3dpdGhf
aW52YWxpZF9jb250aW51YXRpb25fYnl0ZSwgJmVycm9yX2NvZGUpOworICAgIEVYUEVDVF9GQUxT
RShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JS
ZWFkZXI6OkRlY29kZXJFcnJvcjo6SU5WQUxJRF9VVEY4KTsKK30KKworVEVTVChDQk9SUmVhZGVy
VGVzdCwgVGVzdFJlYWRBcnJheSkKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
IGtBcnJheVRlc3RDYXNlQ2JvciA9IHsKKyAgICAgICAgMHg5OCwgMHgxOSwgIC8vIGFycmF5IG9m
IDI1IGVsZW1lbnRzCisgICAgICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYs
IDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCisgICAgICAgIDB4MGQsIDB4MGUs
IDB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4
MTgsCisgICAgICAgIDB4MTgsIDB4MTgsIDB4MTksCisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6UmVhZChrQXJyYXlUZXN0Q2FzZUNib3Ip
OworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgIGNvbnN0IENCT1JWYWx1
ZSBjYm9yX2FycmF5ID0gV1RGTW92ZShjYm9yLnZhbHVlKCkpOworICAgIEFTU0VSVF9UUlVFKGNi
b3JfYXJyYXkudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6QVJSQVkpOworICAgIEFTU0VSVF9F
UShjYm9yX2FycmF5LkdldEFycmF5KCkuc2l6ZSgpLCAyNSk7CisKKyAgICBWZWN0b3I8Q0JPUlZh
bHVlPiBhcnJheTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1OyBpKyspIHsKKyAgICAgICAg
QVNTRVJUX1RSVUUoY2Jvcl9hcnJheS5HZXRBcnJheSgpW2ldLnR5cGUoKSA9PSBDQk9SVmFsdWU6
OlR5cGU6OlVOU0lHTkVEKTsKKyAgICAgICAgRVhQRUNUX0VRKGNib3JfYXJyYXkuR2V0QXJyYXko
KVtpXS5HZXRJbnRlZ2VyKCksCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90
PihpICsgMSkpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRNYXBX
aXRoTWFwVmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTWFwVGVz
dENhc2VDYm9yID0geworICAgICAgICAweGE0LCAgLy8gbWFwIHdpdGggNCBrZXkgdmFsdWUgcGFp
cnM6CisgICAgICAgIDB4MTgsIDB4MTgsICAvLyAyNAorICAgICAgICAweDYzLCAweDYxLCAweDYy
LCAweDYzLCAgLy8gImFiYyIKKworICAgICAgICAweDYwLCAgLy8gIiIKKyAgICAgICAgMHg2MSwg
MHgyZSwgIC8vICIuIgorCisgICAgICAgIDB4NjEsIDB4NjIsICAvLyAiYiIKKyAgICAgICAgMHg2
MSwgMHg0MiwgIC8vICJCIgorCisgICAgICAgIDB4NjIsIDB4NjEsIDB4NjEsICAvLyAiYWEiCisg
ICAgICAgIDB4NjIsIDB4NDEsIDB4NDEsICAvLyAiQUEiCisgICAgfTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6UmVhZChrTWFwVGVzdENhc2VDYm9y
KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICBjb25zdCBDQk9SVmFs
dWUgY2Jvcl92YWwgPSBXVEZNb3ZlKGNib3IudmFsdWUoKSk7CisgICAgQVNTRVJUX1RSVUUoY2Jv
cl92YWwudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6TUFQKTsKKyAgICBBU1NFUlRfRVEoY2Jv
cl92YWwuR2V0TWFwKCkuc2l6ZSgpLCA0dSk7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5X3Vp
bnQoMjQpOworICAgIEFTU0VSVF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5jb3VudChrZXlfdWludCks
IDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV91aW50KS0+
c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlNUUklORyk7CisgICAgRVhQRUNUX1RS
VUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfdWludCktPnNlY29uZC5HZXRTdHJpbmcoKSA9
PSAiYWJjIik7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5X2VtcHR5X3N0cmluZygiIik7Cisg
ICAgQVNTRVJUX0VRKGNib3JfdmFsLkdldE1hcCgpLmNvdW50KGtleV9lbXB0eV9zdHJpbmcpLCAx
dSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfZW1wdHlfc3Ry
aW5nKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlNUUklORyk7CisgICAgRVhQ
RUNUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfZW1wdHlfc3RyaW5nKS0+c2Vjb25k
LkdldFN0cmluZygpID09ICIuIik7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5X2IoImIiKTsK
KyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQoa2V5X2IpLCAxdSk7CisgICAg
QVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfYiktPnNlY29uZC50eXBlKCkg
PT0gQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcpOworICAgIEVYUEVDVF9UUlVFKGNib3JfdmFsLkdl
dE1hcCgpLmZpbmQoa2V5X2IpLT5zZWNvbmQuR2V0U3RyaW5nKCkgPT0gIkIiKTsKKworICAgIGNv
bnN0IENCT1JWYWx1ZSBrZXlfYWEoImFhIik7CisgICAgQVNTRVJUX0VRKGNib3JfdmFsLkdldE1h
cCgpLmNvdW50KGtleV9hYSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAo
KS5maW5kKGtleV9hYSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcp
OworICAgIEVYUEVDVF9UUlVFKGNib3JfdmFsLkdldE1hcCgpLmZpbmQoa2V5X2FhKS0+c2Vjb25k
LkdldFN0cmluZygpID09ICJBQSIpOworfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVh
ZE1hcFdpdGhJbnRlZ2VyS2V5cykKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
IGtNYXBXaXRoSW50ZWdlcktleUNib3IgPSB7CisgICAgICAgIDB4QTQsICAgICAgICAgICAgICAg
ICAvLyBtYXAgd2l0aCA0IGtleSB2YWx1ZSBwYWlycworICAgICAgICAweDAxLCAgICAgICAgICAg
ICAgLy8ga2V5IDogMQorICAgICAgICAweDYxLCAweDYxLCAgICAgICAgLy8gdmFsdWUgOiAiYSIK
KworICAgICAgICAweDA5LCAgICAgICAgICAgICAgLy8ga2V5IDogOQorICAgICAgICAweDYxLCAw
eDYyLCAgICAgICAgLy8gdmFsdWUgOiAiYiIKKworICAgICAgICAweDE5LCAweDAzLCAweEU3LCAg
Ly8ga2V5IDogOTk5CisgICAgICAgIDB4NjEsIDB4NjMsICAgICAgICAvLyB2YWx1ZSAiYyIKKwor
ICAgICAgICAweDE5LCAweDA0LCAweDU3LCAgLy8ga2V5IDogMTExMQorICAgICAgICAweDYxLCAw
eDY0LCAgICAgICAgLy8gdmFsdWUgOiAiZCIKKyAgICB9OworCisgICAgc3RkOjpvcHRpb25hbDxD
Qk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpSZWFkKGtNYXBXaXRoSW50ZWdlcktleUNib3Ip
OworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgIGNvbnN0IENCT1JWYWx1
ZSBjYm9yX3ZhbCA9IFdURk1vdmUoY2Jvci52YWx1ZSgpKTsKKyAgICBBU1NFUlRfVFJVRShjYm9y
X3ZhbC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNQVApOworICAgIEFTU0VSVF9FUShjYm9y
X3ZhbC5HZXRNYXAoKS5zaXplKCksIDR1KTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlfMSgx
KTsKKyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQoa2V5XzEpLCAxdSk7Cisg
ICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfMSktPnNlY29uZC50eXBl
KCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcpOworICAgIEFTU0VSVF9UUlVFKGNib3JfdmFs
LkdldE1hcCgpLmZpbmQoa2V5XzEpLT5zZWNvbmQuR2V0U3RyaW5nKCkgPT0gImEiKTsKKworICAg
IGNvbnN0IENCT1JWYWx1ZSBrZXlfOSg5KTsKKyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFw
KCkuY291bnQoa2V5XzkpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCku
ZmluZChrZXlfOSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcpOwor
ICAgIEFTU0VSVF9UUlVFKGNib3JfdmFsLkdldE1hcCgpLmZpbmQoa2V5XzkpLT5zZWNvbmQuR2V0
U3RyaW5nKCkgPT0gImIiKTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlfOTk5KDk5OSk7Cisg
ICAgQVNTRVJUX0VRKGNib3JfdmFsLkdldE1hcCgpLmNvdW50KGtleV85OTkpLCAxdSk7CisgICAg
QVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfOTk5KS0+c2Vjb25kLnR5cGUo
KSA9PSBDQk9SVmFsdWU6OlR5cGU6OlNUUklORyk7CisgICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwu
R2V0TWFwKCkuZmluZChrZXlfOTk5KS0+c2Vjb25kLkdldFN0cmluZygpID09ICJjIik7CisKKyAg
ICBjb25zdCBDQk9SVmFsdWUga2V5XzExMTEoMTExMSk7CisgICAgQVNTRVJUX0VRKGNib3JfdmFs
LkdldE1hcCgpLmNvdW50KGtleV8xMTExKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JfdmFs
LkdldE1hcCgpLmZpbmQoa2V5XzExMTEpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlw
ZTo6U1RSSU5HKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV8x
MTExKS0+c2Vjb25kLkdldFN0cmluZygpID09ICJkIik7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRl
c3QsIFRlc3RSZWFkTWFwV2l0aEFycmF5KQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWlu
dDhfdD4ga01hcEFycmF5VGVzdENhc2VDYm9yID0geworICAgICAgICAweGEyLCAgLy8gbWFwIG9m
IDIgcGFpcnMKKyAgICAgICAgMHg2MSwgMHg2MSwgIC8vICJhIgorICAgICAgICAweDAxLAorCisg
ICAgICAgIDB4NjEsIDB4NjIsICAvLyAiYiIKKyAgICAgICAgMHg4MiwgICAgICAgIC8vIGFycmF5
IHdpdGggMiBlbGVtZW50cworICAgICAgICAweDAyLAorICAgICAgICAweDAzLAorICAgIH07CisK
KyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoa01h
cEFycmF5VGVzdENhc2VDYm9yKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsK
KyAgICBjb25zdCBDQk9SVmFsdWUgY2Jvcl92YWwgPSBXVEZNb3ZlKGNib3IudmFsdWUoKSk7Cisg
ICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6TUFQKTsK
KyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuc2l6ZSgpLCAydSk7CisKKyAgICBjb25z
dCBDQk9SVmFsdWUga2V5X2EoImEiKTsKKyAgICBBU1NFUlRfRVEoY2Jvcl92YWwuR2V0TWFwKCku
Y291bnQoa2V5X2EpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvcl92YWwuR2V0TWFwKCkuZmlu
ZChrZXlfYSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCk7Cisg
ICAgRVhQRUNUX0VRKGNib3JfdmFsLkdldE1hcCgpLmZpbmQoa2V5X2EpLT5zZWNvbmQuR2V0SW50
ZWdlcigpLCAxdSk7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5X2IoImIiKTsKKyAgICBBU1NF
UlRfRVEoY2Jvcl92YWwuR2V0TWFwKCkuY291bnQoa2V5X2IpLCAxdSk7CisgICAgQVNTRVJUX1RS
VUUoY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfYiktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZh
bHVlOjpUeXBlOjpBUlJBWSk7CisKKyAgICBjb25zdCBDQk9SVmFsdWUgbmVzdGVkX2FycmF5ID0g
Y2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfYiktPnNlY29uZC5DbG9uZSgpOworICAgIEFTU0VS
VF9FUShuZXN0ZWRfYXJyYXkuR2V0QXJyYXkoKS5zaXplKCksIDJ1KTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBBU1NFUlRfVFJVRShuZXN0ZWRfYXJyYXkuR2V0
QXJyYXkoKVtpXS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCk7CisgICAgICAg
IEVYUEVDVF9FUShuZXN0ZWRfYXJyYXkuR2V0QXJyYXkoKVtpXS5HZXRJbnRlZ2VyKCksCisgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihpICsgMikpOworICAgIH0KK30KKwor
VEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWROZXN0ZWRNYXApCit7CisgICAgc3RhdGljIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiBrTmVzdGVkTWFwVGVzdENhc2UgPSB7CisgICAgICAgIDB4YTIs
ICAvLyBtYXAgb2YgMiBwYWlycworICAgICAgICAweDYxLCAweDYxLCAgLy8gImEiCisgICAgICAg
IDB4MDEsCisKKyAgICAgICAgMHg2MSwgMHg2MiwgIC8vICJiIgorICAgICAgICAweGEyLCAgICAg
ICAgLy8gbWFwIG9mIDIgcGFpcnMKKyAgICAgICAgMHg2MSwgMHg2MywgIC8vICJjIgorICAgICAg
ICAweDAyLAorCisgICAgICAgIDB4NjEsIDB4NjQsICAvLyAiZCIKKyAgICAgICAgMHgwMywKKyAg
ICB9OworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpS
ZWFkKGtOZXN0ZWRNYXBUZXN0Q2FzZSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUo
KSk7CisgICAgY29uc3QgQ0JPUlZhbHVlIGNib3JfdmFsID0gV1RGTW92ZShjYm9yLnZhbHVlKCkp
OworICAgIEFTU0VSVF9UUlVFKGNib3JfdmFsLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6Ok1B
UCk7CisgICAgQVNTRVJUX0VRKGNib3JfdmFsLkdldE1hcCgpLnNpemUoKSwgMnUpOworCisgICAg
Y29uc3QgQ0JPUlZhbHVlIGtleV9hKCJhIik7CisgICAgQVNTRVJUX0VRKGNib3JfdmFsLkdldE1h
cCgpLmNvdW50KGtleV9hKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JfdmFsLkdldE1hcCgp
LmZpbmQoa2V5X2EpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6VU5TSUdORUQp
OworICAgIEVYUEVDVF9FUShjYm9yX3ZhbC5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLkdl
dEludGVnZXIoKSwgMXUpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleV9iKCJiIik7CisgICAg
QVNTRVJUX0VRKGNib3JfdmFsLkdldE1hcCgpLmNvdW50KGtleV9iKSwgMXUpOworICAgIGNvbnN0
IENCT1JWYWx1ZSBuZXN0ZWRfbWFwID0gY2Jvcl92YWwuR2V0TWFwKCkuZmluZChrZXlfYiktPnNl
Y29uZC5DbG9uZSgpOworICAgIEFTU0VSVF9UUlVFKG5lc3RlZF9tYXAudHlwZSgpID09IENCT1JW
YWx1ZTo6VHlwZTo6TUFQKTsKKyAgICBBU1NFUlRfRVEobmVzdGVkX21hcC5HZXRNYXAoKS5zaXpl
KCksIDJ1KTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlfYygiYyIpOworICAgIEFTU0VSVF9F
UShuZXN0ZWRfbWFwLkdldE1hcCgpLmNvdW50KGtleV9jKSwgMXUpOworICAgIEFTU0VSVF9UUlVF
KG5lc3RlZF9tYXAuR2V0TWFwKCkuZmluZChrZXlfYyktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZh
bHVlOjpUeXBlOjpVTlNJR05FRCk7CisgICAgRVhQRUNUX0VRKG5lc3RlZF9tYXAuR2V0TWFwKCku
ZmluZChrZXlfYyktPnNlY29uZC5HZXRJbnRlZ2VyKCksIDJ1KTsKKworICAgIGNvbnN0IENCT1JW
YWx1ZSBrZXlfZCgiZCIpOworICAgIEFTU0VSVF9FUShuZXN0ZWRfbWFwLkdldE1hcCgpLmNvdW50
KGtleV9kKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKG5lc3RlZF9tYXAuR2V0TWFwKCkuZmluZChr
ZXlfZCktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCk7CisgICAg
RVhQRUNUX0VRKG5lc3RlZF9tYXAuR2V0TWFwKCkuZmluZChrZXlfZCktPnNlY29uZC5HZXRJbnRl
Z2VyKCksIDN1KTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdEludGVnZXJSYW5nZSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtNYXhQb3NpdGl2ZUludCA9IHsK
KyAgICAgICAgMHgxYiwgMHg3RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwg
MHhGRgorICAgIH07CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTWluTmVnYXRp
dmVJbnQgPSB7CisgICAgICAgIDB4M2IsIDB4N0YsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4
RkYsIDB4RkYsIDB4RkYKKyAgICB9OworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IG1h
eF9wb3NpdGl2ZV9pbnQgPSBDQk9SUmVhZGVyOjpSZWFkKGtNYXhQb3NpdGl2ZUludCk7CisgICAg
QVNTRVJUX1RSVUUobWF4X3Bvc2l0aXZlX2ludC5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX0VR
KG1heF9wb3NpdGl2ZV9pbnQudmFsdWUoKS5HZXRJbnRlZ2VyKCksIElOVDY0X01BWCk7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gbWluX25lZ2F0aXZlX2ludCA9IENCT1JSZWFkZXI6
OlJlYWQoa01pbk5lZ2F0aXZlSW50KTsKKyAgICBBU1NFUlRfVFJVRShtaW5fbmVnYXRpdmVfaW50
Lmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfRVEobWluX25lZ2F0aXZlX2ludC52YWx1ZSgpLkdl
dEludGVnZXIoKSwgSU5UNjRfTUlOKTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdElu
dGVnZXJPdXRPZlJhbmdlRXJyb3IpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiBrT3V0T2ZSYW5nZVBvc2l0aXZlSW50ID0geworICAgICAgICAweDFiLCAweDgwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisgICAgfTsKKworICAgIHN0YXRpYyBj
b25zdCBWZWN0b3I8dWludDhfdD4ga091dE9mUmFuZ2VOZWdhdGl2ZUludCA9IHsKKyAgICAgICAg
MHgzYiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorICAg
IH07CisKKyAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JfY29kZTsKKyAgICBzdGQ6
Om9wdGlvbmFsPENCT1JWYWx1ZT4gcG9zaXRpdmVfaW50X291dF9vZl9yYW5nZV9jYm9yID0gQ0JP
UlJlYWRlcjo6UmVhZChrT3V0T2ZSYW5nZVBvc2l0aXZlSW50LCAmZXJyb3JfY29kZSk7CisgICAg
RVhQRUNUX0ZBTFNFKHBvc2l0aXZlX2ludF9vdXRfb2ZfcmFuZ2VfY2Jvci5oYXNfdmFsdWUoKSk7
CisgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6
Ok9VVF9PRl9SQU5HRV9JTlRFR0VSX1ZBTFVFKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZh
bHVlPiBuZWdhdGl2ZV9pbnRfb3V0X29mX3JhbmdlX2Nib3IgPSBDQk9SUmVhZGVyOjpSZWFkKGtP
dXRPZlJhbmdlTmVnYXRpdmVJbnQsICZlcnJvcl9jb2RlKTsKKyAgICBFWFBFQ1RfRkFMU0UobmVn
YXRpdmVfaW50X291dF9vZl9yYW5nZV9jYm9yLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6T1VUX09GX1JBTkdFX0lO
VEVHRVJfVkFMVUUpOworfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZFNpbXBsZVZh
bHVlKQoreworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICBjb25zdCBDQk9SVmFs
dWU6OlNpbXBsZVZhbHVlIHZhbHVlOworICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gY2Jv
cl9kYXRhOworICAgIH0ga1NpbXBsZVZhbHVlVGVzdENhc2VzW10gPSB7CisgICAgICAgIHsgQ0JP
UlZhbHVlOjpTaW1wbGVWYWx1ZTo6RkFMU0VfVkFMVUUsIHsgMHhmNCB9IH0sCisgICAgICAgIHsg
Q0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VFJVRV9WQUxVRSwgeyAweGY1IH0gfSwKKyAgICAgICAg
eyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpOVUxMX1ZBTFVFLCB7IDB4ZjYgfSB9LAorICAgICAg
ICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlVOREVGSU5FRCwgeyAweGY3IH0gfSwKKyAgICB9
OworCisgICAgZm9yIChjb25zdCBhdXRvJiB0ZXN0X2Nhc2UgOiBrU2ltcGxlVmFsdWVUZXN0Q2Fz
ZXMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVy
OjpSZWFkKHRlc3RfY2FzZS5jYm9yX2RhdGEpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhh
c192YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBD
Qk9SVmFsdWU6OlR5cGU6OlNJTVBMRV9WQUxVRSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3Iu
dmFsdWUoKS5HZXRTaW1wbGVWYWx1ZSgpID09IHRlc3RfY2FzZS52YWx1ZSk7CisgICAgfQorfQor
CitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZFVuc3VwcG9ydGVkRmxvYXRpbmdQb2ludE51
bWJlcnMpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBmbG9hdGluZ19wb2lu
dF9jYm9yc1tdID0geworICAgICAgICAvLyAxNiBiaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUuCisg
ICAgICAgIHsgMHhmOSwgMHgxMCwgMHgwMCB9LAorICAgICAgICAvLyAzMiBiaXQgZmxvYXRpbmcg
cG9pbnQgdmFsdWUuCisgICAgICAgIHsgMHhmYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAor
ICAgICAgICAvLyA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUuCisgICAgICAgIHsgMHhmYiwg
MHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9CisgICAgfTsK
KworICAgIGZvciAoY29uc3QgYXV0byYgdW5zdXBwb3J0ZWRfZmxvYXRpbmdfcG9pbnQgOiBmbG9h
dGluZ19wb2ludF9jYm9ycykgeworICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJy
b3JfY29kZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVh
ZGVyOjpSZWFkKHVuc3VwcG9ydGVkX2Zsb2F0aW5nX3BvaW50LCAmZXJyb3JfY29kZSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
ZXJyb3JfY29kZSA9PQorICAgICAgICAgICAgICAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9y
OjpVTlNVUFBPUlRFRF9GTE9BVElOR19QT0lOVF9WQUxVRSk7CisgICAgfQorfQorCitURVNUKENC
T1JSZWFkZXJUZXN0LCBUZXN0SW5jb21wbGV0ZUNCT1JEYXRhRXJyb3IpCit7CisgICAgc3RhdGlj
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiBpbmNvbXBsZXRlX2Nib3JfbGlzdFtdID0geworICAgICAg
ICAvLyBBZGRpdGlvbmFsIGluZm8gYnl0ZSBjb3JyZXNwb25kcyB0byB1bnNpZ25lZCBpbnQgdGhh
dCBjb3JyZXNwb25kcworICAgICAgICAvLyB0byAyIGFkZGl0aW9uYWwgYnl0ZXMuIEJ1dCBhY3R1
YWwgZGF0YSBlbmNvZGVkICBpbiBvbmUgYnl0ZS4KKyAgICAgICAgeyAweDE5LCAweDAzIH0sCisg
ICAgICAgIC8vIENCT1IgYnl0ZXN0cmluZyBvZiBsZW5ndGggMyBlbmNvZGVkIHdpdGggYWRkaXRp
b25hbCBpbmZvIG9mIGxlbmd0aCA0LgorICAgICAgICB7IDB4NDQsIDB4MDEsIDB4MDIsIDB4MDMg
fSwKKyAgICAgICAgLy8gQ0JPUiBzdHJpbmcgZGF0YSAiSUVURiIgb2YgbGVuZ3RoIDQgZW5jb2Rl
ZCB3aXRoIGFkZGl0aW9uYWwgaW5mbyBvZgorICAgICAgICAvLyBsZW5ndGggNS4KKyAgICAgICAg
eyAweDY1LCAweDQ5LCAweDQ1LCAweDU0LCAweDQ2IH0sCisgICAgICAgIC8vIENCT1IgYXJyYXkg
b2YgbGVuZ3RoIDEgZW5jb2RlZCB3aXRoIGFkZGl0aW9uYWwgaW5mbyBvZiBsZW5ndGggMi4KKyAg
ICAgICAgeyAweDgyLCAweDAyIH0sCisgICAgICAgIC8vIENCT1IgbWFwIHdpdGggc2luZ2xlIGtl
eSB2YWx1ZSBwYWlyIGVuY29kZWQgd2l0aCBhZGRpdGlvbmFsIGluZm8gb2YKKyAgICAgICAgLy8g
bGVuZ3RoIDIuCisgICAgICAgIHsgMHhhMiwgMHg2MSwgMHg2MSwgMHgwMSB9LAorICAgIH07CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGluY29tcGxldGVfZGF0YSA6IGluY29tcGxldGVfY2Jvcl9s
aXN0KSB7CisgICAgICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvcl9jb2RlOworICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQoaW5j
b21wbGV0ZV9kYXRhLCAmZXJyb3JfY29kZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhh
c192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29kZSA9PSBDQk9SUmVhZGVy
OjpEZWNvZGVyRXJyb3I6OklOQ09NUExFVEVfQ0JPUl9EQVRBKTsKKyAgICB9Cit9CisKKy8vIFdo
aWxlIFJGQyA3MDQ5IGFsbG93cyBDQk9SIG1hcCBrZXlzIHdpdGggYWxsIHR5cGVzLCBjdXJyZW50
IGRlY29kZXIgb25seQorLy8gc3VwcG9ydHMgdW5zaWduZWQgaW50ZWdlciBhbmQgc3RyaW5nIGtl
eXMuCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VW5zdXBwb3J0ZWRNYXBLZXlGb3JtYXRFcnJv
cikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtNYXBXaXRoVWludEtleSA9
IHsKKyAgICAgICAgMHhhMiwgICAgICAgIC8vIG1hcCBvZiAyIHBhaXJzCisKKyAgICAgICAgMHg4
MiwgMHgwMSwgMHgwMiwgIC8vIGludmFsaWQga2V5IDogWzEsIDJdCisgICAgICAgIDB4MDIsICAg
ICAgICAgICAgICAvLyB2YWx1ZSA6IDIKKworICAgICAgICAweDYxLCAweDY0LCAgLy8ga2V5IDog
ImQiCisgICAgICAgIDB4MDMsICAgICAgICAvLyB2YWx1ZSA6IDMKKyAgICB9OworCisgICAgQ0JP
UlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yX2NvZGU7CisgICAgc3RkOjpvcHRpb25hbDxDQk9S
VmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpSZWFkKGtNYXBXaXRoVWludEtleSwgJmVycm9yX2Nv
ZGUpOworICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6SU5DT1JSRUNUX01BUF9L
RVlfVFlQRSk7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RVbmtub3duQWRkaXRpb25h
bEluZm9FcnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtVbmtub3du
QWRkaXRpb25hbEluZm9MaXN0W10gPSB7CisgICAgICAgIC8vICJJRVRGIiBlbmNvZGVkIHdpdGgg
bWFqb3IgdHlwZSAzIGFuZCBhZGRpdGlvbmFsIGluZm8gb2YgMjguCisgICAgICAgIHsgMHg3Qywg
MHg0OSwgMHg0NSwgMHg1NCwgMHg0NiB9LAorICAgICAgICAvLyAiXCJcXCIgZW5jb2RlZCB3aXRo
IG1ham9yIHR5cGUgMyBhbmQgYWRkaXRpb25hbCBpbmZvIG9mIDI5LgorICAgICAgICB7IDB4N0Qs
IDB4MjIsIDB4NWMgfSwKKyAgICAgICAgLy8gIlx4YzNceGJjIiBlbmNvZGVkIHdpdGggbWFqb3Ig
dHlwZSAzIGFuZCBhZGRpdGlvbmFsIGluZm8gb2YgMzAuCisgICAgICAgIHsgMHg3RSwgMHhjMywg
MHhiYyB9LAorICAgICAgICAvLyAiXHhlNlx4YjBceGI0IiBlbmNvZGVkIHdpdGggbWFqb3IgdHlw
ZSAzIGFuZCBhZGRpdGlvbmFsIGluZm8gb2YgMzEuCisgICAgICAgIHsgMHg3RiwgMHhlNiwgMHhi
MCwgMHhiNCB9LAorICAgICAgICAvLyBNYWpvciB0eXBlIDcsIGFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gMjg6IHVuYXNzaWduZWQuCisgICAgICAgIHsgMHhGQyB9LAorICAgICAgICAvLyBNYWpvciB0
eXBlIDcsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gMjk6IHVuYXNzaWduZWQuCisgICAgICAgIHsg
MHhGRCB9LAorICAgICAgICAvLyBNYWpvciB0eXBlIDcsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24g
MzA6IHVuYXNzaWduZWQuCisgICAgICAgIHsgMHhGRSB9LAorICAgICAgICAvLyBNYWpvciB0eXBl
IDcsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gMzE6ICJicmVhayIgc3RvcCBjb2RlIGZvcgorICAg
ICAgICAvLyBpbmRlZmluaXRlLWxlbmd0aCBpdGVtcy4KKyAgICAgICAgeyAweEZGIH0sCisgICAg
fTsKKworICAgIGZvciAoY29uc3QgYXV0byYgaW5jb3JyZWN0X2Nib3IgOiBrVW5rbm93bkFkZGl0
aW9uYWxJbmZvTGlzdCkgeworICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3Jf
Y29kZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVy
OjpSZWFkKGluY29ycmVjdF9jYm9yLCAmZXJyb3JfY29kZSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29kZSA9PSBD
Qk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OlVOS05PV05fQURESVRJT05BTF9JTkZPKTsKKyAgICB9
Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RUb29NdWNoTmVzdGluZ0Vycm9yKQorewor
ICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4ga1plcm9EZXB0aENCT1JMaXN0W10gPSB7
CisgICAgICAgIC8vIFVuc2lnbmVkIGludCB3aXRoIHZhbHVlIDEwMC4KKyAgICAgICAgeyAweDE4
LCAweDY0IH0sCisgICAgICAgIC8vIENCT1IgYnl0ZXN0cmluZyBvZiBsZW5ndGggNC4KKyAgICAg
ICAgeyAweDQ0LCAweDAxLCAweDAyLCAweDAzLCAweDA0IH0sCisgICAgICAgIC8vIENCT1Igc3Ry
aW5nIG9mIGNvcnJlc3BvbmRpbmcgdG8gIklFVEYuCisgICAgICAgIHsgMHg2NCwgMHg0OSwgMHg0
NSwgMHg1NCwgMHg0NiB9LAorICAgICAgICAvLyBFbXB0eSBDQk9SIGFycmF5LgorICAgICAgICB7
IDB4ODAgfSwKKyAgICAgICAgLy8gRW1wdHkgQ0JPUiBNYXAKKyAgICAgICAgeyAweGEwIH0sCisg
ICAgfTsKKworICAgIGZvciAoY29uc3QgYXV0byYgemVyb19kZXB0aF9kYXRhIDoga1plcm9EZXB0
aENCT1JMaXN0KSB7CisgICAgICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvcl9jb2Rl
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJl
YWQoemVyb19kZXB0aF9kYXRhLCAmZXJyb3JfY29kZSwgMCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENC
T1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6Q0JPUl9OT19FUlJPUik7CisgICAgfQorCisgICAgLy8g
Q29ycmVzcG9uZHMgdG8gYSBDQk9SIHN0cnVjdHVyZSB3aXRoIGEgbmVzdGluZyBkZXB0aCBvZiAy
OgorICAgIC8vICAgICAgeyJhIjogMSwKKyAgICAvLyAgICAgICAiYiI6IFsyLCAzXX0KKyAgICBz
dGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtOZXN0ZWRDQk9SRGF0YSA9IHsKKyAgICAgICAg
MHhhMiwgIC8vIG1hcCBvZiAyIHBhaXJzCisgICAgICAgIDB4NjEsIDB4NjEsICAvLyAiYSIKKyAg
ICAgICAgMHgwMSwKKworICAgICAgICAweDYxLCAweDYyLCAgLy8gImIiCisgICAgICAgIDB4ODIs
ICAgICAgICAvLyBhcnJheSB3aXRoIDIgZWxlbWVudHMKKyAgICAgICAgMHgwMiwKKyAgICAgICAg
MHgwMywKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yX2NvZGU7
CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3Jfc2luZ2xlX2xheWVyX21heCA9IENC
T1JSZWFkZXI6OlJlYWQoa05lc3RlZENCT1JEYXRhLCAmZXJyb3JfY29kZSwgMSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNib3Jfc2luZ2xlX2xheWVyX21heC5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNU
X1RSVUUoZXJyb3JfY29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OlRPT19NVUNIX05F
U1RJTkcpOworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3JfZG91YmxlX2xheWVy
X21heCA9IENCT1JSZWFkZXI6OlJlYWQoa05lc3RlZENCT1JEYXRhLCAmZXJyb3JfY29kZSwgMik7
CisgICAgRVhQRUNUX1RSVUUoY2Jvcl9kb3VibGVfbGF5ZXJfbWF4Lmhhc192YWx1ZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShlcnJvcl9jb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6Q0JP
Ul9OT19FUlJPUik7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RPdXRPZk9yZGVyS2V5
RXJyb3IpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTWFwc1dpdGhVbnNv
cnRlZEtleXNbXSA9IHsKKyAgICAgICAgezB4YTIsICAvLyBtYXAgd2l0aCAyIGtleXMgd2l0aCBz
YW1lIG1ham9yIHR5cGUgYW5kIGxlbmd0aAorICAgICAgICAgICAgMHg2MSwgMHg2MiwgIC8vIGtl
eSAiYiIKKyAgICAgICAgICAgIDB4NjEsIDB4NDIsICAvLyB2YWx1ZSA6IkIiCisKKyAgICAgICAg
ICAgIDB4NjEsIDB4NjEsICAvLyBrZXkgImEiIChvdXQgb2Ygb3JkZXIgYnl0ZS13aXNlIGxleGlj
YWxseSkKKyAgICAgICAgICAgIDB4NjEsIDB4NDUgICAvLyB2YWx1ZSAiRSIKKyAgICAgICAgfSwK
KyAgICAgICAgezB4YTIsICAvLyBtYXAgd2l0aCAyIGtleXMgd2l0aCBkaWZmZXJlbnQgbWFqb3Ig
dHlwZQorICAgICAgICAgICAgMHg2MSwgMHg2MiwgICAgICAgIC8vIGtleSAiYiIKKyAgICAgICAg
ICAgIDB4MDIsICAgICAgICAgICAgICAvLyB2YWx1ZSAyCisKKyAgICAgICAgICAgIC8vIGtleSAx
MDAwIChvdXQgb2Ygb3JkZXIgc2luY2UgbG93ZXIgbWFqb3IgdHlwZSBzb3J0cyBmaXJzdCkKKyAg
ICAgICAgICAgIDB4MTksIDB4MDMsIDB4ZTgsCisgICAgICAgICAgICAweDYxLCAweDYxLCAgICAg
ICAgLy8gdmFsdWUgYQorICAgICAgICB9LAorICAgICAgICB7MHhhMiwgIC8vIG1hcCB3aXRoIDIg
a2V5cyB3aXRoIHNhbWUgbWFqb3IgdHlwZQorICAgICAgICAgICAgMHgxOSwgMHgwMywgMHhlOCwg
IC8vIGtleSAxMDAwICAob3V0IG9mIG9yZGVyIGR1ZSB0byBsb25nZXIgbGVuZ3RoKQorICAgICAg
ICAgICAgMHg2MSwgMHg2MSwgICAgICAgIC8vdmFsdWUgImEiCisKKyAgICAgICAgICAgIDB4MGEs
ICAgICAgICAgICAgICAvLyBrZXkgMTAKKyAgICAgICAgICAgIDB4NjEsIDB4NjJ9LCAgICAgICAv
LyB2YWx1ZSAiYiIKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9y
X2NvZGU7CisgICAgZm9yIChjb25zdCBhdXRvJiB1bnNvcnRlZF9tYXAgOiBrTWFwc1dpdGhVbnNv
cnRlZEtleXMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPQorICAg
ICAgICBDQk9SUmVhZGVyOjpSZWFkKHVuc29ydGVkX21hcCwgJmVycm9yX2NvZGUpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVy
cm9yX2NvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpPVVRfT0ZfT1JERVJfS0VZKTsK
KyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3REdXBsaWNhdGVLZXlFcnJvcikg
eworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4ga01hcFdpdGhEdXBsaWNhdGVLZXkg
PSB7CisgICAgICAgIDB4YTYsICAvLyBtYXAgb2YgNiBwYWlyczoKKyAgICAgICAgMHg2MCwgIC8v
ICIiCisgICAgICAgIDB4NjEsIDB4MmUsICAvLyAiLiIKKworICAgICAgICAweDYxLCAweDYyLCAg
Ly8gImIiCisgICAgICAgIDB4NjEsIDB4NDIsICAvLyAiQiIKKworICAgICAgICAweDYxLCAweDYy
LCAgLy8gImIiIChEdXBsaWNhdGUga2V5KQorICAgICAgICAweDYxLCAweDQzLCAgLy8gIkMiCisK
KyAgICAgICAgMHg2MSwgMHg2NCwgIC8vICJkIgorICAgICAgICAweDYxLCAweDQ0LCAgLy8gIkQi
CisKKyAgICAgICAgMHg2MSwgMHg2NSwgIC8vICJlIgorICAgICAgICAweDYxLCAweDQ0LCAgLy8g
IkQiCisKKyAgICAgICAgMHg2MiwgMHg2MSwgMHg2MSwgIC8vICJhYSIKKyAgICAgICAgMHg2Miwg
MHg0MSwgMHg0MSwgIC8vICJBQSIKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVy
cm9yIGVycm9yX2NvZGU7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENC
T1JSZWFkZXI6OlJlYWQoa01hcFdpdGhEdXBsaWNhdGVLZXksICZlcnJvcl9jb2RlKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29k
ZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OkRVUExJQ0FURV9LRVkpOworfQorCisvLyBM
ZXZlcmFnaW5nIE1hcmt1cyBLdWhu4oCZcyBVVEYtOCBkZWNvZGVyIHN0cmVzcyB0ZXN0LiBTZWUK
Ky8vIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvZXhhbXBsZXMvVVRGLTgtdGVz
dC50eHQgZm9yIGRldGFpbHMuCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0SW5jb3JyZWN0U3Ry
aW5nRW5jb2RpbmdFcnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHV0
ZjhfY2hhcmFjdGVyX2VuY29kaW5nc1tdID0geworICAgICAgICAvLyBDb3JyZXNwb25kcyB0byB1
dGY4IGVuY29kaW5nIG9mICLtn78iIChzZWN0aW9uIDIuMy4xIG9mIHN0cmVzcyB0ZXN0KS4KKyAg
ICAgICAgeyAweDYzLCAweEVELCAweDlGLCAweEJGIH0sCisgICAgICAgIC8vIENvcnJlc3BvbmRz
IHRvIHV0ZjggZW5jb2Rpbmcgb2YgIu6AgCIgKHNlY3Rpb24gMi4zLjIgb2Ygc3RyZXNzIHRlc3Qp
LgorICAgICAgICB7IDB4NjMsIDB4RUUsIDB4ODAsIDB4ODAgfSwKKyAgICAgICAgLy8gQ29ycmVz
cG9uZHMgdG8gdXRmOCBlbmNvZGluZyBvZiAi77+9IiAgKHNlY3Rpb24gMi4zLjMgb2Ygc3RyZXNz
IHRlc3QpLgorICAgICAgICB7IDB4NjMsIDB4RUYsIDB4QkYsIDB4QkQgfSwKKyAgICB9OworCisg
ICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yX2NvZGU7CisgICAgZm9yIChjb25zdCBh
dXRvJiBjYm9yX2J5dGUgOiB1dGY4X2NoYXJhY3Rlcl9lbmNvZGluZ3MpIHsKKyAgICAgICAgc3Rk
OjpvcHRpb25hbDxDQk9SVmFsdWU+IGNvcnJlY3RseV9lbmNvZGVkX2Nib3IgPSBDQk9SUmVhZGVy
OjpSZWFkKGNib3JfYnl0ZSwgJmVycm9yX2NvZGUpOworICAgICAgICBFWFBFQ1RfVFJVRShjb3Jy
ZWN0bHlfZW5jb2RlZF9jYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXJy
b3JfY29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OkNCT1JfTk9fRVJST1IpOworICAg
IH0KKworICAgIC8vIEluY29ycmVjdCBVVEY4IGVuY29kaW5nIHJlZmVyZW5jZWQgYnkgc2VjdGlv
biAzLjUuMyBvZiB0aGUgc3RyZXNzIHRlc3QuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltcG9zc2li
bGVfdXRmX2J5dGV7IDB4NjQsIDB4ZmUsIDB4ZmUsIDB4ZmYsIDB4ZmYgfTsKKyAgICBzdGQ6Om9w
dGlvbmFsPENCT1JWYWx1ZT4gaW5jb3JyZWN0bHlfZW5jb2RlZF9jYm9yID0gQ0JPUlJlYWRlcjo6
UmVhZChpbXBvc3NpYmxlX3V0Zl9ieXRlLCAmZXJyb3JfY29kZSk7CisgICAgRVhQRUNUX0ZBTFNF
KGluY29ycmVjdGx5X2VuY29kZWRfY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUo
ZXJyb3JfY29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OklOVkFMSURfVVRGOCk7Cit9
CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RFeHRyYW5lb3VzQ0JPUkRhdGFFcnJvcikKK3sK
KyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHplcm9fcGFkZGVkX2Nib3JfbGlzdFtd
ID0geworICAgICAgICAvLyAxIGV4dHJhIGJ5dGUgYWZ0ZXIgYSAyLWJ5dGUgdW5zaWduZWQgaW50
LgorICAgICAgICB7IDB4MTksIDB4MDMsIDB4MDUsIDB4MDAgfSwKKyAgICAgICAgLy8gMSBleHRy
YSBieXRlIGFmdGVyIGEgNC1ieXRlIGNib3IgYnl0ZSBhcnJheS4KKyAgICAgICAgeyAweDQ0LCAw
eDAxLCAweDAyLCAweDAzLCAweDA0LCAweDAwIH0sCisgICAgICAgIC8vIDEgZXh0cmEgYnl0ZSBh
ZnRlciBhIDQtYnl0ZSBzdHJpbmcuCisgICAgICAgIHsgMHg2NCwgMHg0OSwgMHg0NSwgMHg1NCwg
MHg0NiwgMHgwMCB9LAorICAgICAgICAvLyAxIGV4dHJhIGJ5dGUgYWZ0ZXIgQ0JPUiBhcnJheSBv
ZiBsZW5ndGggMi4KKyAgICAgICAgeyAweDgyLCAweDAxLCAweDAyLCAweDAwIH0sCisgICAgICAg
IC8vIDEgZXh0cmEga2V5IHZhbHVlIHBhaXIgYWZ0ZXIgQ0JPUiBtYXAgb2Ygc2l6ZSAyLgorICAg
ICAgICB7IDB4YTEsIDB4NjEsIDB4NjMsIDB4MDIsIDB4NjEsIDB4NjQsIDB4MDMgfSwKKyAgICB9
OworCisgICAgZm9yIChjb25zdCBhdXRvJiBleHRyYW5lb3VzX2Nib3JfZGF0YSA6IHplcm9fcGFk
ZGVkX2Nib3JfbGlzdCkgeworICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3Jf
Y29kZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVy
OjpSZWFkKGV4dHJhbmVvdXNfY2Jvcl9kYXRhLCAmZXJyb3JfY29kZSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3JfY29k
ZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OkVYVFJBTkVPVVNfREFUQSk7CisgICAgfQor
fQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VW5zdXBwb3J0ZWRTaW1wbGV2YWx1ZSkKK3sK
KyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHVuc3VwcG9ydGVkX3NpbXBsZV92YWx1
ZXNbXSA9IHsKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgwLCB1bmFzc2lnbmVkKQorICAgICAg
ICB7IDB4RTAgfSwKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgxOSwgdW5hc3NpZ25lZCkKKyAg
ICAgICAgeyAweEYzIH0sCisgICAgICAgIC8vIFNpbXBsZSB2YWx1ZSAoMjQsIHJlc2VydmVkKQor
ICAgICAgICB7IDB4RjgsIDB4MTggfSwKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgyOCwgcmVz
ZXJ2ZWQpCisgICAgICAgIHsgMHhGOCwgMHgxQyB9LAorICAgICAgICAvLyBTaW1wbGUgdmFsdWUg
KDI5LCByZXNlcnZlZCkKKyAgICAgICAgeyAweEY4LCAweDFEIH0sCisgICAgICAgIC8vIFNpbXBs
ZSB2YWx1ZSAoMzAsIHJlc2VydmVkKQorICAgICAgICB7IDB4RjgsIDB4MUUgfSwKKyAgICAgICAg
Ly8gU2ltcGxlIHZhbHVlICgzMSwgcmVzZXJ2ZWQpCisgICAgICAgIHsgMHhGOCwgMHgxRiB9LAor
ICAgICAgICAvLyBTaW1wbGUgdmFsdWUgKDMyLCB1bmFzc2lnbmVkKQorICAgICAgICB7IDB4Rjgs
IDB4MjAgfSwKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgyNTUsIHVuYXNzaWduZWQpCisgICAg
ICAgIHsgMHhGOCwgMHhGRiB9LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVuc3Vw
cG9ydGVkX3NpbXBsZV92YWwgOiB1bnN1cHBvcnRlZF9zaW1wbGVfdmFsdWVzKSB7CisgICAgICAg
IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvcl9jb2RlOworICAgICAgICBzdGQ6Om9wdGlv
bmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OlJlYWQodW5zdXBwb3J0ZWRfc2ltcGxl
X3ZhbCwgJmVycm9yX2NvZGUpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUo
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yX2NvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2Rl
ckVycm9yOjpVTlNVUFBPUlRFRF9TSU1QTEVfVkFMVUUpOworICAgIH0KK30KKworfSAgLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfdmFsdWVzX3VuaXR0ZXN0LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS90aGlyZF9wYXJ0eS9jYm9yL2Nib3JfdmFs
dWVzX3VuaXR0ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmI0YjM1YTBmYjI2ZjU5N2VmNzQzNWQ0MGQz
Yzg1YTliY2Q1NTUxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl92YWx1ZXNfdW5pdHRlc3QuY3BwCkBAIC0w
LDAgKzEsNDAyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBt
ZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvY2Jvcl92YWx1ZXMu
aD4KKworI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
dXNpbmcgbmFtZXNwYWNlIGNib3I7CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIFRlc3ROb3Rocm93
KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJs
ZTxDQk9SVmFsdWU+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJJc05vdGhyb3dNb3ZlQ29u
c3RydWN0aWJsZSIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19ub3Rocm93X2RlZmF1bHRf
Y29uc3RydWN0aWJsZTxDQk9SVmFsdWU+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJJc05v
dGhyb3dEZWZhdWx0Q29uc3RydWN0aWJsZSIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19u
b3Rocm93X2NvbnN0cnVjdGlibGU8Q0JPUlZhbHVlLCBTdHJpbmcmJj46OnZhbHVlLAorICAgICAg
ICAgICAgICAgICAgIklzTm90aHJvd01vdmVDb25zdHJ1Y3RpYmxlRnJvbVN0cmluZyIpOworICAg
IHN0YXRpY19hc3NlcnQoCisgICAgICAgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3Ry
dWN0aWJsZTxDQk9SVmFsdWUsIENCT1JWYWx1ZTo6QmluYXJ5VmFsdWUmJj46OnZhbHVlLAorICAg
ICAgICAgICAgICAgICAgIklzTm90aHJvd01vdmVDb25zdHJ1Y3RpYmxlRnJvbUJ5dGVzdHJpbmci
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KAorICAgICAgICAgICAgICAgICAgc3RkOjppc19ub3Rocm93
X2NvbnN0cnVjdGlibGU8Q0JPUlZhbHVlLCBDQk9SVmFsdWU6OkFycmF5VmFsdWUmJj46OnZhbHVl
LAorICAgICAgICAgICAgICAgICAgIklzTm90aHJvd01vdmVDb25zdHJ1Y3RpYmxlRnJvbUFycmF5
Iik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPENC
T1JWYWx1ZT46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgIklzTm90aHJvd01vdmVBc3NpZ25h
YmxlIik7Cit9CisKKy8vIFRlc3QgY29uc3RydWN0b3JzCitURVNUKENCT1JWYWx1ZXNUZXN0LCBD
b25zdHJ1Y3RVbnNpZ25lZCkKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoMzcpOworICAgIEFTU0VS
VF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6VU5TSUdORUQgPT0gdmFsdWUudHlwZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMzd1LCB2YWx1ZS5HZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNU
ZXN0LCBDb25zdHJ1Y3ROZWdhdGl2ZSkKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoLTEpOworICAg
IEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6TkVHQVRJVkUgPT0gdmFsdWUudHlwZSgpKTsK
KyAgICBFWFBFQ1RfRVEoLTEsIHZhbHVlLkdldEludGVnZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZh
bHVlc1Rlc3QsIENvbnN0cnVjdFN0cmluZ0Zyb21Db25zdENoYXJQdHIpCit7CisgICAgY29uc3Qg
Y2hhciogc3RyID0gImZvb2JhciI7CisgICAgQ0JPUlZhbHVlIHZhbHVlKHN0cik7CisgICAgQVNT
RVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcgPT0gdmFsdWUudHlwZSgpKTsKKyAgICBF
WFBFQ1RfVFJVRSgiZm9vYmFyIiA9PSB2YWx1ZS5HZXRTdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JP
UlZhbHVlc1Rlc3QsIENvbnN0cnVjdFN0cmluZ0Zyb21XVEZTdHJpbmdDb25zdFJlZikKK3sKKyAg
ICBTdHJpbmcgc3RyID0gImZvb2JhciI7CisgICAgQ0JPUlZhbHVlIHZhbHVlKHN0cik7CisgICAg
QVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTVFJJTkcgPT0gdmFsdWUudHlwZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRSgiZm9vYmFyIiA9PSB2YWx1ZS5HZXRTdHJpbmcoKSk7Cit9CisKK1RFU1Qo
Q0JPUlZhbHVlc1Rlc3QsIENvbnN0cnVjdFN0cmluZ0Zyb21XVEZTdHJpbmdSZWZSZWYpCit7Cisg
ICAgU3RyaW5nIHN0ciA9ICJmb29iYXIiOworICAgIENCT1JWYWx1ZSB2YWx1ZShXVEZNb3ZlKHN0
cikpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U1RSSU5HID09IHZhbHVlLnR5
cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoImZvb2JhciIgPT0gdmFsdWUuR2V0U3RyaW5nKCkpOwor
fQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBDb25zdHJ1Y3RCeXRlc3RyaW5nKQoreworICAgIENC
T1JWYWx1ZSB2YWx1ZShDQk9SVmFsdWU6OkJpbmFyeVZhbHVlKHsgMHhGLCAweDAsIDB4MCwgMHhC
LCAweEEsIDB4MiB9KSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpCWVRFX1NU
UklORyA9PSB2YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6QmluYXJ5
VmFsdWUoeyAweEYsIDB4MCwgMHgwLCAweEIsIDB4QSwgMHgyIH0pID09IHZhbHVlLkdldEJ5dGVz
dHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvbnN0cnVjdEFycmF5KQorewor
ICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSBhcnJheTsKKyAgICBhcnJheS5hcHBlbmQoQ0JPUlZh
bHVlKCJmb28iKSk7CisgICAgeworICAgICAgICBDQk9SVmFsdWUgdmFsdWUoYXJyYXkpOworICAg
ICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OkFSUkFZID09IHZhbHVlLnR5cGUoKSk7
CisgICAgICAgIEFTU0VSVF9FUSgxdSwgdmFsdWUuR2V0QXJyYXkoKS5zaXplKCkpOworICAgICAg
ICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNUUklORyA9PSB2YWx1ZS5HZXRBcnJheSgp
WzBdLnR5cGUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCJmb28iID09IHZhbHVlLkdldEFycmF5
KClbMF0uR2V0U3RyaW5nKCkpOworICAgIH0KKworICAgIGFycmF5Lmxhc3QoKSA9IENCT1JWYWx1
ZSgiYmFyIik7CisgICAgeworICAgICAgICBDQk9SVmFsdWUgdmFsdWUoV1RGTW92ZShhcnJheSkp
OworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OkFSUkFZID09IHZhbHVlLnR5
cGUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxdSwgdmFsdWUuR2V0QXJyYXkoKS5zaXplKCkpOwor
ICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNUUklORyA9PSB2YWx1ZS5HZXRB
cnJheSgpWzBdLnR5cGUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCJiYXIiID09IHZhbHVlLkdl
dEFycmF5KClbMF0uR2V0U3RyaW5nKCkpOworICAgIH0KK30KKworVEVTVChDQk9SVmFsdWVzVGVz
dCwgQ29uc3RydWN0TWFwKQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOworICAgIGNv
bnN0IENCT1JWYWx1ZSBrZXlfZm9vKCJmb28iKTsKKyAgICBtYXBbQ0JPUlZhbHVlKCJmb28iKV0g
PSBDQk9SVmFsdWUoImJhciIpOworICAgIHsKKyAgICAgICAgQ0JPUlZhbHVlIHZhbHVlKG1hcCk7
CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6TUFQID09IHZhbHVlLnR5cGUo
KSk7CisgICAgICAgIEFTU0VSVF9FUSh2YWx1ZS5HZXRNYXAoKS5jb3VudChrZXlfZm9vKSwgMXUp
OworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNUUklORyA9PSB2YWx1ZS5H
ZXRNYXAoKS5maW5kKGtleV9mb28pLT5zZWNvbmQudHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoImJhciIgPT0gdmFsdWUuR2V0TWFwKCkuZmluZChrZXlfZm9vKS0+c2Vjb25kLkdldFN0cmlu
ZygpKTsKKyAgICB9CisKKyAgICBtYXBbQ0JPUlZhbHVlKCJmb28iKV0gPSBDQk9SVmFsdWUoImJh
eiIpOworICAgIHsKKyAgICAgICAgQ0JPUlZhbHVlIHZhbHVlKFdURk1vdmUobWFwKSk7CisgICAg
ICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6TUFQID09IHZhbHVlLnR5cGUoKSk7Cisg
ICAgICAgIEFTU0VSVF9FUSh2YWx1ZS5HZXRNYXAoKS5jb3VudChrZXlfZm9vKSwgMXUpOworICAg
ICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNUUklORyA9PSB2YWx1ZS5HZXRNYXAo
KS5maW5kKGtleV9mb28pLT5zZWNvbmQudHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoImJh
eiIgPT0gdmFsdWUuR2V0TWFwKCkuZmluZChrZXlfZm9vKS0+c2Vjb25kLkdldFN0cmluZygpKTsK
KyAgICB9Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvbnN0cnVjdFNpbXBsZVZhbHVlKQor
eworICAgIENCT1JWYWx1ZSBmYWxzZV92YWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpGQUxT
RV9WQUxVRSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTSU1QTEVfVkFMVUUg
PT0gZmFsc2VfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlNpbXBs
ZVZhbHVlOjpGQUxTRV9WQUxVRSA9PSBmYWxzZV92YWx1ZS5HZXRTaW1wbGVWYWx1ZSgpKTsKKwor
ICAgIENCT1JWYWx1ZSB0cnVlX3ZhbHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlRSVUVfVkFM
VUUpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U0lNUExFX1ZBTFVFID09IHRy
dWVfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlNpbXBsZVZhbHVl
OjpUUlVFX1ZBTFVFID09IHRydWVfdmFsdWUuR2V0U2ltcGxlVmFsdWUoKSk7CisKKyAgICBDQk9S
VmFsdWUgbnVsbF92YWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpOVUxMX1ZBTFVFKTsKKyAg
ICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNJTVBMRV9WQUxVRSA9PSBudWxsX3ZhbHVl
LnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6TlVMTF9W
QUxVRSA9PSBudWxsX3ZhbHVlLkdldFNpbXBsZVZhbHVlKCkpOworCisgICAgQ0JPUlZhbHVlIHVu
ZGVmaW5lZF92YWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVTkRFRklORUQpOworICAgIEFT
U0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U0lNUExFX1ZBTFVFID09IHVuZGVmaW5lZF92YWx1
ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlVOREVG
SU5FRCA9PSB1bmRlZmluZWRfdmFsdWUuR2V0U2ltcGxlVmFsdWUoKSk7Cit9CisKKy8vIFRlc3Qg
Y29weSBjb25zdHJ1Y3RvcnMKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvcHlVbnNpZ25lZCkKK3sK
KyAgICBDQk9SVmFsdWUgdmFsdWUoNzQpOworICAgIENCT1JWYWx1ZSBjb3BpZWRfdmFsdWUodmFs
dWUuQ2xvbmUoKSk7CisgICAgQVNTRVJUX1RSVUUodmFsdWUudHlwZSgpID09IGNvcGllZF92YWx1
ZS50eXBlKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5HZXRJbnRlZ2VyKCksIGNvcGllZF92YWx1
ZS5HZXRJbnRlZ2VyKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSB2
YWx1ZS5DbG9uZSgpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBibGFuay50eXBl
KCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5HZXRJbnRlZ2VyKCksIGJsYW5rLkdldEludGVnZXIo
KSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvcHlOZWdhdGl2ZUludCkKK3sKKyAgICBD
Qk9SVmFsdWUgdmFsdWUoLTc0KTsKKyAgICBDQk9SVmFsdWUgY29waWVkX3ZhbHVlKHZhbHVlLkNs
b25lKCkpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBjb3BpZWRfdmFsdWUudHlw
ZSgpKTsKKyAgICBFWFBFQ1RfRVEodmFsdWUuR2V0SW50ZWdlcigpLCBjb3BpZWRfdmFsdWUuR2V0
SW50ZWdlcigpKTsKKworICAgIENCT1JWYWx1ZSBibGFuazsKKworICAgIGJsYW5rID0gdmFsdWUu
Q2xvbmUoKTsKKyAgICBBU1NFUlRfVFJVRSh2YWx1ZS50eXBlKCkgPT0gYmxhbmsudHlwZSgpKTsK
KyAgICBFWFBFQ1RfRVEodmFsdWUuR2V0SW50ZWdlcigpLCBibGFuay5HZXRJbnRlZ2VyKCkpOwor
fQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBDb3B5U3RyaW5nKQoreworICAgIENCT1JWYWx1ZSB2
YWx1ZSgiZm9vYmFyIik7CisgICAgQ0JPUlZhbHVlIGNvcGllZF92YWx1ZSh2YWx1ZS5DbG9uZSgp
KTsKKyAgICBBU1NFUlRfVFJVRSh2YWx1ZS50eXBlKCkgPT0gY29waWVkX3ZhbHVlLnR5cGUoKSk7
CisgICAgRVhQRUNUX1RSVUUodmFsdWUuR2V0U3RyaW5nKCkgPT0gY29waWVkX3ZhbHVlLkdldFN0
cmluZygpKTsKKworICAgIENCT1JWYWx1ZSBibGFuazsKKworICAgIGJsYW5rID0gdmFsdWUuQ2xv
bmUoKTsKKyAgICBBU1NFUlRfVFJVRSh2YWx1ZS50eXBlKCkgPT0gYmxhbmsudHlwZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS5HZXRTdHJpbmcoKSA9PSBibGFuay5HZXRTdHJpbmcoKSk7Cit9
CisKK1RFU1QoQ0JPUlZhbHVlc1Rlc3QsIENvcHlCeXRlc3RyaW5nKQoreworICAgIENCT1JWYWx1
ZSB2YWx1ZShDQk9SVmFsdWU6OkJpbmFyeVZhbHVlKHsgMHhGLCAweDAsIDB4MCwgMHhCLCAweEEs
IDB4MiB9KSk7CisgICAgQ0JPUlZhbHVlIGNvcGllZF92YWx1ZSh2YWx1ZS5DbG9uZSgpKTsKKyAg
ICBBU1NFUlRfVFJVRSh2YWx1ZS50eXBlKCkgPT0gY29waWVkX3ZhbHVlLnR5cGUoKSk7CisgICAg
RVhQRUNUX1RSVUUodmFsdWUuR2V0Qnl0ZXN0cmluZygpID09IGNvcGllZF92YWx1ZS5HZXRCeXRl
c3RyaW5nKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSB2YWx1ZS5D
bG9uZSgpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBibGFuay50eXBlKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLkdldEJ5dGVzdHJpbmcoKSA9PSBibGFuay5HZXRCeXRlc3Ry
aW5nKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBDb3B5QXJyYXkpCit7CisgICAgQ0JP
UlZhbHVlOjpBcnJheVZhbHVlIGFycmF5OworICAgIGFycmF5LmFwcGVuZCgxMjMpOworICAgIENC
T1JWYWx1ZSB2YWx1ZShXVEZNb3ZlKGFycmF5KSk7CisKKyAgICBDQk9SVmFsdWUgY29waWVkX3Zh
bHVlKHZhbHVlLkNsb25lKCkpOworICAgIEFTU0VSVF9FUSgxdSwgY29waWVkX3ZhbHVlLkdldEFy
cmF5KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfVFJVRShjb3BpZWRfdmFsdWUuR2V0QXJyYXkoKVsw
XS5pc191bnNpZ25lZCgpKTsKKyAgICBFWFBFQ1RfRVEodmFsdWUuR2V0QXJyYXkoKVswXS5HZXRJ
bnRlZ2VyKCksCisgICAgICAgICAgICAgIGNvcGllZF92YWx1ZS5HZXRBcnJheSgpWzBdLkdldElu
dGVnZXIoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisgICAgYmxhbmsgPSB2YWx1ZS5DbG9u
ZSgpOworICAgIEVYUEVDVF9FUSgxdSwgYmxhbmsuR2V0QXJyYXkoKS5zaXplKCkpOworfQorCitU
RVNUKENCT1JWYWx1ZXNUZXN0LCBDb3B5TWFwKQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUg
bWFwOworICAgIENCT1JWYWx1ZSBrZXlfYSgiYSIpOworICAgIG1hcFtDQk9SVmFsdWUoImEiKV0g
PSBDQk9SVmFsdWUoMTIzKTsKKyAgICBDQk9SVmFsdWUgdmFsdWUoV1RGTW92ZShtYXApKTsKKwor
ICAgIENCT1JWYWx1ZSBjb3BpZWRfdmFsdWUodmFsdWUuQ2xvbmUoKSk7CisgICAgRVhQRUNUX0VR
KDF1LCBjb3BpZWRfdmFsdWUuR2V0TWFwKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEodmFsdWUu
R2V0TWFwKCkuY291bnQoa2V5X2EpLCAxdSk7CisgICAgQVNTRVJUX0VRKGNvcGllZF92YWx1ZS5H
ZXRNYXAoKS5jb3VudChrZXlfYSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjb3BpZWRfdmFsdWUu
R2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC5pc191bnNpZ25lZCgpKTsKKyAgICBFWFBFQ1Rf
RVEodmFsdWUuR2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC5HZXRJbnRlZ2VyKCksCisgICAg
ICAgICAgICAgIGNvcGllZF92YWx1ZS5HZXRNYXAoKS5maW5kKGtleV9hKS0+c2Vjb25kLkdldElu
dGVnZXIoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisgICAgYmxhbmsgPSB2YWx1ZS5DbG9u
ZSgpOworICAgIEVYUEVDVF9FUSgxdSwgYmxhbmsuR2V0TWFwKCkuc2l6ZSgpKTsKKyAgICBBU1NF
UlRfRVEoYmxhbmsuR2V0TWFwKCkuY291bnQoa2V5X2EpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUo
YmxhbmsuR2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC5pc191bnNpZ25lZCgpKTsKKyAgICBF
WFBFQ1RfRVEodmFsdWUuR2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC5HZXRJbnRlZ2VyKCks
CisgICAgICAgICAgICAgIGJsYW5rLkdldE1hcCgpLmZpbmQoa2V5X2EpLT5zZWNvbmQuR2V0SW50
ZWdlcigpKTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgQ29weVNpbXBsZVZhbHVlKQorewor
ICAgIENCT1JWYWx1ZSB2YWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpUUlVFX1ZBTFVFKTsK
KyAgICBDQk9SVmFsdWUgY29waWVkX3ZhbHVlKHZhbHVlLkNsb25lKCkpOworICAgIEVYUEVDVF9U
UlVFKHZhbHVlLnR5cGUoKSA9PSBjb3BpZWRfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS5HZXRTaW1wbGVWYWx1ZSgpID09IGNvcGllZF92YWx1ZS5HZXRTaW1wbGVWYWx1ZSgp
KTsKKworICAgIENCT1JWYWx1ZSBibGFuazsKKworICAgIGJsYW5rID0gdmFsdWUuQ2xvbmUoKTsK
KyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS50eXBlKCkgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS5HZXRTaW1wbGVWYWx1ZSgpID09IGJsYW5rLkdldFNpbXBsZVZhbHVlKCkp
OworfQorCisvLyBUZXN0IG1vdmUgY29uc3RydWN0b3JzIGFuZCBtb3ZlLWFzc2lnbm1lbnQKK1RF
U1QoQ0JPUlZhbHVlc1Rlc3QsIE1vdmVVbnNpZ25lZCkKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUo
NzQpOworICAgIENCT1JWYWx1ZSBtb3ZlZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgRVhQ
RUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpVTlNJR05FRCA9PSBtb3ZlZF92YWx1ZS50eXBlKCkp
OworICAgIEVYUEVDVF9FUSg3NHUsIG1vdmVkX3ZhbHVlLkdldEludGVnZXIoKSk7CisKKyAgICBD
Qk9SVmFsdWUgYmxhbms7CisKKyAgICBibGFuayA9IENCT1JWYWx1ZSg2NTQpOworICAgIEVYUEVD
VF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6VU5TSUdORUQgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBF
WFBFQ1RfRVEoNjU0dSwgYmxhbmsuR2V0SW50ZWdlcigpKTsKK30KKworVEVTVChDQk9SVmFsdWVz
VGVzdCwgTW92ZU5lZ2F0aXZlSW50ZWdlcikKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoLTc0KTsK
KyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1ZSkpOworICAgIEVYUEVDVF9U
UlVFKENCT1JWYWx1ZTo6VHlwZTo6TkVHQVRJVkUgPT0gbW92ZWRfdmFsdWUudHlwZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoLTc0LCBtb3ZlZF92YWx1ZS5HZXRJbnRlZ2VyKCkpOworCisgICAgQ0JPUlZh
bHVlIGJsYW5rOworCisgICAgYmxhbmsgPSBDQk9SVmFsdWUoLTY1NCk7CisgICAgRVhQRUNUX1RS
VUUoQ0JPUlZhbHVlOjpUeXBlOjpORUdBVElWRSA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVD
VF9FUSgtNjU0LCBibGFuay5HZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNUZXN0
LCBNb3ZlU3RyaW5nKQoreworICAgIENCT1JWYWx1ZSB2YWx1ZSgiZm9vYmFyIik7CisgICAgQ0JP
UlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1vdmUodmFsdWUpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9S
VmFsdWU6OlR5cGU6OlNUUklORyA9PSBtb3ZlZF92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9U
UlVFKCJmb29iYXIiID09IG1vdmVkX3ZhbHVlLkdldFN0cmluZygpKTsKKworICAgIENCT1JWYWx1
ZSBibGFuazsKKworICAgIGJsYW5rID0gQ0JPUlZhbHVlKCJmb29iYXIiKTsKKyAgICBFWFBFQ1Rf
VFJVRShDQk9SVmFsdWU6OlR5cGU6OlNUUklORyA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVD
VF9UUlVFKCJmb29iYXIiID09IGJsYW5rLkdldFN0cmluZygpKTsKK30KKworVEVTVChDQk9SVmFs
dWVzVGVzdCwgTW92ZUJ5dGVzdHJpbmcpCit7CisgICAgY29uc3QgQ0JPUlZhbHVlOjpCaW5hcnlW
YWx1ZSBieXRlcyh7IDB4RiwgMHgwLCAweDAsIDB4QiwgMHhBLCAweDIgfSk7CisgICAgQ0JPUlZh
bHVlIHZhbHVlKGJ5dGVzKTsKKyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1
ZSkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QllURV9TVFJJTkcgPT0gbW92
ZWRfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShieXRlcyA9PSBtb3ZlZF92YWx1ZS5H
ZXRCeXRlc3RyaW5nKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSBD
Qk9SVmFsdWUoYnl0ZXMpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QllURV9T
VFJJTkcgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShieXRlcyA9PSBibGFuay5H
ZXRCeXRlc3RyaW5nKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBNb3ZlQ29uc3RydWN0
TWFwKQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOworICAgIGNvbnN0IENCT1JWYWx1
ZSBrZXlfYSgiYSIpOworICAgIG1hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMTIzKTsK
KworICAgIENCT1JWYWx1ZSB2YWx1ZShXVEZNb3ZlKG1hcCkpOworICAgIENCT1JWYWx1ZSBtb3Zl
ZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBl
OjpNQVAgPT0gbW92ZWRfdmFsdWUudHlwZSgpKTsKKyAgICBBU1NFUlRfRVEobW92ZWRfdmFsdWUu
R2V0TWFwKCkuY291bnQoa2V5X2EpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUobW92ZWRfdmFsdWUu
R2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC5pc191bnNpZ25lZCgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTIzdSwgbW92ZWRfdmFsdWUuR2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC5HZXRJbnRl
Z2VyKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNUZXN0LCBNb3ZlQXNzaWduTWFwKQoreworICAg
IENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlfYSgiYSIp
OworICAgIG1hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMTIzKTsKKworICAgIENCT1JW
YWx1ZSBibGFuazsKKyAgICBibGFuayA9IENCT1JWYWx1ZShXVEZNb3ZlKG1hcCkpOworICAgIEFT
U0VSVF9UUlVFKGJsYW5rLmlzX21hcCgpKTsKKyAgICBBU1NFUlRfRVEoYmxhbmsuR2V0TWFwKCku
Y291bnQoa2V5X2EpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUoYmxhbmsuR2V0TWFwKCkuZmluZChr
ZXlfYSktPnNlY29uZC5pc191bnNpZ25lZCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIzdSwgYmxhbmsu
R2V0TWFwKCkuZmluZChrZXlfYSktPnNlY29uZC5HZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENC
T1JWYWx1ZXNUZXN0LCBNb3ZlQXJyYXkpCit7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGFy
cmF5OworICAgIGFycmF5LmFwcGVuZCgxMjMpOworICAgIENCT1JWYWx1ZSB2YWx1ZShhcnJheSk7
CisgICAgQ0JPUlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1vdmUodmFsdWUpKTsKKyAgICBFWFBFQ1Rf
VFJVRShDQk9SVmFsdWU6OlR5cGU6OkFSUkFZID09IG1vdmVkX3ZhbHVlLnR5cGUoKSk7CisgICAg
RVhQRUNUX0VRKDEyM3UsIG1vdmVkX3ZhbHVlLkdldEFycmF5KCkubGFzdCgpLkdldEludGVnZXIo
KSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisgICAgYmxhbmsgPSBDQk9SVmFsdWUoV1RGTW92
ZShhcnJheSkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QVJSQVkgPT0gYmxh
bmsudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTIzdSwgYmxhbmsuR2V0QXJyYXkoKS5sYXN0KCku
R2V0SW50ZWdlcigpKTsKK30KKworVEVTVChDQk9SVmFsdWVzVGVzdCwgTW92ZVNpbXBsZVZhbHVl
KQoreworICAgIENCT1JWYWx1ZSB2YWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVTkRFRklO
RUQpOworICAgIENCT1JWYWx1ZSBtb3ZlZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgRVhQ
RUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTSU1QTEVfVkFMVUUgPT0gbW92ZWRfdmFsdWUudHlw
ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVTkRFRklORUQg
PT0gbW92ZWRfdmFsdWUuR2V0U2ltcGxlVmFsdWUoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7
CisKKyAgICBibGFuayA9IENCT1JWYWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVTkRFRklO
RUQpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U0lNUExFX1ZBTFVFID09IGJs
YW5rLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VU5E
RUZJTkVEID09IGJsYW5rLkdldFNpbXBsZVZhbHVlKCkpOworfQorCitURVNUKENCT1JWYWx1ZXNU
ZXN0LCBTZWxmU3dhcCkKK3sKKyAgICBDQk9SVmFsdWUgdGVzdCgxKTsKKyAgICBzdGQ6OnN3YXAo
dGVzdCwgdGVzdCk7CisgICAgRVhQRUNUX0VRKHRlc3QuR2V0SW50ZWdlcigpLCAxdSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS90aGlyZF9wYXJ0eS9jYm9yL2Nib3Jfd3JpdGVyX3VuaXR0ZXN0
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS90aGlyZF9wYXJ0eS9jYm9y
L2Nib3Jfd3JpdGVyX3VuaXR0ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmI3YzljNTlkMjU1ZTg0MDYw
MzUzMmI5MzYwN2MyZGQzZDEzMmZjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL3RoaXJkX3BhcnR5L2Nib3IvY2Jvcl93cml0ZXJfdW5pdHRlc3Qu
Y3BwCkBAIC0wLDAgKzEsNDY5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvY2Jv
cl93cml0ZXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cz4KKworLyogTGV2ZXJhZ2luZyBSRkMgNzA0
OSBleGFtcGxlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9jYm9yL3Rlc3QtdmVjdG9ycy9ibG9i
L21hc3Rlci9hcHBlbmRpeF9hLmpzb24uICovCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBjYm9yOworCitib29sIGVxKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
Y2JvciwgY29uc3QgQ1N0cmluZyYgZXhwZWN0KQoreworICAgIGlmIChjYm9yLnNpemUoKSAhPSBl
eHBlY3QubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW1lbWNt
cChjYm9yLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZXhwZWN0LmRh
dGEoKSksIGNib3Iuc2l6ZSgpKTsKK30KKworYm9vbCBlcShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGNib3IsIGNvbnN0IHVpbnQ4X3QqIGV4cGVjdCwgY29uc3Qgc2l6ZV90IGV4cGVjdExlbmd0aCkK
K3sKKyAgICBpZiAoY2Jvci5zaXplKCkgIT0gZXhwZWN0TGVuZ3RoKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuICFtZW1jbXAoY2Jvci5kYXRhKCksIGV4cGVjdCwgZXhwZWN0TGVu
Z3RoKTsKK30KKworVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlVWludCkKK3sKKyAgICB0
eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IGludDY0X3QgdmFsdWU7CisgICAgICAgIGNv
bnN0IENTdHJpbmcgY2JvcjsKKyAgICB9IFVpbnRUZXN0Q2FzZTsKKworICAgIHN0YXRpYyBjb25z
dCBVaW50VGVzdENhc2Uga1VpbnRUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAgLy8gUmVtaW5kZXI6
IG11c3Qgc3BlY2lmeSBsZW5ndGggd2hlbiBjcmVhdGluZyBzdHJpbmcgcGllY2VzCisgICAgICAg
IC8vIHdpdGggbnVsbCBieXRlcywgZWxzZSB0aGUgc3RyaW5nIHdpbGwgdHJ1bmNhdGUgcHJlbWF0
dXJlbHkuCisgICAgICAgIHswLCBDU3RyaW5nKCJceDAwIiwgMSl9LAorICAgICAgICB7MSwgQ1N0
cmluZygiXHgwMSIpfSwKKyAgICAgICAgezEwLCBDU3RyaW5nKCJceDBhIil9LAorICAgICAgICB7
MjMsIENTdHJpbmcoIlx4MTciKX0sCisgICAgICAgIHsyNCwgQ1N0cmluZygiXHgxOFx4MTgiKX0s
CisgICAgICAgIHsyNSwgQ1N0cmluZygiXHgxOFx4MTkiKX0sCisgICAgICAgIHsxMDAsIENTdHJp
bmcoIlx4MThceDY0Iil9LAorICAgICAgICB7MTAwMCwgQ1N0cmluZygiXHgxOVx4MDNceGU4Iil9
LAorICAgICAgICB7MTAwMDAwMCwgQ1N0cmluZygiXHgxYVx4MDBceDBmXHg0Mlx4NDAiLCA1KX0s
CisgICAgICAgIHsweEZGRkZGRkZGLCBDU3RyaW5nKCJceDFhXHhmZlx4ZmZceGZmXHhmZiIpfSwK
KyAgICAgICAgezB4MTAwMDAwMDAwLAorICAgICAgICAgICAgQ1N0cmluZygiXHgxYlx4MDBceDAw
XHgwMFx4MDFceDAwXHgwMFx4MDBceDAwIiwgOSl9LAorICAgICAgICB7c3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWF4KCksCisgICAgICAgICAgICBDU3RyaW5nKCJceDFiXHg3Zlx4ZmZc
eGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiKX0KKyAgICB9OworCisgICAgZm9yIChjb25zdCBVaW50
VGVzdENhc2UmIHRlc3RfY2FzZSA6IGtVaW50VGVzdENhc2VzKSB7CisgICAgICAgIGF1dG8gY2Jv
ciA9IENCT1JXcml0ZXI6OldyaXRlKENCT1JWYWx1ZSh0ZXN0X2Nhc2UudmFsdWUpKTsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVx
KGNib3IudmFsdWUoKSwgdGVzdF9jYXNlLmNib3IpKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUldy
aXRlclRlc3QsIFRlc3RXcml0ZU5lZ2F0aXZlSW50ZWdlcikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
c3RydWN0IHsKKyAgICAgICAgY29uc3QgaW50NjRfdCBuZWdhdGl2ZV9pbnQ7CisgICAgICAgIGNv
bnN0IENTdHJpbmcgY2JvcjsKKyAgICB9IGtOZWdhdGl2ZUludFRlc3RDYXNlc1tdID0geworICAg
ICAgICB7IC0xTEwsIENTdHJpbmcoIlx4MjAiKSB9LAorICAgICAgICB7IC0xMExMLCBDU3RyaW5n
KCJceDI5IikgfSwKKyAgICAgICAgeyAtMjNMTCwgQ1N0cmluZygiXHgzNiIpIH0sCisgICAgICAg
IHsgLTI0TEwsIENTdHJpbmcoIlx4MzciKSB9LAorICAgICAgICB7IC0yNUxMLCBDU3RyaW5nKCJc
eDM4XHgxOCIpIH0sCisgICAgICAgIHsgLTEwMExMLCBDU3RyaW5nKCJceDM4XHg2MyIpIH0sCisg
ICAgICAgIHsgLTEwMDBMTCwgQ1N0cmluZygiXHgzOVx4MDNceGU3IikgfSwKKyAgICAgICAgeyAt
NDI5NDk2NzI5NkxMLCBDU3RyaW5nKCJceDNhXHhmZlx4ZmZceGZmXHhmZiIpIH0sCisgICAgICAg
IHsgLTQyOTQ5NjcyOTdMTCwKKyAgICAgICAgICAgIENTdHJpbmcoIlx4M2JceDAwXHgwMFx4MDBc
eDAxXHgwMFx4MDBceDAwXHgwMCIsIDkpIH0sCisgICAgICAgIHsgc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWluKCksCisgICAgICAgICAgICBDU3RyaW5nKCJceDNiXHg3Zlx4ZmZceGZm
XHhmZlx4ZmZceGZmXHhmZlx4ZmYiKSB9LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHRlc3RfY2FzZSA6IGtOZWdhdGl2ZUludFRlc3RDYXNlcykgeworICAgICAgICBhdXRvIGNib3Ig
PSBDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUodGVzdF9jYXNlLm5lZ2F0aXZlX2ludCkpOwor
ICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0X2Nhc2UuY2JvcikpOworICAgIH0KK30KKworVEVTVChD
Qk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlQnl0ZXMpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3Qgewor
ICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gYnl0ZXM7CisgICAgICAgIGNvbnN0IENTdHJp
bmcgY2JvcjsKKyAgICB9IEJ5dGVzVGVzdENhc2U7CisKKyAgICBzdGF0aWMgY29uc3QgQnl0ZXNU
ZXN0Q2FzZSBrQnl0ZXNUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAgeyB7fSwgQ1N0cmluZygiXHg0
MCIpIH0sCisgICAgICAgIHsgeyAweDAxLCAweDAyLCAweDAzLCAweDA0IH0sIENTdHJpbmcoIlx4
NDRceDAxXHgwMlx4MDNceDA0IikgfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBCeXRlc1Rl
c3RDYXNlJiB0ZXN0X2Nhc2UgOiBrQnl0ZXNUZXN0Q2FzZXMpIHsKKyAgICAgICAgYXV0byBjYm9y
ID0gQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKHRlc3RfY2FzZS5ieXRlcykpOworICAgICAg
ICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXEo
Y2Jvci52YWx1ZSgpLCB0ZXN0X2Nhc2UuY2JvcikpOworICAgIH0KK30KKworVEVTVChDQk9SV3Jp
dGVyVGVzdCwgVGVzdFdyaXRlU3RyaW5nKQoreworICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAg
ICAgY29uc3QgU3RyaW5nIHN0cmluZzsKKyAgICAgICAgY29uc3QgQ1N0cmluZyBjYm9yOworICAg
IH0gU3RyaW5nVGVzdENhc2U7CisKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nVGVzdENhc2Uga1N0
cmluZ1Rlc3RDYXNlc1tdID0geworICAgICAgICB7ICIiLCBDU3RyaW5nKCJceDYwIikgfSwKKyAg
ICAgICAgeyAiYSIsIENTdHJpbmcoIlx4NjFceDYxIikgfSwKKyAgICAgICAgeyAiSUVURiIsIENT
dHJpbmcoIlx4NjRceDQ5XHg0NVx4NTRceDQ2IikgfSwKKyAgICAgICAgeyAiXCJcXCIsIENTdHJp
bmcoIlx4NjJceDIyXHg1YyIpIH0sCisgICAgICAgIHsgU3RyaW5nOjpmcm9tVVRGOCgiXHhjM1x4
YmMiKSwgQ1N0cmluZygiXHg2Mlx4YzNceGJjIikgfSwKKyAgICAgICAgeyBTdHJpbmc6OmZyb21V
VEY4KCJceGU2XHhiMFx4YjQiKSwgQ1N0cmluZygiXHg2M1x4ZTZceGIwXHhiNCIpIH0sCisgICAg
ICAgIHsgU3RyaW5nOjpmcm9tVVRGOCgiXHhmMFx4OTBceDg1XHg5MSIpLCBDU3RyaW5nKCJceDY0
XHhmMFx4OTBceDg1XHg5MSIpIH0KKyAgICB9OworCisgICAgZm9yIChjb25zdCBTdHJpbmdUZXN0
Q2FzZSYgdGVzdF9jYXNlIDoga1N0cmluZ1Rlc3RDYXNlcykgeworICAgICAgICBhdXRvIGNib3Ig
PSBDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUodGVzdF9jYXNlLnN0cmluZykpOworICAgICAg
ICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXEo
Y2Jvci52YWx1ZSgpLCB0ZXN0X2Nhc2UuY2JvcikpOworICAgIH0KK30KKworVEVTVChDQk9SV3Jp
dGVyVGVzdCwgVGVzdFdyaXRlQXJyYXkpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga0Fy
cmF5VGVzdENhc2VDYm9yW10gPSB7CisgICAgICAgIDB4OTgsIDB4MTksICAvLyBhcnJheSBvZiAy
NSBlbGVtZW50cworICAgICAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAw
eDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLAorICAgICAgICAweDBkLCAweDBlLCAw
eDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4
LAorICAgICAgICAweDE4LCAweDE4LCAweDE5LAorICAgIH07CisgICAgVmVjdG9yPENCT1JWYWx1
ZT4gYXJyYXk7CisgICAgZm9yIChpbnQ2NF90IGkgPSAxOyBpIDw9IDI1OyBpKyspIHsKKyAgICAg
ICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZShpKSk7CisgICAgfQorICAgIGF1dG8gY2JvciA9IENC
T1JXcml0ZXI6OldyaXRlKENCT1JWYWx1ZShhcnJheSkpOworICAgIEFTU0VSVF9UUlVFKGNib3Iu
aGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwga0FycmF5VGVz
dENhc2VDYm9yLCBzaXplb2Yoa0FycmF5VGVzdENhc2VDYm9yKSkpOworfQorCitURVNUKENCT1JX
cml0ZXJUZXN0LCBUZXN0V3JpdGVNYXBXaXRoTWFwVmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0
IHVpbnQ4X3Qga01hcFRlc3RDYXNlQ2JvcltdID0geworICAgICAgICAvLyBjbGFuZy1mb3JtYXQg
b2ZmCisgICAgICAgIDB4YjYsICAvLyBtYXAgb2YgOCBwYWlyczoKKyAgICAgICAgMHgwMCwgICAg
ICAgICAgLy8ga2V5IDAKKyAgICAgICAgMHg2MSwgMHg2MSwgICAgLy8gdmFsdWUgImEiCisKKyAg
ICAgICAgMHgxNywgICAgICAgICAgLy8ga2V5IDIzCisgICAgICAgIDB4NjEsICAweDYyLCAgIC8v
IHZhbHVlICJiIgorCisgICAgICAgIDB4MTgsIDB4MTgsICAgIC8vIGtleSAyNAorICAgICAgICAw
eDYxLCAweDYzLCAgLy8gdmFsdWUgImMiCisKKyAgICAgICAgMHgxOCwgMHhGRiwgICAgICAgIC8v
IGtleSAyNTUKKyAgICAgICAgMHg2MSwgIDB4NjQsICAgICAgIC8vIHZhbHVlICJkIgorCisgICAg
ICAgIDB4MTksIDB4MDEsIDB4MDAsICAvLyBrZXkgMjU2CisgICAgICAgIDB4NjEsIDB4NjUsICAg
ICAgICAvLyB2YWx1ZSAiZSIKKworICAgICAgICAweDE5LCAweEZGLCAweEZGLCAgLy8ga2V5IDY1
NTM1CisgICAgICAgIDB4NjEsICAweDY2LCAgICAgICAvLyB2YWx1ZSAiZiIKKworICAgICAgICAw
eDFBLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAgIC8vIGtleSA2NTUzNgorICAgICAgICAweDYx
LCAweDY3LCAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlICJnIgorCisgICAgICAgIDB4MUEs
IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsICAgLy8ga2V5IDQyOTQ5NjcyOTUKKyAgICAgICAgMHg2
MSwgMHg2OCwgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSAiaCIKKworICAgICAgICAvLyBr
ZXkgNDI5NDk2NzI5NgorICAgICAgICAweDFCLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAweDYxLCAweDY5LCAgLy8gIHZhbHVlICJpIgor
CisgICAgICAgIC8vIGtleSBJTlQ2NF9NQVgKKyAgICAgICAgMHgxYiwgMHg3ZiwgMHhmZiwgMHhm
ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAgICAgMHg2MSwgMHg2YSwgIC8v
ICB2YWx1ZSAiaiIKKworICAgICAgICAweDIwLCAgICAgICAgICAvLyBrZXkgLTEKKyAgICAgICAg
MHg2MSwgMHg2YiwgICAgLy8gdmFsdWUgImsiCisKKyAgICAgICAgMHgzNywgICAgICAgICAgLy8g
a2V5IC0yNAorICAgICAgICAweDYxLCAgMHg2YywgICAvLyB2YWx1ZSAibCIKKworICAgICAgICAw
eDM4LCAweDE4LCAgICAvLyBrZXkgLTI1CisgICAgICAgIDB4NjEsIDB4NmQsICAvLyB2YWx1ZSAi
bSIKKworICAgICAgICAweDM4LCAweEZGLCAgICAgICAgLy8ga2V5IC0yNTYKKyAgICAgICAgMHg2
MSwgMHg2ZSwgICAgICAgLy8gdmFsdWUgIm4iCisKKyAgICAgICAgMHgzOSwgMHgwMSwgMHgwMCwg
IC8vIGtleSAtMjU3CisgICAgICAgIDB4NjEsIDB4NmYsICAgICAgICAvLyB2YWx1ZSAibyIKKwor
ICAgICAgICAweDNBLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAgIC8vIGtleSAtNjU1MzcKKyAg
ICAgICAgMHg2MSwgMHg3MCwgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSAicCIKKworICAg
ICAgICAweDNBLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAgIC8vIGtleSAtNDI5NDk2NzI5Ngor
ICAgICAgICAweDYxLCAweDcxLCAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlICJxIgorCisg
ICAgICAgIC8vIGtleSAtNDI5NDk2NzI5NworICAgICAgICAweDNCLCAweDAwLCAweDAwLCAweDAw
LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAweDYxLCAweDcyLCAgLy8g
IHZhbHVlICJyIgorCisgICAgICAgIC8vIGtleSBJTlQ2NF9NSU4KKyAgICAgICAgMHgzYiwgMHg3
ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAgICAgMHg2
MSwgMHg3MywgIC8vICB2YWx1ZSAicyIKKworICAgICAgICAweDYwLCAgICAgICAgLy8ga2V5ICIi
CisgICAgICAgIDB4NjEsIDB4MmUsICAvLyB2YWx1ZSAiLiIKKworICAgICAgICAweDYxLCAweDY1
LCAgLy8ga2V5ICJlIgorICAgICAgICAweDYxLCAweDQ1LCAgLy8gdmFsdWUgIkUiCisKKyAgICAg
ICAgMHg2MiwgMHg2MSwgMHg2MSwgIC8vIGtleSAiYWEiCisgICAgICAgIDB4NjIsIDB4NDEsIDB4
NDEsICAvLyB2YWx1ZSAiQUEiCisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorICAgIH07Cisg
ICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAgLy8gU2hvcnRlciBzdHJpbmdzIHNvcnQg
Zmlyc3QgaW4gQ1RBUCwgdGh1cyB0aGUg4oCcYWHigJ0gdmFsdWUgc2hvdWxkIGJlCisgICAgLy8g
c2VyaWFsaXNlZCBsYXN0IGluIHRoZSBtYXAuCisgICAgbWFwW0NCT1JWYWx1ZSgiYWEiKV0gPSBD
Qk9SVmFsdWUoIkFBIik7CisgICAgbWFwW0NCT1JWYWx1ZSgiZSIpXSA9IENCT1JWYWx1ZSgiRSIp
OworICAgIC8vIFRoZSBlbXB0eSBzdHJpbmcgaXMgc2hvcnRlciB0aGFuIGFsbCBvdGhlcnMsIHNv
IHNob3VsZCBhcHBlYXIgZmlyc3QgYW1vbmcKKyAgICAvLyB0aGUgc3RyaW5ncy4KKyAgICBtYXBb
Q0JPUlZhbHVlKCIiKV0gPSBDQk9SVmFsdWUoIi4iKTsKKyAgICAvLyBNYXAga2V5cyBhcmUgc29y
dGVkIGJ5IG1ham9yIHR5cGUsIGJ5IGJ5dGUgbGVuZ3RoLCBhbmQgdGhlbiBieQorICAgIC8vIGJ5
dGUtd2lzZSBsZXhpY2FsIG9yZGVyLiBTbyBhbGwgaW50ZWdlciB0eXBlIGtleXMgc2hvdWxkIGFw
cGVhciBiZWZvcmUKKyAgICAvLyBrZXkgIiIgYW5kIGFsbCBwb3NpdGl2ZSBpbnRlZ2VyIGtleXMg
c2hvdWxkIGFwcGVhciBiZWZvcmUgbmVnYXRpdmUgaW50ZWdlcgorICAgIC8vIGtleXMuCisgICAg
bWFwW0NCT1JWYWx1ZSgtMSldID0gQ0JPUlZhbHVlKCJrIik7CisgICAgbWFwW0NCT1JWYWx1ZSgt
MjQpXSA9IENCT1JWYWx1ZSgibCIpOworICAgIG1hcFtDQk9SVmFsdWUoLTI1KV0gPSBDQk9SVmFs
dWUoIm0iKTsKKyAgICBtYXBbQ0JPUlZhbHVlKC0yNTYpXSA9IENCT1JWYWx1ZSgibiIpOworICAg
IG1hcFtDQk9SVmFsdWUoLTI1NyldID0gQ0JPUlZhbHVlKCJvIik7CisgICAgbWFwW0NCT1JWYWx1
ZSgtNjU1MzcpXSA9IENCT1JWYWx1ZSgicCIpOworICAgIG1hcFtDQk9SVmFsdWUoaW50NjRfdCgt
NDI5NDk2NzI5NikpXSA9IENCT1JWYWx1ZSgicSIpOworICAgIG1hcFtDQk9SVmFsdWUoaW50NjRf
dCgtNDI5NDk2NzI5NykpXSA9IENCT1JWYWx1ZSgiciIpOworICAgIG1hcFtDQk9SVmFsdWUoc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpXSA9IENCT1JWYWx1ZSgicyIpOworICAg
IG1hcFtDQk9SVmFsdWUoMCldID0gQ0JPUlZhbHVlKCJhIik7CisgICAgbWFwW0NCT1JWYWx1ZSgy
MyldID0gQ0JPUlZhbHVlKCJiIik7CisgICAgbWFwW0NCT1JWYWx1ZSgyNCldID0gQ0JPUlZhbHVl
KCJjIik7CisgICAgbWFwW0NCT1JWYWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+Ojpt
YXgoKSldID0gQ0JPUlZhbHVlKCJkIik7CisgICAgbWFwW0NCT1JWYWx1ZSgyNTYpXSA9IENCT1JW
YWx1ZSgiZSIpOworICAgIG1hcFtDQk9SVmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZf
dD46Om1heCgpKV0gPSBDQk9SVmFsdWUoImYiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKDY1NTM2KV0g
PSBDQk9SVmFsdWUoImciKTsKKyAgICBtYXBbQ0JPUlZhbHVlKGludDY0X3Qoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSldID0gQ0JPUlZhbHVlKCJoIik7CisgICAgbWFwW0NC
T1JWYWx1ZShpbnQ2NF90KDQyOTQ5NjcyOTYpKV0gPSBDQk9SVmFsdWUoImkiKTsKKyAgICBtYXBb
Q0JPUlZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKV0gPSBDQk9SVmFs
dWUoImoiKTsKKyAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUobWFw
KSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUo
ZXEoY2Jvci52YWx1ZSgpLCBrTWFwVGVzdENhc2VDYm9yLCBzaXplb2Yoa01hcFRlc3RDYXNlQ2Jv
cikpKTsKK30KKworVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlTWFwV2l0aEFycmF5KQor
eworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGtNYXBBcnJheVRlc3RDYXNlQ2JvcltdID0gewor
ICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgICAgICAgIDB4YTIsICAvLyBtYXAgb2YgMiBw
YWlycworICAgICAgICAweDYxLCAweDYxLCAgLy8gImEiCisgICAgICAgIDB4MDEsCisKKyAgICAg
ICAgMHg2MSwgMHg2MiwgIC8vICJiIgorICAgICAgICAweDgyLCAgICAgICAgLy8gYXJyYXkgd2l0
aCAyIGVsZW1lbnRzCisgICAgICAgIDB4MDIsCisgICAgICAgIDB4MDMsCisgICAgICAgIC8vIGNs
YW5nLWZvcm1hdCBvbgorICAgIH07CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAg
bWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxKTsKKyAgICBDQk9SVmFsdWU6OkFycmF5
VmFsdWUgYXJyYXk7CisgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgyKSk7CisgICAgYXJyYXku
YXBwZW5kKENCT1JWYWx1ZSgzKSk7CisgICAgbWFwW0NCT1JWYWx1ZSgiYiIpXSA9IENCT1JWYWx1
ZShhcnJheSk7CisgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKG1h
cCkpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVF
KGVxKGNib3IudmFsdWUoKSwga01hcEFycmF5VGVzdENhc2VDYm9yLCBzaXplb2Yoa01hcEFycmF5
VGVzdENhc2VDYm9yKSkpOworfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVOZXN0
ZWRNYXApCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga05lc3RlZE1hcFRlc3RDYXNlW10g
PSB7CisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKKyAgICAgICAgMHhhMiwgIC8vIG1hcCBv
ZiAyIHBhaXJzCisgICAgICAgIDB4NjEsIDB4NjEsICAvLyAiYSIKKyAgICAgICAgMHgwMSwKKwor
ICAgICAgICAweDYxLCAweDYyLCAgLy8gImIiCisgICAgICAgIDB4YTIsICAgICAgICAvLyBtYXAg
b2YgMiBwYWlycworICAgICAgICAweDYxLCAweDYzLCAgLy8gImMiCisgICAgICAgIDB4MDIsCisK
KyAgICAgICAgMHg2MSwgMHg2NCwgIC8vICJkIgorICAgICAgICAweDAzLAorICAgICAgICAvLyBj
bGFuZy1mb3JtYXQgb24KKyAgICB9OworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOworICAg
IG1hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMSk7CisgICAgQ0JPUlZhbHVlOjpNYXBW
YWx1ZSBuZXN0ZWRfbWFwOworICAgIG5lc3RlZF9tYXBbQ0JPUlZhbHVlKCJjIildID0gQ0JPUlZh
bHVlKDIpOworICAgIG5lc3RlZF9tYXBbQ0JPUlZhbHVlKCJkIildID0gQ0JPUlZhbHVlKDMpOwor
ICAgIG1hcFtDQk9SVmFsdWUoImIiKV0gPSBDQk9SVmFsdWUobmVzdGVkX21hcCk7CisgICAgYXV0
byBjYm9yID0gQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKG1hcCkpOworICAgIEFTU0VSVF9U
UlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwg
a05lc3RlZE1hcFRlc3RDYXNlLCBzaXplb2Yoa05lc3RlZE1hcFRlc3RDYXNlKSkpOworfQorCitU
RVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVTaW1wbGVWYWx1ZSkKK3sKKyAgICBzdGF0aWMg
Y29uc3Qgc3RydWN0IHsKKyAgICAgICAgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZSBzaW1wbGVfdmFs
dWU7CisgICAgICAgIGNvbnN0IENTdHJpbmcgY2JvcjsKKyAgICB9IGtTaW1wbGVUZXN0Q2FzZVtd
ID0geworICAgICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OkZBTFNFX1ZBTFVFLCBDU3Ry
aW5nKCJceGY0IikgfSwKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpUUlVFX1ZB
TFVFLCBDU3RyaW5nKCJceGY1IikgfSwKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVl
OjpOVUxMX1ZBTFVFLCBDU3RyaW5nKCJceGY2IikgfSwKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNp
bXBsZVZhbHVlOjpVTkRFRklORUQsIENTdHJpbmcoIlx4ZjciKSB9CisgICAgfTsKKworICAgIGZv
ciAoY29uc3QgYXV0byYgdGVzdF9jYXNlIDoga1NpbXBsZVRlc3RDYXNlKSB7CisgICAgICAgIGF1
dG8gY2JvciA9IENCT1JXcml0ZXI6OldyaXRlKENCT1JWYWx1ZSh0ZXN0X2Nhc2Uuc2ltcGxlX3Zh
bHVlKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBF
WFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIHRlc3RfY2FzZS5jYm9yKSk7CisgICAgfQorfQor
CisvLyBGb3IgbWFqb3IgdHlwZSAwLCAyLCAzLCBlbXB0eSBDQk9SIGFycmF5LCBhbmQgZW1wdHkg
Q0JPUiBtYXAsIHRoZSBuZXN0aW5nCisvLyBkZXB0aCBpcyBleHBlY3RlZCB0byBiZSAwIHNpbmNl
IHRoZSBDQk9SIGRlY29kZXIgZG9lcyBub3QgbmVlZCB0byBwYXJzZQorLy8gYW55IG5lc3RlZCBD
Qk9SIHZhbHVlIGVsZW1lbnRzLgorVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlU2luZ2xl
TGF5ZXIpCit7CisgICAgY29uc3QgQ0JPUlZhbHVlIHNpbXBsZV91aW50ID0gQ0JPUlZhbHVlKDEp
OworICAgIGNvbnN0IENCT1JWYWx1ZSBzaW1wbGVfc3RyaW5nID0gQ0JPUlZhbHVlKCJhIik7Cisg
ICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVfZGF0YSA9IHsgMHgwMSwgMHgwMiwgMHgwMywg
MHgwNCB9OworICAgIGNvbnN0IENCT1JWYWx1ZSBzaW1wbGVfYnl0ZXN0cmluZyA9IENCT1JWYWx1
ZShieXRlX2RhdGEpOworICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSBlbXB0eV9jYm9yX2FycmF5
OworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgZW1wdHlfY2Jvcl9tYXA7CisgICAgY29uc3QgQ0JP
UlZhbHVlIGVtcHR5X2FycmF5X3ZhbHVlID0gQ0JPUlZhbHVlKGVtcHR5X2Nib3JfYXJyYXkpOwor
ICAgIGNvbnN0IENCT1JWYWx1ZSBlbXB0eV9tYXBfdmFsdWUgPSBDQk9SVmFsdWUoZW1wdHlfY2Jv
cl9tYXApOworICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSBzaW1wbGVfYXJyYXk7CisgICAgc2lt
cGxlX2FycmF5LmFwcGVuZChDQk9SVmFsdWUoMikpOworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUg
c2ltcGxlX21hcDsKKyAgICBzaW1wbGVfbWFwW0NCT1JWYWx1ZSgiYiIpXSA9IENCT1JWYWx1ZSgz
KTsKKyAgICBjb25zdCBDQk9SVmFsdWUgc2luZ2xlX2xheWVyX2Nib3JfbWFwID0gQ0JPUlZhbHVl
KHNpbXBsZV9tYXApOworICAgIGNvbnN0IENCT1JWYWx1ZSBzaW5nbGVfbGF5ZXJfY2Jvcl9hcnJh
eSA9IENCT1JWYWx1ZShzaW1wbGVfYXJyYXkpOworCisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRl
cjo6V3JpdGUoc2ltcGxlX3VpbnQsIDApLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShD
Qk9SV3JpdGVyOjpXcml0ZShzaW1wbGVfc3RyaW5nLCAwKS5oYXNfdmFsdWUoKSk7CisgICAgRVhQ
RUNUX1RSVUUoQ0JPUldyaXRlcjo6V3JpdGUoc2ltcGxlX2J5dGVzdHJpbmcsIDApLmhhc192YWx1
ZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6OldyaXRlKGVtcHR5X2FycmF5X3Zh
bHVlLCAwKS5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6V3JpdGUo
ZW1wdHlfbWFwX3ZhbHVlLCAwKS5oYXNfdmFsdWUoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoQ0JP
UldyaXRlcjo6V3JpdGUoc2luZ2xlX2xheWVyX2Nib3JfYXJyYXksIDApLmhhc192YWx1ZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjpXcml0ZShzaW5nbGVfbGF5ZXJfY2Jvcl9hcnJh
eSwgMSkuaGFzX3ZhbHVlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKENCT1JXcml0ZXI6OldyaXRl
KHNpbmdsZV9sYXllcl9jYm9yX21hcCwgMCkuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVF
KENCT1JXcml0ZXI6OldyaXRlKHNpbmdsZV9sYXllcl9jYm9yX21hcCwgMSkuaGFzX3ZhbHVlKCkp
OworfQorCisvLyBNYWpvciB0eXBlIDUgbmVzdGVkIENCT1IgbWFwIHZhbHVlIHdpdGggZm9sbG93
aW5nIHN0cnVjdHVyZS4KKy8vICAgICB7ImEiOiAxLAorLy8gICAgICAiYiI6IHsiYyI6IDIsCisv
LyAgICAgICAgICAgICJkIjogM319CitURVNUKENCT1JXcml0ZXJUZXN0LCBOZXN0ZWRNYXBzKQor
eworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgY2Jvcl9tYXA7CisgICAgY2Jvcl9tYXBbQ0JPUlZh
bHVlKCJhIildID0gQ0JPUlZhbHVlKDEpOworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbmVzdGVk
X21hcDsKKyAgICBuZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiYyIpXSA9IENCT1JWYWx1ZSgyKTsKKyAg
ICBuZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiZCIpXSA9IENCT1JWYWx1ZSgzKTsKKyAgICBjYm9yX21h
cFtDQk9SVmFsdWUoImIiKV0gPSBDQk9SVmFsdWUobmVzdGVkX21hcCk7CisgICAgRVhQRUNUX1RS
VUUoQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKGNib3JfbWFwKSwgMikuaGFzX3ZhbHVlKCkp
OworICAgIEVYUEVDVF9GQUxTRShDQk9SV3JpdGVyOjpXcml0ZShDQk9SVmFsdWUoY2Jvcl9tYXAp
LCAxKS5oYXNfdmFsdWUoKSk7Cit9CisKKy8vIFRlc3RpbmcgV3JpdGUoKSBmdW5jdGlvbiBmb3Ig
Zm9sbG93aW5nIENCT1Igc3RydWN0dXJlIHdpdGggZGVwdGggb2YgMy4KKy8vICAgICBbMSwKKy8v
ICAgICAgMiwKKy8vICAgICAgMywKKy8vICAgICAgeyJhIjogMSwKKy8vICAgICAgICJiIjogeyJj
IjogMiwKKy8vICAgICAgICAgICAgICJkIjogM319XQorVEVTVChDQk9SV3JpdGVyVGVzdCwgVW5i
YWxhbmNlZE5lc3RlZENvbnRhaW5lcnMpCit7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGNi
b3JfYXJyYXk7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBjYm9yX21hcDsKKyAgICBDQk9SVmFs
dWU6Ok1hcFZhbHVlIG5lc3RlZF9tYXA7CisKKyAgICBjYm9yX21hcFtDQk9SVmFsdWUoImEiKV0g
PSBDQk9SVmFsdWUoMSk7CisgICAgbmVzdGVkX21hcFtDQk9SVmFsdWUoImMiKV0gPSBDQk9SVmFs
dWUoMik7CisgICAgbmVzdGVkX21hcFtDQk9SVmFsdWUoImQiKV0gPSBDQk9SVmFsdWUoMyk7Cisg
ICAgY2Jvcl9tYXBbQ0JPUlZhbHVlKCJiIildID0gQ0JPUlZhbHVlKG5lc3RlZF9tYXApOworICAg
IGNib3JfYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgxKSk7CisgICAgY2Jvcl9hcnJheS5hcHBlbmQo
Q0JPUlZhbHVlKDIpKTsKKyAgICBjYm9yX2FycmF5LmFwcGVuZChDQk9SVmFsdWUoMykpOworICAg
IGNib3JfYXJyYXkuYXBwZW5kKENCT1JWYWx1ZShjYm9yX21hcCkpOworCisgICAgRVhQRUNUX1RS
VUUoQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKGNib3JfYXJyYXkpLCAzKS5oYXNfdmFsdWUo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKENCT1JXcml0ZXI6OldyaXRlKENCT1JWYWx1ZShjYm9yX2Fy
cmF5KSwgMikuaGFzX3ZhbHVlKCkpOworfQorCisvLyBUZXN0aW5nIFdyaXRlKCkgZnVuY3Rpb24g
Zm9yIGZvbGxvd2luZyBDQk9SIHN0cnVjdHVyZS4KKy8vICAgICB7ImEiOiAxLAorLy8gICAgICAi
YiI6IHsiYyI6IDIsCisvLyAgICAgICAgICAgICJkIjogMworLy8gICAgICAgICAgICAiaCI6IHsg
ImUiOiA0LAorLy8gICAgICAgICAgICAgICAgICAgImYiOiA1LAorLy8gICAgICAgICAgICAgICAg
ICAgImciOiBbNiwgNywgWzhdXX19fQorLy8gU2luY2UgYWJvdmUgQ0JPUiBjb250YWlucyA1IG5l
c3RpbmcgbGV2ZWxzLiBUaHVzLCBXcml0ZSgpIGlzIGV4cGVjdGVkIHRvCisvLyByZXR1cm4gZW1w
dHkgb3B0aW9uYWwgb2JqZWN0IHdoZW4gbWF4aW11bSBuZXN0aW5nIGxheWVyIHNpemUgaXMgc2V0
IHRvIDQuCitURVNUKENCT1JXcml0ZXJUZXN0LCBPdmVybHlOZXN0ZWRDQk9SKQoreworICAgIENC
T1JWYWx1ZTo6TWFwVmFsdWUgbWFwOworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbmVzdGVkX21h
cDsKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIGlubmVyX25lc3RlZF9tYXA7CisgICAgQ0JPUlZh
bHVlOjpBcnJheVZhbHVlIGlubmVyX2FycmF5OworICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSBh
cnJheTsKKworICAgIG1hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMSk7CisgICAgbmVz
dGVkX21hcFtDQk9SVmFsdWUoImMiKV0gPSBDQk9SVmFsdWUoMik7CisgICAgbmVzdGVkX21hcFtD
Qk9SVmFsdWUoImQiKV0gPSBDQk9SVmFsdWUoMyk7CisgICAgaW5uZXJfbmVzdGVkX21hcFtDQk9S
VmFsdWUoImUiKV0gPSBDQk9SVmFsdWUoNCk7CisgICAgaW5uZXJfbmVzdGVkX21hcFtDQk9SVmFs
dWUoImYiKV0gPSBDQk9SVmFsdWUoNSk7CisgICAgaW5uZXJfYXJyYXkuYXBwZW5kKENCT1JWYWx1
ZSg2KSk7CisgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSg2KSk7CisgICAgYXJyYXkuYXBwZW5k
KENCT1JWYWx1ZSg3KSk7CisgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZShpbm5lcl9hcnJheSkp
OworICAgIGlubmVyX25lc3RlZF9tYXBbQ0JPUlZhbHVlKCJnIildID0gQ0JPUlZhbHVlKGFycmF5
KTsKKyAgICBuZXN0ZWRfbWFwW0NCT1JWYWx1ZSgiaCIpXSA9IENCT1JWYWx1ZShpbm5lcl9uZXN0
ZWRfbWFwKTsKKyAgICBtYXBbQ0JPUlZhbHVlKCJiIildID0gQ0JPUlZhbHVlKG5lc3RlZF9tYXAp
OworCisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZhbHVlKG1hcCksIDUp
Lmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6V3JpdGUoQ0JPUlZh
bHVlKG1hcCksIDQpLmhhc192YWx1ZSgpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331146</attachid>
            <date>2018-01-11 17:43:54 -0800</date>
            <delta_ts>2018-01-11 19:22:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181522-20180111174309.patch</filename>
            <type>text/plain</type>
            <size>129068</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2N2M3Zjk1YWQzM2Y0
Y2ZmNzQ4NzJhMjdjMjM2MDhlZmI5YzFiNi4uNzRkMzljOTk5YmRiNTk3Yjc1ZTY0OTcyOTI1YTBk
MThlNWE4MTkzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDE4LTAxLTExICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBv
cnQgYSBDQk9SIGNvZGVyIGZyb20gQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTUyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYw
NTU3Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbXBvcnRzIGEgQ0JPUiBjb2RlciBpbmNsdWRpbmcgZW5jb2RlciBhbmQgZGVj
b2RlciBmcm9tIENocm9taXVtLiBDQk9SIGVuY29kZXIKKyAgICAgICAgaXMgbmVlZGVkIGZvciBX
ZWJBdXRoTiB0byBlbmNvZGUgYXR0ZXN0YXRpb24gb2JqZWN0IGludG8gYmluYXJpZXMuIFdoZW4g
c3VwcG9ydGluZyBleHRlbnNpb25zCisgICAgICAgIGluIHRoZSBmdXR1cmUsIENCT1IgZW5jb2Rl
ci9kZWNvZGVyIHdpbGwgYmUgbmVlZGVkIGFzIHdlbGwuIEltcGxlbWVudGF0aW5nIGFuZCBtYWlu
dGFpbmluZworICAgICAgICBhIGZ1bGx5LWZsZWRnZWQgQ0JPUiBjb2RlciBkb2Vzbid0IHNlZW0g
dG8gYWxpZ24gd2l0aCBXZWJLaXQncyBiZXN0IGludGVyZXN0cy4gVGhlcmVmb3JlLAorICAgICAg
ICBpbXBvcnRpbmcgYSBtb3N0IHN1aXRhYmxlIHRoaXJkIHBhcnR5IGltcGxlbWVudGF0aW9uIHdp
bGwgYmUgd2lzZS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCBpdCBmdWxseSBpbnRlZ3JhdGUg
dGhlIHdob2xlIGNvZGVyIGludG8gb3VyIGNvZGViYXNlLiBUaG9zZSBjaGFuZ2VzIGluY2x1ZGVz
OgorICAgICAgICAgICAgMS4gU3Vic3RpdHV0ZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBlbmpveSBh
IGJldHRlciBXVEYgdmVyc2lvbi4KKyAgICAgICAgICAgIDIuIFJlcGxhY2luZyBtYXJjb3MuCisg
ICAgICAgICAgICAzLiBJbXBsZW1lbnRhdGluZyB3b3JrYXJvdW5kcyBmb3Igc29tZSBmdW5jdGlv
bmFsaXRpZXMgdGhhdCB3ZSBsYWNrIGZ1bmRhbWVudGFsIHR5cGVzJyBzdXBwb3J0LgorICAgICAg
ICAgICAgNC4gQ2hhbmdpbmcgdGhlIGNvZGluZyBzdHlsZSB0byBtYXRjaCBvdXJzLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnRlbmQgdG8gaW1wcm92ZSB0aGUgbG9naWMgb2YgdGhl
IG9yaWdpbmFsIGNvZGViYXNlLiBIZW5jZSBzb21lIG9mIHRoZQorICAgICAgICBjb2RpbmcgbG9n
aWMgbWlnaHQgbm90IG1hdGNoIHdoYXQgV2ViS2l0IHVzdXNhbGx5IGhhcy4KKworICAgICAgICBI
ZXJlIGlzIGEgZnVsbCBsaXN0IG9mIENocm9taXVtIGNoYW5nZXMgdGhhdCBjb25zdHJ1Y3RlZCB0
aGlzIENCT1IgY29kZXIgaW4gY2hyb25vbG9naWNhbCBvcmRlcjoKKyAgICAgICAgNmVmY2Y0OTU1
MjFkMThkMDYwMDI3NzYyZjQ4YmIyOTJkNjk3OTEzNiwKKyAgICAgICAgOWViNDNmZDM0Nzg5MGI0
YzZjZjU0YzRiZDdlYzFiYmI4OGUzODFlMSwKKyAgICAgICAgMzFjODVlNzRmZDU2Nzc3MmYxOGUw
YTQxYmU0NjhkMDRhZjcyMWYyMSwKKyAgICAgICAgNjg2NzJmZGNhZDI4MGE4ZmY2OWI5MTkyN2Qz
OGQwZWFiZjJjODdmMiwKKyAgICAgICAgMGNhODY2N2MwNTg0ZmIyMWMwNzQ4ZWJkNzQ2OGQzMjg4
OTc1OWEwNywKKyAgICAgICAgZGY3NjNkNzkwZDdlNDVkNzAxMTZiZGVmYWNiZmQ0ZjlmYWE4OTk1
ZSwKKyAgICAgICAgNmQzMGM0YTYyMWM2NTMxNGRiNjNlYjU2ZTg3YzE5YWI3NTYyN2IyNiwKKyAg
ICAgICAgNTBmZTkyOTUzZjQ3MzlmMTdhNjIzMDNmZWRiZjhkYjkyMzQzMTdjOCwKKyAgICAgICAg
NDdiZTIyYzM2MDM0MjRkMTgzMmQwNDZhMzQ4ZmYzZjk4MjUwMDI4OCwKKyAgICAgICAgOThhNTll
NDY5NDhiMmM3MTYwODkyNjAwNGZhYzgxOTJiMGZmMjIwOCwKKyAgICAgICAgMDc1NDBjNmQ4NTBl
ZDZlMGZhNTA4ZDYzYzIwYThjZTk2ZDc1MWRlNiwKKyAgICAgICAgMDZhZTMyZDY0MGM4ZTRiODZl
YTg5MTRhODBlZTQxOWVhMTZlNTZkOC4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4K
KworICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SQmluYXJ5Lmg6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpDQk9SUmVhZGVyKToKKyAgICAgICAgKGNib3I6OkNC
T1JSZWFkZXI6On5DQk9SUmVhZGVyKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OnJlYWQp
OgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6ZGVjb2RlQ0JPUik6CisgICAgICAgIChjYm9y
OjpDQk9SUmVhZGVyOjpyZWFkVmFyaWFkaWNMZW5ndGhJbnRlZ2VyKToKKyAgICAgICAgKGNib3I6
OkNCT1JSZWFkZXI6OmRlY29kZVZhbHVlVG9OZWdhdGl2ZSk6CisgICAgICAgIChjYm9yOjpDQk9S
UmVhZGVyOjpkZWNvZGVWYWx1ZVRvVW5zaWduZWQpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRl
cjo6cmVhZFNpbXBsZVZhbHVlKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OnJlYWRTdHJp
bmcpOgorICAgICAgICBXb3JrYXJvdW5kcyBhcHBsaWVkLgorICAgICAgICAoY2Jvcjo6Q0JPUlJl
YWRlcjo6cmVhZEJ5dGVzKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OnJlYWRDQk9SQXJy
YXkpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6cmVhZENCT1JNYXApOgorICAgICAgICAo
Y2Jvcjo6Q0JPUlJlYWRlcjo6Y2FuQ29uc3VtZSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVy
OjpjaGVja01pbmltYWxFbmNvZGluZyk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpjaGVj
a0V4dHJhbmVvdXNEYXRhKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OmNoZWNrRHVwbGlj
YXRlS2V5KToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6Omhhc1ZhbGlkVVRGOEZvcm1hdCk6
CisgICAgICAgIFdvcmthcm91bmRzIGFwcGxpZWQuCisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVy
OjpjaGVja091dE9mT3JkZXJLZXkpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6Z2V0RXJy
b3JDb2RlKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OmVycm9yQ29kZVRvU3RyaW5nKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlJlYWRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChjYm9yOjpDQk9SVmFsdWU6OkNCT1JWYWx1ZSk6CisgICAgICAgIChjYm9yOjpDQk9SVmFs
dWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6On5DQk9SVmFsdWUpOgor
ICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjpjbG9uZSBjb25zdCk6CisgICAgICAgIChjYm9yOjpD
Qk9SVmFsdWU6OmdldEludGVnZXIgY29uc3QpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjpn
ZXRVbnNpZ25lZCBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OmdldE5lZ2F0aXZl
IGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6Z2V0U3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6Z2V0Qnl0ZVN0cmluZyBjb25zdCk6CisgICAgICAgIChj
Ym9yOjpDQk9SVmFsdWU6OmdldEFycmF5IGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1
ZTo6Z2V0TWFwIGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6Z2V0U2ltcGxlVmFs
dWUgY29uc3QpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjppbnRlcm5hbE1vdmVDb25zdHJ1
Y3RGcm9tKToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6aW50ZXJuYWxDbGVhbnVwKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmg6IEFkZGVkLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SV3JpdGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChjYm9yOjpDQk9SV3JpdGVyOjp+Q0JPUldyaXRlcik6CisgICAgICAgIChjYm9yOjpDQk9SV3Jp
dGVyOjp3cml0ZSk6CisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpDQk9SV3JpdGVyKToKKyAg
ICAgICAgKGNib3I6OkNCT1JXcml0ZXI6OmVuY29kZUNCT1IpOgorICAgICAgICBXb3JrYXJvdW5k
cyBhcHBsaWVkLgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6c3RhcnRJdGVtKToKKyAgICAg
ICAgKGNib3I6OkNCT1JXcml0ZXI6OnNldEFkZGl0aW9uYWxJbmZvcm1hdGlvbik6CisgICAgICAg
IChjYm9yOjpDQk9SV3JpdGVyOjpzZXRVaW50KToKKyAgICAgICAgKGNib3I6OkNCT1JXcml0ZXI6
OmdldE51bVVpbnRCeXRlcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JX
cml0ZXIuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTAxLTEwICBCYXN1a2UgU3V6dWtp
ICA8QmFzdWtlLlN1enVraUBzb255LmNvbT4KIAogICAgICAgICBbQ3VybF0gQ3Jvc3MtcHJvdG9j
b2wsIGNyb3NzLXNpdGUgc2NyaXB0aW5nIChYUFhTUykgdXNpbmcgSFRNTCBmb3JtcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JCaW5hcnkuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SQmluYXJ5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTcyYTQ0ZTU5ODliYzA5YjdmYzJlOGI1NTEyOGRjZGFmNTYxN2Y2NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SQmluYXJ5
LmgKQEAgLTAsMCArMSw1OSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgY2JvciB7CisKK25hbWVzcGFjZSBjb25zdGFudHMgeworCisvLyBNYXNrIHNlbGVjdGluZyB0
aGUgbG93LW9yZGVyIDUgYml0cyBvZiB0aGUgImluaXRpYWwgYnl0ZSIsIHdoaWNoIGlzIHdoZXJl
CisvLyB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkLgorc3RhdGljIGNvbnN0
ZXhwciB1aW50OF90IGtBZGRpdGlvbmFsSW5mb3JtYXRpb25NYXNrID0gMHgxRjsKKy8vIE1hc2sg
c2VsZWN0aW5nIHRoZSBoaWdoLW9yZGVyIDMgYml0cyBvZiB0aGUgImluaXRpYWwgYnl0ZSIsIHdo
aWNoIGluZGljYXRlcworLy8gdGhlIG1ham9yIHR5cGUgb2YgdGhlIGVuY29kZWQgdmFsdWUuCitz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga01ham9yVHlwZU1hc2sgPSAweEUwOworLy8gSW5kaWNh
dGVzIHRoZSBudW1iZXIgb2YgYml0cyB0aGUgImluaXRpYWwgYnl0ZSIgbmVlZHMgdG8gYmUgc2hp
ZnRlZCB0byB0aGUKKy8vIHJpZ2h0IGFmdGVyIGFwcGx5aW5nIHxrTWFqb3JUeXBlTWFza3wgdG8g
cHJvZHVjZSB0aGUgbWFqb3IgdHlwZSBpbiB0aGUKKy8vIGxvd2VybW9zdCBiaXRzLgorc3RhdGlj
IGNvbnN0ZXhwciB1aW50OF90IGtNYWpvclR5cGVCaXRTaGlmdCA9IDV1OworLy8gSW5kaWNhdGVz
IHRoZSBpbnRlZ2VyIGlzIGluIHRoZSBmb2xsb3dpbmcgYnl0ZS4KK3N0YXRpYyBjb25zdGV4cHIg
dWludDhfdCBrQWRkaXRpb25hbEluZm9ybWF0aW9uMUJ5dGUgPSAyNHU7CisvLyBJbmRpY2F0ZXMg
dGhlIGludGVnZXIgaXMgaW4gdGhlIG5leHQgMiBieXRlcy4KK3N0YXRpYyBjb25zdGV4cHIgdWlu
dDhfdCBrQWRkaXRpb25hbEluZm9ybWF0aW9uMkJ5dGVzID0gMjV1OworLy8gSW5kaWNhdGVzIHRo
ZSBpbnRlZ2VyIGlzIGluIHRoZSBuZXh0IDQgYnl0ZXMuCitzdGF0aWMgY29uc3RleHByIHVpbnQ4
X3Qga0FkZGl0aW9uYWxJbmZvcm1hdGlvbjRCeXRlcyA9IDI2dTsKKy8vIEluZGljYXRlcyB0aGUg
aW50ZWdlciBpcyBpbiB0aGUgbmV4dCA4IGJ5dGVzLgorc3RhdGljIGNvbnN0ZXhwciB1aW50OF90
IGtBZGRpdGlvbmFsSW5mb3JtYXRpb244Qnl0ZXMgPSAyN3U7CisKK30gLy8gbmFtZXNwYWNlIGNv
bnN0YW50cworCit9IC8vIG5hbWVzcGFjZSBjYm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlJlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZlODBlMWQ2
OTAxZWJmYzdiNThiN2M1ZjA1NzMwYzQzYWZiN2I0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVyLmNwcApAQCAtMCwwICsx
LDM3NiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0Ogor
Ly8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8g
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ0JPUlJlYWRlci5oIgorCisjaW5jbHVkZSAi
Q0JPUkJpbmFyeS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5j
bHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIGNib3IgeworCituYW1lc3BhY2UgeworCitDQk9S
VmFsdWU6OlR5cGUgZ2V0TWFqb3JUeXBlKHVpbnQ4X3QgaW5pdGlhbERhdGFCeXRlKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDQk9SVmFsdWU6OlR5cGU+KChpbml0aWFsRGF0YUJ5dGUgJiBj
b25zdGFudHM6OmtNYWpvclR5cGVNYXNrKSA+PiBjb25zdGFudHM6OmtNYWpvclR5cGVCaXRTaGlm
dCk7Cit9CisKK3VpbnQ4X3QgZ2V0QWRkaXRpb25hbEluZm8odWludDhfdCBpbml0aWFsRGF0YUJ5
dGUpCit7CisgICAgcmV0dXJuIGluaXRpYWxEYXRhQnl0ZSAmIGNvbnN0YW50czo6a0FkZGl0aW9u
YWxJbmZvcm1hdGlvbk1hc2s7Cit9CisKKy8vIEVycm9yIG1lc3NhZ2VzIHRoYXQgY29ycmVzcG9u
ZCB0byBlYWNoIG9mIHRoZSBlcnJvciBjb2Rlcy4KK2NvbnN0IGNoYXIga05vRXJyb3JbXSA9ICJT
dWNjZXNzZnVsbHkgZGVzZXJpYWxpemVkIHRvIGEgQ0JPUiB2YWx1ZS4iOworY29uc3QgY2hhciBr
VW5zdXBwb3J0ZWRNYWpvclR5cGVbXSA9ICJVbnN1cHBvcnRlZCBtYWpvciB0eXBlLiI7Citjb25z
dCBjaGFyIGtVbmtub3duQWRkaXRpb25hbEluZm9bXSA9ICJVbmtub3duIGFkZGl0aW9uYWwgaW5m
byBmb3JtYXQgaW4gdGhlIGZpcnN0IGJ5dGUuIjsKK2NvbnN0IGNoYXIga0luY29tcGxldGVDQk9S
RGF0YVtdID0gIlByZW1hdHVyZWx5IHRlcm1pbmF0ZWQgQ0JPUiBkYXRhIGJ5dGUgYXJyYXkuIjsK
K2NvbnN0IGNoYXIga0luY29ycmVjdE1hcEtleVR5cGVbXSA9ICJNYXAga2V5cyBvdGhlciB0aGFu
IHV0Zi04IGVuY29kZWQgc3RyaW5ncyBhcmUgbm90IGFsbG93ZWQuIjsKK2NvbnN0IGNoYXIga1Rv
b011Y2hOZXN0aW5nW10gPSAiVG9vIG11Y2ggbmVzdGluZy4iOworY29uc3QgY2hhciBrSW52YWxp
ZFVURjhbXSA9ICJTdHJpbmcgZW5jb2Rpbmcgb3RoZXIgdGhhbiB1dGY4IGFyZSBub3QgYWxsb3dl
ZC4iOworY29uc3QgY2hhciBrRXh0cmFuZW91c0RhdGFbXSA9ICJUcmFpbGluZyBkYXRhIGJ5dGVz
IGFyZSBub3QgYWxsb3dlZC4iOworY29uc3QgY2hhciBrRHVwbGljYXRlS2V5W10gPSAiRHVwbGlj
YXRlIG1hcCBrZXlzIGFyZSBub3QgYWxsb3dlZC4iOworY29uc3QgY2hhciBrTWFwS2V5T3V0T2ZP
cmRlcltdID0gIk1hcCBrZXlzIG11c3QgYmUgc29ydGVkIGJ5IGJ5dGUgbGVuZ3RoIGFuZCB0aGVu
IGJ5IGJ5dGUtd2lzZSBsZXhpY2FsIG9yZGVyLiI7Citjb25zdCBjaGFyIGtOb25NaW5pbWFsQ0JP
UkVuY29kaW5nW10gPSAiVW5zaWduZWQgaW50ZWdlcnMgbXVzdCBiZSBlbmNvZGVkIHdpdGggbWlu
aW11bSBudW1iZXIgb2YgYnl0ZXMuIjsKK2NvbnN0IGNoYXIga1Vuc3VwcG9ydGVkU2ltcGxlVmFs
dWVbXSA9ICJVbnN1cHBvcnRlZCBvciB1bmFzc2lnbmVkIHNpbXBsZSB2YWx1ZS4iOworY29uc3Qg
Y2hhciBrVW5zdXBwb3J0ZWRGbG9hdGluZ1BvaW50VmFsdWVbXSA9ICJGbG9hdGluZyBwb2ludCBu
dW1iZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiI7Citjb25zdCBjaGFyIGtPdXRPZlJhbmdlSW50ZWdl
clZhbHVlW10gPSAiSW50ZWdlciB2YWx1ZXMgbXVzdCBiZSBiZXR3ZWVuIElOVDY0X01JTiBhbmQg
SU5UNjRfTUFYLiI7CisKK30gLy8gbmFtZXNwYWNlCisKK0NCT1JSZWFkZXI6OkNCT1JSZWFkZXIo
Qnl0ZXM6OmNvbnN0X2l0ZXJhdG9yIGl0LCBCeXRlczo6Y29uc3RfaXRlcmF0b3IgZW5kKQorICAg
IDogbV9pdChpdCkKKyAgICAsIG1fZW5kKGVuZCkKKyAgICAsIG1fZXJyb3JDb2RlKERlY29kZXJF
cnJvcjo6Q0JPUk5vRXJyb3IpCit7Cit9CisKK0NCT1JSZWFkZXI6On5DQk9SUmVhZGVyKCkKK3sK
K30KKworLy8gc3RhdGljCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6cmVh
ZChjb25zdCBCeXRlcyYgZGF0YSwgRGVjb2RlckVycm9yKiBlcnJvckNvZGVPdXQsIGludCBtYXhO
ZXN0aW5nTGV2ZWwpCit7CisgICAgQ0JPUlJlYWRlciByZWFkZXIoZGF0YS5iZWdpbigpLCBkYXRh
LmVuZCgpKTsKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gZGVjb2RlZENib3IgPSByZWFk
ZXIuZGVjb2RlQ0JPUihtYXhOZXN0aW5nTGV2ZWwpOworCisgICAgaWYgKGRlY29kZWRDYm9yKQor
ICAgICAgICByZWFkZXIuY2hlY2tFeHRyYW5lb3VzRGF0YSgpOworICAgIGlmIChlcnJvckNvZGVP
dXQpCisgICAgICAgICplcnJvckNvZGVPdXQgPSByZWFkZXIuZ2V0RXJyb3JDb2RlKCk7CisKKyAg
ICBpZiAocmVhZGVyLmdldEVycm9yQ29kZSgpICE9IERlY29kZXJFcnJvcjo6Q0JPUk5vRXJyb3Ip
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIGRlY29kZWRDYm9yOwor
fQorCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6ZGVjb2RlQ0JPUihpbnQg
bWF4TmVzdGluZ0xldmVsKQoreworICAgIGlmIChtYXhOZXN0aW5nTGV2ZWwgPCAwIHx8IG1heE5l
c3RpbmdMZXZlbCA+IGtDQk9STWF4RGVwdGgpIHsKKyAgICAgICAgbV9lcnJvckNvZGUgPSBEZWNv
ZGVyRXJyb3I6OlRvb011Y2hOZXN0aW5nOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0KKworICAgIGlmICghY2FuQ29uc3VtZSgxKSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9
IERlY29kZXJFcnJvcjo6SW5jb21wbGV0ZUNCT1JEYXRhOworICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIH0KKworICAgIGNvbnN0IHVpbnQ4X3QgaW5pdGlhbEJ5dGUgPSAqbV9pdCsr
OworICAgIGNvbnN0IGF1dG8gbWFqb3JfdHlwZSA9IGdldE1ham9yVHlwZShpbml0aWFsQnl0ZSk7
CisgICAgY29uc3QgdWludDhfdCBhZGRpdGlvbmFsSW5mbyA9IGdldEFkZGl0aW9uYWxJbmZvKGlu
aXRpYWxCeXRlKTsKKworICAgIHVpbnQ2NF90IHZhbHVlOworICAgIGlmICghcmVhZFZhcmlhZGlj
TGVuZ3RoSW50ZWdlcihhZGRpdGlvbmFsSW5mbywgJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHN3aXRjaCAobWFqb3JfdHlwZSkgeworICAgIGNhc2UgQ0JPUlZh
bHVlOjpUeXBlOjpVbnNpZ25lZDoKKyAgICAgICAgcmV0dXJuIGRlY29kZVZhbHVlVG9VbnNpZ25l
ZCh2YWx1ZSk7CisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6Ok5lZ2F0aXZlOgorICAgICAgICBy
ZXR1cm4gZGVjb2RlVmFsdWVUb05lZ2F0aXZlKHZhbHVlKTsKKyAgICBjYXNlIENCT1JWYWx1ZTo6
VHlwZTo6Qnl0ZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIHJlYWRCeXRlcyh2YWx1ZSk7CisgICAg
Y2FzZSBDQk9SVmFsdWU6OlR5cGU6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIHJlYWRTdHJpbmco
dmFsdWUpOworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpBcnJheToKKyAgICAgICAgcmV0dXJu
IHJlYWRDQk9SQXJyYXkodmFsdWUsIG1heE5lc3RpbmdMZXZlbCk7CisgICAgY2FzZSBDQk9SVmFs
dWU6OlR5cGU6Ok1hcDoKKyAgICAgICAgcmV0dXJuIHJlYWRDQk9STWFwKHZhbHVlLCBtYXhOZXN0
aW5nTGV2ZWwpOworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpTaW1wbGVWYWx1ZToKKyAgICAg
ICAgcmV0dXJuIHJlYWRTaW1wbGVWYWx1ZShhZGRpdGlvbmFsSW5mbywgdmFsdWUpOworICAgIGNh
c2UgQ0JPUlZhbHVlOjpUeXBlOjpOb25lOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBt
X2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6VW5zdXBwb3J0ZWRNYWpvclR5cGU7CisgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworYm9vbCBDQk9SUmVhZGVyOjpyZWFkVmFyaWFkaWNMZW5n
dGhJbnRlZ2VyKHVpbnQ4X3QgYWRkaXRpb25hbEluZm8sIHVpbnQ2NF90KiB2YWx1ZSkKK3sKKyAg
ICB1aW50OF90IGFkZGl0aW9uYWxCeXRlcyA9IDA7CisgICAgaWYgKGFkZGl0aW9uYWxJbmZvIDwg
MjQpIHsKKyAgICAgICAgKnZhbHVlID0gYWRkaXRpb25hbEluZm87CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmIChhZGRpdGlvbmFsSW5mbyA9PSAyNCkKKyAgICAgICAgYWRk
aXRpb25hbEJ5dGVzID0gMTsKKyAgICBlbHNlIGlmIChhZGRpdGlvbmFsSW5mbyA9PSAyNSkKKyAg
ICAgICAgYWRkaXRpb25hbEJ5dGVzID0gMjsKKyAgICBlbHNlIGlmIChhZGRpdGlvbmFsSW5mbyA9
PSAyNikKKyAgICAgICAgYWRkaXRpb25hbEJ5dGVzID0gNDsKKyAgICBlbHNlIGlmIChhZGRpdGlv
bmFsSW5mbyA9PSAyNykKKyAgICAgICAgYWRkaXRpb25hbEJ5dGVzID0gODsKKyAgICBlbHNlIHsK
KyAgICAgICAgbV9lcnJvckNvZGUgPSBEZWNvZGVyRXJyb3I6OlVua25vd25BZGRpdGlvbmFsSW5m
bzsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghY2FuQ29uc3VtZShh
ZGRpdGlvbmFsQnl0ZXMpKSB7CisgICAgICAgIG1fZXJyb3JDb2RlID0gRGVjb2RlckVycm9yOjpJ
bmNvbXBsZXRlQ0JPUkRhdGE7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1
aW50NjRfdCBpbnREYXRhID0gMDsKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBhZGRpdGlv
bmFsQnl0ZXM7ICsraSkgeworICAgICAgICBpbnREYXRhIDw8PSA4OworICAgICAgICBpbnREYXRh
IHw9ICptX2l0Kys7CisgICAgfQorCisgICAgKnZhbHVlID0gaW50RGF0YTsKKyAgICByZXR1cm4g
Y2hlY2tNaW5pbWFsRW5jb2RpbmcoYWRkaXRpb25hbEJ5dGVzLCBpbnREYXRhKTsKK30KKworc3Rk
OjpvcHRpb25hbDxDQk9SVmFsdWU+IENCT1JSZWFkZXI6OmRlY29kZVZhbHVlVG9OZWdhdGl2ZSh1
aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSB7CisgICAgICAgIG1fZXJyb3JD
b2RlID0gRGVjb2RlckVycm9yOjpPdXRPZlJhbmdlSW50ZWdlclZhbHVlOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4gQ0JPUlZhbHVlKC1zdGF0aWNfY2Fz
dDxpbnQ2NF90Pih2YWx1ZSkgLSAxKTsKK30KKworc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IENC
T1JSZWFkZXI6OmRlY29kZVZhbHVlVG9VbnNpZ25lZCh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2
NF90Pjo6bWF4KCkpKSB7CisgICAgICAgIG1fZXJyb3JDb2RlID0gRGVjb2RlckVycm9yOjpPdXRP
ZlJhbmdlSW50ZWdlclZhbHVlOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KyAgICByZXR1cm4gQ0JPUlZhbHVlKHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBDQk9SUmVhZGVyOjpyZWFkU2ltcGxlVmFsdWUodWlu
dDhfdCBhZGRpdGlvbmFsSW5mbywgdWludDY0X3QgdmFsdWUpCit7CisgICAgLy8gRmxvYXRpbmcg
cG9pbnQgbnVtYmVycyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICBpZiAoYWRkaXRpb25hbEluZm8g
PiAyNCAmJiBhZGRpdGlvbmFsSW5mbyA8IDI4KSB7CisgICAgICAgIG1fZXJyb3JDb2RlID0gRGVj
b2RlckVycm9yOjpVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnRWYWx1ZTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBBU1NFUlQodmFsdWUgPD0gMjU1dSk7CisgICAg
Q0JPUlZhbHVlOjpTaW1wbGVWYWx1ZSBwb3NzaWJseVVuc3VwcG9ydGVkU2ltcGxlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDQk9SVmFsdWU6OlNpbXBsZVZhbHVlPihzdGF0aWNfY2FzdDxpbnQ+KHZhbHVl
KSk7CisgICAgc3dpdGNoIChwb3NzaWJseVVuc3VwcG9ydGVkU2ltcGxlVmFsdWUpIHsKKyAgICBj
YXNlIENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OkZhbHNlVmFsdWU6CisgICAgY2FzZSBDQk9SVmFs
dWU6OlNpbXBsZVZhbHVlOjpUcnVlVmFsdWU6CisgICAgY2FzZSBDQk9SVmFsdWU6OlNpbXBsZVZh
bHVlOjpOdWxsVmFsdWU6CisgICAgY2FzZSBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVbmRlZmlu
ZWQ6CisgICAgICAgIHJldHVybiBDQk9SVmFsdWUocG9zc2libHlVbnN1cHBvcnRlZFNpbXBsZVZh
bHVlKTsKKyAgICB9CisKKyAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6VW5zdXBwb3J0
ZWRTaW1wbGVWYWx1ZTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlv
bmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6cmVhZFN0cmluZyh1aW50NjRfdCBudW1CeXRlcykK
K3sKKyAgICBpZiAoIWNhbkNvbnN1bWUobnVtQnl0ZXMpKSB7CisgICAgICAgIG1fZXJyb3JDb2Rl
ID0gRGVjb2RlckVycm9yOjpJbmNvbXBsZXRlQ0JPUkRhdGE7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgU3RyaW5nIGNib3JTdHJpbmcgPSBTdHJpbmc6OmZyb21V
VEY4KG1faXQsIG51bUJ5dGVzKTsKKyAgICBtX2l0ICs9IG51bUJ5dGVzOworCisgICAgLy8gSW52
YWxpZCBVVEY4IGJ5dGVzIHByb2R1Y2UgYW4gZW1wdHkgV1RGU3RyaW5nLgorICAgIC8vIE5vdCB0
byBjb25mdXNlIGl0IHdpdGggYW4gYWN0dWFsIGVtcHR5IFdURlN0cmluZy4KKyAgICBpZiAoIW51
bUJ5dGVzIHx8IGhhc1ZhbGlkVVRGOEZvcm1hdChjYm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJu
IENCT1JWYWx1ZShXVEZNb3ZlKGNib3JTdHJpbmcpKTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6cmVhZEJ5dGVzKHVp
bnQ2NF90IG51bUJ5dGVzKQoreworICAgIGlmICghY2FuQ29uc3VtZShudW1CeXRlcykpIHsKKyAg
ICAgICAgbV9lcnJvckNvZGUgPSBEZWNvZGVyRXJyb3I6OkluY29tcGxldGVDQk9SRGF0YTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBCeXRlcyBjYm9yQnl0ZVN0
cmluZzsKKyAgICBjYm9yQnl0ZVN0cmluZy5hcHBlbmQobV9pdCwgbnVtQnl0ZXMpOworICAgIG1f
aXQgKz0gbnVtQnl0ZXM7CisKKyAgICByZXR1cm4gQ0JPUlZhbHVlKFdURk1vdmUoY2JvckJ5dGVT
dHJpbmcpKTsKK30KKworc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IENCT1JSZWFkZXI6OnJlYWRD
Qk9SQXJyYXkodWludDY0X3QgbGVuZ3RoLCBpbnQgbWF4TmVzdGluZ0xldmVsKQoreworICAgIENC
T1JWYWx1ZTo6QXJyYXlWYWx1ZSBjYm9yQXJyYXk7CisgICAgd2hpbGUgKGxlbmd0aC0tID4gMCkg
eworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvckVsZW1lbnQgPSBkZWNvZGVD
Qk9SKG1heE5lc3RpbmdMZXZlbCAtIDEpOworICAgICAgICBpZiAoIWNib3JFbGVtZW50KQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgY2JvckFycmF5LmFwcGVuZChX
VEZNb3ZlKGNib3JFbGVtZW50LnZhbHVlKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIENCT1JWYWx1
ZShXVEZNb3ZlKGNib3JBcnJheSkpOworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JP
UlJlYWRlcjo6cmVhZENCT1JNYXAodWludDY0X3QgbGVuZ3RoLCBpbnQgbWF4TmVzdGluZ0xldmVs
KQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgY2Jvck1hcDsKKyAgICB3aGlsZSAobGVuZ3Ro
LS0gPiAwKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBrZXkgPSBkZWNvZGVD
Qk9SKG1heE5lc3RpbmdMZXZlbCAtIDEpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1
ZT4gdmFsdWUgPSBkZWNvZGVDQk9SKG1heE5lc3RpbmdMZXZlbCAtIDEpOworICAgICAgICBpZiAo
IWtleSB8fCAhdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
ICAgIC8vIE9ubHkgQ0JPUiBtYXBzIHdpdGggaW50ZWdlciBvciBzdHJpbmcgdHlwZSBrZXlzIGFy
ZSBhbGxvd2VkLgorICAgICAgICBpZiAoa2V5LnZhbHVlKCkudHlwZSgpICE9IENCT1JWYWx1ZTo6
VHlwZTo6U3RyaW5nICYmIGtleS52YWx1ZSgpLnR5cGUoKSAhPSBDQk9SVmFsdWU6OlR5cGU6OlVu
c2lnbmVkKSB7CisgICAgICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6SW5jb3Jy
ZWN0TWFwS2V5VHlwZTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZUtleShrZXkudmFsdWUoKSwgY2Jvck1hcCkg
fHwgIWNoZWNrT3V0T2ZPcmRlcktleShrZXkudmFsdWUoKSwgY2Jvck1hcCkpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGNib3JNYXAuZW1wbGFjZShzdGQ6Om1h
a2VfcGFpcihXVEZNb3ZlKGtleS52YWx1ZSgpKSwgV1RGTW92ZSh2YWx1ZS52YWx1ZSgpKSkpOwor
ICAgIH0KKyAgICByZXR1cm4gQ0JPUlZhbHVlKFdURk1vdmUoY2Jvck1hcCkpOworfQorCitib29s
IENCT1JSZWFkZXI6OmNhbkNvbnN1bWUodWludDY0X3QgYnl0ZXMpCit7CisgICAgaWYgKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihzdGQ6OmRpc3RhbmNlKG1faXQsIG1fZW5kKSkgPj0gYnl0ZXMpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIG1fZXJyb3JDb2RlID0gRGVjb2RlckVycm9yOjpJbmNv
bXBsZXRlQ0JPUkRhdGE7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENCT1JSZWFkZXI6
OmNoZWNrTWluaW1hbEVuY29kaW5nKHVpbnQ4X3QgYWRkaXRpb25hbEJ5dGVzLCB1aW50NjRfdCB1
aW50RGF0YSkKK3sKKyAgICBpZiAoKGFkZGl0aW9uYWxCeXRlcyA9PSAxICYmIHVpbnREYXRhIDwg
MjQpIHx8IHVpbnREYXRhIDw9ICgxVUxMIDw8IDggKiAoYWRkaXRpb25hbEJ5dGVzID4+IDEpKSAt
IDEpIHsKKyAgICAgICAgbV9lcnJvckNvZGUgPSBEZWNvZGVyRXJyb3I6Ok5vbk1pbmltYWxDQk9S
RW5jb2Rpbmc7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgQ0JPUlJlYWRlcjo6Y2hlY2tFeHRyYW5lb3VzRGF0YSgpCit7CisgICAgaWYg
KG1faXQgIT0gbV9lbmQpCisgICAgICAgIG1fZXJyb3JDb2RlID0gRGVjb2RlckVycm9yOjpFeHRy
YW5lb3VzRGF0YTsKK30KKworYm9vbCBDQk9SUmVhZGVyOjpjaGVja0R1cGxpY2F0ZUtleShjb25z
dCBDQk9SVmFsdWUmIG5ld0tleSwgY29uc3QgQ0JPUlZhbHVlOjpNYXBWYWx1ZSYgbWFwKQorewor
ICAgIGlmIChtYXAuZmluZChuZXdLZXkpICE9IG1hcC5lbmQoKSkgeworICAgICAgICBtX2Vycm9y
Q29kZSA9IERlY29kZXJFcnJvcjo6RHVwbGljYXRlS2V5OworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENCT1JSZWFkZXI6Omhhc1ZhbGlk
VVRGOEZvcm1hdChjb25zdCBTdHJpbmcmIHN0cmluZ0RhdGEpCit7CisgICAgLy8gSW52YWxpZCBV
VEY4IGJ5dGVzIHByb2R1Y2UgYW4gZW1wdHkgV1RGU3RyaW5nLgorICAgIGlmIChzdHJpbmdEYXRh
LmlzRW1wdHkoKSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6SW52YWxp
ZFVURjg7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQ0JPUlJlYWRlcjo6Y2hlY2tPdXRPZk9yZGVyS2V5KGNvbnN0IENCT1JWYWx1ZSYg
bmV3S2V5LCBjb25zdCBDQk9SVmFsdWU6Ok1hcFZhbHVlJiBtYXApCit7CisgICAgYXV0byBjb21w
YXJhdG9yID0gbWFwLmtleV9jb21wKCk7CisgICAgaWYgKCFtYXAuZW1wdHkoKSAmJiBjb21wYXJh
dG9yKG5ld0tleSwgbWFwLnJiZWdpbigpLT5maXJzdCkpIHsKKyAgICAgICAgbV9lcnJvckNvZGUg
PSBEZWNvZGVyRXJyb3I6Ok91dE9mT3JkZXJLZXk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBDQk9S
UmVhZGVyOjpnZXRFcnJvckNvZGUoKQoreworICAgIHJldHVybiBtX2Vycm9yQ29kZTsKK30KKwor
Ly8gc3RhdGljCitjb25zdCBjaGFyKiBDQk9SUmVhZGVyOjplcnJvckNvZGVUb1N0cmluZyhEZWNv
ZGVyRXJyb3IgZXJyb3IpCit7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgRGVjb2Rl
ckVycm9yOjpDQk9STm9FcnJvcjoKKyAgICAgICAgcmV0dXJuIGtOb0Vycm9yOworICAgIGNhc2Ug
RGVjb2RlckVycm9yOjpVbnN1cHBvcnRlZE1ham9yVHlwZToKKyAgICAgICAgcmV0dXJuIGtVbnN1
cHBvcnRlZE1ham9yVHlwZTsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6VW5rbm93bkFkZGl0aW9u
YWxJbmZvOgorICAgICAgICByZXR1cm4ga1Vua25vd25BZGRpdGlvbmFsSW5mbzsKKyAgICBjYXNl
IERlY29kZXJFcnJvcjo6SW5jb21wbGV0ZUNCT1JEYXRhOgorICAgICAgICByZXR1cm4ga0luY29t
cGxldGVDQk9SRGF0YTsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6SW5jb3JyZWN0TWFwS2V5VHlw
ZToKKyAgICAgICAgcmV0dXJuIGtJbmNvcnJlY3RNYXBLZXlUeXBlOworICAgIGNhc2UgRGVjb2Rl
ckVycm9yOjpUb29NdWNoTmVzdGluZzoKKyAgICAgICAgcmV0dXJuIGtUb29NdWNoTmVzdGluZzsK
KyAgICBjYXNlIERlY29kZXJFcnJvcjo6SW52YWxpZFVURjg6CisgICAgICAgIHJldHVybiBrSW52
YWxpZFVURjg7CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6OkV4dHJhbmVvdXNEYXRhOgorICAgICAg
ICByZXR1cm4ga0V4dHJhbmVvdXNEYXRhOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpEdXBsaWNh
dGVLZXk6CisgICAgICAgIHJldHVybiBrRHVwbGljYXRlS2V5OworICAgIGNhc2UgRGVjb2RlckVy
cm9yOjpPdXRPZk9yZGVyS2V5OgorICAgICAgICByZXR1cm4ga01hcEtleU91dE9mT3JkZXI7Cisg
ICAgY2FzZSBEZWNvZGVyRXJyb3I6Ok5vbk1pbmltYWxDQk9SRW5jb2Rpbmc6CisgICAgICAgIHJl
dHVybiBrTm9uTWluaW1hbENCT1JFbmNvZGluZzsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6VW5z
dXBwb3J0ZWRTaW1wbGVWYWx1ZToKKyAgICAgICAgcmV0dXJuIGtVbnN1cHBvcnRlZFNpbXBsZVZh
bHVlOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnRWYWx1
ZToKKyAgICAgICAgcmV0dXJuIGtVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnRWYWx1ZTsKKyAgICBj
YXNlIERlY29kZXJFcnJvcjo6T3V0T2ZSYW5nZUludGVnZXJWYWx1ZToKKyAgICAgICAgcmV0dXJu
IGtPdXRPZlJhbmdlSW50ZWdlclZhbHVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIlVua25vd24gZXJyb3IgY29kZS4iOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgY2JvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE4MzIxYWVkNWY5Yzkw
OTFmMzk3MmI2MTEzOWYxYmJiMGI0M2Q3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVyLmgKQEAgLTAsMCArMSwxMzIgQEAK
Ky8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8v
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDQk9SVmFsdWUuaCIKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLy8g
Q29uY2lzZSBCaW5hcnkgT2JqZWN0IFJlcHJlc2VudGF0aW9uIChDQk9SKSBkZWNvZGVyIGFzIGRl
ZmluZWQgYnkKKy8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MDQ5LiBUaGlzIGRl
Y29kZXIgb25seSBhY2NlcHRzIGNhbm9uaWNhbAorLy8gQ0JPUiBhcyBkZWZpbmVkIGJ5IHNlY3Rp
b24gMy45LgorLy8gU3VwcG9ydGVkOgorLy8gICogTWFqb3IgdHlwZXM6CisvLyAgICAgKiAwOiBV
bnNpZ25lZCBpbnRlZ2VycywgdXAgdG8gNjQtYml0LgorLy8gICAgICogMjogQnl0ZSBzdHJpbmdz
LgorLy8gICAgICogMzogVVRGLTggc3RyaW5ncy4KKy8vICAgICAqIDQ6IERlZmluaXRlLWxlbmd0
aCBhcnJheXMuCisvLyAgICAgKiA1OiBEZWZpbml0ZS1sZW5ndGggbWFwcy4KKy8vICAgICAqIDc6
IFNpbXBsZSB2YWx1ZXMuCisvLworLy8gUmVxdWlyZW1lbnRzIGZvciBjYW5vbmljYWwgQ0JPUiBy
ZXByZXNlbnRhdGlvbjoKKy8vICAtIER1cGxpY2F0ZSBrZXlzIGZvciBtYXAgYXJlIG5vdCBhbGxv
d2VkLgorLy8gIC0gS2V5cyBmb3IgbWFwIG11c3QgYmUgc29ydGVkIGZpcnN0IGJ5IGxlbmd0aCBh
bmQgdGhlbiBieSBieXRlLXdpc2UKKy8vICAgIGxleGljYWwgb3JkZXIuCisvLworLy8gS25vd24g
bGltaXRhdGlvbnMgYW5kIGludGVycHJldGF0aW9ucyBvZiB0aGUgUkZDOgorLy8gIC0gRG9lcyBu
b3Qgc3VwcG9ydCBuZWdhdGl2ZSBpbnRlZ2VycywgaW5kZWZpbml0ZSBkYXRhIHN0cmVhbXMgYW5k
IHRhZ2dpbmcuCisvLyAgLSBGbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbnMgYW5kIEJSRUFL
IHN0b3AgY29kZSBpbiBtYWpvcgorLy8gICAgdHlwZSA3IGFyZSBub3Qgc3VwcG9ydGVkLgorLy8g
IC0gTm9uLWNoYXJhY3RlciBjb2RlcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIE1ham9yIHR5
cGUgMy4KKy8vICAtIEluY29tcGxldGUgQ0JPUiBkYXRhIGl0ZW1zIGFyZSB0cmVhdGVkIGFzIHN5
bnRheCBlcnJvcnMuCisvLyAgLSBUcmFpbGluZyBkYXRhIGJ5dGVzIGFyZSB0cmVhdGVkIGFzIGVy
cm9ycy4KKy8vICAtIFVua25vd24gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3JtYXRzIGFyZSB0
cmVhdGVkIGFzIHN5bnRheCBlcnJvcnMuCisvLyAgLSBDYWxsZXJzIGNhbiBkZWNvZGUgQ0JPUiB2
YWx1ZXMgd2l0aCBhdCBtb3N0IDE2IG5lc3RlZCBkZXB0aCBsYXllci4gTW9yZQorLy8gICAgc3Ry
aWN0IHJlc3RyaWN0aW9ucyBvbiBuZXN0aW5nIGxheWVyIHNpemUgb2YgQ0JPUiB2YWx1ZXMgY2Fu
IGJlIGVuZm9yY2VkCisvLyAgICBieSBzZXR0aW5nIHxtYXhOZXN0aW5nTGV2ZWx8LgorLy8gIC0g
T25seSBDQk9SIG1hcHMgd2l0aCBpbnRlZ2VyIG9yIHN0cmluZyB0eXBlIGtleXMgYXJlIHN1cHBv
cnRlZCBkdWUgdG8gdGhlCisvLyAgICBjb3N0IG9mIHNlcmlhbGl6YXRpb24gd2hlbiBzb3J0aW5n
IG1hcCBrZXlzLgorLy8gIC0gU2ltcGxlIHZhbHVlcyB0aGF0IGFyZSB1bmFzc2lnbmVkL3Jlc2Vy
dmVkIGFzIHBlciBSRkMgNzA0OSBhcmUgbm90CisvLyAgICBzdXBwb3J0ZWQgYW5kIHRyZWF0ZWQg
YXMgZXJyb3JzLgorCituYW1lc3BhY2UgY2JvciB7CisKK2NsYXNzIFdFQkNPUkVfVEVTVFNVUFBP
UlRfRVhQT1JUIENCT1JSZWFkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENCT1JSZWFk
ZXIpOworcHVibGljOgorICAgIHVzaW5nIEJ5dGVzID0gVmVjdG9yPHVpbnQ4X3Q+OworCisgICAg
ZW51bSBjbGFzcyBEZWNvZGVyRXJyb3IgeworICAgICAgICBDQk9STm9FcnJvciA9IDAsCisgICAg
ICAgIFVuc3VwcG9ydGVkTWFqb3JUeXBlLAorICAgICAgICBVbmtub3duQWRkaXRpb25hbEluZm8s
CisgICAgICAgIEluY29tcGxldGVDQk9SRGF0YSwKKyAgICAgICAgSW5jb3JyZWN0TWFwS2V5VHlw
ZSwKKyAgICAgICAgVG9vTXVjaE5lc3RpbmcsCisgICAgICAgIEludmFsaWRVVEY4LAorICAgICAg
ICBFeHRyYW5lb3VzRGF0YSwKKyAgICAgICAgRHVwbGljYXRlS2V5LAorICAgICAgICBPdXRPZk9y
ZGVyS2V5LAorICAgICAgICBOb25NaW5pbWFsQ0JPUkVuY29kaW5nLAorICAgICAgICBVbnN1cHBv
cnRlZFNpbXBsZVZhbHVlLAorICAgICAgICBVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnRWYWx1ZSwK
KyAgICAgICAgT3V0T2ZSYW5nZUludGVnZXJWYWx1ZSwKKyAgICB9OworCisgICAgLy8gQ0JPUiBu
ZXN0ZWQgZGVwdGggc3VmZmljaWVudCBmb3IgbW9zdCB1c2UgY2FzZXMuCisgICAgc3RhdGljIGNv
bnN0IGludCBrQ0JPUk1heERlcHRoID0gMTY7CisKKyAgICB+Q0JPUlJlYWRlcigpOworCisgICAg
Ly8gUmVhZHMgYW5kIHBhcnNlcyB8aW5wdXRfZGF0YXwgaW50byBhIENCT1JWYWx1ZS4gSWYgYW55
IG9uZSBvZiB0aGUgc3ludGF4CisgICAgLy8gZm9ybWF0cyBpcyB2aW9sYXRlZCAtaW5jbHVkaW5n
IHVua25vd24gYWRkaXRpb25hbCBpbmZvIGFuZCBpbmNvbXBsZXRlCisgICAgLy8gQ0JPUiBkYXRh
LSB0aGVuIGFuIGVtcHR5IG9wdGlvbmFsIGlzIHJldHVybmVkLiBPcHRpb25hbCB8ZXJyb3JDb2Rl
T3V0fAorICAgIC8vIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyIHRvIG9idGFpbiBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIGFib3V0CisgICAgLy8gZGVjb2RpbmcgZmFpbHVyZXMuCisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiByZWFkKGNvbnN0IEJ5dGVzJiwgRGVjb2Rl
ckVycm9yKiBlcnJvckNvZGVPdXQgPSBudWxscHRyLCBpbnQgbWF4TmVzdGluZ0xldmVsID0ga0NC
T1JNYXhEZXB0aCk7CisKKyAgICAvLyBUcmFuc2xhdGVzIGVycm9ycyB0byBodW1hbi1yZWFkYWJs
ZSBlcnJvciBtZXNzYWdlcy4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogZXJyb3JDb2RlVG9TdHJp
bmcoRGVjb2RlckVycm9yIGVycm9yQ29kZSk7CisKK3ByaXZhdGU6CisgICAgQ0JPUlJlYWRlcihC
eXRlczo6Y29uc3RfaXRlcmF0b3IsIGNvbnN0IEJ5dGVzOjpjb25zdF9pdGVyYXRvcik7CisgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGRlY29kZUNCT1IoaW50IG1heE5lc3RpbmdMZXZlbCk7
CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGRlY29kZVZhbHVlVG9OZWdhdGl2ZSh1aW50
NjRfdCB2YWx1ZSk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGRlY29kZVZhbHVlVG9V
bnNpZ25lZCh1aW50NjRfdCB2YWx1ZSk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IHJl
YWRTaW1wbGVWYWx1ZSh1aW50OF90IGFkZGl0aW9uYWxJbmZvLCB1aW50NjRfdCB2YWx1ZSk7Cisg
ICAgYm9vbCByZWFkVmFyaWFkaWNMZW5ndGhJbnRlZ2VyKHVpbnQ4X3QgYWRkaXRpb25hbEluZm8s
IHVpbnQ2NF90KiB2YWx1ZSk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IHJlYWRCeXRl
cyh1aW50NjRfdCBudW1CeXRlcyk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IHJlYWRT
dHJpbmcodWludDY0X3QgbnVtQnl0ZXMpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBy
ZWFkQ0JPUkFycmF5KHVpbnQ2NF90IGxlbmd0aCwgaW50IG1heE5lc3RpbmdMZXZlbCk7CisgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IHJlYWRDQk9STWFwKHVpbnQ2NF90IGxlbmd0aCwgaW50
IG1heE5lc3RpbmdMZXZlbCk7CisgICAgYm9vbCBjYW5Db25zdW1lKHVpbnQ2NF90IGJ5dGVzKTsK
KyAgICB2b2lkIGNoZWNrRXh0cmFuZW91c0RhdGEoKTsKKyAgICBib29sIGNoZWNrRHVwbGljYXRl
S2V5KGNvbnN0IENCT1JWYWx1ZSYgbmV3S2V5LCBjb25zdCBDQk9SVmFsdWU6Ok1hcFZhbHVlJik7
CisgICAgYm9vbCBoYXNWYWxpZFVURjhGb3JtYXQoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBj
aGVja091dE9mT3JkZXJLZXkoY29uc3QgQ0JPUlZhbHVlJiBuZXdLZXksIGNvbnN0IENCT1JWYWx1
ZTo6TWFwVmFsdWUmKTsKKyAgICBib29sIGNoZWNrTWluaW1hbEVuY29kaW5nKHVpbnQ4X3QgYWRk
aXRpb25hbEJ5dGVzLCB1aW50NjRfdCB1aW50RGF0YSk7CisKKyAgICBEZWNvZGVyRXJyb3IgZ2V0
RXJyb3JDb2RlKCk7CisKKyAgICBCeXRlczo6Y29uc3RfaXRlcmF0b3IgbV9pdDsKKyAgICBjb25z
dCBCeXRlczo6Y29uc3RfaXRlcmF0b3IgbV9lbmQ7CisgICAgRGVjb2RlckVycm9yIG1fZXJyb3JD
b2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgY2JvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjczMjlhYzM5
MzhjZWJjMzljYmY5NjU0NmRmMzk1NjQ4MTEwNjAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JWYWx1ZS5jcHAKQEAgLTAsMCArMSwy
OTUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNCT1JWYWx1ZS5oIgorCisjaW5jbHVkZSA8bmV3
PgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBjYm9yIHsKKworQ0JPUlZhbHVlOjpD
Qk9SVmFsdWUoKQorICAgIDogbV90eXBlKFR5cGU6Ok5vbmUpCit7Cit9CisKK0NCT1JWYWx1ZTo6
Q0JPUlZhbHVlKENCT1JWYWx1ZSYmIHRoYXQpCit7CisgICAgaW50ZXJuYWxNb3ZlQ29uc3RydWN0
RnJvbShXVEZNb3ZlKHRoYXQpKTsKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoVHlwZSB0eXBl
KQorICAgIDogbV90eXBlKHR5cGUpCit7CisgICAgLy8gSW5pdGlhbGl6ZSB3aXRoIHRoZSBkZWZh
dWx0IHZhbHVlLgorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBUeXBlOjpVbnNpZ25l
ZDoKKyAgICBjYXNlIFR5cGU6Ok5lZ2F0aXZlOgorICAgICAgICBtX2ludGVnZXJWYWx1ZSA9IDA7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6OkJ5dGVTdHJpbmc6CisgICAgICAgIG5l
dyAoJm1fYnl0ZVN0cmluZ1ZhbHVlKSBCaW5hcnlWYWx1ZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUeXBlOjpTdHJpbmc6CisgICAgICAgIG5ldyAoJm1fc3RyaW5nVmFsdWUpIFN0cmlu
ZygpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpBcnJheToKKyAgICAgICAgbmV3
ICgmbV9hcnJheVZhbHVlKSBBcnJheVZhbHVlKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGU6Ok1hcDoKKyAgICAgICAgbmV3ICgmbV9tYXBWYWx1ZSkgTWFwVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6U2ltcGxlVmFsdWU6CisgICAgICAgIG1fc2ltcGxl
VmFsdWUgPSBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVbmRlZmluZWQ7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGU6Ok5vbmU6CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKGludCBpbnRlZ2Vy
VmFsdWUpCisgICAgOiBDQk9SVmFsdWUoc3RhdGljX2Nhc3Q8aW50NjRfdD4oaW50ZWdlclZhbHVl
KSkKK3sKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoaW50NjRfdCBpbnRlZ2VyVmFsdWUpCisg
ICAgOiBtX2ludGVnZXJWYWx1ZShpbnRlZ2VyVmFsdWUpCit7CisgICAgbV90eXBlID0gaW50ZWdl
clZhbHVlID49IDAgPyBUeXBlOjpVbnNpZ25lZCA6IFR5cGU6Ok5lZ2F0aXZlOworfQorCitDQk9S
VmFsdWU6OkNCT1JWYWx1ZShjb25zdCBCaW5hcnlWYWx1ZSYgaW5CeXRlcykKKyAgICA6IG1fdHlw
ZShUeXBlOjpCeXRlU3RyaW5nKQorICAgICwgbV9ieXRlU3RyaW5nVmFsdWUoaW5CeXRlcykKK3sK
K30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoQmluYXJ5VmFsdWUmJiBpbkJ5dGVzKQorICAgIDog
bV90eXBlKFR5cGU6OkJ5dGVTdHJpbmcpCisgICAgLCBtX2J5dGVTdHJpbmdWYWx1ZShXVEZNb3Zl
KGluQnl0ZXMpKQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShjb25zdCBjaGFyKiBpblN0
cmluZykKKyAgICA6IENCT1JWYWx1ZShTdHJpbmcoaW5TdHJpbmcpKQoreworfQorCitDQk9SVmFs
dWU6OkNCT1JWYWx1ZShTdHJpbmcmJiBpblN0cmluZykKKyAgICA6IG1fdHlwZShUeXBlOjpTdHJp
bmcpCisgICAgLCBtX3N0cmluZ1ZhbHVlKFdURk1vdmUoaW5TdHJpbmcpKQoreworfQorCitDQk9S
VmFsdWU6OkNCT1JWYWx1ZShjb25zdCBTdHJpbmcmIGluU3RyaW5nKQorICAgIDogbV90eXBlKFR5
cGU6OlN0cmluZykKKyAgICAsIG1fc3RyaW5nVmFsdWUoaW5TdHJpbmcpCit7Cit9CisKK0NCT1JW
YWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IEFycmF5VmFsdWUmIGluQXJyYXkpCisgICAgOiBtX3R5cGUo
VHlwZTo6QXJyYXkpCisgICAgLCBtX2FycmF5VmFsdWUoKQoreworICAgIG1fYXJyYXlWYWx1ZS5y
ZXNlcnZlQ2FwYWNpdHkoaW5BcnJheS5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgdmFs
IDogaW5BcnJheSkKKyAgICAgICAgbV9hcnJheVZhbHVlLmFwcGVuZCh2YWwuY2xvbmUoKSk7Cit9
CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKEFycmF5VmFsdWUmJiBpbkFycmF5KQorICAgIDogbV90
eXBlKFR5cGU6OkFycmF5KQorICAgICwgbV9hcnJheVZhbHVlKFdURk1vdmUoaW5BcnJheSkpCit7
Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IE1hcFZhbHVlJiBpbk1hcCkKKyAgICA6
IG1fdHlwZShUeXBlOjpNYXApCisgICAgLCBtX21hcFZhbHVlKCkKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGl0IDogaW5NYXApCisgICAgICAgIG1fbWFwVmFsdWUuZW1wbGFjZV9oaW50KG1fbWFw
VmFsdWUuZW5kKCksIGl0LmZpcnN0LmNsb25lKCksIGl0LnNlY29uZC5jbG9uZSgpKTsKK30KKwor
Q0JPUlZhbHVlOjpDQk9SVmFsdWUoTWFwVmFsdWUmJiBpbk1hcCkKKyAgICA6IG1fdHlwZShUeXBl
OjpNYXApCisgICAgLCBtX21hcFZhbHVlKFdURk1vdmUoaW5NYXApKQoreworfQorCitDQk9SVmFs
dWU6OkNCT1JWYWx1ZShTaW1wbGVWYWx1ZSBpblNpbXBsZSkKKyAgICA6IG1fdHlwZShUeXBlOjpT
aW1wbGVWYWx1ZSkKKyAgICAsIG1fc2ltcGxlVmFsdWUoaW5TaW1wbGUpCit7CisgICAgQVNTRVJU
KHN0YXRpY19jYXN0PGludD4oaW5TaW1wbGUpID49IDIwICYmIHN0YXRpY19jYXN0PGludD4oaW5T
aW1wbGUpIDw9IDIzKTsKK30KKworQ0JPUlZhbHVlJiBDQk9SVmFsdWU6Om9wZXJhdG9yPShDQk9S
VmFsdWUmJiB0aGF0KQoreworICAgIGludGVybmFsQ2xlYW51cCgpOworICAgIGludGVybmFsTW92
ZUNvbnN0cnVjdEZyb20oV1RGTW92ZSh0aGF0KSk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K0NCT1JWYWx1ZTo6fkNCT1JWYWx1ZSgpCit7CisgICAgaW50ZXJuYWxDbGVhbnVwKCk7Cit9CisK
K0NCT1JWYWx1ZSBDQk9SVmFsdWU6OmNsb25lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2UgVHlwZTo6Tm9uZToKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZSgpOwor
ICAgIGNhc2UgVHlwZTo6VW5zaWduZWQ6CisgICAgY2FzZSBUeXBlOjpOZWdhdGl2ZToKKyAgICAg
ICAgcmV0dXJuIENCT1JWYWx1ZShtX2ludGVnZXJWYWx1ZSk7CisgICAgY2FzZSBUeXBlOjpCeXRl
U3RyaW5nOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKG1fYnl0ZVN0cmluZ1ZhbHVlKTsKKyAg
ICBjYXNlIFR5cGU6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZShtX3N0cmluZ1Zh
bHVlKTsKKyAgICBjYXNlIFR5cGU6OkFycmF5OgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKG1f
YXJyYXlWYWx1ZSk7CisgICAgY2FzZSBUeXBlOjpNYXA6CisgICAgICAgIHJldHVybiBDQk9SVmFs
dWUobV9tYXBWYWx1ZSk7CisgICAgY2FzZSBUeXBlOjpTaW1wbGVWYWx1ZToKKyAgICAgICAgcmV0
dXJuIENCT1JWYWx1ZShtX3NpbXBsZVZhbHVlKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gQ0JPUlZhbHVlKCk7Cit9CisKK2NvbnN0IGludDY0X3QmIENC
T1JWYWx1ZTo6Z2V0SW50ZWdlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzSW50ZWdlcigpKTsK
KyAgICByZXR1cm4gbV9pbnRlZ2VyVmFsdWU7Cit9CisKK2NvbnN0IGludDY0X3QmIENCT1JWYWx1
ZTo6Z2V0VW5zaWduZWQoKSBjb25zdAoreworICAgIEFTU0VSVChpc1Vuc2lnbmVkKCkpOworICAg
IEFTU0VSVChtX2ludGVnZXJWYWx1ZSA+PSAwKTsKKyAgICByZXR1cm4gbV9pbnRlZ2VyVmFsdWU7
Cit9CisKK2NvbnN0IGludDY0X3QmIENCT1JWYWx1ZTo6Z2V0TmVnYXRpdmUoKSBjb25zdAorewor
ICAgIEFTU0VSVChpc05lZ2F0aXZlKCkpOworICAgIEFTU0VSVChtX2ludGVnZXJWYWx1ZSA8IDAp
OworICAgIHJldHVybiBtX2ludGVnZXJWYWx1ZTsKK30KKworY29uc3QgU3RyaW5nJiBDQk9SVmFs
dWU6OmdldFN0cmluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzU3RyaW5nKCkpOworICAgIHJl
dHVybiBtX3N0cmluZ1ZhbHVlOworfQorCitjb25zdCBDQk9SVmFsdWU6OkJpbmFyeVZhbHVlJiBD
Qk9SVmFsdWU6OmdldEJ5dGVTdHJpbmcoKSBjb25zdAoreworICAgIEFTU0VSVChpc0J5dGVTdHJp
bmcoKSk7CisgICAgcmV0dXJuIG1fYnl0ZVN0cmluZ1ZhbHVlOworfQorCitjb25zdCBDQk9SVmFs
dWU6OkFycmF5VmFsdWUmIENCT1JWYWx1ZTo6Z2V0QXJyYXkoKSBjb25zdAoreworICAgIEFTU0VS
VChpc0FycmF5KCkpOworICAgIHJldHVybiBtX2FycmF5VmFsdWU7Cit9CisKK2NvbnN0IENCT1JW
YWx1ZTo6TWFwVmFsdWUmIENCT1JWYWx1ZTo6Z2V0TWFwKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
aXNNYXAoKSk7CisgICAgcmV0dXJuIG1fbWFwVmFsdWU7Cit9CisKK0NCT1JWYWx1ZTo6U2ltcGxl
VmFsdWUgQ0JPUlZhbHVlOjpnZXRTaW1wbGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
U2ltcGxlKCkpOworICAgIHJldHVybiBtX3NpbXBsZVZhbHVlOworfQorCit2b2lkIENCT1JWYWx1
ZTo6aW50ZXJuYWxNb3ZlQ29uc3RydWN0RnJvbShDQk9SVmFsdWUmJiB0aGF0KQoreworICAgIG1f
dHlwZSA9IHRoYXQubV90eXBlOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFR5
cGU6OlVuc2lnbmVkOgorICAgIGNhc2UgVHlwZTo6TmVnYXRpdmU6CisgICAgICAgIG1faW50ZWdl
clZhbHVlID0gdGhhdC5tX2ludGVnZXJWYWx1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZTo6Qnl0ZVN0cmluZzoKKyAgICAgICAgbmV3ICgmbV9ieXRlU3RyaW5nVmFsdWUpIEJpbmFy
eVZhbHVlKFdURk1vdmUodGhhdC5tX2J5dGVTdHJpbmdWYWx1ZSkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBUeXBlOjpTdHJpbmc6CisgICAgICAgIG5ldyAoJm1fc3RyaW5nVmFsdWUpIFN0
cmluZyhXVEZNb3ZlKHRoYXQubV9zdHJpbmdWYWx1ZSkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlOjpBcnJheToKKyAgICAgICAgbmV3ICgmbV9hcnJheVZhbHVlKSBBcnJheVZhbHVl
KFdURk1vdmUodGhhdC5tX2FycmF5VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZTo6TWFwOgorICAgICAgICBuZXcgKCZtX21hcFZhbHVlKSBNYXBWYWx1ZShXVEZNb3ZlKHRo
YXQubV9tYXBWYWx1ZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpTaW1wbGVW
YWx1ZToKKyAgICAgICAgbV9zaW1wbGVWYWx1ZSA9IHRoYXQubV9zaW1wbGVWYWx1ZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6Tm9uZToKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQk9SVmFsdWU6OmludGVybmFs
Q2xlYW51cCgpCit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFR5cGU6OkJ5dGVT
dHJpbmc6CisgICAgICAgIG1fYnl0ZVN0cmluZ1ZhbHVlLn5CaW5hcnlWYWx1ZSgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFR5cGU6OlN0cmluZzoKKyAgICAgICAgbV9zdHJpbmdWYWx1ZS5+
U3RyaW5nKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6QXJyYXk6CisgICAgICAg
IG1fYXJyYXlWYWx1ZS5+QXJyYXlWYWx1ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5
cGU6Ok1hcDoKKyAgICAgICAgbV9tYXBWYWx1ZS5+TWFwVmFsdWUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUeXBlOjpOb25lOgorICAgIGNhc2UgVHlwZTo6VW5zaWduZWQ6CisgICAgY2Fz
ZSBUeXBlOjpOZWdhdGl2ZToKKyAgICBjYXNlIFR5cGU6OlNpbXBsZVZhbHVlOgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgbV90eXBlID0gVHlwZTo6Tm9uZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgY2JvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9y
L0NCT1JWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JW
YWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjEwZWJiZDE5MDdiZjQyYWQ5ZmQ5OGYxNjE2OTg5YzZiNTE0ZmEx
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Ni
b3IvQ0JPUlZhbHVlLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxtYXA+Cisj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgY2JvciB7CisKKy8vIEEgY2xhc3MgZm9yIENvbmNpc2UgQmluYXJ5IE9iamVjdCBSZXBy
ZXNlbnRhdGlvbiAoQ0JPUikgdmFsdWVzLgorLy8gVGhpcyBkb2VzIG5vdCBzdXBwb3J0OgorLy8g
ICogRmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKy8vICAqIEluZGVmaW5pdGUtbGVuZ3RoIGVuY29k
aW5ncy4KK2NsYXNzIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JUIENCT1JWYWx1ZSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0JPUlZhbHVlKTsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ1RB
UExlc3MgeworICAgICAgICAvLyBDb21wYXJpc29uIHByZWRpY2F0ZSB0byBvcmRlciBrZXlzIGlu
IGEgZGljdGlvbmFyeSBhcyByZXF1aXJlZCBieSB0aGUKKyAgICAgICAgLy8gQ2xpZW50LXRvLUF1
dGhlbnRpY2F0b3IgUHJvdG9jb2wgKENUQVApIHNwZWMgMi4wLgorICAgICAgICAvLworICAgICAg
ICAvLyBUaGUgc29ydCBvcmRlciBkZWZpbmVkIGluIENUQVAgaXM6CisgICAgICAgIC8vICAgKiBJ
ZiB0aGUgbWFqb3IgdHlwZXMgYXJlIGRpZmZlcmVudCwgdGhlIG9uZSB3aXRoIHRoZSBsb3dlciB2
YWx1ZSBpbgorICAgICAgICAvLyAgICAgbnVtZXJpY2FsIG9yZGVyIHNvcnRzIGVhcmxpZXIuCisg
ICAgICAgIC8vICAgKiBJZiB0d28ga2V5cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzLCB0aGUgc2hv
cnRlciBvbmUgc29ydHMgZWFybGllci4KKyAgICAgICAgLy8gICAqIElmIHR3byBrZXlzIGhhdmUg
dGhlIHNhbWUgbGVuZ3RoLCB0aGUgb25lIHdpdGggdGhlIGxvd2VyIHZhbHVlIGluCisgICAgICAg
IC8vICAgICAoYnl0ZS13aXNlKSBsZXhpY2FsIG9yZGVyIHNvcnRzIGVhcmxpZXIuCisgICAgICAg
IC8vCisgICAgICAgIC8vIFNlZSBzZWN0aW9uIDYgb2YgaHR0cHM6Ly9maWRvYWxsaWFuY2Uub3Jn
L3NwZWNzL2ZpZG8tdjIuMC1yZC0yMDE3MDkyNy8KKyAgICAgICAgLy8gZmlkby1jbGllbnQtdG8t
YXV0aGVudGljYXRvci1wcm90b2NvbC12Mi4wLXJkLTIwMTcwOTI3Lmh0bWwuCisgICAgICAgIC8v
CisgICAgICAgIC8vIFRIRSBDVEFQIFNPUlQgT1JERVIgSU1QTEVNRU5URUQgSEVSRSBESUZGRVJT
IEZST00gVEhFIENBTk9OSUNBTCBDQk9SCisgICAgICAgIC8vIE9SREVSIGRlZmluZWQgaW4gaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcwNDkjc2VjdGlvbi0zLjksIGluIHRoYXQKKyAg
ICAgICAgLy8gdGhlIGxhdHRlciBzb3J0cyBwdXJlbHkgYnkgc2VyaWFsaXNlZCBrZXkgYW5kIGRv
ZXNuJ3Qgc3BlY2lmeSB0aGF0IG1ham9yCisgICAgICAgIC8vIHR5cGVzIGFyZSBjb21wYXJlZCBm
aXJzdC4gVGh1cyB0aGUgc2hvcnRlc3Qga2V5IHNvcnRzIGZpcnN0IGJ5IHRoZSBSRkMKKyAgICAg
ICAgLy8gcnVsZXMgKGlycmVzcGVjdGl2ZSBvZiB0aGUgbWFqb3IgdHlwZSksIGJ1dCBtYXkgbm90
IGJ5IENUQVAgcnVsZXMuCisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDQk9SVmFsdWUm
IGEsIGNvbnN0IENCT1JWYWx1ZSYgYikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKChhLmlzSW50ZWdlcigpIHx8IGEuaXNTdHJpbmcoKSkgJiYgKGIuaXNJbnRlZ2VyKCkgfHwg
Yi5pc1N0cmluZygpKSk7CisgICAgICAgICAgICBpZiAoYS50eXBlKCkgIT0gYi50eXBlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGEudHlwZSgpIDwgYi50eXBlKCk7CisgICAgICAgICAgICBz
d2l0Y2ggKGEudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIFR5cGU6OlVuc2lnbmVkOgorICAg
ICAgICAgICAgICAgIHJldHVybiBhLmdldEludGVnZXIoKSA8IGIuZ2V0SW50ZWdlcigpOworICAg
ICAgICAgICAgY2FzZSBUeXBlOjpOZWdhdGl2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5n
ZXRJbnRlZ2VyKCkgPiBiLmdldEludGVnZXIoKTsKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6U3Ry
aW5nOiB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgYVN0ciA9IGEuZ2V0U3RyaW5nKCk7
CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFMZW5ndGggPSBhU3RyLmxlbmd0aCgpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGJTdHIgPSBiLmdldFN0cmluZygpOworICAgICAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBiTGVuZ3RoID0gYlN0ci5sZW5ndGgoKTsKKworICAgICAg
ICAgICAgICAgIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBhTGVuZ3RoIDwgYkxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpjb2Rl
UG9pbnRDb21wYXJlTGVzc1RoYW4oYVN0ciwgYlN0cik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB1c2luZyBCaW5hcnlWYWx1ZSA9IFZlY3Rvcjx1
aW50OF90PjsKKyAgICB1c2luZyBBcnJheVZhbHVlID0gVmVjdG9yPENCT1JWYWx1ZT47CisgICAg
dXNpbmcgTWFwVmFsdWUgPSBzdGQ6Om1hcDxDQk9SVmFsdWUsIENCT1JWYWx1ZSwgQ1RBUExlc3M+
OworCisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgVW5zaWduZWQgPSAwLAorICAgICAg
ICBOZWdhdGl2ZSA9IDEsCisgICAgICAgIEJ5dGVTdHJpbmcgPSAyLAorICAgICAgICBTdHJpbmcg
PSAzLAorICAgICAgICBBcnJheSA9IDQsCisgICAgICAgIE1hcCA9IDUsCisgICAgICAgIFNpbXBs
ZVZhbHVlID0gNywKKyAgICAgICAgTm9uZSA9IC0xLAorICAgIH07CisKKyAgICBlbnVtIGNsYXNz
IFNpbXBsZVZhbHVlIHsKKyAgICAgICAgRmFsc2VWYWx1ZSA9IDIwLAorICAgICAgICBUcnVlVmFs
dWUgPSAyMSwKKyAgICAgICAgTnVsbFZhbHVlID0gMjIsCisgICAgICAgIFVuZGVmaW5lZCA9IDIz
LAorICAgIH07CisKKyAgICBDQk9SVmFsdWUoQ0JPUlZhbHVlJiYgdGhhdCk7CisgICAgQ0JPUlZh
bHVlKCk7IC8vIEEgTk9ORSB2YWx1ZS4KKworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShUeXBlKTsK
KyAgICBleHBsaWNpdCBDQk9SVmFsdWUoaW50KTsKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoaW50
NjRfdCk7CisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKHVpbnQ2NF90KSA9IGRlbGV0ZTsKKworICAg
IGV4cGxpY2l0IENCT1JWYWx1ZShjb25zdCBCaW5hcnlWYWx1ZSYpOworICAgIGV4cGxpY2l0IENC
T1JWYWx1ZShCaW5hcnlWYWx1ZSYmKTsKKworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShjb25zdCBj
aGFyKik7CisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKFN0cmluZyYmKTsKKyAgICBleHBsaWNpdCBD
Qk9SVmFsdWUoY29uc3QgU3RyaW5nJik7CisKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoY29uc3Qg
QXJyYXlWYWx1ZSYpOworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShBcnJheVZhbHVlJiYpOworCisg
ICAgZXhwbGljaXQgQ0JPUlZhbHVlKGNvbnN0IE1hcFZhbHVlJik7CisgICAgZXhwbGljaXQgQ0JP
UlZhbHVlKE1hcFZhbHVlJiYpOworCisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKFNpbXBsZVZhbHVl
KTsKKworICAgIENCT1JWYWx1ZSYgb3BlcmF0b3I9KENCT1JWYWx1ZSYmKTsKKworICAgIH5DQk9S
VmFsdWUoKTsKKworICAgIC8vIENCT1JWYWx1ZSdzIGNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHkg
YXNzaWdubWVudCBvcGVyYXRvciBhcmUgZGVsZXRlZC4KKyAgICAvLyBVc2UgdGhpcyB0byBvYnRh
aW4gYSBkZWVwIGNvcHkgZXhwbGljaXRseS4KKyAgICBDQk9SVmFsdWUgY2xvbmUoKSBjb25zdDsK
KworICAgIC8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHZhbHVlIHN0b3JlZCBieSB0aGUgY3Vy
cmVudCBWYWx1ZSBvYmplY3QuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IHJlcHJlc2Vu
dHMgYSBnaXZlbiB0eXBlLgorICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3QgeyByZXR1
cm4gdHlwZSA9PSBtX3R5cGU7IH0KKyAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBUeXBlOjpOb25lOyB9CisgICAgYm9vbCBpc1Vuc2lnbmVkKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IFR5cGU6OlVuc2lnbmVkOyB9CisgICAgYm9vbCBpc05lZ2F0aXZlKCkgY29u
c3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6Ok5lZ2F0aXZlOyB9CisgICAgYm9vbCBpc0ludGVn
ZXIoKSBjb25zdCB7IHJldHVybiBpc1Vuc2lnbmVkKCkgfHwgaXNOZWdhdGl2ZSgpOyB9CisgICAg
Ym9vbCBpc0J5dGVTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6Qnl0ZVN0
cmluZzsgfQorICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlw
ZTo6U3RyaW5nOyB9CisgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFR5cGU6OkFycmF5OyB9CisgICAgYm9vbCBpc01hcCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9
PSBUeXBlOjpNYXA7IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgp
ID09IFR5cGU6OlNpbXBsZVZhbHVlOyB9CisKKyAgICAvLyBUaGVzZSB3aWxsIGFsbCBmYXRhbGx5
IGFzc2VydCBpZiB0aGUgdHlwZSBkb2Vzbid0IG1hdGNoLgorICAgIFNpbXBsZVZhbHVlIGdldFNp
bXBsZVZhbHVlKCkgY29uc3Q7CisgICAgY29uc3QgaW50NjRfdCYgZ2V0SW50ZWdlcigpIGNvbnN0
OworICAgIGNvbnN0IGludDY0X3QmIGdldFVuc2lnbmVkKCkgY29uc3Q7CisgICAgY29uc3QgaW50
NjRfdCYgZ2V0TmVnYXRpdmUoKSBjb25zdDsKKyAgICBjb25zdCBCaW5hcnlWYWx1ZSYgZ2V0Qnl0
ZVN0cmluZygpIGNvbnN0OworICAgIC8vIFJldHVybmVkIHN0cmluZyBtYXkgY29udGFpbiBOVUwg
Y2hhcmFjdGVycy4KKyAgICBjb25zdCBTdHJpbmcmIGdldFN0cmluZygpIGNvbnN0OworICAgIGNv
bnN0IEFycmF5VmFsdWUmIGdldEFycmF5KCkgY29uc3Q7CisgICAgY29uc3QgTWFwVmFsdWUmIGdl
dE1hcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworCisgICAgdW5pb24g
eworICAgICAgICBTaW1wbGVWYWx1ZSBtX3NpbXBsZVZhbHVlOworICAgICAgICBpbnQ2NF90IG1f
aW50ZWdlclZhbHVlOworICAgICAgICBCaW5hcnlWYWx1ZSBtX2J5dGVTdHJpbmdWYWx1ZTsKKyAg
ICAgICAgU3RyaW5nIG1fc3RyaW5nVmFsdWU7CisgICAgICAgIEFycmF5VmFsdWUgbV9hcnJheVZh
bHVlOworICAgICAgICBNYXBWYWx1ZSBtX21hcFZhbHVlOworICAgIH07CisKKyAgICB2b2lkIGlu
dGVybmFsTW92ZUNvbnN0cnVjdEZyb20oQ0JPUlZhbHVlJiYpOworICAgIHZvaWQgaW50ZXJuYWxD
bGVhbnVwKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBjYm9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMw
Y2FiY2RmNThmNTgxZDI2MWU1MWVmOTZmYjQ1YzBjYzAzNmViMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SV3JpdGVyLmNwcApAQCAt
MCwwICsxLDE5MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ0JPUldyaXRlci5oIgorCisjaW5j
bHVkZSAiQ0JPUkJpbmFyeS5oIgorCituYW1lc3BhY2UgY2JvciB7CisKK0NCT1JXcml0ZXI6On5D
Qk9SV3JpdGVyKCkKK3sKK30KKworLy8gc3RhdGljCitzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gQ0JPUldyaXRlcjo6d3JpdGUoY29uc3QgQ0JPUlZhbHVlJiBub2RlLCBzaXplX3QgbWF4
TmVzdGluZ0xldmVsKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBjYm9yOworICAgIENCT1JXcml0
ZXIgd3JpdGVyKCZjYm9yKTsKKyAgICBpZiAod3JpdGVyLmVuY29kZUNCT1Iobm9kZSwgc3RhdGlj
X2Nhc3Q8aW50PihtYXhOZXN0aW5nTGV2ZWwpKSkKKyAgICAgICAgcmV0dXJuIGNib3I7CisgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworQ0JPUldyaXRlcjo6Q0JPUldyaXRlcihWZWN0b3I8
dWludDhfdD4qIGNib3IpCisgICAgOiBtX2VuY29kZWRDQk9SKGNib3IpCit7Cit9CisKK2Jvb2wg
Q0JPUldyaXRlcjo6ZW5jb2RlQ0JPUihjb25zdCBDQk9SVmFsdWUmIG5vZGUsIGludCBtYXhOZXN0
aW5nTGV2ZWwpCit7CisgICAgaWYgKG1heE5lc3RpbmdMZXZlbCA8IDApCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHN3aXRjaCAobm9kZS50eXBlKCkpIHsKKyAgICBjYXNlIENCT1JWYWx1
ZTo6VHlwZTo6Tm9uZTogeworICAgICAgICBzdGFydEl0ZW0oQ0JPUlZhbHVlOjpUeXBlOjpCeXRl
U3RyaW5nLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFJlcHJlc2Vu
dHMgdW5zaWduZWQgaW50ZWdlcnMuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVk
OiB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBub2RlLmdldFVuc2lnbmVkKCk7CisgICAgICAg
IHN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVkLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFJlcHJlc2Vu
dHMgbmVnYXRpdmUgaW50ZWdlcnMuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6Ok5lZ2F0aXZl
OiB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBub2RlLmdldE5lZ2F0aXZlKCk7CisgICAgICAg
IHN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6Ok5lZ2F0aXZlLCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oLSh2YWx1ZSArIDEpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyBS
ZXByZXNlbnRzIGEgYnl0ZSBzdHJpbmcuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OkJ5dGVT
dHJpbmc6IHsKKyAgICAgICAgY29uc3QgQ0JPUlZhbHVlOjpCaW5hcnlWYWx1ZSYgYnl0ZXMgPSBu
b2RlLmdldEJ5dGVTdHJpbmcoKTsKKyAgICAgICAgc3RhcnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6
Qnl0ZVN0cmluZywgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVzLnNpemUoKSkpOworICAgICAg
ICAvLyBBZGQgdGhlIGJ5dGVzLgorICAgICAgICBtX2VuY29kZWRDQk9SLT5hcHBlbmRWZWN0b3Io
Ynl0ZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBDQk9SVmFsdWU6
OlR5cGU6OlN0cmluZzogeworICAgICAgICAvLyBXVEZTdHJpbmcgdXNlcyBVVEYxNiBidXQgUkZD
NzA0OSByZXF1aXJlcyBVVEY4CisgICAgICAgIGF1dG8gdXRmOFN0cmluZyA9IG5vZGUuZ2V0U3Ry
aW5nKCkudXRmOCgpOworICAgICAgICBzdGFydEl0ZW0oQ0JPUlZhbHVlOjpUeXBlOjpTdHJpbmcs
IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1dGY4U3RyaW5nLmxlbmd0aCgpKSk7CisgICAgICAgIC8v
IEFkZCB0aGUgY2hhcmFjdGVycy4KKyAgICAgICAgbV9lbmNvZGVkQ0JPUi0+YXBwZW5kKHV0ZjhT
dHJpbmcuZGF0YSgpLCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIC8vIFJlcHJlc2VudHMgYW4gYXJyYXkuCisgICAgY2FzZSBDQk9SVmFsdWU6
OlR5cGU6OkFycmF5OiB7CisgICAgICAgIGNvbnN0IENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSYgYXJy
YXkgPSBub2RlLmdldEFycmF5KCk7CisgICAgICAgIHN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6
OkFycmF5LCBhcnJheS5zaXplKCkpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbHVlIDog
YXJyYXkpIHsKKyAgICAgICAgICAgIGlmICghZW5jb2RlQ0JPUih2YWx1ZSwgbWF4TmVzdGluZ0xl
dmVsIC0gMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyBSZXByZXNlbnRzIGEgbWFwLgorICAgIGNh
c2UgQ0JPUlZhbHVlOjpUeXBlOjpNYXA6IHsKKyAgICAgICAgY29uc3QgQ0JPUlZhbHVlOjpNYXBW
YWx1ZSYgbWFwID0gbm9kZS5nZXRNYXAoKTsKKyAgICAgICAgc3RhcnRJdGVtKENCT1JWYWx1ZTo6
VHlwZTo6TWFwLCBtYXAuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbHVl
IDogbWFwKSB7CisgICAgICAgICAgICBpZiAoIWVuY29kZUNCT1IodmFsdWUuZmlyc3QsIG1heE5l
c3RpbmdMZXZlbCAtIDEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghZW5jb2RlQ0JPUih2YWx1ZS5zZWNvbmQsIG1heE5lc3RpbmdMZXZlbCAtIDEpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgLy8gUmVwcmVzZW50cyBhIHNpbXBsZSB2YWx1ZS4KKyAgICBjYXNl
IENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxlVmFsdWU6IHsKKyAgICAgICAgY29uc3QgQ0JPUlZhbHVl
OjpTaW1wbGVWYWx1ZSBzaW1wbGVWYWx1ZSA9IG5vZGUuZ2V0U2ltcGxlVmFsdWUoKTsKKyAgICAg
ICAgc3RhcnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxlVmFsdWUsIHN0YXRpY19jYXN0PHVp
bnQ2NF90PihzaW1wbGVWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENCT1JXcml0ZXI6OnN0YXJ0SXRlbShD
Qk9SVmFsdWU6OlR5cGUgdHlwZSwgdWludDY0X3Qgc2l6ZSkKK3sKKyAgICBtX2VuY29kZWRDQk9S
LT5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUp
IDw8IGNvbnN0YW50czo6a01ham9yVHlwZUJpdFNoaWZ0KSk7CisgICAgc2V0VWludChzaXplKTsK
K30KKwordm9pZCBDQk9SV3JpdGVyOjpzZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24odWludDhfdCBh
ZGRpdGlvbmFsSW5mb3JtYXRpb24pCit7CisgICAgQVNTRVJUKCFtX2VuY29kZWRDQk9SLT5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVCgoYWRkaXRpb25hbEluZm9ybWF0aW9uICYgY29uc3RhbnRzOjpr
QWRkaXRpb25hbEluZm9ybWF0aW9uTWFzaykgPT0gYWRkaXRpb25hbEluZm9ybWF0aW9uKTsKKyAg
ICBtX2VuY29kZWRDQk9SLT5sYXN0KCkgfD0gKGFkZGl0aW9uYWxJbmZvcm1hdGlvbiAmIGNvbnN0
YW50czo6a0FkZGl0aW9uYWxJbmZvcm1hdGlvbk1hc2spOworfQorCit2b2lkIENCT1JXcml0ZXI6
OnNldFVpbnQodWludDY0X3QgdmFsdWUpCit7CisgICAgc2l6ZV90IGNvdW50ID0gZ2V0TnVtVWlu
dEJ5dGVzKHZhbHVlKTsKKyAgICBpbnQgc2hpZnQgPSAtMTsKKyAgICAvLyBWYWx1ZXMgdW5kZXIg
MjQgYXJlIGVuY29kZWQgZGlyZWN0bHkgaW4gdGhlIGluaXRpYWwgYnl0ZS4KKyAgICAvLyBPdGhl
cndpc2UsIHRoZSBsYXN0IDUgYml0cyBvZiB0aGUgaW5pdGlhbCBieXRlIGNvbnRhaW5zIHRoZSBs
ZW5ndGgKKyAgICAvLyBvZiB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyBlbmNvZGVkIGluIGZv
bGxvd2luZyBieXRlcy4KKyAgICBzd2l0Y2ggKGNvdW50KSB7CisgICAgY2FzZSAwOgorICAgICAg
ICBzZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBzZXRBZGRpdGlvbmFsSW5mb3Jt
YXRpb24oY29uc3RhbnRzOjprQWRkaXRpb25hbEluZm9ybWF0aW9uMUJ5dGUpOworICAgICAgICBz
aGlmdCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgc2V0QWRkaXRp
b25hbEluZm9ybWF0aW9uKGNvbnN0YW50czo6a0FkZGl0aW9uYWxJbmZvcm1hdGlvbjJCeXRlcyk7
CisgICAgICAgIHNoaWZ0ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAg
ICBzZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oY29uc3RhbnRzOjprQWRkaXRpb25hbEluZm9ybWF0
aW9uNEJ5dGVzKTsKKyAgICAgICAgc2hpZnQgPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IDg6CisgICAgICAgIHNldEFkZGl0aW9uYWxJbmZvcm1hdGlvbihjb25zdGFudHM6OmtBZGRpdGlv
bmFsSW5mb3JtYXRpb244Qnl0ZXMpOworICAgICAgICBzaGlmdCA9IDc7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgZm9yICg7IHNoaWZ0ID49IDA7IHNoaWZ0LS0pCisgICAgICAgIG1f
ZW5jb2RlZENCT1ItPmFwcGVuZCgweEZGICYgKHZhbHVlID4+IChzaGlmdCAqIDgpKSk7Cit9CisK
K3NpemVfdCBDQk9SV3JpdGVyOjpnZXROdW1VaW50Qnl0ZXModWludDY0X3QgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlIDwgMjQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICh2YWx1ZSA8PSAw
eEZGKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAodmFsdWUgPD0gMHhGRkZGKQorICAgICAg
ICByZXR1cm4gMjsKKyAgICBpZiAodmFsdWUgPD0gMHhGRkZGRkZGRikKKyAgICAgICAgcmV0dXJu
IDQ7CisgICAgcmV0dXJuIDg7Cit9CisKK30gLy8gbmFtZXNwYWNlIGNib3IKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SV3JpdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQxYzJhMjBkMGI1M2U1NmU5ODY0OGQ4MGM1MDcxYTM3YWYyMGEwNTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5oCkBA
IC0wLDAgKzEsMTE0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisv
LyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ0JPUlZhbHVlLmgiCisjaW5jbHVkZSA8
c3RkZGVmLmg+CisKKy8vIEEgYmFzaWMgQ29uY2lzZSBCaW5hcnkgT2JqZWN0IFJlcHJlc2VudGF0
aW9uIChDQk9SKSBlbmNvZGVyIGFzIGRlZmluZWQgYnkKKy8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9yZmM3MDQ5LiBUaGlzIGlzIGEgZ2VuZXJpYyBlbmNvZGVyIHRoYXQgc3VwcGxpZXMK
Ky8vIGNhbm9uaWNhbCwgd2VsbC1mb3JtZWQgQ0JPUiB2YWx1ZXMgYnV0IGRvZXMgbm90IGd1YXJh
bnRlZSB0aGVpciB2YWxpZGl0eQorLy8gKHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwv
cmZjNzA0OSNzZWN0aW9uLTMuMikuCisvLyBTdXBwb3J0ZWQ6CisvLyAgKiBNYWpvciB0eXBlczoK
Ky8vICAgICAqIDA6IFVuc2lnbmVkIGludGVnZXJzLCB1cCB0byBJTlQ2NF9NQVguCisvLyAgICAg
KiAxOiBOZWdhdGl2ZSBpbnRlZ2VycywgdG8gSU5UNjRfTUlOLgorLy8gICAgICogMjogQnl0ZSBz
dHJpbmdzLgorLy8gICAgICogMzogVVRGLTggc3RyaW5ncy4KKy8vICAgICAqIDQ6IEFycmF5cywg
d2l0aCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGtub3duIGF0IHRoZSBzdGFydC4KKy8vICAgICAq
IDU6IE1hcHMsIHdpdGggdGhlIG51bWJlciBvZiBlbGVtZW50cyBrbm93biBhdCB0aGUgc3RhcnQK
Ky8vICAgICAgICAgICAgICBvZiB0aGUgY29udGFpbmVyLgorLy8gICAgICogNzogU2ltcGxlIHZh
bHVlcy4KKy8vCisvLyBVbnN1cHBvcnRlZDoKKy8vICAqIEZsb2F0aW5nLXBvaW50IG51bWJlcnMu
CisvLyAgKiBJbmRlZmluaXRlLWxlbmd0aCBlbmNvZGluZ3MuCisvLyAgKiBQYXJzaW5nLgorLy8K
Ky8vIFJlcXVpcmVtZW50cyBmb3IgY2Fub25pY2FsIENCT1IgYXMgc3VnZ2VzdGVkIGJ5IFJGQyA3
MDQ5IGFyZToKKy8vICAxKSBBbGwgbWFqb3IgZGF0YSB0eXBlcyBmb3IgdGhlIENCT1IgdmFsdWVz
IG11c3QgYmUgYXMgc2hvcnQgYXMgcG9zc2libGUuCisvLyAgICAgICogVW5zaWduZWQgaW50ZWdl
ciBiZXR3ZWVuIDAgdG8gMjMgbXVzdCBiZSBleHByZXNzZWQgaW4gc2FtZSBieXRlIGFzCisvLyAg
ICAgICAgICAgIHRoZSBtYWpvciB0eXBlLgorLy8gICAgICAqIDI0IHRvIDI1NSBtdXN0IGJlIGV4
cHJlc3NlZCBvbmx5IHdpdGggYW4gYWRkaXRpb25hbCB1aW50OF90LgorLy8gICAgICAqIDI1NiB0
byA2NTUzNSBtdXN0IGJlIGV4cHJlc3NlZCBvbmx5IHdpdGggYW4gYWRkaXRpb25hbCB1aW50MTZf
dC4KKy8vICAgICAgKiA2NTUzNiB0byA0Mjk0OTY3Mjk1IG11c3QgYmUgZXhwcmVzc2VkIG9ubHkg
d2l0aCBhbiBhZGRpdGlvbmFsCisvLyAgICAgICAgICAgIHVpbnQzMl90LiAqIFRoZSBydWxlcyBm
b3IgZXhwcmVzc2lvbiBvZiBsZW5ndGggaW4gbWFqb3IgdHlwZXMKKy8vICAgICAgICAgICAgMiB0
byA1IGZvbGxvdyB0aGUgYWJvdmUgcnVsZSBmb3IgaW50ZWdlcnMuCisvLyAgMikgS2V5cyBpbiBl
dmVyeSBtYXAgbXVzdCBiZSBzb3J0ZWQgKGZpcnN0IGJ5IG1ham9yIHR5cGUsIHRoZW4gYnkga2V5
CisvLyAgICAgICAgIGxlbmd0aCwgdGhlbiBieSB2YWx1ZSBpbiBieXRlLXdpc2UgbGV4aWNhbCBv
cmRlcikuCisvLyAgMykgSW5kZWZpbml0ZSBsZW5ndGggaXRlbXMgbXVzdCBiZSBjb252ZXJ0ZWQg
dG8gZGVmaW5pdGUgbGVuZ3RoIGl0ZW1zLgorLy8gIDQpIEFsbCBtYXBzIG11c3Qgbm90IGhhdmUg
ZHVwbGljYXRlIGtleXMuCisvLworLy8gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBDQk9SV3Jp
dGVyIGVuY29kZXIgbWVldHMgYWxsIHRoZSByZXF1aXJlbWVudHMgb2YKKy8vIGNhbm9uaWNhbCBD
Qk9SLgorCituYW1lc3BhY2UgY2JvciB7CisKK2NsYXNzIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQ
T1JUIENCT1JXcml0ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENCT1JXcml0ZXIpOwor
cHVibGljOgorICAgIC8vIERlZmF1bHQgdGhhdCBzaG91bGQgYmUgc3VmZmljaWVudGx5IGxhcmdl
IGZvciBtb3N0IHVzZSBjYXNlcy4KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrRGVmYXVs
dE1heE5lc3RpbmdEZXB0aCA9IDE2OworCisgICAgfkNCT1JXcml0ZXIoKTsKKworICAgIC8vIFJl
dHVybnMgdGhlIENCT1IgYnl0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgfG5vZGV8LCB1bmxl
c3MgaXRzIG5lc3RpbmcKKyAgICAvLyBkZXB0aCBpcyBncmVhdGVyIHRoYW4gfG1heF9uZXN0aW5n
X2RlcHRofCwgaW4gd2hpY2ggY2FzZSBhbiBlbXB0eSBvcHRpb25hbAorICAgIC8vIHZhbHVlIGlz
IHJldHVybmVkLiBUaGUgbmVzdGluZyBkZXB0aCBvZiB8bm9kZXwgaXMgZGVmaW5lZCBhcyB0aGUg
bnVtYmVyIG9mCisgICAgLy8gYXJyYXlzL21hcHMgdGhhdCBoYXMgdG8gYmUgdHJhdmVyc2VkIHRv
IHJlYWNoIHRoZSBtb3N0IG5lc3RlZCBDQk9SVmFsdWUKKyAgICAvLyBjb250YWluZWQgaW4gfG5v
ZGV8LiBQcmltaXRpdmUgdmFsdWVzIGFuZCBlbXB0eSBjb250YWluZXJzIGhhdmUgbmVzdGluZwor
ICAgIC8vIGRlcHRocyBvZiAwLgorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gd3JpdGUoY29uc3QgQ0JPUlZhbHVlJiwgc2l6ZV90IG1heE5lc3RpbmdMZXZlbCA9IGtE
ZWZhdWx0TWF4TmVzdGluZ0RlcHRoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQk9SV3Jp
dGVyKFZlY3Rvcjx1aW50OF90PiopOworCisgICAgLy8gQ2FsbGVkIHJlY3Vyc2l2ZWx5IHRvIGJ1
aWxkIHRoZSBDQk9SIGJ5dGVzdHJpbmcuIFdoZW4gY29tcGxldGVkLAorICAgIC8vIHxtX2VuY29k
ZWRDQk9SfCB3aWxsIGNvbnRhaW4gdGhlIENCT1IuCisgICAgYm9vbCBlbmNvZGVDQk9SKGNvbnN0
IENCT1JWYWx1ZSYsIGludCBtYXhOZXN0aW5nTGV2ZWwpOworCisgICAgLy8gRW5jb2RlcyB0aGUg
dHlwZSBhbmQgc2l6ZSBvZiB0aGUgZGF0YSBiZWluZyBhZGRlZC4KKyAgICB2b2lkIHN0YXJ0SXRl
bShDQk9SVmFsdWU6OlR5cGUsIHVpbnQ2NF90IHNpemUpOworCisgICAgLy8gRW5jb2RlcyB0aGUg
YWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGRhdGEuCisgICAgdm9pZCBzZXRBZGRpdGlv
bmFsSW5mb3JtYXRpb24odWludDhfdCk7CisKKyAgICAvLyBFbmNvZGVzIGFuIHVuc2lnbmVkIGlu
dGVnZXIgdmFsdWUuIFRoaXMgaXMgdXNlZCB0byBib3RoIHdyaXRlCisgICAgLy8gdW5zaWduZWQg
aW50ZWdlcnMgYW5kIHRvIGVuY29kZSB0aGUgbGVuZ3RocyBvZiBvdGhlciBtYWpvciB0eXBlcy4K
KyAgICB2b2lkIHNldFVpbnQodWludDY0X3QgdmFsdWUpOworCisgICAgLy8gR2V0IHRoZSBudW1i
ZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIHN0b3JlIHRoZSB1bnNpZ25lZCBpbnRlZ2VyLgorICAgIHNp
emVfdCBnZXROdW1VaW50Qnl0ZXModWludDY0X3QgdmFsdWUpOworCisgICAgLy8gSG9sZHMgdGhl
IGVuY29kZWQgQ0JPUiBkYXRhLgorICAgIFZlY3Rvcjx1aW50OF90PiogbV9lbmNvZGVkQ0JPUjsK
K307CisKK30gLy8gbmFtZXNwYWNlIGNib3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZmM5YWNjY2IzY2U2
NTVkNDFmNWE3MmI2ZWJkNTdjYjM5NmVhNTNhZC4uMzNjMWQwNmNhNDhiMDUzMjIzNDY3MTMwYmE0
OTdlZDhiZmYwMTgxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTI0NSw2ICsyNDUsOSBAQCBNb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAogTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVy
UHJvY2Vzc29yLmNwcAogCiBNb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3Bw
CitNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlJlYWRlci5jcHAKK01vZHVsZXMvd2ViYXV0aG4v
Y2Jvci9DQk9SVmFsdWUuY3BwCitNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5jcHAK
IAogTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAKIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTE0ODllYWIyYjE0YzNm
MmM2NmQwMmE5YWVkY2VjZjM1ZGUyY2VjNS4uNzkyNzM5MDhhNmM2N2Q4ZTY3ODZmNzRlZTM1MjYw
YWM0ZjA2MThjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTY0MSw2ICsxNjQxLDEwIEBACiAJCTU3MjFBOTg3MUVDRTUzQjEw
MDgxMjk1QSAvKiBDcnlwdG9EaWdlc3RBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MjFBOTg2MUVDRTUzQjEwMDgxMjk1QSAvKiBDcnlw
dG9EaWdlc3RBbGdvcml0aG0uaCAqLzsgfTsKIAkJNTcyMUE5OEIxRUNFNTcwNDAwODEyOTVBIC8q
IENyeXB0b0FsZ29yaXRobVJzYVBzc1BhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyMUE5ODgxRUNFNTcwNDAwODEyOTVBIC8qIENyeXB0b0Fs
Z29yaXRobVJzYVBzc1BhcmFtcy5oICovOyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkg
LyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICov
OyB9OworCQk1NzMwM0JCOTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JCNDIwMDZDNkVEMDAz
NTU5NjUgLyogQ0JPUlZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTczMDNCQkEyMDA2QzZFRTAwMzU1OTY1IC8qIENCT1JXcml0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQkI1MjAw
NkM2RUQwMDM1NTk2NSAvKiBDQk9SV3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTczMDNCQkIyMDA2QzZFRTAwMzU1OTY1IC8qIENCT1JC
aW5hcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
MzAzQkI2MjAwNkM2RUQwMDM1NTk2NSAvKiBDQk9SQmluYXJ5LmggKi87IH07CisJCTU3MzAzQkMx
MjAwNkUwMEMwMDM1NTk2NSAvKiBDQk9SUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JCRjIwMDZFMDBDMDAzNTU5NjUgLyogQ0JPUlJl
YWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTU3MzQ4OTM5MURBQzZCNkUwMERDMDY2NyAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzM0ODkzODFE
QUM2QjZEMDBEQzA2NjcgLyogQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oICovOyB9OwogCQk1
NzM5RTEyRjFEQUM3Rjc4MDBFMTQzODMgLyogSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzM5RTEyRTFE
QUM3Rjc4MDBFMTQzODMgLyogSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggKi87IH07CiAJ
CTU3NTBBOTc1MUU2OEQwMDAwMDcwNUM0QSAvKiBDcnlwdG9LZXlFQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1MEE5NzMxRTY4RDAwMDAwNzA1QzRB
IC8qIENyeXB0b0tleUVDLmggKi87IH07CkBAIC04MTY4LDYgKzgxNzIsMTMgQEAKIAkJNTcyMUE5
OEExRUNFNTcwNDAwODEyOTVBIC8qIFJzYVBzc1BhcmFtcy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUnNhUHNzUGFyYW1z
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2
MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbXVsYXRlZENsaWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIy
MUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTU3MzAzQkI0MjAwNkM2RUQwMDM1NTk2NSAvKiBDQk9SVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0JPUlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU3MzAzQkI1MjAwNkM2RUQwMDM1NTk2NSAvKiBDQk9SV3JpdGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENCT1JXcml0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTczMDNCQjYyMDA2QzZFRDAwMzU1OTY1IC8qIENCT1JCaW5h
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0JPUkJpbmFyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzMwM0JCNzIwMDZDNkVEMDAzNTU5NjUgLyogQ0JP
UlZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENCT1JWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkI4MjAwNkM2RUQwMDM1
NTk2NSAvKiBDQk9SV3JpdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENCT1JXcml0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzMwM0JC
RTIwMDZFMDA0MDAzNTU5NjUgLyogQ0JPUlJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDQk9SUmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTczMDNCQkYyMDA2RTAwQzAwMzU1OTY1IC8qIENCT1JSZWFkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0JPUlJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzM0ODkzODFEQUM2QjZEMDBEQzA2NjcgLyogQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MzlFMTJFMURB
QzdGNzgwMEUxNDM4MyAvKiBKU0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MzlFMTMwMURBQzdGRDEwMEUxNDM4MyAvKiBK
U0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MDU2LDYgKzE4MDY3LDIwIEBACiAJCQlwYXRoID0gInVuaWZp
ZWQtc291cmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1NzMwM0JC
MzIwMDZDNkVEMDAzNTU5NjUgLyogY2JvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNTczMDNCQjYyMDA2QzZFRDAwMzU1OTY1IC8qIENCT1JCaW5hcnku
aCAqLywKKwkJCQk1NzMwM0JCRTIwMDZFMDA0MDAzNTU5NjUgLyogQ0JPUlJlYWRlci5jcHAgKi8s
CisJCQkJNTczMDNCQkYyMDA2RTAwQzAwMzU1OTY1IC8qIENCT1JSZWFkZXIuaCAqLywKKwkJCQk1
NzMwM0JCNzIwMDZDNkVEMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmNwcCAqLywKKwkJCQk1NzMwM0JC
NDIwMDZDNkVEMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmggKi8sCisJCQkJNTczMDNCQjgyMDA2QzZF
RDAwMzU1OTY1IC8qIENCT1JXcml0ZXIuY3BwICovLAorCQkJCTU3MzAzQkI1MjAwNkM2RUQwMDM1
NTk2NSAvKiBDQk9SV3JpdGVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNib3I7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1N0M3QTY4ODFFNTY5NDZEMDBDNjdENzEgLyog
Y3JlZGVudGlhbG1hbmFnZW1lbnQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMTgwOTYsNiArMTgxMjEsNyBAQAogCQk1N0Q4NDYyQTFGRUFGNTdGMDBDQTM2
ODIgLyogd2ViYXV0aG4gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTU3MzAzQkIzMjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yICovLAogCQkJCTU3RDg0NjJD
MUZFQUY2OEYwMENBMzY4MiAvKiBQdWJsaWNLZXlDcmVkZW50aWFsLmNwcCAqLywKIAkJCQk1N0Q4
NDYyQjFGRUFGNjhGMDBDQTM2ODIgLyogUHVibGljS2V5Q3JlZGVudGlhbC5oICovLAogCQkJCTU3
RDg0NjJEMUZFQUY2OEYwMENBMzY4MiAvKiBQdWJsaWNLZXlDcmVkZW50aWFsLmlkbCAqLywKQEAg
LTI2NTE4LDYgKzI2NTQ0LDEwIEBACiAJCQkJMDdCNzExNkQxRDg5OUU2MzAwOUYwRkZCIC8qIENh
cHR1cmVEZXZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3QjcxMTZGMUQ4OTlFNjMwMDlGMEZG
QiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDNzM0MTUx
OTc3ODk2RDAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTcz
MDNCQkIyMDA2QzZFRTAwMzU1OTY1IC8qIENCT1JCaW5hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU3MzAzQkMxMjAwNkUwMEMwMDM1NTk2NSAvKiBDQk9SUmVhZGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NzMwM0JCOTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NzMwM0JCQTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUldyaXRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MTYxRTAwQjdFNTAwRTIzNUEyIC8qIENETS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0Q5NEE1REUxRjcyRjU3QjAwRjUyNUM1IC8qIENETUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggMmFlNWRhNWY1ZTI0NzgyZWViZTk0ZDg4ZWNlZDFiZmI1MDVmNWI5OC4uMThiMTZm
ZGJhN2Q4YTQzMjBhZmFhYWMyNzJmMWRlOWJhNmE5M2RjNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE4LTAxLTEx
ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhO
XSBJbXBvcnQgYSBDQk9SIGNvZGVyIGZyb20gQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTUyMgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzYwNTU3Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGltcG9ydHMgYWxsIHVuaXQgdGVzdHMgaW50byBvdXIgQVBJ
IHRlc3RzIHRvIGVuc3VyZSBhbGwKKyAgICAgICAgd29ya2Fyb3VuZHMgYW5kIG1vZGlmaWNhdGlv
biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBjb2RlYmFzZSBkb2Vzbid0IGNoYW5nZQorICAgICAgICBh
bnkgb3JpZ2luYWwgZnVuY3Rpb25hbGl0aWVzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0NCT1JSZWFkZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ0JPUlZhbHVlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NCT1JXcml0ZXJU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjplcSk6CisgICAgICAgIFdv
cmthcm91bmRzIGFwcGxpZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAx
OC0wMS0xMCAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIFRvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llczogUGFja2FnZXMgZ2Vv
Y2x1ZSwgcnVieS1oaWdobGluZSwgeG9yZy11dGlscyBkbyBub3QgZXhpc3QgaW4gQXJjaCBMaW51
eApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyNDk5NmIyNzI4M2JhZTcwNWY0MWZkNzM0ODFj
YTYyZmE2ZmZmM2Y1Li4xZjMyNjUzZjQzMjNhOWY3YWIzMjA1YzFiZWQ4ZjJmNzU1M2ZhNzAxIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE4LDYgKzIxOCw5IEBACiAJCTU3MTRFQ0JCMUNB
OEJGRTQwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcxNEVD
QkExQ0E4QkZEMTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRt
bCAqLzsgfTsKIAkJNTcxNEVDQkQxQ0E4QzIyQTAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9y
aWdpbmFsVVJMMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RP
cmlnaW5hbFVSTDIuaHRtbCAqLzsgfTsKIAkJNTcxRjdGRDAxRjI5NjFGQjAwOTQ2NjQ4IC8qIElu
ZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzLXdhbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzFG
N0ZDRjFGMjk2MUUxMDA5NDY2NDggLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRD
b21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsICovOyB9OworCQk1NzMwM0JDOTIwMDgyNEQzMDAzNTU5
NjUgLyogQ0JPUlZhbHVlVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzMwM0JBQzIwMDZDNTYwMDAzNTU5NjUgLyogQ0JPUlZhbHVlVGVzdC5j
cHAgKi87IH07CisJCTU3MzAzQkNBMjAwODJDMDEwMDM1NTk2NSAvKiBDQk9SV3JpdGVyVGVzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JB
QjIwMDZDNTU0MDAzNTU5NjUgLyogQ0JPUldyaXRlclRlc3QuY3BwICovOyB9OworCQk1NzMwM0JD
QjIwMDgzNzY1MDAzNTU5NjUgLyogQ0JPUlJlYWRlclRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTczMDNCQzIyMDA3MUUyMjAwMzU1OTY1IC8q
IENCT1JSZWFkZXJUZXN0LmNwcCAqLzsgfTsKIAkJNTc1OTlFMjExRjA3MTkxOTAwQTNGQjhDIC8q
IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3NTk5RTIwMUYwNzE5MTcw
MEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHku
bW0gKi87IH07CiAJCTU3NTk5RTI3MUYwNzFBQTAwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1
cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMyBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzU5OUUyNDFGMDcxOTJDMDBBM0ZC
OEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0
ZTMgKi87IH07CiAJCTU3NTk5RTI4MUYwNzFBQTAwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1
cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy1zaG0gaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTlFMjYxRjA3MTkyQzAw
QTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5z
cWxpdGUzLXNobSAqLzsgfTsKQEAgLTEzNzksNiArMTM4Miw5IEBACiAJCTU3MTRFQ0JBMUNBOEJG
RDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0
bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0JDMUNBOEMyMTgwMDA1MUFD
OCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTDIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzFGN0ZDRjFGMjk2MUUxMDA5NDY2NDggLyogSW5kZXhlZERCU3Ry
dWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJJbmRl
eGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy13YWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzMwM0JBQjIwMDZDNTU0MDAzNTU5NjUgLyog
Q0JPUldyaXRlclRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q0JPUldyaXRlclRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzMwM0JB
QzIwMDZDNTYwMDAzNTU5NjUgLyogQ0JPUlZhbHVlVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDQk9SVmFsdWVUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTczMDNCQzIyMDA3MUUyMjAwMzU1OTY1IC8qIENCT1JSZWFkZXJUZXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENCT1JSZWFkZXJUZXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTczNUYwMjUxRjNBNEVBNjAwMEVFODAx
IC8qIFRlc3RXZWJLaXRBUEktaU9TLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QuZW50aXRsZW1lbnRzOyBwYXRo
ID0gIlRlc3RXZWJLaXRBUEktaU9TLmVudGl0bGVtZW50cyI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3NTk5RTIwMUYwNzE5MTcwMEEzRkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVk
Q2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxp
dHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTk5RTIzMUYwNzE5MkMwMEEz
RkI4QyAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlXcml0
ZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRp
YmlsaXR5V3JpdGUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDMsNiAr
MjIwOSw5IEBACiAJCQkJNjM1NEY0RDAxRjdDM0FCNTAwRDg5REYzIC8qIEFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXIuY3BwICovLAogCQkJCTkzQTcyMEU1MThGMUEwRTgwMEE4NDhFMSAvKiBDYWxj
dWxhdGlvblZhbHVlLmNwcCAqLywKIAkJCQkwN0MwNDZDOTFFNDI1NzNFMDA3MjAxRTcgLyogQ0FS
aW5nQnVmZmVyLmNwcCAqLywKKwkJCQk1NzMwM0JDMjIwMDcxRTIyMDAzNTU5NjUgLyogQ0JPUlJl
YWRlclRlc3QuY3BwICovLAorCQkJCTU3MzAzQkFDMjAwNkM1NjAwMDM1NTk2NSAvKiBDQk9SVmFs
dWVUZXN0LmNwcCAqLywKKwkJCQk1NzMwM0JBQjIwMDZDNTU0MDAzNTU5NjUgLyogQ0JPUldyaXRl
clRlc3QuY3BwICovLAogCQkJCTdDMzk2NTA1MUNERDc0RjkwMDk0REJCOCAvKiBDb2xvci5jcHAg
Ki8sCiAJCQkJMUM5RUI4NDAxRTM4MERBMTAwNUM2NDQyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAgKi8sCiAJCQkJN0NCMTg0QzQxQUEzRjIxMDAwNjZFREZEIC8qIENvbnRlbnRFeHRlbnNp
b25zLmNwcCAqLywKQEAgLTMzMzEsNiArMzM0MCw5IEBACiAJCQkJN0M4M0UwNDExRDBBNjNGMjAw
RkVCQ0YzIC8qIENhbmRpZGF0ZVRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRTcx
QTQxMUFFNjAwNDQ3QzRDIC8qIENhbkhhbmRsZVJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDdDMDQ2Q0ExRTQyNjJBODAwNzIwMUU3IC8qIENBUmluZ0J1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1NzMwM0JDQjIwMDgzNzY1MDAzNTU5NjUgLyogQ0JPUlJlYWRlclRlc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNTczMDNCQzkyMDA4MjREMzAwMzU1OTY1IC8qIENCT1JWYWx1
ZVRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTczMDNCQ0EyMDA4MkMwMTAwMzU1OTY1IC8q
IENCT1JXcml0ZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUU2MUE0MTFBRTYw
MDQ0N0M0QyAvKiBDbG9zZUZyb21XaXRoaW5DcmVhdGVQYWdlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RUI3MUE0MTFBN0UwMDQ0N0M0QyAvKiBDbG9zZU5ld1dpbmRvd0luTmF2aWdhdGlv
blBvbGljeURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRTUxQTQxMUFFNjAw
NDQ3QzRDIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SUmVhZGVyVGVzdC5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0JPUlJlYWRlclRlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE0MDAyYjM3NjNiNzFlZDBkZjY1MGQwMmM1ODQyMThhZDc5MjM5NDYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0JPUlJlYWRl
clRlc3QuY3BwCkBAIC0wLDAgKzEsNzY1IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisv
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
Ky8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NCT1JSZWFkZXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5Pgor
CisvLyBMZXZlcmFnaW5nIFJGQyA3MDQ5IGV4YW1wbGVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29t
L2Nib3IvdGVzdC12ZWN0b3JzL2Jsb2IvbWFzdGVyL2FwcGVuZGl4X2EuanNvbi4KK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKwordXNpbmcgbmFtZXNwYWNlIGNib3I7CisKK1RFU1QoQ0JPUlJl
YWRlclRlc3QsIFRlc3RSZWFkVWludCkKK3sKKyAgICBzdHJ1Y3QgVWludFRlc3RDYXNlIHsKKyAg
ICAgICAgY29uc3QgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
IGNib3JEYXRhOworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgVWludFRlc3RDYXNlIGtVaW50
VGVzdENhc2VzW10gPSB7CisgICAgICAgIHsgMCwgeyAweDAwIH0gfSwKKyAgICAgICAgeyAxLCB7
IDB4MDEgfSB9LAorICAgICAgICB7IDIzLCB7IDB4MTcgfSB9LAorICAgICAgICB7IDI0LCB7IDB4
MTgsIDB4MTggfSB9LAorICAgICAgICB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1h
eCgpLCB7IDB4MTgsIDB4ZmYgfSB9LAorICAgICAgICB7IDFMTCA8PCA4LCB7IDB4MTksIDB4MDEs
IDB4MDAgfSB9LAorICAgICAgICB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgo
KSwgeyAweDE5LCAweGZmLCAweGZmIH0gfSwKKyAgICAgICAgeyAxTEwgPDwgMTYsIHsgMHgxYSwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgwMCB9IH0sCisgICAgICAgIHsgc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpLCB7IDB4MWEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSB9LAor
ICAgICAgICB7IDFMTCA8PCAzMiwgeyAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAw
LCAweDAwLCAweDAwLCAweDAwIH0gfSwKKyAgICAgICAgeyBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptYXgoKSwKKyAgICAgICAgICAgIHsgMHgxYiwgMHg3RiwgMHhGRiwgMHhGRiwgMHhG
RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9IH0sCisgICAgfTsKKworICAgIGZvciAoY29uc3Qg
VWludFRlc3RDYXNlJiB0ZXN0Q2FzZSA6IGtVaW50VGVzdENhc2VzKSB7CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZCh0ZXN0Q2FzZS5jYm9y
RGF0YSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBB
U1NFUlRfVFJVRShjYm9yLnZhbHVlKCkudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6VW5zaWdu
ZWQpOworICAgICAgICBFWFBFQ1RfRVEoY2Jvci52YWx1ZSgpLmdldEludGVnZXIoKSwgdGVzdENh
c2UudmFsdWUpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFVpbnRFbmNv
ZGVkV2l0aE5vbk1pbmltdW1CeXRlTGVuZ3RoKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8
dWludDhfdD4gbm9uTWluaW1hbFVpbnRFbmNvZGluZ3NbXSA9IHsKKyAgICAgICAgLy8gVWludCAy
MyBlbmNvZGVkIHdpdGggMSBieXRlLgorICAgICAgICB7IDB4MTgsIDB4MTcgfSwKKyAgICAgICAg
Ly8gVWludCAyNTUgZW5jb2RlZCB3aXRoIDIgYnl0ZXMuCisgICAgICAgIHsgMHgxOSwgMHgwMCwg
MHhmZiB9LAorICAgICAgICAvLyBVaW50IDY1NTM1IGVuY29kZWQgd2l0aCA0IGJ5dGUuCisgICAg
ICAgIHsgMHgxYSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiB9LAorICAgICAgICAvLyBVaW50IDQy
OTQ5NjcyOTUgZW5jb2RlZCB3aXRoIDggYnl0ZS4KKyAgICAgICAgeyAweDFiLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisgICAgICAgIC8vIFdoZW4g
ZGVjb2RpbmcgYnl0ZSBoYXMgbW9yZSB0aGFuIG9uZSBzeW50YXggZXJyb3IsIHRoZSBmaXJzdCBz
eW50YXgKKyAgICAgICAgLy8gZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIGRlc2VyaWFsaXphdGlv
biBpcyByZXR1cm5lZCBhcyB0aGUgZXJyb3IgY29kZS4KKyAgICAgICAgeworICAgICAgICAgICAg
MHhhMiwgLy8gbWFwIHdpdGggbm9uLW1pbmltYWxseSBlbmNvZGVkIGtleQorICAgICAgICAgICAg
MHgxNywgLy8ga2V5IDI0CisgICAgICAgICAgICAweDYxLCAweDQyLCAvLyB2YWx1ZSA6IkIiCisg
ICAgICAgICAgICAweDE4LCAweDE3LCAvLyBrZXkgMjMgZW5jb2RlZCB3aXRoIGV4dHJhIGJ5dGUK
KyAgICAgICAgICAgIDB4NjEsIDB4NDUgLy8gdmFsdWUgIkUiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgIDB4YTIsIC8vIG1hcCB3aXRoIG91dCBvZiBvcmRlciBhbmQgbm9uLW1p
bmltYWxseSBlbmNvZGVkIGtleQorICAgICAgICAgICAgMHgxOCwgMHgxNywgLy8ga2V5IDIzIGVu
Y29kZWQgd2l0aCBleHRyYSBieXRlCisgICAgICAgICAgICAweDYxLCAweDQ1LCAvLyB2YWx1ZSAi
RSIKKyAgICAgICAgICAgIDB4MTcsIC8vIGtleSAyMworICAgICAgICAgICAgMHg2MSwgMHg0MiAv
LyB2YWx1ZSA6IkIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIDB4YTIsIC8v
IG1hcCB3aXRoIGR1cGxpY2F0ZSBub24tbWluaW1hbGx5IGVuY29kZWQga2V5CisgICAgICAgICAg
ICAweDE4LCAweDE3LCAvLyBrZXkgMjMgZW5jb2RlZCB3aXRoIGV4dHJhIGJ5dGUKKyAgICAgICAg
ICAgIDB4NjEsIDB4NDUsIC8vIHZhbHVlICJFIgorICAgICAgICAgICAgMHgxOCwgMHgxNywgLy8g
a2V5IDIzIGVuY29kZWQgd2l0aCBleHRyYSBieXRlCisgICAgICAgICAgICAweDYxLCAweDQyIC8v
IHZhbHVlIDoiQiIKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVjb2Rl
ckVycm9yIGVycm9yQ29kZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG5vbk1pbmltYWxVaW50IDog
bm9uTWluaW1hbFVpbnRFbmNvZGluZ3MpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFs
dWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKG5vbk1pbmltYWxVaW50LCAmZXJyb3JDb2RlKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1Rf
VFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpOb25NaW5pbWFsQ0JP
UkVuY29kaW5nKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkTmVn
YXRpdmVJbnQpCit7CisgICAgc3RydWN0IE5lZ2F0aXZlSW50VGVzdENhc2UgeworICAgICAgICBj
b25zdCBpbnQ2NF90IG5lZ2F0aXZlSW50OworICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4g
Y2JvckRhdGE7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBOZWdhdGl2ZUludFRlc3RDYXNl
IGtOZWdhdGl2ZUludFRlc3RDYXNlc1tdID0geworICAgICAgICB7IC0xTEwsIHsgMHgyMCB9IH0s
CisgICAgICAgIHsgLTI0TEwsIHsgMHgzNyB9IH0sCisgICAgICAgIHsgLTI1TEwsIHsgMHgzOCwg
MHgxOCB9IH0sCisgICAgICAgIHsgLTI1NkxMLCB7IDB4MzgsIDB4ZmYgfSB9LAorICAgICAgICB7
IC0xMDAwTEwsIHsgMHgzOSwgMHgwMywgMHhlNyB9IH0sCisgICAgICAgIHsgLTEwMDAwMDBMTCwg
eyAweDNhLCAweDAwLCAweDBmLCAweDQyLCAweDNmIH0gfSwKKyAgICAgICAgeyAtNDI5NDk2NzI5
NkxMLCB7IDB4M2EsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSB9LAorICAgICAgICB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpLAorICAgICAgICAgICAgeyAweDNiLCAweDdm
LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0gfQorICAgIH07CisK
KyAgICBmb3IgKGNvbnN0IE5lZ2F0aXZlSW50VGVzdENhc2UmIHRlc3RDYXNlIDoga05lZ2F0aXZl
SW50VGVzdENhc2VzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0g
Q0JPUlJlYWRlcjo6cmVhZCh0ZXN0Q2FzZS5jYm9yRGF0YSk7CisgICAgICAgIEFTU0VSVF9UUlVF
KGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLnZhbHVlKCkudHlw
ZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6TmVnYXRpdmUpOworICAgICAgICBFWFBFQ1RfRVEoY2Jv
ci52YWx1ZSgpLmdldEludGVnZXIoKSwgdGVzdENhc2UubmVnYXRpdmVJbnQpOworICAgIH0KK30K
KworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRCeXRlcykKK3sKKyAgICBzdHJ1Y3QgQnl0
ZVRlc3RDYXNlIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgICAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4gY2JvckRhdGE7CisgICAgfTsKKworICAgIHN0YXRpYyBj
b25zdCBCeXRlVGVzdENhc2Uga0J5dGVTdHJpbmdUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAge3sg
fSwgezB4NDB9fSwKKyAgICAgICAge3sweDAxLCAweDAyLCAweDAzLCAweDA0fSwgezB4NDQsIDB4
MDEsIDB4MDIsIDB4MDMsIDB4MDR9fSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBCeXRlVGVz
dENhc2UmIHRlc3RDYXNlIDoga0J5dGVTdHJpbmdUZXN0Q2FzZXMpIHsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JE
YXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEFT
U0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpCeXRlU3Ry
aW5nKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Jvci52YWx1ZSgpLmdldEJ5dGVTdHJpbmcoKSA9
PSB0ZXN0Q2FzZS52YWx1ZSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0
UmVhZFN0cmluZykKK3sKKyAgICBzdHJ1Y3QgU3RyaW5nVGVzdENhc2UgeworICAgICAgICBjb25z
dCBTdHJpbmcgdmFsdWU7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBjYm9yRGF0YTsK
KyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IFN0cmluZ1Rlc3RDYXNlIGtTdHJpbmdUZXN0Q2Fz
ZXNbXSA9IHsKKyAgICAgICAgeyAiIiwgeyAweDYwIH0gfSwKKyAgICAgICAgeyAiYSIsIHsgMHg2
MSwgMHg2MSB9IH0sCisgICAgICAgIHsgIklFVEYiLCB7IDB4NjQsIDB4NDksIDB4NDUsIDB4NTQs
IDB4NDYgfSB9LAorICAgICAgICB7ICJcIlxcIiwgeyAweDYyLCAweDIyLCAweDVjIH0gfSwKKyAg
ICAgICAgeyBTdHJpbmc6OmZyb21VVEY4KCJceGMzXHhiYyIpLCB7IDB4NjIsIDB4YzMsIDB4YmMg
fSB9LAorICAgICAgICB7IFN0cmluZzo6ZnJvbVVURjgoIlx4ZTZceGIwXHhiNCIpLCB7IDB4NjMs
IDB4ZTYsIDB4YjAsIDB4YjQgfSB9LAorICAgICAgICB7IFN0cmluZzo6ZnJvbVVURjgoIlx4ZjBc
eDkwXHg4NVx4OTEiKSwgeyAweDY0LCAweGYwLCAweDkwLCAweDg1LCAweDkxIH0gfSwKKyAgICB9
OworCisgICAgZm9yIChjb25zdCBTdHJpbmdUZXN0Q2FzZSYgdGVzdENhc2UgOiBrU3RyaW5nVGVz
dENhc2VzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJl
YWRlcjo6cmVhZCh0ZXN0Q2FzZS5jYm9yRGF0YSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3Iu
aGFzX3ZhbHVlKCkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLnZhbHVlKCkudHlwZSgpID09
IENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Jvci52YWx1
ZSgpLmdldFN0cmluZygpID09IHRlc3RDYXNlLnZhbHVlKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JP
UlJlYWRlclRlc3QsIFRlc3RSZWFkU3RyaW5nV2l0aE5VTCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
c3RydWN0IHsKKyAgICAgICAgY29uc3QgU3RyaW5nIHZhbHVlOworICAgICAgICBjb25zdCBWZWN0
b3I8dWludDhfdD4gY2JvckRhdGE7CisgICAgfSBrU3RyaW5nVGVzdENhc2VzW10gPSB7CisgICAg
ICAgIHsgU3RyaW5nKCJzdHJpbmdfd2l0aG91dF9udWwiKSwKKyAgICAgICAgICAgIHsgMHg3Miwg
MHg3MywgMHg3NCwgMHg3MiwgMHg2OSwgMHg2RSwgMHg2NywgMHg1RiwgMHg3NywgMHg2OSwgMHg3
NCwgMHg2OCwKKyAgICAgICAgICAgICAgICAweDZGLCAweDc1LCAweDc0LCAweDVGLCAweDZFLCAw
eDc1LCAweDZDIH0gfSwKKyAgICAgICAgeyBTdHJpbmcoIm51bF90ZXJtaW5hdGVkX3N0cmluZ1ww
IiwgMjIpLAorICAgICAgICAgICAgeyAweDc2LCAweDZFLCAweDc1LCAweDZDLCAweDVGLCAweDc0
LCAweDY1LCAweDcyLCAweDZELCAweDY5LCAweDZFLCAweDYxLAorICAgICAgICAgICAgICAgIDB4
NzQsIDB4NjUsIDB4NjQsIDB4NUYsIDB4NzMsIDB4NzQsIDB4NzIsIDB4NjksIDB4NkUsIDB4Njcs
IDB4MDAgfSB9LAorICAgICAgICB7IFN0cmluZygiZW1iZWRkZWRcMG51bCIsIDEyKSwKKyAgICAg
ICAgICAgIHsgMHg2QywgMHg2NSwgMHg2RCwgMHg2MiwgMHg2NSwgMHg2NCwgMHg2NCwgMHg2NSwg
MHg2NCwgMHgwMCwgMHg2RSwgMHg3NSwKKyAgICAgICAgICAgICAgICAweDZDIH0gfSwKKyAgICAg
ICAgeyBTdHJpbmcoInRyYWlsaW5nX251bHNcMFwwIiwgMTUpLAorICAgICAgICAgICAgeyAweDZG
LCAweDc0LCAweDcyLCAweDYxLCAweDY5LCAweDZDLCAweDY5LCAweDZFLCAweDY3LCAweDVGLCAw
eDZFLCAweDc1LAorICAgICAgICAgICAgICAgIDB4NkMsIDB4NzMsIDB4MDAsIDB4MDAgfSB9LAor
ICAgIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRlc3RDYXNlIDoga1N0cmluZ1Rlc3RDYXNl
cykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6
OnJlYWQodGVzdENhc2UuY2JvckRhdGEpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192
YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBDQk9S
VmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNib3IudmFsdWUoKS5n
ZXRTdHJpbmcoKSA9PSB0ZXN0Q2FzZS52YWx1ZSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFk
ZXJUZXN0LCBUZXN0UmVhZFN0cmluZ1dpdGhJbnZhbGlkQnl0ZVNlcXVlbmNlQWZ0ZXJOVUwpCit7
CisgICAgLy8gVVRGLTggdmFsaWRhdGlvbiBzaG91bGQgbm90IHN0b3AgYXQgdGhlIGZpcnN0IE5V
TCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4KKyAgICAvLyBUaGF0IGlzLCBhIHN0cmluZyB3aXRo
IGFuIGludmFsaWQgYnl0ZSBzZXF1ZW5jZSBzaG91bGQgZmFpbCBVVEYtOAorICAgIC8vIHZhbGlk
YXRpb24gZXZlbiBpZiB0aGUgaW52YWxpZCBjaGFyYWN0ZXIgaXMgbG9jYXRlZCBhZnRlciBvbmUg
b3IgbW9yZSBOVUwKKyAgICAvLyBjaGFyYWN0ZXJzLiBIZXJlLCAweEE2IGlzIGFuIHVuZXhwZWN0
ZWQgY29udGludWF0aW9uIGJ5dGUuCisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBz
dHJpbmdXaXRoSW52YWxpZENvbnRpbnVhdGlvbkJ5dGUgPSB7CisgICAgICAgIDB4NjMsIDB4MDAs
IDB4MDAsIDB4QTYKKyAgICB9OworICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNv
ZGU7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFk
KHN0cmluZ1dpdGhJbnZhbGlkQ29udGludWF0aW9uQnl0ZSwgJmVycm9yQ29kZSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9
PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OkludmFsaWRVVEY4KTsKK30KKworVEVTVChDQk9S
UmVhZGVyVGVzdCwgVGVzdFJlYWRBcnJheSkKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+IGtBcnJheVRlc3RDYXNlQ0JPUiA9IHsKKyAgICAgICAgMHg5OCwgMHgxOSwgLy8gYXJy
YXkgb2YgMjUgZWxlbWVudHMKKyAgICAgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwg
MHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAgICAgICAgMHgwZCwg
MHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgx
NywgMHgxOCwKKyAgICAgICAgMHgxOCwgMHgxOCwgMHgxOSwKKyAgICB9OworCisgICAgc3RkOjpv
cHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtBcnJheVRlc3RDYXNl
Q0JPUik7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgY29uc3QgQ0JP
UlZhbHVlIGNib3JBcnJheSA9IFdURk1vdmUoY2Jvci52YWx1ZSgpKTsKKyAgICBBU1NFUlRfVFJV
RShjYm9yQXJyYXkudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6QXJyYXkpOworICAgIEFTU0VS
VF9FUShjYm9yQXJyYXkuZ2V0QXJyYXkoKS5zaXplKCksIDI1dSk7CisKKyAgICBWZWN0b3I8Q0JP
UlZhbHVlPiBhcnJheTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1OyBpKyspIHsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoY2JvckFycmF5LmdldEFycmF5KClbaV0udHlwZSgpID09IENCT1JWYWx1
ZTo6VHlwZTo6VW5zaWduZWQpOworICAgICAgICBFWFBFQ1RfRVEoY2JvckFycmF5LmdldEFycmF5
KClbaV0uZ2V0SW50ZWdlcigpLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihpICsgMSkpOworICAgIH0K
K30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRNYXBXaXRoTWFwVmFsdWUpCit7Cisg
ICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTWFwVGVzdENhc2VDQk9SID0geworICAg
ICAgICAweGE0LCAvLyBtYXAgd2l0aCA0IGtleSB2YWx1ZSBwYWlyczoKKyAgICAgICAgMHgxOCwg
MHgxOCwgLy8gMjQKKyAgICAgICAgMHg2MywgMHg2MSwgMHg2MiwgMHg2MywgLy8gImFiYyIKKwor
ICAgICAgICAweDYwLCAvLyAiIgorICAgICAgICAweDYxLCAweDJlLCAvLyAiLiIKKworICAgICAg
ICAweDYxLCAweDYyLCAvLyAiYiIKKyAgICAgICAgMHg2MSwgMHg0MiwgLy8gIkIiCisKKyAgICAg
ICAgMHg2MiwgMHg2MSwgMHg2MSwgLy8gImFhIgorICAgICAgICAweDYyLCAweDQxLCAweDQxLCAv
LyAiQUEiCisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JP
UlJlYWRlcjo6cmVhZChrTWFwVGVzdENhc2VDQk9SKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yLmhh
c192YWx1ZSgpKTsKKyAgICBjb25zdCBDQk9SVmFsdWUgY2JvclZhbCA9IFdURk1vdmUoY2Jvci52
YWx1ZSgpKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5
cGU6Ok1hcCk7CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCkuc2l6ZSgpLCA0dSk7CisK
KyAgICBjb25zdCBDQk9SVmFsdWUga2V5VWludCgyNCk7CisgICAgQVNTRVJUX0VRKGNib3JWYWwu
Z2V0TWFwKCkuY291bnQoa2V5VWludCksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLmdl
dE1hcCgpLmZpbmQoa2V5VWludCktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpT
dHJpbmcpOworICAgIEVYUEVDVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXlVaW50KS0+
c2Vjb25kLmdldFN0cmluZygpID09ICJhYmMiKTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlF
bXB0eVN0cmluZygiIik7CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCkuY291bnQoa2V5
RW1wdHlTdHJpbmcpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5k
KGtleUVtcHR5U3RyaW5nKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlN0cmlu
Zyk7CisgICAgRVhQRUNUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleUVtcHR5U3RyaW5n
KS0+c2Vjb25kLmdldFN0cmluZygpID09ICIuIik7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5
QigiYiIpOworICAgIEFTU0VSVF9FUShjYm9yVmFsLmdldE1hcCgpLmNvdW50KGtleUIpLCAxdSk7
CisgICAgQVNTRVJUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleUIpLT5zZWNvbmQudHlw
ZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICBFWFBFQ1RfVFJVRShjYm9yVmFs
LmdldE1hcCgpLmZpbmQoa2V5QiktPnNlY29uZC5nZXRTdHJpbmcoKSA9PSAiQiIpOworCisgICAg
Y29uc3QgQ0JPUlZhbHVlIGtleUFhKCJhYSIpOworICAgIEFTU0VSVF9FUShjYm9yVmFsLmdldE1h
cCgpLmNvdW50KGtleUFhKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCku
ZmluZChrZXlBYSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTdHJpbmcpOwor
ICAgIEVYUEVDVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXlBYSktPnNlY29uZC5nZXRT
dHJpbmcoKSA9PSAiQUEiKTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRNYXBX
aXRoSW50ZWdlcktleXMpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTWFw
V2l0aEludGVnZXJLZXlDQk9SID0geworICAgICAgICAweEE0LCAvLyBtYXAgd2l0aCA0IGtleSB2
YWx1ZSBwYWlycworICAgICAgICAweDAxLCAvLyBrZXkgOiAxCisgICAgICAgIDB4NjEsIDB4NjEs
IC8vIHZhbHVlIDogImEiCisKKyAgICAgICAgMHgwOSwgLy8ga2V5IDogOQorICAgICAgICAweDYx
LCAweDYyLCAvLyB2YWx1ZSA6ICJiIgorCisgICAgICAgIDB4MTksIDB4MDMsIDB4RTcsIC8vIGtl
eSA6IDk5OQorICAgICAgICAweDYxLCAweDYzLCAvLyB2YWx1ZSAiYyIKKworICAgICAgICAweDE5
LCAweDA0LCAweDU3LCAvLyBrZXkgOiAxMTExCisgICAgICAgIDB4NjEsIDB4NjQsIC8vIHZhbHVl
IDogImQiCisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JP
UlJlYWRlcjo6cmVhZChrTWFwV2l0aEludGVnZXJLZXlDQk9SKTsKKyAgICBBU1NFUlRfVFJVRShj
Ym9yLmhhc192YWx1ZSgpKTsKKyAgICBjb25zdCBDQk9SVmFsdWUgY2JvclZhbCA9IFdURk1vdmUo
Y2Jvci52YWx1ZSgpKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLnR5cGUoKSA9PSBDQk9SVmFs
dWU6OlR5cGU6Ok1hcCk7CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCkuc2l6ZSgpLCA0
dSk7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5MSgxKTsKKyAgICBBU1NFUlRfRVEoY2JvclZh
bC5nZXRNYXAoKS5jb3VudChrZXkxKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0
TWFwKCkuZmluZChrZXkxKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlN0cmlu
Zyk7CisgICAgQVNTRVJUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleTEpLT5zZWNvbmQu
Z2V0U3RyaW5nKCkgPT0gImEiKTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXk5KDkpOworICAg
IEFTU0VSVF9FUShjYm9yVmFsLmdldE1hcCgpLmNvdW50KGtleTkpLCAxdSk7CisgICAgQVNTRVJU
X1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleTkpLT5zZWNvbmQudHlwZSgpID09IENCT1JW
YWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZp
bmQoa2V5OSktPnNlY29uZC5nZXRTdHJpbmcoKSA9PSAiYiIpOworCisgICAgY29uc3QgQ0JPUlZh
bHVlIGtleTk5OSg5OTkpOworICAgIEFTU0VSVF9FUShjYm9yVmFsLmdldE1hcCgpLmNvdW50KGtl
eTk5OSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5OTk5
KS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgQVNTRVJU
X1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleTk5OSktPnNlY29uZC5nZXRTdHJpbmcoKSA9
PSAiYyIpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleTExMTEoMTExMSk7CisgICAgQVNTRVJU
X0VRKGNib3JWYWwuZ2V0TWFwKCkuY291bnQoa2V5MTExMSksIDF1KTsKKyAgICBBU1NFUlRfVFJV
RShjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5MTExMSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZh
bHVlOjpUeXBlOjpTdHJpbmcpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCkuZmlu
ZChrZXkxMTExKS0+c2Vjb25kLmdldFN0cmluZygpID09ICJkIik7Cit9CisKK1RFU1QoQ0JPUlJl
YWRlclRlc3QsIFRlc3RSZWFkTWFwV2l0aEFycmF5KQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0
b3I8dWludDhfdD4ga01hcEFycmF5VGVzdENhc2VDQk9SID0geworICAgICAgICAweGEyLCAvLyBt
YXAgb2YgMiBwYWlycworICAgICAgICAweDYxLCAweDYxLCAvLyAiYSIKKyAgICAgICAgMHgwMSwK
KworICAgICAgICAweDYxLCAweDYyLCAvLyAiYiIKKyAgICAgICAgMHg4MiwgLy8gYXJyYXkgd2l0
aCAyIGVsZW1lbnRzCisgICAgICAgIDB4MDIsCisgICAgICAgIDB4MDMsCisgICAgfTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZChrTWFwQXJy
YXlUZXN0Q2FzZUNCT1IpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAg
IGNvbnN0IENCT1JWYWx1ZSBjYm9yVmFsID0gV1RGTW92ZShjYm9yLnZhbHVlKCkpOworICAgIEFT
U0VSVF9UUlVFKGNib3JWYWwudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6TWFwKTsKKyAgICBB
U1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5zaXplKCksIDJ1KTsKKworICAgIGNvbnN0IENCT1JW
YWx1ZSBrZXlBKCJhIik7CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCkuY291bnQoa2V5
QSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5QSktPnNl
Y29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpVbnNpZ25lZCk7CisgICAgRVhQRUNUX0VR
KGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXlBKS0+c2Vjb25kLmdldEludGVnZXIoKSwgMXUpOwor
CisgICAgY29uc3QgQ0JPUlZhbHVlIGtleUIoImIiKTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5n
ZXRNYXAoKS5jb3VudChrZXlCKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFw
KCkuZmluZChrZXlCKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OkFycmF5KTsK
KworICAgIGNvbnN0IENCT1JWYWx1ZSBuZXN0ZWRBcnJheSA9IGNib3JWYWwuZ2V0TWFwKCkuZmlu
ZChrZXlCKS0+c2Vjb25kLmNsb25lKCk7CisgICAgQVNTRVJUX0VRKG5lc3RlZEFycmF5LmdldEFy
cmF5KCkuc2l6ZSgpLCAydSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAg
ICAgICAgQVNTRVJUX1RSVUUobmVzdGVkQXJyYXkuZ2V0QXJyYXkoKVtpXS50eXBlKCkgPT0gQ0JP
UlZhbHVlOjpUeXBlOjpVbnNpZ25lZCk7CisgICAgICAgIEVYUEVDVF9FUShuZXN0ZWRBcnJheS5n
ZXRBcnJheSgpW2ldLmdldEludGVnZXIoKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oaSArIDIpKTsK
KyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkTmVzdGVkTWFwKQorewor
ICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4ga05lc3RlZE1hcFRlc3RDYXNlID0gewor
ICAgICAgICAweGEyLCAvLyBtYXAgb2YgMiBwYWlycworICAgICAgICAweDYxLCAweDYxLCAvLyAi
YSIKKyAgICAgICAgMHgwMSwKKworICAgICAgICAweDYxLCAweDYyLCAvLyAiYiIKKyAgICAgICAg
MHhhMiwgLy8gbWFwIG9mIDIgcGFpcnMKKyAgICAgICAgMHg2MSwgMHg2MywgLy8gImMiCisgICAg
ICAgIDB4MDIsCisKKyAgICAgICAgMHg2MSwgMHg2NCwgLy8gImQiCisgICAgICAgIDB4MDMsCisg
ICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6
cmVhZChrTmVzdGVkTWFwVGVzdENhc2UpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVl
KCkpOworICAgIGNvbnN0IENCT1JWYWx1ZSBjYm9yVmFsID0gV1RGTW92ZShjYm9yLnZhbHVlKCkp
OworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6TWFw
KTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5zaXplKCksIDJ1KTsKKworICAgIGNv
bnN0IENCT1JWYWx1ZSBrZXlBKCJhIik7CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCku
Y291bnQoa2V5QSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZpbmQo
a2V5QSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpVbnNpZ25lZCk7CisgICAg
RVhQRUNUX0VRKGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXlBKS0+c2Vjb25kLmdldEludGVnZXIo
KSwgMXUpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleUIoImIiKTsKKyAgICBBU1NFUlRfRVEo
Y2JvclZhbC5nZXRNYXAoKS5jb3VudChrZXlCKSwgMXUpOworICAgIGNvbnN0IENCT1JWYWx1ZSBu
ZXN0ZWRNYXAgPSBjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5QiktPnNlY29uZC5jbG9uZSgpOwor
ICAgIEFTU0VSVF9UUlVFKG5lc3RlZE1hcC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNYXAp
OworICAgIEFTU0VSVF9FUShuZXN0ZWRNYXAuZ2V0TWFwKCkuc2l6ZSgpLCAydSk7CisKKyAgICBj
b25zdCBDQk9SVmFsdWUga2V5QygiYyIpOworICAgIEFTU0VSVF9FUShuZXN0ZWRNYXAuZ2V0TWFw
KCkuY291bnQoa2V5QyksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShuZXN0ZWRNYXAuZ2V0TWFwKCku
ZmluZChrZXlDKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVkKTsK
KyAgICBFWFBFQ1RfRVEobmVzdGVkTWFwLmdldE1hcCgpLmZpbmQoa2V5QyktPnNlY29uZC5nZXRJ
bnRlZ2VyKCksIDJ1KTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlEKCJkIik7CisgICAgQVNT
RVJUX0VRKG5lc3RlZE1hcC5nZXRNYXAoKS5jb3VudChrZXlEKSwgMXUpOworICAgIEFTU0VSVF9U
UlVFKG5lc3RlZE1hcC5nZXRNYXAoKS5maW5kKGtleUQpLT5zZWNvbmQudHlwZSgpID09IENCT1JW
YWx1ZTo6VHlwZTo6VW5zaWduZWQpOworICAgIEVYUEVDVF9FUShuZXN0ZWRNYXAuZ2V0TWFwKCku
ZmluZChrZXlEKS0+c2Vjb25kLmdldEludGVnZXIoKSwgM3UpOworfQorCitURVNUKENCT1JSZWFk
ZXJUZXN0LCBUZXN0SW50ZWdlclJhbmdlKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWlu
dDhfdD4ga01heFBvc2l0aXZlSW50ID0geworICAgICAgICAweDFiLCAweDdGLCAweEZGLCAweEZG
LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+IGtNaW5OZWdhdGl2ZUludCA9IHsKKyAgICAgICAgMHgzYiwgMHg3Riwg
MHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRgorICAgIH07CisKKyAgICBz
dGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gbWF4UG9zaXRpdmVJbnQgPSBDQk9SUmVhZGVyOjpyZWFk
KGtNYXhQb3NpdGl2ZUludCk7CisgICAgQVNTRVJUX1RSVUUobWF4UG9zaXRpdmVJbnQuaGFzX3Zh
bHVlKCkpOworICAgIEVYUEVDVF9FUShtYXhQb3NpdGl2ZUludC52YWx1ZSgpLmdldEludGVnZXIo
KSwgSU5UNjRfTUFYKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBtaW5OZWdhdGl2
ZUludCA9IENCT1JSZWFkZXI6OnJlYWQoa01pbk5lZ2F0aXZlSW50KTsKKyAgICBBU1NFUlRfVFJV
RShtaW5OZWdhdGl2ZUludC5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX0VRKG1pbk5lZ2F0aXZl
SW50LnZhbHVlKCkuZ2V0SW50ZWdlcigpLCBJTlQ2NF9NSU4pOworfQorCitURVNUKENCT1JSZWFk
ZXJUZXN0LCBUZXN0SW50ZWdlck91dE9mUmFuZ2VFcnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+IGtPdXRPZlJhbmdlUG9zaXRpdmVJbnQgPSB7CisgICAgICAgIDB4MWIs
IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyAgICB9Owor
CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrT3V0T2ZSYW5nZU5lZ2F0aXZlSW50
ID0geworICAgICAgICAweDNiLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwCisgICAgfTsKKworICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNv
ZGU7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IHBvc2l0aXZlSW50T3V0T2ZSYW5nZUNC
T1IgPSBDQk9SUmVhZGVyOjpyZWFkKGtPdXRPZlJhbmdlUG9zaXRpdmVJbnQsICZlcnJvckNvZGUp
OworICAgIEVYUEVDVF9GQUxTRShwb3NpdGl2ZUludE91dE9mUmFuZ2VDQk9SKTsKKyAgICBFWFBF
Q1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpPdXRPZlJhbmdl
SW50ZWdlclZhbHVlKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBuZWdhdGl2ZUlu
dE91dE9mUmFuZ2VDQk9SID0gQ0JPUlJlYWRlcjo6cmVhZChrT3V0T2ZSYW5nZU5lZ2F0aXZlSW50
LCAmZXJyb3JDb2RlKTsKKyAgICBFWFBFQ1RfRkFMU0UobmVnYXRpdmVJbnRPdXRPZlJhbmdlQ0JP
Uik7CisgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJv
cjo6T3V0T2ZSYW5nZUludGVnZXJWYWx1ZSk7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRl
c3RSZWFkU2ltcGxlVmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAg
IGNvbnN0IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWUgdmFsdWU7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiBjYm9yRGF0YTsKKyAgICB9IGtTaW1wbGVWYWx1ZVRlc3RDYXNlc1tdID0gewor
ICAgICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OkZhbHNlVmFsdWUsIHsgMHhmNCB9IH0s
CisgICAgICAgIHsgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VHJ1ZVZhbHVlLCB7IDB4ZjUgfSB9
LAorICAgICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6Ok51bGxWYWx1ZSwgeyAweGY2IH0g
fSwKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVbmRlZmluZWQsIHsgMHhmNyB9
IH0sCisgICAgfTsKKworICAgIGZvciAoY29uc3QgYXV0byYgdGVzdENhc2UgOiBrU2ltcGxlVmFs
dWVUZXN0Q2FzZXMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBD
Qk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUo
Y2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBl
KCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTaW1wbGVWYWx1ZSk7CisgICAgICAgIEFTU0VSVF9UUlVF
KGNib3IudmFsdWUoKS5nZXRTaW1wbGVWYWx1ZSgpID09IHRlc3RDYXNlLnZhbHVlKTsKKyAgICB9
Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkVW5zdXBwb3J0ZWRGbG9hdGluZ1Bv
aW50TnVtYmVycykKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGZsb2F0aW5n
UG9pbnRDYm9yc1tdID0geworICAgICAgICAvLyAxNiBiaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUu
CisgICAgICAgIHsgMHhmOSwgMHgxMCwgMHgwMCB9LAorICAgICAgICAvLyAzMiBiaXQgZmxvYXRp
bmcgcG9pbnQgdmFsdWUuCisgICAgICAgIHsgMHhmYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCB9
LAorICAgICAgICAvLyA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUuCisgICAgICAgIHsgMHhm
YiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9CisgICAg
fTsKKworICAgIGZvciAoY29uc3QgYXV0byYgdW5zdXBwb3J0ZWRfZmxvYXRpbmdfcG9pbnQgOiBm
bG9hdGluZ1BvaW50Q2JvcnMpIHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVy
cm9yQ29kZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVh
ZGVyOjpyZWFkKHVuc3VwcG9ydGVkX2Zsb2F0aW5nX3BvaW50LCAmZXJyb3JDb2RlKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShl
cnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpVbnN1cHBvcnRlZEZsb2F0aW5n
UG9pbnRWYWx1ZSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0SW5jb21w
bGV0ZUNCT1JEYXRhRXJyb3IpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBp
bmNvbXBsZXRlQ2Jvckxpc3RbXSA9IHsKKyAgICAgICAgLy8gQWRkaXRpb25hbCBpbmZvIGJ5dGUg
Y29ycmVzcG9uZHMgdG8gdW5zaWduZWQgaW50IHRoYXQgY29ycmVzcG9uZHMKKyAgICAgICAgLy8g
dG8gMiBhZGRpdGlvbmFsIGJ5dGVzLiBCdXQgYWN0dWFsIGRhdGEgZW5jb2RlZCAgaW4gb25lIGJ5
dGUuCisgICAgICAgIHsgMHgxOSwgMHgwMyB9LAorICAgICAgICAvLyBDQk9SIGJ5dGVzdHJpbmcg
b2YgbGVuZ3RoIDMgZW5jb2RlZCB3aXRoIGFkZGl0aW9uYWwgaW5mbyBvZiBsZW5ndGggNC4KKyAg
ICAgICAgeyAweDQ0LCAweDAxLCAweDAyLCAweDAzIH0sCisgICAgICAgIC8vIENCT1Igc3RyaW5n
IGRhdGEgIklFVEYiIG9mIGxlbmd0aCA0IGVuY29kZWQgd2l0aCBhZGRpdGlvbmFsIGluZm8gb2YK
KyAgICAgICAgLy8gbGVuZ3RoIDUuCisgICAgICAgIHsgMHg2NSwgMHg0OSwgMHg0NSwgMHg1NCwg
MHg0NiB9LAorICAgICAgICAvLyBDQk9SIGFycmF5IG9mIGxlbmd0aCAxIGVuY29kZWQgd2l0aCBh
ZGRpdGlvbmFsIGluZm8gb2YgbGVuZ3RoIDIuCisgICAgICAgIHsgMHg4MiwgMHgwMiB9LAorICAg
ICAgICAvLyBDQk9SIG1hcCB3aXRoIHNpbmdsZSBrZXkgdmFsdWUgcGFpciBlbmNvZGVkIHdpdGgg
YWRkaXRpb25hbCBpbmZvIG9mCisgICAgICAgIC8vIGxlbmd0aCAyLgorICAgICAgICB7IDB4YTIs
IDB4NjEsIDB4NjEsIDB4MDEgfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiBpbmNv
bXBsZXRlX2RhdGEgOiBpbmNvbXBsZXRlQ2Jvckxpc3QpIHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6
RGVjb2RlckVycm9yIGVycm9yQ29kZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+
IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGluY29tcGxldGVfZGF0YSwgJmVycm9yQ29kZSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6SW5jb21wbGV0ZUNCT1JE
YXRhKTsKKyAgICB9Cit9CisKKy8vIFdoaWxlIFJGQyA3MDQ5IGFsbG93cyBDQk9SIG1hcCBrZXlz
IHdpdGggYWxsIHR5cGVzLCBjdXJyZW50IGRlY29kZXIgb25seQorLy8gc3VwcG9ydHMgdW5zaWdu
ZWQgaW50ZWdlciBhbmQgc3RyaW5nIGtleXMuCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VW5z
dXBwb3J0ZWRNYXBLZXlGb3JtYXRFcnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+IGtNYXBXaXRoVWludEtleSA9IHsKKyAgICAgICAgMHhhMiwgLy8gbWFwIG9mIDIgcGFp
cnMKKworICAgICAgICAweDgyLCAweDAxLCAweDAyLCAvLyBpbnZhbGlkIGtleSA6IFsxLCAyXQor
ICAgICAgICAweDAyLCAvLyB2YWx1ZSA6IDIKKworICAgICAgICAweDYxLCAweDY0LCAvLyBrZXkg
OiAiZCIKKyAgICAgICAgMHgwMywgLy8gdmFsdWUgOiAzCisgICAgfTsKKworICAgIENCT1JSZWFk
ZXI6OkRlY29kZXJFcnJvciBlcnJvckNvZGU7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+
IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBXaXRoVWludEtleSwgJmVycm9yQ29kZSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKGVycm9y
Q29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OkluY29ycmVjdE1hcEtleVR5cGUpOwor
fQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VW5rbm93bkFkZGl0aW9uYWxJbmZvRXJyb3Ip
Cit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrVW5rbm93bkFkZGl0aW9uYWxJ
bmZvTGlzdFtdID0geworICAgICAgICAvLyAiSUVURiIgZW5jb2RlZCB3aXRoIG1ham9yIHR5cGUg
MyBhbmQgYWRkaXRpb25hbCBpbmZvIG9mIDI4LgorICAgICAgICB7IDB4N0MsIDB4NDksIDB4NDUs
IDB4NTQsIDB4NDYgfSwKKyAgICAgICAgLy8gIlwiXFwiIGVuY29kZWQgd2l0aCBtYWpvciB0eXBl
IDMgYW5kIGFkZGl0aW9uYWwgaW5mbyBvZiAyOS4KKyAgICAgICAgeyAweDdELCAweDIyLCAweDVj
IH0sCisgICAgICAgIC8vICJceGMzXHhiYyIgZW5jb2RlZCB3aXRoIG1ham9yIHR5cGUgMyBhbmQg
YWRkaXRpb25hbCBpbmZvIG9mIDMwLgorICAgICAgICB7IDB4N0UsIDB4YzMsIDB4YmMgfSwKKyAg
ICAgICAgLy8gIlx4ZTZceGIwXHhiNCIgZW5jb2RlZCB3aXRoIG1ham9yIHR5cGUgMyBhbmQgYWRk
aXRpb25hbCBpbmZvIG9mIDMxLgorICAgICAgICB7IDB4N0YsIDB4ZTYsIDB4YjAsIDB4YjQgfSwK
KyAgICAgICAgLy8gTWFqb3IgdHlwZSA3LCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIDI4OiB1bmFz
c2lnbmVkLgorICAgICAgICB7IDB4RkMgfSwKKyAgICAgICAgLy8gTWFqb3IgdHlwZSA3LCBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIDI5OiB1bmFzc2lnbmVkLgorICAgICAgICB7IDB4RkQgfSwKKyAg
ICAgICAgLy8gTWFqb3IgdHlwZSA3LCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIDMwOiB1bmFzc2ln
bmVkLgorICAgICAgICB7IDB4RkUgfSwKKyAgICAgICAgLy8gTWFqb3IgdHlwZSA3LCBhZGRpdGlv
bmFsIGluZm9ybWF0aW9uIDMxOiAiYnJlYWsiIHN0b3AgY29kZSBmb3IKKyAgICAgICAgLy8gaW5k
ZWZpbml0ZS1sZW5ndGggaXRlbXMuCisgICAgICAgIHsgMHhGRiB9LAorICAgIH07CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGluY29ycmVjdF9jYm9yIDoga1Vua25vd25BZGRpdGlvbmFsSW5mb0xp
c3QpIHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGluY29y
cmVjdF9jYm9yLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3Zh
bHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVj
b2RlckVycm9yOjpVbmtub3duQWRkaXRpb25hbEluZm8pOworICAgIH0KK30KKworVEVTVChDQk9S
UmVhZGVyVGVzdCwgVGVzdFRvb011Y2hOZXN0aW5nRXJyb3IpCit7CisgICAgc3RhdGljIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiBrWmVyb0RlcHRoQ0JPUkxpc3RbXSA9IHsKKyAgICAgICAgLy8gVW5z
aWduZWQgaW50IHdpdGggdmFsdWUgMTAwLgorICAgICAgICB7IDB4MTgsIDB4NjQgfSwKKyAgICAg
ICAgLy8gQ0JPUiBieXRlc3RyaW5nIG9mIGxlbmd0aCA0LgorICAgICAgICB7IDB4NDQsIDB4MDEs
IDB4MDIsIDB4MDMsIDB4MDQgfSwKKyAgICAgICAgLy8gQ0JPUiBzdHJpbmcgb2YgY29ycmVzcG9u
ZGluZyB0byAiSUVURi4KKyAgICAgICAgeyAweDY0LCAweDQ5LCAweDQ1LCAweDU0LCAweDQ2IH0s
CisgICAgICAgIC8vIEVtcHR5IENCT1IgYXJyYXkuCisgICAgICAgIHsgMHg4MCB9LAorICAgICAg
ICAvLyBFbXB0eSBDQk9SIE1hcAorICAgICAgICB7IDB4YTAgfSwKKyAgICB9OworCisgICAgZm9y
IChjb25zdCBhdXRvJiB6ZXJvRGVwdGhEYXRhIDoga1plcm9EZXB0aENCT1JMaXN0KSB7CisgICAg
ICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNvZGU7CisgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZCh6ZXJvRGVwdGhEYXRhLCAm
ZXJyb3JDb2RlLCAwKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6
OkNCT1JOb0Vycm9yKTsKKyAgICB9CisKKyAgICAvLyBDb3JyZXNwb25kcyB0byBhIENCT1Igc3Ry
dWN0dXJlIHdpdGggYSBuZXN0aW5nIGRlcHRoIG9mIDI6CisgICAgLy8gICAgICB7ImEiOiAxLAor
ICAgIC8vICAgICAgICJiIjogWzIsIDNdfQorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhf
dD4ga05lc3RlZENCT1JEYXRhID0geworICAgICAgICAweGEyLCAvLyBtYXAgb2YgMiBwYWlycwor
ICAgICAgICAweDYxLCAweDYxLCAvLyAiYSIKKyAgICAgICAgMHgwMSwKKworICAgICAgICAweDYx
LCAweDYyLCAvLyAiYiIKKyAgICAgICAgMHg4MiwgLy8gYXJyYXkgd2l0aCAyIGVsZW1lbnRzCisg
ICAgICAgIDB4MDIsCisgICAgICAgIDB4MDMsCisgICAgfTsKKworICAgIENCT1JSZWFkZXI6OkRl
Y29kZXJFcnJvciBlcnJvckNvZGU7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3JT
aW5nbGVMYXllck1heCA9IENCT1JSZWFkZXI6OnJlYWQoa05lc3RlZENCT1JEYXRhLCAmZXJyb3JD
b2RlLCAxKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2JvclNpbmdsZUxheWVyTWF4Lmhhc192YWx1ZSgp
KTsKKyAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9y
OjpUb29NdWNoTmVzdGluZyk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvckRv
dWJsZUxheWVyTWF4ID0gQ0JPUlJlYWRlcjo6cmVhZChrTmVzdGVkQ0JPUkRhdGEsICZlcnJvckNv
ZGUsIDIpOworICAgIEVYUEVDVF9UUlVFKGNib3JEb3VibGVMYXllck1heC5oYXNfdmFsdWUoKSk7
CisgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6
Q0JPUk5vRXJyb3IpOworfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0T3V0T2ZPcmRlcktl
eUVycm9yKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4ga01hcHNXaXRoVW5z
b3J0ZWRLZXlzW10gPSB7CisgICAgICAgIHsweGEyLCAvLyBtYXAgd2l0aCAyIGtleXMgd2l0aCBz
YW1lIG1ham9yIHR5cGUgYW5kIGxlbmd0aAorICAgICAgICAgICAgMHg2MSwgMHg2MiwgLy8ga2V5
ICJiIgorICAgICAgICAgICAgMHg2MSwgMHg0MiwgLy8gdmFsdWUgOiJCIgorCisgICAgICAgICAg
ICAweDYxLCAweDYxLCAvLyBrZXkgImEiIChvdXQgb2Ygb3JkZXIgYnl0ZS13aXNlIGxleGljYWxs
eSkKKyAgICAgICAgICAgIDB4NjEsIDB4NDUsIC8vIHZhbHVlICJFIgorICAgICAgICB9LAorICAg
ICAgICB7MHhhMiwgLy8gbWFwIHdpdGggMiBrZXlzIHdpdGggZGlmZmVyZW50IG1ham9yIHR5cGUK
KyAgICAgICAgICAgIDB4NjEsIDB4NjIsIC8vIGtleSAiYiIKKyAgICAgICAgICAgIDB4MDIsIC8v
IHZhbHVlIDIKKworICAgICAgICAgICAgLy8ga2V5IDEwMDAgKG91dCBvZiBvcmRlciBzaW5jZSBs
b3dlciBtYWpvciB0eXBlIHNvcnRzIGZpcnN0KQorICAgICAgICAgICAgMHgxOSwgMHgwMywgMHhl
OCwKKyAgICAgICAgICAgIDB4NjEsIDB4NjEsIC8vIHZhbHVlIGEKKyAgICAgICAgfSwKKyAgICAg
ICAgezB4YTIsIC8vIG1hcCB3aXRoIDIga2V5cyB3aXRoIHNhbWUgbWFqb3IgdHlwZQorICAgICAg
ICAgICAgMHgxOSwgMHgwMywgMHhlOCwgLy8ga2V5IDEwMDAgIChvdXQgb2Ygb3JkZXIgZHVlIHRv
IGxvbmdlciBsZW5ndGgpCisgICAgICAgICAgICAweDYxLCAweDYxLCAvLyB2YWx1ZSAiYSIKKwor
ICAgICAgICAgICAgMHgwYSwgLy8ga2V5IDEwCisgICAgICAgICAgICAweDYxLCAweDYyfSwgLy8g
dmFsdWUgImIiCisgICAgfTsKKworICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNv
ZGU7CisgICAgZm9yIChjb25zdCBhdXRvJiB1bnNvcnRlZE1hcCA6IGtNYXBzV2l0aFVuc29ydGVk
S2V5cykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9CisgICAgICAg
IENCT1JSZWFkZXI6OnJlYWQodW5zb3J0ZWRNYXAsICZlcnJvckNvZGUpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yQ29k
ZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6Ok91dE9mT3JkZXJLZXkpOworICAgIH0KK30K
KworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdER1cGxpY2F0ZUtleUVycm9yKQoreworICAgIHN0
YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4ga01hcFdpdGhEdXBsaWNhdGVLZXkgPSB7CisgICAg
ICAgIDB4YTYsIC8vIG1hcCBvZiA2IHBhaXJzOgorICAgICAgICAweDYwLCAvLyAiIgorICAgICAg
ICAweDYxLCAweDJlLCAvLyAiLiIKKworICAgICAgICAweDYxLCAweDYyLCAvLyAiYiIKKyAgICAg
ICAgMHg2MSwgMHg0MiwgLy8gIkIiCisKKyAgICAgICAgMHg2MSwgMHg2MiwgLy8gImIiIChEdXBs
aWNhdGUga2V5KQorICAgICAgICAweDYxLCAweDQzLCAvLyAiQyIKKworICAgICAgICAweDYxLCAw
eDY0LCAvLyAiZCIKKyAgICAgICAgMHg2MSwgMHg0NCwgLy8gIkQiCisKKyAgICAgICAgMHg2MSwg
MHg2NSwgLy8gImUiCisgICAgICAgIDB4NjEsIDB4NDQsIC8vICJEIgorCisgICAgICAgIDB4NjIs
IDB4NjEsIDB4NjEsIC8vICJhYSIKKyAgICAgICAgMHg2MiwgMHg0MSwgMHg0MSwgLy8gIkFBIgor
ICAgIH07CisKKyAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2RlOworCisgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBXaXRo
RHVwbGljYXRlS2V5LCAmZXJyb3JDb2RlKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNfdmFs
dWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJF
cnJvcjo6RHVwbGljYXRlS2V5KTsKK30KKworLy8gTGV2ZXJhZ2luZyBNYXJrdXMgS3VobuKAmXMg
VVRGLTggZGVjb2RlciBzdHJlc3MgdGVzdC4gU2VlCisvLyBodHRwOi8vd3d3LmNsLmNhbS5hYy51
ay9+bWdrMjUvdWNzL2V4YW1wbGVzL1VURi04LXRlc3QudHh0IGZvciBkZXRhaWxzLgorVEVTVChD
Qk9SUmVhZGVyVGVzdCwgVGVzdEluY29ycmVjdFN0cmluZ0VuY29kaW5nRXJyb3IpCit7CisgICAg
c3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiB1dGY4Q2hhcmFjdGVyRW5jb2RpbmdzW10gPSB7
CisgICAgICAgIC8vIENvcnJlc3BvbmRzIHRvIHV0ZjggZW5jb2Rpbmcgb2YgIu2fvyIgKHNlY3Rp
b24gMi4zLjEgb2Ygc3RyZXNzIHRlc3QpLgorICAgICAgICB7IDB4NjMsIDB4RUQsIDB4OUYsIDB4
QkYgfSwKKyAgICAgICAgLy8gQ29ycmVzcG9uZHMgdG8gdXRmOCBlbmNvZGluZyBvZiAi7oCAIiAo
c2VjdGlvbiAyLjMuMiBvZiBzdHJlc3MgdGVzdCkuCisgICAgICAgIHsgMHg2MywgMHhFRSwgMHg4
MCwgMHg4MCB9LAorICAgICAgICAvLyBDb3JyZXNwb25kcyB0byB1dGY4IGVuY29kaW5nIG9mICLv
v70iICAoc2VjdGlvbiAyLjMuMyBvZiBzdHJlc3MgdGVzdCkuCisgICAgICAgIHsgMHg2MywgMHhF
RiwgMHhCRiwgMHhCRCB9LAorICAgIH07CisKKyAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3Ig
ZXJyb3JDb2RlOworICAgIGZvciAoY29uc3QgYXV0byYgY2Jvcl9ieXRlIDogdXRmOENoYXJhY3Rl
ckVuY29kaW5ncykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY29ycmVjdGx5
RW5jb2RlZENib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGNib3JfYnl0ZSwgJmVycm9yQ29kZSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKGNvcnJlY3RseUVuY29kZWRDYm9yLmhhc192YWx1ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6
Q0JPUk5vRXJyb3IpOworICAgIH0KKworICAgIC8vIEluY29ycmVjdCBVVEY4IGVuY29kaW5nIHJl
ZmVyZW5jZWQgYnkgc2VjdGlvbiAzLjUuMyBvZiB0aGUgc3RyZXNzIHRlc3QuCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGltcG9zc2libGVfdXRmX2J5dGUgeyAweDY0LCAweGZlLCAweGZlLCAweGZmLCAw
eGZmIH07CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGluY29ycmVjdGx5RW5jb2RlZENi
b3IgPSBDQk9SUmVhZGVyOjpyZWFkKGltcG9zc2libGVfdXRmX2J5dGUsICZlcnJvckNvZGUpOwor
ICAgIEVYUEVDVF9GQUxTRShpbmNvcnJlY3RseUVuY29kZWRDYm9yKTsKKyAgICBFWFBFQ1RfVFJV
RShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpJbnZhbGlkVVRGOCk7Cit9
CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RFeHRyYW5lb3VzQ0JPUkRhdGFFcnJvcikKK3sK
KyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHplcm9QYWRkZWRDYm9yTGlzdFtdID0g
eworICAgICAgICAvLyAxIGV4dHJhIGJ5dGUgYWZ0ZXIgYSAyLWJ5dGUgdW5zaWduZWQgaW50Lgor
ICAgICAgICB7IDB4MTksIDB4MDMsIDB4MDUsIDB4MDAgfSwKKyAgICAgICAgLy8gMSBleHRyYSBi
eXRlIGFmdGVyIGEgNC1ieXRlIGNib3IgYnl0ZSBhcnJheS4KKyAgICAgICAgeyAweDQ0LCAweDAx
LCAweDAyLCAweDAzLCAweDA0LCAweDAwIH0sCisgICAgICAgIC8vIDEgZXh0cmEgYnl0ZSBhZnRl
ciBhIDQtYnl0ZSBzdHJpbmcuCisgICAgICAgIHsgMHg2NCwgMHg0OSwgMHg0NSwgMHg1NCwgMHg0
NiwgMHgwMCB9LAorICAgICAgICAvLyAxIGV4dHJhIGJ5dGUgYWZ0ZXIgQ0JPUiBhcnJheSBvZiBs
ZW5ndGggMi4KKyAgICAgICAgeyAweDgyLCAweDAxLCAweDAyLCAweDAwIH0sCisgICAgICAgIC8v
IDEgZXh0cmEga2V5IHZhbHVlIHBhaXIgYWZ0ZXIgQ0JPUiBtYXAgb2Ygc2l6ZSAyLgorICAgICAg
ICB7IDB4YTEsIDB4NjEsIDB4NjMsIDB4MDIsIDB4NjEsIDB4NjQsIDB4MDMgfSwKKyAgICB9Owor
CisgICAgZm9yIChjb25zdCBhdXRvJiBleHRyYW5lb3VzX2Nib3JEYXRhIDogemVyb1BhZGRlZENi
b3JMaXN0KSB7CisgICAgICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNvZGU7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZChl
eHRyYW5lb3VzX2Nib3JEYXRhLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNi
b3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJl
YWRlcjo6RGVjb2RlckVycm9yOjpFeHRyYW5lb3VzRGF0YSk7CisgICAgfQorfQorCitURVNUKENC
T1JSZWFkZXJUZXN0LCBUZXN0VW5zdXBwb3J0ZWRTaW1wbGV2YWx1ZSkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHVuc3VwcG9ydGVkU2ltcGxlVmFsdWVzW10gPSB7CisgICAg
ICAgIC8vIFNpbXBsZSB2YWx1ZSAoMCwgdW5hc3NpZ25lZCkKKyAgICAgICAgeyAweEUwIH0sCisg
ICAgICAgIC8vIFNpbXBsZSB2YWx1ZSAoMTksIHVuYXNzaWduZWQpCisgICAgICAgIHsgMHhGMyB9
LAorICAgICAgICAvLyBTaW1wbGUgdmFsdWUgKDI0LCByZXNlcnZlZCkKKyAgICAgICAgeyAweEY4
LCAweDE4IH0sCisgICAgICAgIC8vIFNpbXBsZSB2YWx1ZSAoMjgsIHJlc2VydmVkKQorICAgICAg
ICB7IDB4RjgsIDB4MUMgfSwKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgyOSwgcmVzZXJ2ZWQp
CisgICAgICAgIHsgMHhGOCwgMHgxRCB9LAorICAgICAgICAvLyBTaW1wbGUgdmFsdWUgKDMwLCBy
ZXNlcnZlZCkKKyAgICAgICAgeyAweEY4LCAweDFFIH0sCisgICAgICAgIC8vIFNpbXBsZSB2YWx1
ZSAoMzEsIHJlc2VydmVkKQorICAgICAgICB7IDB4RjgsIDB4MUYgfSwKKyAgICAgICAgLy8gU2lt
cGxlIHZhbHVlICgzMiwgdW5hc3NpZ25lZCkKKyAgICAgICAgeyAweEY4LCAweDIwIH0sCisgICAg
ICAgIC8vIFNpbXBsZSB2YWx1ZSAoMjU1LCB1bmFzc2lnbmVkKQorICAgICAgICB7IDB4RjgsIDB4
RkYgfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiB1bnN1cHBvcnRlZFNpbXBsZVZh
bCA6IHVuc3VwcG9ydGVkU2ltcGxlVmFsdWVzKSB7CisgICAgICAgIENCT1JSZWFkZXI6OkRlY29k
ZXJFcnJvciBlcnJvckNvZGU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9y
ID0gQ0JPUlJlYWRlcjo6cmVhZCh1bnN1cHBvcnRlZFNpbXBsZVZhbCwgJmVycm9yQ29kZSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6VW5zdXBwb3J0ZWRTaW1w
bGVWYWx1ZSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0JPUlZhbHVlVGVzdC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0JPUlZhbHVlVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2Q3ZDkxN2U4ZGY0YjFiMWZjOWJkMGUyNDllMmFkODc3NGM4MDc3OAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SVmFs
dWVUZXN0LmNwcApAQCAtMCwwICsxLDM4MSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NCT1JWYWx1ZS5oPgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCit1c2luZyBuYW1lc3BhY2UgY2JvcjsKKworLy8gVGVzdCBjb25zdHJ1Y3Rv
cnMKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29uc3RydWN0VW5zaWduZWQpCit7CisgICAgQ0JPUlZh
bHVlIHZhbHVlKDM3KTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVk
ID09IHZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX0VRKDM3dSwgdmFsdWUuZ2V0SW50ZWdlcigp
KTsKK30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBDb25zdHJ1Y3ROZWdhdGl2ZSkKK3sKKyAgICBD
Qk9SVmFsdWUgdmFsdWUoLTEpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6TmVn
YXRpdmUgPT0gdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoLTEsIHZhbHVlLmdldEludGVn
ZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29uc3RydWN0U3RyaW5nRnJvbUNvbnN0
Q2hhclB0cikKK3sKKyAgICBjb25zdCBjaGFyKiBzdHIgPSAiZm9vYmFyIjsKKyAgICBDQk9SVmFs
dWUgdmFsdWUoc3RyKTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlN0cmluZyA9
PSB2YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKCJmb29iYXIiID09IHZhbHVlLmdldFN0
cmluZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBDb25zdHJ1Y3RTdHJpbmdGcm9tV1RG
U3RyaW5nQ29uc3RSZWYpCit7CisgICAgU3RyaW5nIHN0ciA9ICJmb29iYXIiOworICAgIENCT1JW
YWx1ZSB2YWx1ZShzdHIpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5n
ID09IHZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoImZvb2JhciIgPT0gdmFsdWUuZ2V0
U3RyaW5nKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIENvbnN0cnVjdFN0cmluZ0Zyb21X
VEZTdHJpbmdSZWZSZWYpCit7CisgICAgU3RyaW5nIHN0ciA9ICJmb29iYXIiOworICAgIENCT1JW
YWx1ZSB2YWx1ZShXVEZNb3ZlKHN0cikpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlw
ZTo6U3RyaW5nID09IHZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoImZvb2JhciIgPT0g
dmFsdWUuZ2V0U3RyaW5nKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIENvbnN0cnVjdEJ5
dGVzdHJpbmcpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKENCT1JWYWx1ZTo6QmluYXJ5VmFsdWUo
eyAweEYsIDB4MCwgMHgwLCAweEIsIDB4QSwgMHgyIH0pKTsKKyAgICBBU1NFUlRfVFJVRShDQk9S
VmFsdWU6OlR5cGU6OkJ5dGVTdHJpbmcgPT0gdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShDQk9SVmFsdWU6OkJpbmFyeVZhbHVlKHsgMHhGLCAweDAsIDB4MCwgMHhCLCAweEEsIDB4MiB9
KSA9PSB2YWx1ZS5nZXRCeXRlU3RyaW5nKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIENv
bnN0cnVjdEFycmF5KQoreworICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSBhcnJheTsKKyAgICBh
cnJheS5hcHBlbmQoQ0JPUlZhbHVlKCJmb28iKSk7CisgICAgeworICAgICAgICBDQk9SVmFsdWUg
dmFsdWUoYXJyYXkpOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OkFycmF5
ID09IHZhbHVlLnR5cGUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxdSwgdmFsdWUuZ2V0QXJyYXko
KS5zaXplKCkpOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlN0cmluZyA9
PSB2YWx1ZS5nZXRBcnJheSgpWzBdLnR5cGUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCJmb28i
ID09IHZhbHVlLmdldEFycmF5KClbMF0uZ2V0U3RyaW5nKCkpOworICAgIH0KKworICAgIGFycmF5
Lmxhc3QoKSA9IENCT1JWYWx1ZSgiYmFyIik7CisgICAgeworICAgICAgICBDQk9SVmFsdWUgdmFs
dWUoV1RGTW92ZShhcnJheSkpOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6
OkFycmF5ID09IHZhbHVlLnR5cGUoKSk7CisgICAgICAgIEFTU0VSVF9FUSgxdSwgdmFsdWUuZ2V0
QXJyYXkoKS5zaXplKCkpOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlN0
cmluZyA9PSB2YWx1ZS5nZXRBcnJheSgpWzBdLnR5cGUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KCJiYXIiID09IHZhbHVlLmdldEFycmF5KClbMF0uZ2V0U3RyaW5nKCkpOworICAgIH0KK30KKwor
VEVTVChDQk9SVmFsdWVUZXN0LCBDb25zdHJ1Y3RNYXApCit7CisgICAgQ0JPUlZhbHVlOjpNYXBW
YWx1ZSBtYXA7CisgICAgY29uc3QgQ0JPUlZhbHVlIGtleUZvbygiZm9vIik7CisgICAgbWFwW0NC
T1JWYWx1ZSgiZm9vIildID0gQ0JPUlZhbHVlKCJiYXIiKTsKKyAgICB7CisgICAgICAgIENCT1JW
YWx1ZSB2YWx1ZShtYXApOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6Ok1h
cCA9PSB2YWx1ZS50eXBlKCkpOworICAgICAgICBBU1NFUlRfRVEodmFsdWUuZ2V0TWFwKCkuY291
bnQoa2V5Rm9vKSwgMXUpOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlN0
cmluZyA9PSB2YWx1ZS5nZXRNYXAoKS5maW5kKGtleUZvbyktPnNlY29uZC50eXBlKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRSgiYmFyIiA9PSB2YWx1ZS5nZXRNYXAoKS5maW5kKGtleUZvbyktPnNl
Y29uZC5nZXRTdHJpbmcoKSk7CisgICAgfQorCisgICAgbWFwW0NCT1JWYWx1ZSgiZm9vIildID0g
Q0JPUlZhbHVlKCJiYXoiKTsKKyAgICB7CisgICAgICAgIENCT1JWYWx1ZSB2YWx1ZShXVEZNb3Zl
KG1hcCkpOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6Ok1hcCA9PSB2YWx1
ZS50eXBlKCkpOworICAgICAgICBBU1NFUlRfRVEodmFsdWUuZ2V0TWFwKCkuY291bnQoa2V5Rm9v
KSwgMXUpOworICAgICAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlN0cmluZyA9PSB2
YWx1ZS5nZXRNYXAoKS5maW5kKGtleUZvbyktPnNlY29uZC50eXBlKCkpOworICAgICAgICBFWFBF
Q1RfVFJVRSgiYmF6IiA9PSB2YWx1ZS5nZXRNYXAoKS5maW5kKGtleUZvbyktPnNlY29uZC5nZXRT
dHJpbmcoKSk7CisgICAgfQorfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIENvbnN0cnVjdFNpbXBs
ZVZhbHVlKQoreworICAgIENCT1JWYWx1ZSBmYWxzZVZhbHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFs
dWU6OkZhbHNlVmFsdWUpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxl
VmFsdWUgPT0gZmFsc2VWYWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6
U2ltcGxlVmFsdWU6OkZhbHNlVmFsdWUgPT0gZmFsc2VWYWx1ZS5nZXRTaW1wbGVWYWx1ZSgpKTsK
KworICAgIENCT1JWYWx1ZSB0cnVlVmFsdWUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VHJ1ZVZh
bHVlKTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNpbXBsZVZhbHVlID09IHRy
dWVWYWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6
OlRydWVWYWx1ZSA9PSB0cnVlVmFsdWUuZ2V0U2ltcGxlVmFsdWUoKSk7CisKKyAgICBDQk9SVmFs
dWUgbnVsbFZhbHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6Ok51bGxWYWx1ZSk7CisgICAgQVNT
RVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTaW1wbGVWYWx1ZSA9PSBudWxsVmFsdWUudHlwZSgp
KTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpOdWxsVmFsdWUgPT0g
bnVsbFZhbHVlLmdldFNpbXBsZVZhbHVlKCkpOworCisgICAgQ0JPUlZhbHVlIHVuZGVmaW5lZFZh
bHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlVuZGVmaW5lZCk7CisgICAgQVNTRVJUX1RSVUUo
Q0JPUlZhbHVlOjpUeXBlOjpTaW1wbGVWYWx1ZSA9PSB1bmRlZmluZWRWYWx1ZS50eXBlKCkpOwor
ICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlVuZGVmaW5lZCA9PSB1bmRl
ZmluZWRWYWx1ZS5nZXRTaW1wbGVWYWx1ZSgpKTsKK30KKworLy8gVGVzdCBjb3B5IGNvbnN0cnVj
dG9ycworVEVTVChDQk9SVmFsdWVUZXN0LCBDb3B5VW5zaWduZWQpCit7CisgICAgQ0JPUlZhbHVl
IHZhbHVlKDc0KTsKKyAgICBDQk9SVmFsdWUgY29waWVkVmFsdWUodmFsdWUuY2xvbmUoKSk7Cisg
ICAgQVNTRVJUX1RSVUUodmFsdWUudHlwZSgpID09IGNvcGllZFZhbHVlLnR5cGUoKSk7CisgICAg
RVhQRUNUX0VRKHZhbHVlLmdldEludGVnZXIoKSwgY29waWVkVmFsdWUuZ2V0SW50ZWdlcigpKTsK
KworICAgIENCT1JWYWx1ZSBibGFuazsKKworICAgIGJsYW5rID0gdmFsdWUuY2xvbmUoKTsKKyAg
ICBBU1NFUlRfVFJVRSh2YWx1ZS50eXBlKCkgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBFWFBFQ1Rf
RVEodmFsdWUuZ2V0SW50ZWdlcigpLCBibGFuay5nZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENC
T1JWYWx1ZVRlc3QsIENvcHlOZWdhdGl2ZUludCkKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoLTc0
KTsKKyAgICBDQk9SVmFsdWUgY29waWVkVmFsdWUodmFsdWUuY2xvbmUoKSk7CisgICAgQVNTRVJU
X1RSVUUodmFsdWUudHlwZSgpID09IGNvcGllZFZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX0VR
KHZhbHVlLmdldEludGVnZXIoKSwgY29waWVkVmFsdWUuZ2V0SW50ZWdlcigpKTsKKworICAgIENC
T1JWYWx1ZSBibGFuazsKKworICAgIGJsYW5rID0gdmFsdWUuY2xvbmUoKTsKKyAgICBBU1NFUlRf
VFJVRSh2YWx1ZS50eXBlKCkgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEodmFsdWUu
Z2V0SW50ZWdlcigpLCBibGFuay5nZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRl
c3QsIENvcHlTdHJpbmcpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKCJmb29iYXIiKTsKKyAgICBD
Qk9SVmFsdWUgY29waWVkVmFsdWUodmFsdWUuY2xvbmUoKSk7CisgICAgQVNTRVJUX1RSVUUodmFs
dWUudHlwZSgpID09IGNvcGllZFZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUu
Z2V0U3RyaW5nKCkgPT0gY29waWVkVmFsdWUuZ2V0U3RyaW5nKCkpOworCisgICAgQ0JPUlZhbHVl
IGJsYW5rOworCisgICAgYmxhbmsgPSB2YWx1ZS5jbG9uZSgpOworICAgIEFTU0VSVF9UUlVFKHZh
bHVlLnR5cGUoKSA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLmdldFN0
cmluZygpID09IGJsYW5rLmdldFN0cmluZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBD
b3B5Qnl0ZXN0cmluZykKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoQ0JPUlZhbHVlOjpCaW5hcnlW
YWx1ZSh7IDB4RiwgMHgwLCAweDAsIDB4QiwgMHhBLCAweDIgfSkpOworICAgIENCT1JWYWx1ZSBj
b3BpZWRWYWx1ZSh2YWx1ZS5jbG9uZSgpKTsKKyAgICBBU1NFUlRfVFJVRSh2YWx1ZS50eXBlKCkg
PT0gY29waWVkVmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS5nZXRCeXRlU3Ry
aW5nKCkgPT0gY29waWVkVmFsdWUuZ2V0Qnl0ZVN0cmluZygpKTsKKworICAgIENCT1JWYWx1ZSBi
bGFuazsKKworICAgIGJsYW5rID0gdmFsdWUuY2xvbmUoKTsKKyAgICBBU1NFUlRfVFJVRSh2YWx1
ZS50eXBlKCkgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS5nZXRCeXRl
U3RyaW5nKCkgPT0gYmxhbmsuZ2V0Qnl0ZVN0cmluZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVU
ZXN0LCBDb3B5QXJyYXkpCit7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGFycmF5OworICAg
IGFycmF5LmFwcGVuZCgxMjMpOworICAgIENCT1JWYWx1ZSB2YWx1ZShXVEZNb3ZlKGFycmF5KSk7
CisKKyAgICBDQk9SVmFsdWUgY29waWVkVmFsdWUodmFsdWUuY2xvbmUoKSk7CisgICAgQVNTRVJU
X0VRKDF1LCBjb3BpZWRWYWx1ZS5nZXRBcnJheSgpLnNpemUoKSk7CisgICAgQVNTRVJUX1RSVUUo
Y29waWVkVmFsdWUuZ2V0QXJyYXkoKVswXS5pc1Vuc2lnbmVkKCkpOworICAgIEVYUEVDVF9FUSh2
YWx1ZS5nZXRBcnJheSgpWzBdLmdldEludGVnZXIoKSwgY29waWVkVmFsdWUuZ2V0QXJyYXkoKVsw
XS5nZXRJbnRlZ2VyKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworICAgIGJsYW5rID0gdmFs
dWUuY2xvbmUoKTsKKyAgICBFWFBFQ1RfRVEoMXUsIGJsYW5rLmdldEFycmF5KCkuc2l6ZSgpKTsK
K30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBDb3B5TWFwKQoreworICAgIENCT1JWYWx1ZTo6TWFw
VmFsdWUgbWFwOworICAgIENCT1JWYWx1ZSBrZXlBKCJhIik7CisgICAgbWFwW0NCT1JWYWx1ZSgi
YSIpXSA9IENCT1JWYWx1ZSgxMjMpOworICAgIENCT1JWYWx1ZSB2YWx1ZShXVEZNb3ZlKG1hcCkp
OworCisgICAgQ0JPUlZhbHVlIGNvcGllZFZhbHVlKHZhbHVlLmNsb25lKCkpOworICAgIEVYUEVD
VF9FUSgxdSwgY29waWVkVmFsdWUuZ2V0TWFwKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEodmFs
dWUuZ2V0TWFwKCkuY291bnQoa2V5QSksIDF1KTsKKyAgICBBU1NFUlRfRVEoY29waWVkVmFsdWUu
Z2V0TWFwKCkuY291bnQoa2V5QSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjb3BpZWRWYWx1ZS5n
ZXRNYXAoKS5maW5kKGtleUEpLT5zZWNvbmQuaXNVbnNpZ25lZCgpKTsKKyAgICBFWFBFQ1RfRVEo
dmFsdWUuZ2V0TWFwKCkuZmluZChrZXlBKS0+c2Vjb25kLmdldEludGVnZXIoKSwgY29waWVkVmFs
dWUuZ2V0TWFwKCkuZmluZChrZXlBKS0+c2Vjb25kLmdldEludGVnZXIoKSk7CisKKyAgICBDQk9S
VmFsdWUgYmxhbms7CisgICAgYmxhbmsgPSB2YWx1ZS5jbG9uZSgpOworICAgIEVYUEVDVF9FUSgx
dSwgYmxhbmsuZ2V0TWFwKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoYmxhbmsuZ2V0TWFwKCku
Y291bnQoa2V5QSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShibGFuay5nZXRNYXAoKS5maW5kKGtl
eUEpLT5zZWNvbmQuaXNVbnNpZ25lZCgpKTsKKyAgICBFWFBFQ1RfRVEodmFsdWUuZ2V0TWFwKCku
ZmluZChrZXlBKS0+c2Vjb25kLmdldEludGVnZXIoKSwgYmxhbmsuZ2V0TWFwKCkuZmluZChrZXlB
KS0+c2Vjb25kLmdldEludGVnZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29weVNp
bXBsZVZhbHVlKQoreworICAgIENCT1JWYWx1ZSB2YWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVl
OjpUcnVlVmFsdWUpOworICAgIENCT1JWYWx1ZSBjb3BpZWRWYWx1ZSh2YWx1ZS5jbG9uZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS50eXBlKCkgPT0gY29waWVkVmFsdWUudHlwZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS5nZXRTaW1wbGVWYWx1ZSgpID09IGNvcGllZFZhbHVlLmdldFNp
bXBsZVZhbHVlKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSB2YWx1
ZS5jbG9uZSgpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBibGFuay50eXBlKCkp
OworICAgIEVYUEVDVF9UUlVFKHZhbHVlLmdldFNpbXBsZVZhbHVlKCkgPT0gYmxhbmsuZ2V0U2lt
cGxlVmFsdWUoKSk7Cit9CisKKy8vIFRlc3QgbW92ZSBjb25zdHJ1Y3RvcnMgYW5kIG1vdmUtYXNz
aWdubWVudAorVEVTVChDQk9SVmFsdWVUZXN0LCBNb3ZlVW5zaWduZWQpCit7CisgICAgQ0JPUlZh
bHVlIHZhbHVlKDc0KTsKKyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1ZSkp
OworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6VW5zaWduZWQgPT0gbW92ZWRfdmFs
dWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoNzR1LCBtb3ZlZF92YWx1ZS5nZXRJbnRlZ2VyKCkp
OworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSBDQk9SVmFsdWUoNjU0KTsK
KyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVkID09IGJsYW5rLnR5cGUo
KSk7CisgICAgRVhQRUNUX0VRKDY1NHUsIGJsYW5rLmdldEludGVnZXIoKSk7Cit9CisKK1RFU1Qo
Q0JPUlZhbHVlVGVzdCwgTW92ZU5lZ2F0aXZlSW50ZWdlcikKK3sKKyAgICBDQk9SVmFsdWUgdmFs
dWUoLTc0KTsKKyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1ZSkpOworICAg
IEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6TmVnYXRpdmUgPT0gbW92ZWRfdmFsdWUudHlw
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoLTc0LCBtb3ZlZF92YWx1ZS5nZXRJbnRlZ2VyKCkpOworCisg
ICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSBDQk9SVmFsdWUoLTY1NCk7CisgICAg
RVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpOZWdhdGl2ZSA9PSBibGFuay50eXBlKCkpOwor
ICAgIEVYUEVDVF9FUSgtNjU0LCBibGFuay5nZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENCT1JW
YWx1ZVRlc3QsIE1vdmVTdHJpbmcpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKCJmb29iYXIiKTsK
KyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1ZSkpOworICAgIEVYUEVDVF9U
UlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nID09IG1vdmVkX3ZhbHVlLnR5cGUoKSk7CisgICAg
RVhQRUNUX1RSVUUoImZvb2JhciIgPT0gbW92ZWRfdmFsdWUuZ2V0U3RyaW5nKCkpOworCisgICAg
Q0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSBDQk9SVmFsdWUoImZvb2JhciIpOworICAg
IEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nID09IGJsYW5rLnR5cGUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoImZvb2JhciIgPT0gYmxhbmsuZ2V0U3RyaW5nKCkpOworfQorCitURVNU
KENCT1JWYWx1ZVRlc3QsIE1vdmVCeXRlc3RyaW5nKQoreworICAgIGNvbnN0IENCT1JWYWx1ZTo6
QmluYXJ5VmFsdWUgYnl0ZXMoeyAweEYsIDB4MCwgMHgwLCAweEIsIDB4QSwgMHgyIH0pOworICAg
IENCT1JWYWx1ZSB2YWx1ZShieXRlcyk7CisgICAgQ0JPUlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1v
dmUodmFsdWUpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SVmFsdWU6OlR5cGU6OkJ5dGVTdHJpbmcg
PT0gbW92ZWRfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShieXRlcyA9PSBtb3ZlZF92
YWx1ZS5nZXRCeXRlU3RyaW5nKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxh
bmsgPSBDQk9SVmFsdWUoYnl0ZXMpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6
Qnl0ZVN0cmluZyA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKGJ5dGVzID09IGJs
YW5rLmdldEJ5dGVTdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgTW92ZUNvbnN0
cnVjdE1hcCkKK3sKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIG1hcDsKKyAgICBjb25zdCBDQk9S
VmFsdWUga2V5QSgiYSIpOworICAgIG1hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMTIz
KTsKKworICAgIENCT1JWYWx1ZSB2YWx1ZShXVEZNb3ZlKG1hcCkpOworICAgIENCT1JWYWx1ZSBt
b3ZlZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpU
eXBlOjpNYXAgPT0gbW92ZWRfdmFsdWUudHlwZSgpKTsKKyAgICBBU1NFUlRfRVEobW92ZWRfdmFs
dWUuZ2V0TWFwKCkuY291bnQoa2V5QSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShtb3ZlZF92YWx1
ZS5nZXRNYXAoKS5maW5kKGtleUEpLT5zZWNvbmQuaXNVbnNpZ25lZCgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTIzdSwgbW92ZWRfdmFsdWUuZ2V0TWFwKCkuZmluZChrZXlBKS0+c2Vjb25kLmdldEludGVn
ZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgTW92ZUFzc2lnbk1hcCkKK3sKKyAgICBD
Qk9SVmFsdWU6Ok1hcFZhbHVlIG1hcDsKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5QSgiYSIpOwor
ICAgIG1hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMTIzKTsKKworICAgIENCT1JWYWx1
ZSBibGFuazsKKyAgICBibGFuayA9IENCT1JWYWx1ZShXVEZNb3ZlKG1hcCkpOworICAgIEFTU0VS
VF9UUlVFKGJsYW5rLmlzTWFwKCkpOworICAgIEFTU0VSVF9FUShibGFuay5nZXRNYXAoKS5jb3Vu
dChrZXlBKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGJsYW5rLmdldE1hcCgpLmZpbmQoa2V5QSkt
PnNlY29uZC5pc1Vuc2lnbmVkKCkpOworICAgIEVYUEVDVF9FUSgxMjN1LCBibGFuay5nZXRNYXAo
KS5maW5kKGtleUEpLT5zZWNvbmQuZ2V0SW50ZWdlcigpKTsKK30KKworVEVTVChDQk9SVmFsdWVU
ZXN0LCBNb3ZlQXJyYXkpCit7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGFycmF5OworICAg
IGFycmF5LmFwcGVuZCgxMjMpOworICAgIENCT1JWYWx1ZSB2YWx1ZShhcnJheSk7CisgICAgQ0JP
UlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1vdmUodmFsdWUpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9S
VmFsdWU6OlR5cGU6OkFycmF5ID09IG1vdmVkX3ZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX0VR
KDEyM3UsIG1vdmVkX3ZhbHVlLmdldEFycmF5KCkubGFzdCgpLmdldEludGVnZXIoKSk7CisKKyAg
ICBDQk9SVmFsdWUgYmxhbms7CisgICAgYmxhbmsgPSBDQk9SVmFsdWUoV1RGTW92ZShhcnJheSkp
OworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QXJyYXkgPT0gYmxhbmsudHlwZSgp
KTsKKyAgICBFWFBFQ1RfRVEoMTIzdSwgYmxhbmsuZ2V0QXJyYXkoKS5sYXN0KCkuZ2V0SW50ZWdl
cigpKTsKK30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBNb3ZlU2ltcGxlVmFsdWUpCit7CisgICAg
Q0JPUlZhbHVlIHZhbHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlVuZGVmaW5lZCk7CisgICAg
Q0JPUlZhbHVlIG1vdmVkX3ZhbHVlKFdURk1vdmUodmFsdWUpKTsKKyAgICBFWFBFQ1RfVFJVRShD
Qk9SVmFsdWU6OlR5cGU6OlNpbXBsZVZhbHVlID09IG1vdmVkX3ZhbHVlLnR5cGUoKSk7CisgICAg
RVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VW5kZWZpbmVkID09IG1vdmVkX3Zh
bHVlLmdldFNpbXBsZVZhbHVlKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxh
bmsgPSBDQk9SVmFsdWUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VW5kZWZpbmVkKTsKKyAgICBF
WFBFQ1RfVFJVRShDQk9SVmFsdWU6OlR5cGU6OlNpbXBsZVZhbHVlID09IGJsYW5rLnR5cGUoKSk7
CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VW5kZWZpbmVkID09IGJs
YW5rLmdldFNpbXBsZVZhbHVlKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIFNlbGZTd2Fw
KQoreworICAgIENCT1JWYWx1ZSB0ZXN0KDEpOworICAgIHN0ZDo6c3dhcCh0ZXN0LCB0ZXN0KTsK
KyAgICBFWFBFQ1RfRVEodGVzdC5nZXRJbnRlZ2VyKCksIDF1KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NCT1JXcml0ZXJUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9DQk9SV3JpdGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFjODQ2NWIwYTQzZGIwMTgzMmY5
N2QzMWY5ODBhOTBhYWQ3NmY2OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9DQk9SV3JpdGVyVGVzdC5jcHAKQEAgLTAsMCArMSw0NjIgQEAKKy8v
IENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DQk9SV3JpdGVyLmg+CisKKyNpbmNsdWRlIDxs
aW1pdHM+CisKKy8vIExldmVyYWdpbmcgUkZDIDcwNDkgZXhhbXBsZXMgZnJvbSBodHRwczovL2dp
dGh1Yi5jb20vY2Jvci90ZXN0LXZlY3RvcnMvYmxvYi9tYXN0ZXIvYXBwZW5kaXhfYS5qc29uLgor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit1c2luZyBuYW1lc3BhY2UgY2JvcjsKKworYm9v
bCBlcShjb25zdCBWZWN0b3I8dWludDhfdD4mIGNib3IsIGNvbnN0IENTdHJpbmcmIGV4cGVjdCkK
K3sKKyAgICBpZiAoY2Jvci5zaXplKCkgIT0gZXhwZWN0Lmxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFtZW1jbXAoY2Jvci5kYXRhKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGV4cGVjdC5kYXRhKCkpLCBjYm9yLnNpemUoKSk7Cit9CisKK2Jv
b2wgZXEoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjYm9yLCBjb25zdCB1aW50OF90KiBleHBlY3Qs
IGNvbnN0IHNpemVfdCBleHBlY3RMZW5ndGgpCit7CisgICAgaWYgKGNib3Iuc2l6ZSgpICE9IGV4
cGVjdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhbWVtY21wKGNi
b3IuZGF0YSgpLCBleHBlY3QsIGV4cGVjdExlbmd0aCk7Cit9CisKK1RFU1QoQ0JPUldyaXRlclRl
c3QsIFRlc3RXcml0ZVVpbnQpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBjb25z
dCBpbnQ2NF90IHZhbHVlOworICAgICAgICBjb25zdCBDU3RyaW5nIGNib3I7CisgICAgfSBVaW50
VGVzdENhc2U7CisKKyAgICBzdGF0aWMgY29uc3QgVWludFRlc3RDYXNlIGtVaW50VGVzdENhc2Vz
W10gPSB7CisgICAgICAgIC8vIFJlbWluZGVyOiBtdXN0IHNwZWNpZnkgbGVuZ3RoIHdoZW4gY3Jl
YXRpbmcgc3RyaW5nIHBpZWNlcworICAgICAgICAvLyB3aXRoIG51bGwgYnl0ZXMsIGVsc2UgdGhl
IHN0cmluZyB3aWxsIHRydW5jYXRlIHByZW1hdHVyZWx5LgorICAgICAgICB7MCwgQ1N0cmluZygi
XHgwMCIsIDEpfSwKKyAgICAgICAgezEsIENTdHJpbmcoIlx4MDEiKX0sCisgICAgICAgIHsxMCwg
Q1N0cmluZygiXHgwYSIpfSwKKyAgICAgICAgezIzLCBDU3RyaW5nKCJceDE3Iil9LAorICAgICAg
ICB7MjQsIENTdHJpbmcoIlx4MThceDE4Iil9LAorICAgICAgICB7MjUsIENTdHJpbmcoIlx4MThc
eDE5Iil9LAorICAgICAgICB7MTAwLCBDU3RyaW5nKCJceDE4XHg2NCIpfSwKKyAgICAgICAgezEw
MDAsIENTdHJpbmcoIlx4MTlceDAzXHhlOCIpfSwKKyAgICAgICAgezEwMDAwMDAsIENTdHJpbmco
Ilx4MWFceDAwXHgwZlx4NDJceDQwIiwgNSl9LAorICAgICAgICB7MHhGRkZGRkZGRiwgQ1N0cmlu
ZygiXHgxYVx4ZmZceGZmXHhmZlx4ZmYiKX0sCisgICAgICAgIHsweDEwMDAwMDAwMCwKKyAgICAg
ICAgICAgIENTdHJpbmcoIlx4MWJceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwMCIsIDkp
fSwKKyAgICAgICAge3N0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpLAorICAgICAg
ICAgICAgQ1N0cmluZygiXHgxYlx4N2ZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIil9Cisg
ICAgfTsKKworICAgIGZvciAoY29uc3QgVWludFRlc3RDYXNlJiB0ZXN0Q2FzZSA6IGtVaW50VGVz
dENhc2VzKSB7CisgICAgICAgIGF1dG8gY2JvciA9IENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1
ZSh0ZXN0Q2FzZS52YWx1ZSkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0Q2FzZS5jYm9yKSk7
CisgICAgfQorfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVOZWdhdGl2ZUludGVn
ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNvbnN0IGludDY0X3Qg
bmVnYXRpdmVJbnQ7CisgICAgICAgIGNvbnN0IENTdHJpbmcgY2JvcjsKKyAgICB9IGtOZWdhdGl2
ZUludFRlc3RDYXNlc1tdID0geworICAgICAgICB7IC0xTEwsIENTdHJpbmcoIlx4MjAiKSB9LAor
ICAgICAgICB7IC0xMExMLCBDU3RyaW5nKCJceDI5IikgfSwKKyAgICAgICAgeyAtMjNMTCwgQ1N0
cmluZygiXHgzNiIpIH0sCisgICAgICAgIHsgLTI0TEwsIENTdHJpbmcoIlx4MzciKSB9LAorICAg
ICAgICB7IC0yNUxMLCBDU3RyaW5nKCJceDM4XHgxOCIpIH0sCisgICAgICAgIHsgLTEwMExMLCBD
U3RyaW5nKCJceDM4XHg2MyIpIH0sCisgICAgICAgIHsgLTEwMDBMTCwgQ1N0cmluZygiXHgzOVx4
MDNceGU3IikgfSwKKyAgICAgICAgeyAtNDI5NDk2NzI5NkxMLCBDU3RyaW5nKCJceDNhXHhmZlx4
ZmZceGZmXHhmZiIpIH0sCisgICAgICAgIHsgLTQyOTQ5NjcyOTdMTCwKKyAgICAgICAgICAgIENT
dHJpbmcoIlx4M2JceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwMCIsIDkpIH0sCisgICAg
ICAgIHsgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCksCisgICAgICAgICAgICBD
U3RyaW5nKCJceDNiXHg3Zlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiKSB9LAorICAgIH07
CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRlc3RDYXNlIDoga05lZ2F0aXZlSW50VGVzdENhc2Vz
KSB7CisgICAgICAgIGF1dG8gY2JvciA9IENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1ZSh0ZXN0
Q2FzZS5uZWdhdGl2ZUludCkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0Q2FzZS5jYm9yKSk7
CisgICAgfQorfQorCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVCeXRlcykKK3sKKyAg
ICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBieXRlczsK
KyAgICAgICAgY29uc3QgQ1N0cmluZyBjYm9yOworICAgIH0gQnl0ZXNUZXN0Q2FzZTsKKworICAg
IHN0YXRpYyBjb25zdCBCeXRlc1Rlc3RDYXNlIGtCeXRlc1Rlc3RDYXNlc1tdID0geworICAgICAg
ICB7IHsgfSwgQ1N0cmluZygiXHg0MCIpIH0sCisgICAgICAgIHsgeyAweDAxLCAweDAyLCAweDAz
LCAweDA0IH0sIENTdHJpbmcoIlx4NDRceDAxXHgwMlx4MDNceDA0IikgfSwKKyAgICB9OworCisg
ICAgZm9yIChjb25zdCBCeXRlc1Rlc3RDYXNlJiB0ZXN0Q2FzZSA6IGtCeXRlc1Rlc3RDYXNlcykg
eworICAgICAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUodGVzdENh
c2UuYnl0ZXMpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwgdGVzdENhc2UuY2JvcikpOworICAgIH0K
K30KKworVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlU3RyaW5nKQoreworICAgIHR5cGVk
ZWYgc3RydWN0IHsKKyAgICAgICAgY29uc3QgU3RyaW5nIHN0cmluZzsKKyAgICAgICAgY29uc3Qg
Q1N0cmluZyBjYm9yOworICAgIH0gU3RyaW5nVGVzdENhc2U7CisKKyAgICBzdGF0aWMgY29uc3Qg
U3RyaW5nVGVzdENhc2Uga1N0cmluZ1Rlc3RDYXNlc1tdID0geworICAgICAgICB7ICIiLCBDU3Ry
aW5nKCJceDYwIikgfSwKKyAgICAgICAgeyAiYSIsIENTdHJpbmcoIlx4NjFceDYxIikgfSwKKyAg
ICAgICAgeyAiSUVURiIsIENTdHJpbmcoIlx4NjRceDQ5XHg0NVx4NTRceDQ2IikgfSwKKyAgICAg
ICAgeyAiXCJcXCIsIENTdHJpbmcoIlx4NjJceDIyXHg1YyIpIH0sCisgICAgICAgIHsgU3RyaW5n
Ojpmcm9tVVRGOCgiXHhjM1x4YmMiKSwgQ1N0cmluZygiXHg2Mlx4YzNceGJjIikgfSwKKyAgICAg
ICAgeyBTdHJpbmc6OmZyb21VVEY4KCJceGU2XHhiMFx4YjQiKSwgQ1N0cmluZygiXHg2M1x4ZTZc
eGIwXHhiNCIpIH0sCisgICAgICAgIHsgU3RyaW5nOjpmcm9tVVRGOCgiXHhmMFx4OTBceDg1XHg5
MSIpLCBDU3RyaW5nKCJceDY0XHhmMFx4OTBceDg1XHg5MSIpIH0KKyAgICB9OworCisgICAgZm9y
IChjb25zdCBTdHJpbmdUZXN0Q2FzZSYgdGVzdENhc2UgOiBrU3RyaW5nVGVzdENhc2VzKSB7Cisg
ICAgICAgIGF1dG8gY2JvciA9IENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1ZSh0ZXN0Q2FzZS5z
dHJpbmcpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwgdGVzdENhc2UuY2JvcikpOworICAgIH0KK30K
KworVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlQXJyYXkpCit7CisgICAgc3RhdGljIGNv
bnN0IHVpbnQ4X3Qga0FycmF5VGVzdENhc2VDYm9yW10gPSB7CisgICAgICAgIDB4OTgsIDB4MTks
IC8vIGFycmF5IG9mIDI1IGVsZW1lbnRzCisgICAgICAgIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQs
IDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsCisgICAgICAg
IDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4
MTYsIDB4MTcsIDB4MTgsCisgICAgICAgIDB4MTgsIDB4MTgsIDB4MTksCisgICAgfTsKKyAgICBW
ZWN0b3I8Q0JPUlZhbHVlPiBhcnJheTsKKyAgICBmb3IgKGludDY0X3QgaSA9IDE7IGkgPD0gMjU7
IGkrKykKKyAgICAgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZShpKSk7CisgICAgYXV0byBjYm9y
ID0gQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKGFycmF5KSk7CisgICAgQVNTRVJUX1RSVUUo
Y2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCBrQXJy
YXlUZXN0Q2FzZUNib3IsIHNpemVvZihrQXJyYXlUZXN0Q2FzZUNib3IpKSk7Cit9CisKK1RFU1Qo
Q0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZU1hcFdpdGhNYXBWYWx1ZSkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgdWludDhfdCBrTWFwVGVzdENhc2VDYm9yW10gPSB7CisgICAgICAgIDB4YjYsIC8vIG1h
cCBvZiA4IHBhaXJzOgorICAgICAgICAweDAwLCAvLyBrZXkgMAorICAgICAgICAweDYxLCAweDYx
LCAvLyB2YWx1ZSAiYSIKKworICAgICAgICAweDE3LCAvLyBrZXkgMjMKKyAgICAgICAgMHg2MSwg
IDB4NjIsIC8vIHZhbHVlICJiIgorCisgICAgICAgIDB4MTgsIDB4MTgsIC8vIGtleSAyNAorICAg
ICAgICAweDYxLCAweDYzLCAvLyB2YWx1ZSAiYyIKKworICAgICAgICAweDE4LCAweEZGLCAvLyBr
ZXkgMjU1CisgICAgICAgIDB4NjEsICAweDY0LCAvLyB2YWx1ZSAiZCIKKworICAgICAgICAweDE5
LCAweDAxLCAweDAwLCAvLyBrZXkgMjU2CisgICAgICAgIDB4NjEsIDB4NjUsIC8vIHZhbHVlICJl
IgorCisgICAgICAgIDB4MTksIDB4RkYsIDB4RkYsIC8vIGtleSA2NTUzNQorICAgICAgICAweDYx
LCAgMHg2NiwgLy8gdmFsdWUgImYiCisKKyAgICAgICAgMHgxQSwgMHgwMCwgMHgwMSwgMHgwMCwg
MHgwMCwgLy8ga2V5IDY1NTM2CisgICAgICAgIDB4NjEsIDB4NjcsIC8vIHZhbHVlICJnIgorCisg
ICAgICAgIDB4MUEsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIC8vIGtleSA0Mjk0OTY3Mjk1Cisg
ICAgICAgIDB4NjEsIDB4NjgsIC8vIHZhbHVlICJoIgorCisgICAgICAgIC8vIGtleSA0Mjk0OTY3
Mjk2CisgICAgICAgIDB4MUIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgICAgICAgIDB4NjEsIDB4NjksIC8vICB2YWx1ZSAiaSIKKworICAgICAgICAv
LyBrZXkgSU5UNjRfTUFYCisgICAgICAgIDB4MWIsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4
ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgICAgICAgIDB4NjEsIDB4NmEsIC8vICB2YWx1ZSAiaiIK
KworICAgICAgICAweDIwLCAvLyBrZXkgLTEKKyAgICAgICAgMHg2MSwgMHg2YiwgLy8gdmFsdWUg
ImsiCisKKyAgICAgICAgMHgzNywgLy8ga2V5IC0yNAorICAgICAgICAweDYxLCAgMHg2YywgLy8g
dmFsdWUgImwiCisKKyAgICAgICAgMHgzOCwgMHgxOCwgLy8ga2V5IC0yNQorICAgICAgICAweDYx
LCAweDZkLCAvLyB2YWx1ZSAibSIKKworICAgICAgICAweDM4LCAweEZGLCAvLyBrZXkgLTI1Ngor
ICAgICAgICAweDYxLCAweDZlLCAvLyB2YWx1ZSAibiIKKworICAgICAgICAweDM5LCAweDAxLCAw
eDAwLCAvLyBrZXkgLTI1NworICAgICAgICAweDYxLCAweDZmLCAvLyB2YWx1ZSAibyIKKworICAg
ICAgICAweDNBLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAvLyBrZXkgLTY1NTM3CisgICAgICAg
IDB4NjEsIDB4NzAsIC8vIHZhbHVlICJwIgorCisgICAgICAgIDB4M0EsIDB4RkYsIDB4RkYsIDB4
RkYsIDB4RkYsIC8vIGtleSAtNDI5NDk2NzI5NgorICAgICAgICAweDYxLCAweDcxLCAvLyB2YWx1
ZSAicSIKKworICAgICAgICAvLyBrZXkgLTQyOTQ5NjcyOTcKKyAgICAgICAgMHgzQiwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAgMHg2MSwg
MHg3MiwgLy8gIHZhbHVlICJyIgorCisgICAgICAgIC8vIGtleSBJTlQ2NF9NSU4KKyAgICAgICAg
MHgzYiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAg
ICAgICAgMHg2MSwgMHg3MywgLy8gIHZhbHVlICJzIgorCisgICAgICAgIDB4NjAsIC8vIGtleSAi
IgorICAgICAgICAweDYxLCAweDJlLCAvLyB2YWx1ZSAiLiIKKworICAgICAgICAweDYxLCAweDY1
LCAvLyBrZXkgImUiCisgICAgICAgIDB4NjEsIDB4NDUsIC8vIHZhbHVlICJFIgorCisgICAgICAg
IDB4NjIsIDB4NjEsIDB4NjEsIC8vIGtleSAiYWEiCisgICAgICAgIDB4NjIsIDB4NDEsIDB4NDEs
IC8vIHZhbHVlICJBQSIKKyAgICB9OworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOworICAg
IC8vIFNob3J0ZXIgc3RyaW5ncyBzb3J0IGZpcnN0IGluIENUQVAsIHRodXMgdGhlIOKAnGFh4oCd
IHZhbHVlIHNob3VsZCBiZQorICAgIC8vIHNlcmlhbGlzZWQgbGFzdCBpbiB0aGUgbWFwLgorICAg
IG1hcFtDQk9SVmFsdWUoImFhIildID0gQ0JPUlZhbHVlKCJBQSIpOworICAgIG1hcFtDQk9SVmFs
dWUoImUiKV0gPSBDQk9SVmFsdWUoIkUiKTsKKyAgICAvLyBUaGUgZW1wdHkgc3RyaW5nIGlzIHNo
b3J0ZXIgdGhhbiBhbGwgb3RoZXJzLCBzbyBzaG91bGQgYXBwZWFyIGZpcnN0IGFtb25nCisgICAg
Ly8gdGhlIHN0cmluZ3MuCisgICAgbWFwW0NCT1JWYWx1ZSgiIildID0gQ0JPUlZhbHVlKCIuIik7
CisgICAgLy8gTWFwIGtleXMgYXJlIHNvcnRlZCBieSBtYWpvciB0eXBlLCBieSBieXRlIGxlbmd0
aCwgYW5kIHRoZW4gYnkKKyAgICAvLyBieXRlLXdpc2UgbGV4aWNhbCBvcmRlci4gU28gYWxsIGlu
dGVnZXIgdHlwZSBrZXlzIHNob3VsZCBhcHBlYXIgYmVmb3JlCisgICAgLy8ga2V5ICIiIGFuZCBh
bGwgcG9zaXRpdmUgaW50ZWdlciBrZXlzIHNob3VsZCBhcHBlYXIgYmVmb3JlIG5lZ2F0aXZlIGlu
dGVnZXIKKyAgICAvLyBrZXlzLgorICAgIG1hcFtDQk9SVmFsdWUoLTEpXSA9IENCT1JWYWx1ZSgi
ayIpOworICAgIG1hcFtDQk9SVmFsdWUoLTI0KV0gPSBDQk9SVmFsdWUoImwiKTsKKyAgICBtYXBb
Q0JPUlZhbHVlKC0yNSldID0gQ0JPUlZhbHVlKCJtIik7CisgICAgbWFwW0NCT1JWYWx1ZSgtMjU2
KV0gPSBDQk9SVmFsdWUoIm4iKTsKKyAgICBtYXBbQ0JPUlZhbHVlKC0yNTcpXSA9IENCT1JWYWx1
ZSgibyIpOworICAgIG1hcFtDQk9SVmFsdWUoLTY1NTM3KV0gPSBDQk9SVmFsdWUoInAiKTsKKyAg
ICBtYXBbQ0JPUlZhbHVlKGludDY0X3QoLTQyOTQ5NjcyOTYpKV0gPSBDQk9SVmFsdWUoInEiKTsK
KyAgICBtYXBbQ0JPUlZhbHVlKGludDY0X3QoLTQyOTQ5NjcyOTcpKV0gPSBDQk9SVmFsdWUoInIi
KTsKKyAgICBtYXBbQ0JPUlZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KV0gPSBDQk9SVmFsdWUoInMiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKDApXSA9IENCT1JWYWx1ZSgi
YSIpOworICAgIG1hcFtDQk9SVmFsdWUoMjMpXSA9IENCT1JWYWx1ZSgiYiIpOworICAgIG1hcFtD
Qk9SVmFsdWUoMjQpXSA9IENCT1JWYWx1ZSgiYyIpOworICAgIG1hcFtDQk9SVmFsdWUoc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpXSA9IENCT1JWYWx1ZSgiZCIpOworICAgIG1h
cFtDQk9SVmFsdWUoMjU2KV0gPSBDQk9SVmFsdWUoImUiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSldID0gQ0JPUlZhbHVlKCJmIik7Cisg
ICAgbWFwW0NCT1JWYWx1ZSg2NTUzNildID0gQ0JPUlZhbHVlKCJnIik7CisgICAgbWFwW0NCT1JW
YWx1ZShpbnQ2NF90KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpXSA9IENC
T1JWYWx1ZSgiaCIpOworICAgIG1hcFtDQk9SVmFsdWUoaW50NjRfdCg0Mjk0OTY3Mjk2KSldID0g
Q0JPUlZhbHVlKCJpIik7CisgICAgbWFwW0NCT1JWYWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptYXgoKSldID0gQ0JPUlZhbHVlKCJqIik7CisgICAgYXV0byBjYm9yID0gQ0JPUldy
aXRlcjo6d3JpdGUoQ0JPUlZhbHVlKG1hcCkpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3Zh
bHVlKCkpOworICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwga01hcFRlc3RDYXNlQ2Jv
ciwgc2l6ZW9mKGtNYXBUZXN0Q2FzZUNib3IpKSk7Cit9CisKK1RFU1QoQ0JPUldyaXRlclRlc3Qs
IFRlc3RXcml0ZU1hcFdpdGhBcnJheSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBrTWFw
QXJyYXlUZXN0Q2FzZUNib3JbXSA9IHsKKyAgICAgICAgMHhhMiwgLy8gbWFwIG9mIDIgcGFpcnMK
KyAgICAgICAgMHg2MSwgMHg2MSwgLy8gImEiCisgICAgICAgIDB4MDEsCisKKyAgICAgICAgMHg2
MSwgMHg2MiwgLy8gImIiCisgICAgICAgIDB4ODIsIC8vIGFycmF5IHdpdGggMiBlbGVtZW50cwor
ICAgICAgICAweDAyLAorICAgICAgICAweDAzLAorICAgIH07CisgICAgQ0JPUlZhbHVlOjpNYXBW
YWx1ZSBtYXA7CisgICAgbWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxKTsKKyAgICBD
Qk9SVmFsdWU6OkFycmF5VmFsdWUgYXJyYXk7CisgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgy
KSk7CisgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgzKSk7CisgICAgbWFwW0NCT1JWYWx1ZSgi
YiIpXSA9IENCT1JWYWx1ZShhcnJheSk7CisgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6d3Jp
dGUoQ0JPUlZhbHVlKG1hcCkpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOwor
ICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwga01hcEFycmF5VGVzdENhc2VDYm9yLCBz
aXplb2Yoa01hcEFycmF5VGVzdENhc2VDYm9yKSkpOworfQorCitURVNUKENCT1JXcml0ZXJUZXN0
LCBUZXN0V3JpdGVOZXN0ZWRNYXApCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga05lc3Rl
ZE1hcFRlc3RDYXNlW10gPSB7CisgICAgICAgIDB4YTIsIC8vIG1hcCBvZiAyIHBhaXJzCisgICAg
ICAgIDB4NjEsIDB4NjEsIC8vICJhIgorICAgICAgICAweDAxLAorCisgICAgICAgIDB4NjEsIDB4
NjIsIC8vICJiIgorICAgICAgICAweGEyLCAvLyBtYXAgb2YgMiBwYWlycworICAgICAgICAweDYx
LCAweDYzLCAvLyAiYyIKKyAgICAgICAgMHgwMiwKKworICAgICAgICAweDYxLCAweDY0LCAvLyAi
ZCIKKyAgICAgICAgMHgwMywKKyAgICB9OworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOwor
ICAgIG1hcFtDQk9SVmFsdWUoImEiKV0gPSBDQk9SVmFsdWUoMSk7CisgICAgQ0JPUlZhbHVlOjpN
YXBWYWx1ZSBuZXN0ZWRNYXA7CisgICAgbmVzdGVkTWFwW0NCT1JWYWx1ZSgiYyIpXSA9IENCT1JW
YWx1ZSgyKTsKKyAgICBuZXN0ZWRNYXBbQ0JPUlZhbHVlKCJkIildID0gQ0JPUlZhbHVlKDMpOwor
ICAgIG1hcFtDQk9SVmFsdWUoImIiKV0gPSBDQk9SVmFsdWUobmVzdGVkTWFwKTsKKyAgICBhdXRv
IGNib3IgPSBDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUobWFwKSk7CisgICAgQVNTRVJUX1RS
VUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCBr
TmVzdGVkTWFwVGVzdENhc2UsIHNpemVvZihrTmVzdGVkTWFwVGVzdENhc2UpKSk7Cit9CisKK1RF
U1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZVNpbXBsZVZhbHVlKQoreworICAgIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgeworICAgICAgICBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlIHNpbXBsZVZhbHVl
OworICAgICAgICBjb25zdCBDU3RyaW5nIGNib3I7CisgICAgfSBrU2ltcGxlVGVzdENhc2VbXSA9
IHsKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpGYWxzZVZhbHVlLCBDU3RyaW5n
KCJceGY0IikgfSwKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpUcnVlVmFsdWUs
IENTdHJpbmcoIlx4ZjUiKSB9LAorICAgICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6Ok51
bGxWYWx1ZSwgQ1N0cmluZygiXHhmNiIpIH0sCisgICAgICAgIHsgQ0JPUlZhbHVlOjpTaW1wbGVW
YWx1ZTo6VW5kZWZpbmVkLCBDU3RyaW5nKCJceGY3IikgfQorICAgIH07CisKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHRlc3RDYXNlIDoga1NpbXBsZVRlc3RDYXNlKSB7CisgICAgICAgIGF1dG8gY2Jv
ciA9IENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1ZSh0ZXN0Q2FzZS5zaW1wbGVWYWx1ZSkpOwor
ICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0Q2FzZS5jYm9yKSk7CisgICAgfQorfQorCisvLyBGb3Ig
bWFqb3IgdHlwZSAwLCAyLCAzLCBlbXB0eSBDQk9SIGFycmF5LCBhbmQgZW1wdHkgQ0JPUiBtYXAs
IHRoZSBuZXN0aW5nCisvLyBkZXB0aCBpcyBleHBlY3RlZCB0byBiZSAwIHNpbmNlIHRoZSBDQk9S
IGRlY29kZXIgZG9lcyBub3QgbmVlZCB0byBwYXJzZQorLy8gYW55IG5lc3RlZCBDQk9SIHZhbHVl
IGVsZW1lbnRzLgorVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlU2luZ2xlTGF5ZXIpCit7
CisgICAgY29uc3QgQ0JPUlZhbHVlIHNpbXBsZVVpbnQgPSBDQk9SVmFsdWUoMSk7CisgICAgY29u
c3QgQ0JPUlZhbHVlIHNpbXBsZVN0cmluZyA9IENCT1JWYWx1ZSgiYSIpOworICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiBieXRlRGF0YSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworICAg
IGNvbnN0IENCT1JWYWx1ZSBzaW1wbGVCeXRlc3RyaW5nID0gQ0JPUlZhbHVlKGJ5dGVEYXRhKTsK
KyAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgZW1wdHlDYm9yQXJyYXk7CisgICAgQ0JPUlZhbHVl
OjpNYXBWYWx1ZSBlbXB0eUNib3JNYXA7CisgICAgY29uc3QgQ0JPUlZhbHVlIGVtcHR5QXJyYXlW
YWx1ZSA9IENCT1JWYWx1ZShlbXB0eUNib3JBcnJheSk7CisgICAgY29uc3QgQ0JPUlZhbHVlIGVt
cHR5TWFwVmFsdWUgPSBDQk9SVmFsdWUoZW1wdHlDYm9yTWFwKTsKKyAgICBDQk9SVmFsdWU6OkFy
cmF5VmFsdWUgc2ltcGxlQXJyYXk7CisgICAgc2ltcGxlQXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgy
KSk7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBzaW1wbGVNYXA7CisgICAgc2ltcGxlTWFwW0NC
T1JWYWx1ZSgiYiIpXSA9IENCT1JWYWx1ZSgzKTsKKyAgICBjb25zdCBDQk9SVmFsdWUgc2luZ2xl
TGF5ZXJDYm9yTWFwID0gQ0JPUlZhbHVlKHNpbXBsZU1hcCk7CisgICAgY29uc3QgQ0JPUlZhbHVl
IHNpbmdsZUxheWVyQ2JvckFycmF5ID0gQ0JPUlZhbHVlKHNpbXBsZUFycmF5KTsKKworICAgIEVY
UEVDVF9UUlVFKENCT1JXcml0ZXI6OndyaXRlKHNpbXBsZVVpbnQsIDApLmhhc192YWx1ZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShzaW1wbGVTdHJpbmcsIDApLmhhc192
YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShzaW1wbGVCeXRlc3Ry
aW5nLCAwKS5oYXNfdmFsdWUoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0
ZShlbXB0eUFycmF5VmFsdWUsIDApLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9S
V3JpdGVyOjp3cml0ZShlbXB0eU1hcFZhbHVlLCAwKS5oYXNfdmFsdWUoKSk7CisKKyAgICBFWFBF
Q1RfRkFMU0UoQ0JPUldyaXRlcjo6d3JpdGUoc2luZ2xlTGF5ZXJDYm9yQXJyYXksIDApLmhhc192
YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShzaW5nbGVMYXllckNi
b3JBcnJheSwgMSkuaGFzX3ZhbHVlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKENCT1JXcml0ZXI6
OndyaXRlKHNpbmdsZUxheWVyQ2Jvck1hcCwgMCkuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9U
UlVFKENCT1JXcml0ZXI6OndyaXRlKHNpbmdsZUxheWVyQ2Jvck1hcCwgMSkuaGFzX3ZhbHVlKCkp
OworfQorCisvLyBNYWpvciB0eXBlIDUgbmVzdGVkIENCT1IgbWFwIHZhbHVlIHdpdGggZm9sbG93
aW5nIHN0cnVjdHVyZS4KKy8vICAgICB7ImEiOiAxLAorLy8gICAgICAiYiI6IHsiYyI6IDIsCisv
LyAgICAgICAgICAgICJkIjogM319CitURVNUKENCT1JXcml0ZXJUZXN0LCBOZXN0ZWRNYXBzKQor
eworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgY2Jvck1hcDsKKyAgICBjYm9yTWFwW0NCT1JWYWx1
ZSgiYSIpXSA9IENCT1JWYWx1ZSgxKTsKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIG5lc3RlZE1h
cDsKKyAgICBuZXN0ZWRNYXBbQ0JPUlZhbHVlKCJjIildID0gQ0JPUlZhbHVlKDIpOworICAgIG5l
c3RlZE1hcFtDQk9SVmFsdWUoImQiKV0gPSBDQk9SVmFsdWUoMyk7CisgICAgY2Jvck1hcFtDQk9S
VmFsdWUoImIiKV0gPSBDQk9SVmFsdWUobmVzdGVkTWFwKTsKKyAgICBFWFBFQ1RfVFJVRShDQk9S
V3JpdGVyOjp3cml0ZShDQk9SVmFsdWUoY2Jvck1hcCksIDIpLmhhc192YWx1ZSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKGNib3JNYXApLCAxKS5oYXNf
dmFsdWUoKSk7Cit9CisKKy8vIFRlc3RpbmcgV3JpdGUoKSBmdW5jdGlvbiBmb3IgZm9sbG93aW5n
IENCT1Igc3RydWN0dXJlIHdpdGggZGVwdGggb2YgMy4KKy8vICAgICBbMSwKKy8vICAgICAgMiwK
Ky8vICAgICAgMywKKy8vICAgICAgeyJhIjogMSwKKy8vICAgICAgICJiIjogeyJjIjogMiwKKy8v
ICAgICAgICAgICAgICJkIjogM319XQorVEVTVChDQk9SV3JpdGVyVGVzdCwgVW5iYWxhbmNlZE5l
c3RlZENvbnRhaW5lcnMpCit7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGNib3JBcnJheTsK
KyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIGNib3JNYXA7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1
ZSBuZXN0ZWRNYXA7CisKKyAgICBjYm9yTWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgx
KTsKKyAgICBuZXN0ZWRNYXBbQ0JPUlZhbHVlKCJjIildID0gQ0JPUlZhbHVlKDIpOworICAgIG5l
c3RlZE1hcFtDQk9SVmFsdWUoImQiKV0gPSBDQk9SVmFsdWUoMyk7CisgICAgY2Jvck1hcFtDQk9S
VmFsdWUoImIiKV0gPSBDQk9SVmFsdWUobmVzdGVkTWFwKTsKKyAgICBjYm9yQXJyYXkuYXBwZW5k
KENCT1JWYWx1ZSgxKSk7CisgICAgY2JvckFycmF5LmFwcGVuZChDQk9SVmFsdWUoMikpOworICAg
IGNib3JBcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDMpKTsKKyAgICBjYm9yQXJyYXkuYXBwZW5kKENC
T1JWYWx1ZShjYm9yTWFwKSk7CisKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShD
Qk9SVmFsdWUoY2JvckFycmF5KSwgMykuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9GQUxTRShD
Qk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUoY2JvckFycmF5KSwgMikuaGFzX3ZhbHVlKCkpOwor
fQorCisvLyBUZXN0aW5nIFdyaXRlKCkgZnVuY3Rpb24gZm9yIGZvbGxvd2luZyBDQk9SIHN0cnVj
dHVyZS4KKy8vICAgICB7ImEiOiAxLAorLy8gICAgICAiYiI6IHsiYyI6IDIsCisvLyAgICAgICAg
ICAgICJkIjogMworLy8gICAgICAgICAgICAiaCI6IHsgImUiOiA0LAorLy8gICAgICAgICAgICAg
ICAgICAgImYiOiA1LAorLy8gICAgICAgICAgICAgICAgICAgImciOiBbNiwgNywgWzhdXX19fQor
Ly8gU2luY2UgYWJvdmUgQ0JPUiBjb250YWlucyA1IG5lc3RpbmcgbGV2ZWxzLiBUaHVzLCBXcml0
ZSgpIGlzIGV4cGVjdGVkIHRvCisvLyByZXR1cm4gZW1wdHkgb3B0aW9uYWwgb2JqZWN0IHdoZW4g
bWF4aW11bSBuZXN0aW5nIGxheWVyIHNpemUgaXMgc2V0IHRvIDQuCitURVNUKENCT1JXcml0ZXJU
ZXN0LCBPdmVybHlOZXN0ZWRDQk9SKQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOwor
ICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbmVzdGVkTWFwOworICAgIENCT1JWYWx1ZTo6TWFwVmFs
dWUgaW5uZXJOZXN0ZWRNYXA7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGlubmVyQXJyYXk7
CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGFycmF5OworCisgICAgbWFwW0NCT1JWYWx1ZSgi
YSIpXSA9IENCT1JWYWx1ZSgxKTsKKyAgICBuZXN0ZWRNYXBbQ0JPUlZhbHVlKCJjIildID0gQ0JP
UlZhbHVlKDIpOworICAgIG5lc3RlZE1hcFtDQk9SVmFsdWUoImQiKV0gPSBDQk9SVmFsdWUoMyk7
CisgICAgaW5uZXJOZXN0ZWRNYXBbQ0JPUlZhbHVlKCJlIildID0gQ0JPUlZhbHVlKDQpOworICAg
IGlubmVyTmVzdGVkTWFwW0NCT1JWYWx1ZSgiZiIpXSA9IENCT1JWYWx1ZSg1KTsKKyAgICBpbm5l
ckFycmF5LmFwcGVuZChDQk9SVmFsdWUoNikpOworICAgIGFycmF5LmFwcGVuZChDQk9SVmFsdWUo
NikpOworICAgIGFycmF5LmFwcGVuZChDQk9SVmFsdWUoNykpOworICAgIGFycmF5LmFwcGVuZChD
Qk9SVmFsdWUoaW5uZXJBcnJheSkpOworICAgIGlubmVyTmVzdGVkTWFwW0NCT1JWYWx1ZSgiZyIp
XSA9IENCT1JWYWx1ZShhcnJheSk7CisgICAgbmVzdGVkTWFwW0NCT1JWYWx1ZSgiaCIpXSA9IENC
T1JWYWx1ZShpbm5lck5lc3RlZE1hcCk7CisgICAgbWFwW0NCT1JWYWx1ZSgiYiIpXSA9IENCT1JW
YWx1ZShuZXN0ZWRNYXApOworCisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUoQ0JP
UlZhbHVlKG1hcCksIDUpLmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRl
cjo6d3JpdGUoQ0JPUlZhbHVlKG1hcCksIDQpLmhhc192YWx1ZSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="350133"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="350146"
          type_id="3"
          status="-"
          setter="bfulgham"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331158</attachid>
            <date>2018-01-11 19:34:16 -0800</date>
            <delta_ts>2018-01-11 21:29:05 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-181522-20180111193331.patch</filename>
            <type>text/plain</type>
            <size>129175</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ2N2M3Zjk1YWQzM2Y0
Y2ZmNzQ4NzJhMjdjMjM2MDhlZmI5YzFiNi4uNzEyZmFlNTg1ZGRmOTRhY2UxNDk5MGIwNWMwZDE1
ZTRkNzM5NjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDE4LTAxLTExICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBv
cnQgYSBDQk9SIGNvZGVyIGZyb20gQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTUyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYw
NTU3Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICBU
aGlzIHBhdGNoIGltcG9ydHMgYSBDQk9SIGNvZGVyIGluY2x1ZGluZyBlbmNvZGVyIGFuZCBkZWNv
ZGVyIGZyb20gQ2hyb21pdW0uIENCT1IgZW5jb2RlcgorICAgICAgICBpcyBuZWVkZWQgZm9yIFdl
YkF1dGhOIHRvIGVuY29kZSBhdHRlc3RhdGlvbiBvYmplY3QgaW50byBiaW5hcmllcy4gV2hlbiBz
dXBwb3J0aW5nIGV4dGVuc2lvbnMKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSwgQ0JPUiBlbmNvZGVy
L2RlY29kZXIgd2lsbCBiZSBuZWVkZWQgYXMgd2VsbC4gSW1wbGVtZW50YXRpbmcgYW5kIG1haW50
YWluaW5nCisgICAgICAgIGEgZnVsbHktZmxlZGdlZCBDQk9SIGNvZGVyIGRvZXNuJ3Qgc2VlbSB0
byBhbGlnbiB3aXRoIFdlYktpdCdzIGJlc3QgaW50ZXJlc3RzLiBUaGVyZWZvcmUsCisgICAgICAg
IGltcG9ydGluZyBhIG1vc3Qgc3VpdGFibGUgdGhpcmQgcGFydHkgaW1wbGVtZW50YXRpb24gd2ls
bCBiZSB3aXNlLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIGl0IGZ1bGx5IGludGVncmF0ZSB0
aGUgd2hvbGUgY29kZXIgaW50byBvdXIgY29kZWJhc2UuIFRob3NlIGNoYW5nZXMgaW5jbHVkZXM6
CisgICAgICAgICAgICAxLiBTdWJzdGl0dXRlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGVuam95IGEg
YmV0dGVyIFdURiB2ZXJzaW9uLgorICAgICAgICAgICAgMi4gUmVwbGFjaW5nIG1hcmNvcy4KKyAg
ICAgICAgICAgIDMuIEltcGxlbWVudGF0aW5nIHdvcmthcm91bmRzIGZvciBzb21lIGZ1bmN0aW9u
YWxpdGllcyB0aGF0IHdlIGxhY2sgZnVuZGFtZW50YWwgdHlwZXMnIHN1cHBvcnQuCisgICAgICAg
ICAgICA0LiBDaGFuZ2luZyB0aGUgY29kaW5nIHN0eWxlIHRvIG1hdGNoIG91cnMuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2Vzbid0IGludGVuZCB0byBpbXByb3ZlIHRoZSBsb2dpYyBvZiB0aGUg
b3JpZ2luYWwgY29kZWJhc2UuIEhlbmNlIHNvbWUgb2YgdGhlCisgICAgICAgIGNvZGluZyBsb2dp
YyBtaWdodCBub3QgbWF0Y2ggd2hhdCBXZWJLaXQgdXN1c2FsbHkgaGFzLgorCisgICAgICAgIEhl
cmUgaXMgYSBmdWxsIGxpc3Qgb2YgQ2hyb21pdW0gY2hhbmdlcyB0aGF0IGNvbnN0cnVjdGVkIHRo
aXMgQ0JPUiBjb2RlciBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyOgorICAgICAgICA2ZWZjZjQ5NTUy
MWQxOGQwNjAwMjc3NjJmNDhiYjI5MmQ2OTc5MTM2LAorICAgICAgICA5ZWI0M2ZkMzQ3ODkwYjRj
NmNmNTRjNGJkN2VjMWJiYjg4ZTM4MWUxLAorICAgICAgICAzMWM4NWU3NGZkNTY3NzcyZjE4ZTBh
NDFiZTQ2OGQwNGFmNzIxZjIxLAorICAgICAgICA2ODY3MmZkY2FkMjgwYThmZjY5YjkxOTI3ZDM4
ZDBlYWJmMmM4N2YyLAorICAgICAgICAwY2E4NjY3YzA1ODRmYjIxYzA3NDhlYmQ3NDY4ZDMyODg5
NzU5YTA3LAorICAgICAgICBkZjc2M2Q3OTBkN2U0NWQ3MDExNmJkZWZhY2JmZDRmOWZhYTg5OTVl
LAorICAgICAgICA2ZDMwYzRhNjIxYzY1MzE0ZGI2M2ViNTZlODdjMTlhYjc1NjI3YjI2LAorICAg
ICAgICA1MGZlOTI5NTNmNDczOWYxN2E2MjMwM2ZlZGJmOGRiOTIzNDMxN2M4LAorICAgICAgICA0
N2JlMjJjMzYwMzQyNGQxODMyZDA0NmEzNDhmZjNmOTgyNTAwMjg4LAorICAgICAgICA5OGE1OWU0
Njk0OGIyYzcxNjA4OTI2MDA0ZmFjODE5MmIwZmYyMjA4LAorICAgICAgICAwNzU0MGM2ZDg1MGVk
NmUwZmE1MDhkNjNjMjBhOGNlOTZkNzUxZGU2LAorICAgICAgICAwNmFlMzJkNjQwYzhlNGI4NmVh
ODkxNGE4MGVlNDE5ZWExNmU1NmQ4LgorCisgICAgICAgIENvdmVyZWQgYnkgQVBJIHRlc3RzLgor
CisgICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JCaW5hcnkuaDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JSZWFkZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OkNCT1JSZWFkZXIpOgorICAgICAgICAoY2Jvcjo6Q0JP
UlJlYWRlcjo6fkNCT1JSZWFkZXIpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6cmVhZCk6
CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpkZWNvZGVDQk9SKToKKyAgICAgICAgKGNib3I6
OkNCT1JSZWFkZXI6OnJlYWRWYXJpYWRpY0xlbmd0aEludGVnZXIpOgorICAgICAgICAoY2Jvcjo6
Q0JPUlJlYWRlcjo6ZGVjb2RlVmFsdWVUb05lZ2F0aXZlKToKKyAgICAgICAgKGNib3I6OkNCT1JS
ZWFkZXI6OmRlY29kZVZhbHVlVG9VbnNpZ25lZCk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVy
OjpyZWFkU2ltcGxlVmFsdWUpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6cmVhZFN0cmlu
Zyk6CisgICAgICAgIFdvcmthcm91bmRzIGFwcGxpZWQuCisgICAgICAgIChjYm9yOjpDQk9SUmVh
ZGVyOjpyZWFkQnl0ZXMpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6cmVhZENCT1JBcnJh
eSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpyZWFkQ0JPUk1hcCk6CisgICAgICAgIChj
Ym9yOjpDQk9SUmVhZGVyOjpjYW5Db25zdW1lKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6
OmNoZWNrTWluaW1hbEVuY29kaW5nKToKKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6OmNoZWNr
RXh0cmFuZW91c0RhdGEpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6Y2hlY2tEdXBsaWNh
dGVLZXkpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6aGFzVmFsaWRVVEY4Rm9ybWF0KToK
KyAgICAgICAgV29ya2Fyb3VuZHMgYXBwbGllZC4KKyAgICAgICAgKGNib3I6OkNCT1JSZWFkZXI6
OmNoZWNrT3V0T2ZPcmRlcktleSk6CisgICAgICAgIChjYm9yOjpDQk9SUmVhZGVyOjpnZXRFcnJv
ckNvZGUpOgorICAgICAgICAoY2Jvcjo6Q0JPUlJlYWRlcjo6ZXJyb3JDb2RlVG9TdHJpbmcpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKGNib3I6OkNCT1JWYWx1ZTo6Q0JPUlZhbHVlKToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1
ZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6fkNCT1JWYWx1ZSk6Cisg
ICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNC
T1JWYWx1ZTo6Z2V0SW50ZWdlciBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6Omdl
dFVuc2lnbmVkIGNvbnN0KToKKyAgICAgICAgKGNib3I6OkNCT1JWYWx1ZTo6Z2V0TmVnYXRpdmUg
Y29uc3QpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjpnZXRTdHJpbmcgY29uc3QpOgorICAg
ICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjpnZXRCeXRlU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKGNi
b3I6OkNCT1JWYWx1ZTo6Z2V0QXJyYXkgY29uc3QpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVl
OjpnZXRNYXAgY29uc3QpOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjpnZXRTaW1wbGVWYWx1
ZSBjb25zdCk6CisgICAgICAgIChjYm9yOjpDQk9SVmFsdWU6OmludGVybmFsTW92ZUNvbnN0cnVj
dEZyb20pOgorICAgICAgICAoY2Jvcjo6Q0JPUlZhbHVlOjppbnRlcm5hbENsZWFudXApOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SVmFsdWUuaDogQWRkZWQuCisgICAgICAg
ICogTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JXcml0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KGNib3I6OkNCT1JXcml0ZXI6On5DQk9SV3JpdGVyKToKKyAgICAgICAgKGNib3I6OkNCT1JXcml0
ZXI6OndyaXRlKToKKyAgICAgICAgKGNib3I6OkNCT1JXcml0ZXI6OkNCT1JXcml0ZXIpOgorICAg
ICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6ZW5jb2RlQ0JPUik6CisgICAgICAgIFdvcmthcm91bmRz
IGFwcGxpZWQuCisgICAgICAgIChjYm9yOjpDQk9SV3JpdGVyOjpzdGFydEl0ZW0pOgorICAgICAg
ICAoY2Jvcjo6Q0JPUldyaXRlcjo6c2V0QWRkaXRpb25hbEluZm9ybWF0aW9uKToKKyAgICAgICAg
KGNib3I6OkNCT1JXcml0ZXI6OnNldFVpbnQpOgorICAgICAgICAoY2Jvcjo6Q0JPUldyaXRlcjo6
Z2V0TnVtVWludEJ5dGVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldy
aXRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTgtMDEtMTAgIEJhc3VrZSBTdXp1a2kg
IDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBDcm9zcy1wcm90b2Nv
bCwgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgKFhQWFNTKSB1c2luZyBIVE1MIGZvcm1zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUkJpbmFyeS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JCaW5hcnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hNzJhNDRlNTk4OWJjMDliN2ZjMmU4YjU1MTI4ZGNkYWY1NjE3ZjY1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JCaW5hcnku
aApAQCAtMCwwICsxLDU5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisv
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFj
ZSBjYm9yIHsKKworbmFtZXNwYWNlIGNvbnN0YW50cyB7CisKKy8vIE1hc2sgc2VsZWN0aW5nIHRo
ZSBsb3ctb3JkZXIgNSBiaXRzIG9mIHRoZSAiaW5pdGlhbCBieXRlIiwgd2hpY2ggaXMgd2hlcmUK
Ky8vIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGlzIGVuY29kZWQuCitzdGF0aWMgY29uc3Rl
eHByIHVpbnQ4X3Qga0FkZGl0aW9uYWxJbmZvcm1hdGlvbk1hc2sgPSAweDFGOworLy8gTWFzayBz
ZWxlY3RpbmcgdGhlIGhpZ2gtb3JkZXIgMyBiaXRzIG9mIHRoZSAiaW5pdGlhbCBieXRlIiwgd2hp
Y2ggaW5kaWNhdGVzCisvLyB0aGUgbWFqb3IgdHlwZSBvZiB0aGUgZW5jb2RlZCB2YWx1ZS4KK3N0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBrTWFqb3JUeXBlTWFzayA9IDB4RTA7CisvLyBJbmRpY2F0
ZXMgdGhlIG51bWJlciBvZiBiaXRzIHRoZSAiaW5pdGlhbCBieXRlIiBuZWVkcyB0byBiZSBzaGlm
dGVkIHRvIHRoZQorLy8gcmlnaHQgYWZ0ZXIgYXBwbHlpbmcgfGtNYWpvclR5cGVNYXNrfCB0byBw
cm9kdWNlIHRoZSBtYWpvciB0eXBlIGluIHRoZQorLy8gbG93ZXJtb3N0IGJpdHMuCitzdGF0aWMg
Y29uc3RleHByIHVpbnQ4X3Qga01ham9yVHlwZUJpdFNoaWZ0ID0gNXU7CisvLyBJbmRpY2F0ZXMg
dGhlIGludGVnZXIgaXMgaW4gdGhlIGZvbGxvd2luZyBieXRlLgorc3RhdGljIGNvbnN0ZXhwciB1
aW50OF90IGtBZGRpdGlvbmFsSW5mb3JtYXRpb24xQnl0ZSA9IDI0dTsKKy8vIEluZGljYXRlcyB0
aGUgaW50ZWdlciBpcyBpbiB0aGUgbmV4dCAyIGJ5dGVzLgorc3RhdGljIGNvbnN0ZXhwciB1aW50
OF90IGtBZGRpdGlvbmFsSW5mb3JtYXRpb24yQnl0ZXMgPSAyNXU7CisvLyBJbmRpY2F0ZXMgdGhl
IGludGVnZXIgaXMgaW4gdGhlIG5leHQgNCBieXRlcy4KK3N0YXRpYyBjb25zdGV4cHIgdWludDhf
dCBrQWRkaXRpb25hbEluZm9ybWF0aW9uNEJ5dGVzID0gMjZ1OworLy8gSW5kaWNhdGVzIHRoZSBp
bnRlZ2VyIGlzIGluIHRoZSBuZXh0IDggYnl0ZXMuCitzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qg
a0FkZGl0aW9uYWxJbmZvcm1hdGlvbjhCeXRlcyA9IDI3dTsKKworfSAvLyBuYW1lc3BhY2UgY29u
c3RhbnRzCisKK30gLy8gbmFtZXNwYWNlIGNib3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDZjMjhlNzA0
MWNmNzFmNjc2NmJmN2Q3Y2IxNjVjMzA5NTYwOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JSZWFkZXIuY3BwCkBAIC0wLDAgKzEs
Mzc3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDQk9SUmVhZGVyLmgiCisKKyNpbmNsdWRlICJD
Qk9SQmluYXJ5LmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25h
bWVzcGFjZSBjYm9yIHsKKworbmFtZXNwYWNlIHsKKworQ0JPUlZhbHVlOjpUeXBlIGdldE1ham9y
VHlwZSh1aW50OF90IGluaXRpYWxEYXRhQnl0ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q0JPUlZhbHVlOjpUeXBlPigoaW5pdGlhbERhdGFCeXRlICYgY29uc3RhbnRzOjprTWFqb3JUeXBl
TWFzaykgPj4gY29uc3RhbnRzOjprTWFqb3JUeXBlQml0U2hpZnQpOworfQorCit1aW50OF90IGdl
dEFkZGl0aW9uYWxJbmZvKHVpbnQ4X3QgaW5pdGlhbERhdGFCeXRlKQoreworICAgIHJldHVybiBp
bml0aWFsRGF0YUJ5dGUgJiBjb25zdGFudHM6OmtBZGRpdGlvbmFsSW5mb3JtYXRpb25NYXNrOwor
fQorCisvLyBFcnJvciBtZXNzYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gZWFjaCBvZiB0aGUgZXJy
b3IgY29kZXMuCitjb25zdCBjaGFyIGtOb0Vycm9yW10gPSAiU3VjY2Vzc2Z1bGx5IGRlc2VyaWFs
aXplZCB0byBhIENCT1IgdmFsdWUuIjsKK2NvbnN0IGNoYXIga1Vuc3VwcG9ydGVkTWFqb3JUeXBl
W10gPSAiVW5zdXBwb3J0ZWQgbWFqb3IgdHlwZS4iOworY29uc3QgY2hhciBrVW5rbm93bkFkZGl0
aW9uYWxJbmZvW10gPSAiVW5rbm93biBhZGRpdGlvbmFsIGluZm8gZm9ybWF0IGluIHRoZSBmaXJz
dCBieXRlLiI7Citjb25zdCBjaGFyIGtJbmNvbXBsZXRlQ0JPUkRhdGFbXSA9ICJQcmVtYXR1cmVs
eSB0ZXJtaW5hdGVkIENCT1IgZGF0YSBieXRlIGFycmF5LiI7Citjb25zdCBjaGFyIGtJbmNvcnJl
Y3RNYXBLZXlUeXBlW10gPSAiTWFwIGtleXMgb3RoZXIgdGhhbiB1dGYtOCBlbmNvZGVkIHN0cmlu
Z3MgYXJlIG5vdCBhbGxvd2VkLiI7Citjb25zdCBjaGFyIGtUb29NdWNoTmVzdGluZ1tdID0gIlRv
byBtdWNoIG5lc3RpbmcuIjsKK2NvbnN0IGNoYXIga0ludmFsaWRVVEY4W10gPSAiU3RyaW5nIGVu
Y29kaW5nIG90aGVyIHRoYW4gdXRmOCBhcmUgbm90IGFsbG93ZWQuIjsKK2NvbnN0IGNoYXIga0V4
dHJhbmVvdXNEYXRhW10gPSAiVHJhaWxpbmcgZGF0YSBieXRlcyBhcmUgbm90IGFsbG93ZWQuIjsK
K2NvbnN0IGNoYXIga0R1cGxpY2F0ZUtleVtdID0gIkR1cGxpY2F0ZSBtYXAga2V5cyBhcmUgbm90
IGFsbG93ZWQuIjsKK2NvbnN0IGNoYXIga01hcEtleU91dE9mT3JkZXJbXSA9ICJNYXAga2V5cyBt
dXN0IGJlIHNvcnRlZCBieSBieXRlIGxlbmd0aCBhbmQgdGhlbiBieSBieXRlLXdpc2UgbGV4aWNh
bCBvcmRlci4iOworY29uc3QgY2hhciBrTm9uTWluaW1hbENCT1JFbmNvZGluZ1tdID0gIlVuc2ln
bmVkIGludGVnZXJzIG11c3QgYmUgZW5jb2RlZCB3aXRoIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVz
LiI7Citjb25zdCBjaGFyIGtVbnN1cHBvcnRlZFNpbXBsZVZhbHVlW10gPSAiVW5zdXBwb3J0ZWQg
b3IgdW5hc3NpZ25lZCBzaW1wbGUgdmFsdWUuIjsKK2NvbnN0IGNoYXIga1Vuc3VwcG9ydGVkRmxv
YXRpbmdQb2ludFZhbHVlW10gPSAiRmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgbm90IHN1cHBv
cnRlZC4iOworY29uc3QgY2hhciBrT3V0T2ZSYW5nZUludGVnZXJWYWx1ZVtdID0gIkludGVnZXIg
dmFsdWVzIG11c3QgYmUgYmV0d2VlbiBJTlQ2NF9NSU4gYW5kIElOVDY0X01BWC4iOworCit9IC8v
IG5hbWVzcGFjZQorCitDQk9SUmVhZGVyOjpDQk9SUmVhZGVyKEJ5dGVzOjpjb25zdF9pdGVyYXRv
ciBpdCwgQnl0ZXM6OmNvbnN0X2l0ZXJhdG9yIGVuZCkKKyAgICA6IG1faXQoaXQpCisgICAgLCBt
X2VuZChlbmQpCisgICAgLCBtX2Vycm9yQ29kZShEZWNvZGVyRXJyb3I6OkNCT1JOb0Vycm9yKQor
eworfQorCitDQk9SUmVhZGVyOjp+Q0JPUlJlYWRlcigpCit7Cit9CisKKy8vIHN0YXRpYworc3Rk
OjpvcHRpb25hbDxDQk9SVmFsdWU+IENCT1JSZWFkZXI6OnJlYWQoY29uc3QgQnl0ZXMmIGRhdGEs
IERlY29kZXJFcnJvciogZXJyb3JDb2RlT3V0LCBpbnQgbWF4TmVzdGluZ0xldmVsKQoreworICAg
IENCT1JSZWFkZXIgcmVhZGVyKGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSk7CisgICAgc3RkOjpv
cHRpb25hbDxDQk9SVmFsdWU+IGRlY29kZWRDYm9yID0gcmVhZGVyLmRlY29kZUNCT1IobWF4TmVz
dGluZ0xldmVsKTsKKworICAgIGlmIChkZWNvZGVkQ2JvcikKKyAgICAgICAgcmVhZGVyLmNoZWNr
RXh0cmFuZW91c0RhdGEoKTsKKyAgICBpZiAoZXJyb3JDb2RlT3V0KQorICAgICAgICAqZXJyb3JD
b2RlT3V0ID0gcmVhZGVyLmdldEVycm9yQ29kZSgpOworCisgICAgaWYgKHJlYWRlci5nZXRFcnJv
ckNvZGUoKSAhPSBEZWNvZGVyRXJyb3I6OkNCT1JOb0Vycm9yKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIHJldHVybiBkZWNvZGVkQ2JvcjsKK30KKworc3RkOjpvcHRpb25hbDxD
Qk9SVmFsdWU+IENCT1JSZWFkZXI6OmRlY29kZUNCT1IoaW50IG1heE5lc3RpbmdMZXZlbCkKK3sK
KyAgICBpZiAobWF4TmVzdGluZ0xldmVsIDwgMCB8fCBtYXhOZXN0aW5nTGV2ZWwgPiBrQ0JPUk1h
eERlcHRoKSB7CisgICAgICAgIG1fZXJyb3JDb2RlID0gRGVjb2RlckVycm9yOjpUb29NdWNoTmVz
dGluZzsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoIWNh
bkNvbnN1bWUoMSkpIHsKKyAgICAgICAgbV9lcnJvckNvZGUgPSBEZWNvZGVyRXJyb3I6OkluY29t
cGxldGVDQk9SRGF0YTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBjb25zdCB1aW50OF90IGluaXRpYWxCeXRlID0gKm1faXQrKzsKKyAgICBjb25zdCBhdXRvIG1h
am9yX3R5cGUgPSBnZXRNYWpvclR5cGUoaW5pdGlhbEJ5dGUpOworICAgIGNvbnN0IHVpbnQ4X3Qg
YWRkaXRpb25hbEluZm8gPSBnZXRBZGRpdGlvbmFsSW5mbyhpbml0aWFsQnl0ZSk7CisKKyAgICB1
aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoIXJlYWRWYXJpYWRpY0xlbmd0aEludGVnZXIoYWRkaXRp
b25hbEluZm8sICZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
d2l0Y2ggKG1ham9yX3R5cGUpIHsKKyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6VW5zaWduZWQ6
CisgICAgICAgIHJldHVybiBkZWNvZGVWYWx1ZVRvVW5zaWduZWQodmFsdWUpOworICAgIGNhc2Ug
Q0JPUlZhbHVlOjpUeXBlOjpOZWdhdGl2ZToKKyAgICAgICAgcmV0dXJuIGRlY29kZVZhbHVlVG9O
ZWdhdGl2ZSh2YWx1ZSk7CisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OkJ5dGVTdHJpbmc6Cisg
ICAgICAgIHJldHVybiByZWFkQnl0ZXModmFsdWUpOworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBl
OjpTdHJpbmc6CisgICAgICAgIHJldHVybiByZWFkU3RyaW5nKHZhbHVlKTsKKyAgICBjYXNlIENC
T1JWYWx1ZTo6VHlwZTo6QXJyYXk6CisgICAgICAgIHJldHVybiByZWFkQ0JPUkFycmF5KHZhbHVl
LCBtYXhOZXN0aW5nTGV2ZWwpOworICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpNYXA6CisgICAg
ICAgIHJldHVybiByZWFkQ0JPUk1hcCh2YWx1ZSwgbWF4TmVzdGluZ0xldmVsKTsKKyAgICBjYXNl
IENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxlVmFsdWU6CisgICAgICAgIHJldHVybiByZWFkU2ltcGxl
VmFsdWUoYWRkaXRpb25hbEluZm8sIHZhbHVlKTsKKyAgICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6
Tm9uZToKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9lcnJvckNvZGUgPSBEZWNvZGVy
RXJyb3I6OlVuc3VwcG9ydGVkTWFqb3JUeXBlOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKK2Jvb2wgQ0JPUlJlYWRlcjo6cmVhZFZhcmlhZGljTGVuZ3RoSW50ZWdlcih1aW50OF90IGFk
ZGl0aW9uYWxJbmZvLCB1aW50NjRfdCogdmFsdWUpCit7CisgICAgdWludDhfdCBhZGRpdGlvbmFs
Qnl0ZXMgPSAwOworICAgIGlmIChhZGRpdGlvbmFsSW5mbyA8IDI0KSB7CisgICAgICAgICp2YWx1
ZSA9IGFkZGl0aW9uYWxJbmZvOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAoYWRkaXRpb25hbEluZm8gPT0gMjQpCisgICAgICAgIGFkZGl0aW9uYWxCeXRlcyA9IDE7Cisg
ICAgZWxzZSBpZiAoYWRkaXRpb25hbEluZm8gPT0gMjUpCisgICAgICAgIGFkZGl0aW9uYWxCeXRl
cyA9IDI7CisgICAgZWxzZSBpZiAoYWRkaXRpb25hbEluZm8gPT0gMjYpCisgICAgICAgIGFkZGl0
aW9uYWxCeXRlcyA9IDQ7CisgICAgZWxzZSBpZiAoYWRkaXRpb25hbEluZm8gPT0gMjcpCisgICAg
ICAgIGFkZGl0aW9uYWxCeXRlcyA9IDg7CisgICAgZWxzZSB7CisgICAgICAgIG1fZXJyb3JDb2Rl
ID0gRGVjb2RlckVycm9yOjpVbmtub3duQWRkaXRpb25hbEluZm87CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWNhbkNvbnN1bWUoYWRkaXRpb25hbEJ5dGVzKSkgewor
ICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6SW5jb21wbGV0ZUNCT1JEYXRhOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdWludDY0X3QgaW50RGF0YSA9IDA7
CisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgYWRkaXRpb25hbEJ5dGVzOyArK2kpIHsKKyAg
ICAgICAgaW50RGF0YSA8PD0gODsKKyAgICAgICAgaW50RGF0YSB8PSAqbV9pdCsrOworICAgIH0K
KworICAgICp2YWx1ZSA9IGludERhdGE7CisgICAgcmV0dXJuIGNoZWNrTWluaW1hbEVuY29kaW5n
KGFkZGl0aW9uYWxCeXRlcywgaW50RGF0YSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVl
PiBDQk9SUmVhZGVyOjpkZWNvZGVWYWx1ZVRvTmVnYXRpdmUodWludDY0X3QgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50NjRfdD46Om1heCgpKSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6
T3V0T2ZSYW5nZUludGVnZXJWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisgICAgcmV0dXJuIENCT1JWYWx1ZSgtc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpIC0g
MSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBDQk9SUmVhZGVyOjpkZWNvZGVWYWx1
ZVRvVW5zaWduZWQodWludDY0X3QgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID4gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkgeworICAg
ICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6T3V0T2ZSYW5nZUludGVnZXJWYWx1ZTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgcmV0dXJuIENCT1JWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworfQorCitzdGQ6Om9wdGlvbmFsPENCT1JW
YWx1ZT4gQ0JPUlJlYWRlcjo6cmVhZFNpbXBsZVZhbHVlKHVpbnQ4X3QgYWRkaXRpb25hbEluZm8s
IHVpbnQ2NF90IHZhbHVlKQoreworICAgIC8vIEZsb2F0aW5nIHBvaW50IG51bWJlcnMgYXJlIG5v
dCBzdXBwb3J0ZWQuCisgICAgaWYgKGFkZGl0aW9uYWxJbmZvID4gMjQgJiYgYWRkaXRpb25hbElu
Zm8gPCAyOCkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6VW5zdXBwb3J0
ZWRGbG9hdGluZ1BvaW50VmFsdWU7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgQVNTRVJUKHZhbHVlIDw9IDI1NXUpOworICAgIENCT1JWYWx1ZTo6U2ltcGxlVmFs
dWUgcG9zc2libHlVbnN1cHBvcnRlZFNpbXBsZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q0JPUlZhbHVl
OjpTaW1wbGVWYWx1ZT4oc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOworICAgIHN3aXRjaCAocG9z
c2libHlVbnN1cHBvcnRlZFNpbXBsZVZhbHVlKSB7CisgICAgY2FzZSBDQk9SVmFsdWU6OlNpbXBs
ZVZhbHVlOjpGYWxzZVZhbHVlOgorICAgIGNhc2UgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VHJ1
ZVZhbHVlOgorICAgIGNhc2UgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6TnVsbFZhbHVlOgorICAg
IGNhc2UgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VW5kZWZpbmVkOgorICAgICAgICByZXR1cm4g
Q0JPUlZhbHVlKHBvc3NpYmx5VW5zdXBwb3J0ZWRTaW1wbGVWYWx1ZSk7CisgICAgfQorCisgICAg
bV9lcnJvckNvZGUgPSBEZWNvZGVyRXJyb3I6OlVuc3VwcG9ydGVkU2ltcGxlVmFsdWU7CisgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IENCT1JS
ZWFkZXI6OnJlYWRTdHJpbmcodWludDY0X3QgbnVtQnl0ZXMpCit7CisgICAgaWYgKCFjYW5Db25z
dW1lKG51bUJ5dGVzKSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6SW5j
b21wbGV0ZUNCT1JEYXRhOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIEFTU0VSVChudW1CeXRlcyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
KTsKKyAgICBTdHJpbmcgY2JvclN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobV9pdCwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihudW1CeXRlcykpOworICAgIG1faXQgKz0gbnVtQnl0ZXM7CisKKyAgICAv
LyBJbnZhbGlkIFVURjggYnl0ZXMgcHJvZHVjZSBhbiBlbXB0eSBXVEZTdHJpbmcuCisgICAgLy8g
Tm90IHRvIGNvbmZ1c2UgaXQgd2l0aCBhbiBhY3R1YWwgZW1wdHkgV1RGU3RyaW5nLgorICAgIGlm
ICghbnVtQnl0ZXMgfHwgaGFzVmFsaWRVVEY4Rm9ybWF0KGNib3JTdHJpbmcpKQorICAgICAgICBy
ZXR1cm4gQ0JPUlZhbHVlKFdURk1vdmUoY2JvclN0cmluZykpOworICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBDQk9SUmVhZGVyOjpyZWFkQnl0
ZXModWludDY0X3QgbnVtQnl0ZXMpCit7CisgICAgaWYgKCFjYW5Db25zdW1lKG51bUJ5dGVzKSkg
eworICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6SW5jb21wbGV0ZUNCT1JEYXRh
OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIEJ5dGVzIGNib3JC
eXRlU3RyaW5nOworICAgIEFTU0VSVChudW1CeXRlcyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpKTsKKyAgICBjYm9yQnl0ZVN0cmluZy5hcHBlbmQobV9pdCwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihudW1CeXRlcykpOworICAgIG1faXQgKz0gbnVtQnl0ZXM7CisKKyAgICByZXR1
cm4gQ0JPUlZhbHVlKFdURk1vdmUoY2JvckJ5dGVTdHJpbmcpKTsKK30KKworc3RkOjpvcHRpb25h
bDxDQk9SVmFsdWU+IENCT1JSZWFkZXI6OnJlYWRDQk9SQXJyYXkodWludDY0X3QgbGVuZ3RoLCBp
bnQgbWF4TmVzdGluZ0xldmVsKQoreworICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1ZSBjYm9yQXJy
YXk7CisgICAgd2hpbGUgKGxlbmd0aC0tID4gMCkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENC
T1JWYWx1ZT4gY2JvckVsZW1lbnQgPSBkZWNvZGVDQk9SKG1heE5lc3RpbmdMZXZlbCAtIDEpOwor
ICAgICAgICBpZiAoIWNib3JFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgY2JvckFycmF5LmFwcGVuZChXVEZNb3ZlKGNib3JFbGVtZW50LnZhbHVlKCkp
KTsKKyAgICB9CisgICAgcmV0dXJuIENCT1JWYWx1ZShXVEZNb3ZlKGNib3JBcnJheSkpOworfQor
CitzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gQ0JPUlJlYWRlcjo6cmVhZENCT1JNYXAodWludDY0
X3QgbGVuZ3RoLCBpbnQgbWF4TmVzdGluZ0xldmVsKQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFs
dWUgY2Jvck1hcDsKKyAgICB3aGlsZSAobGVuZ3RoLS0gPiAwKSB7CisgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q0JPUlZhbHVlPiBrZXkgPSBkZWNvZGVDQk9SKG1heE5lc3RpbmdMZXZlbCAtIDEpOwor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gdmFsdWUgPSBkZWNvZGVDQk9SKG1heE5l
c3RpbmdMZXZlbCAtIDEpOworICAgICAgICBpZiAoIWtleSB8fCAhdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIC8vIE9ubHkgQ0JPUiBtYXBzIHdpdGgg
aW50ZWdlciBvciBzdHJpbmcgdHlwZSBrZXlzIGFyZSBhbGxvd2VkLgorICAgICAgICBpZiAoa2V5
LnZhbHVlKCkudHlwZSgpICE9IENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nICYmIGtleS52YWx1ZSgp
LnR5cGUoKSAhPSBDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVkKSB7CisgICAgICAgICAgICBtX2Vy
cm9yQ29kZSA9IERlY29kZXJFcnJvcjo6SW5jb3JyZWN0TWFwS2V5VHlwZTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjaGVja0R1cGxp
Y2F0ZUtleShrZXkudmFsdWUoKSwgY2Jvck1hcCkgfHwgIWNoZWNrT3V0T2ZPcmRlcktleShrZXku
dmFsdWUoKSwgY2Jvck1hcCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgICAgIGNib3JNYXAuZW1wbGFjZShzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGtleS52YWx1ZSgp
KSwgV1RGTW92ZSh2YWx1ZS52YWx1ZSgpKSkpOworICAgIH0KKyAgICByZXR1cm4gQ0JPUlZhbHVl
KFdURk1vdmUoY2Jvck1hcCkpOworfQorCitib29sIENCT1JSZWFkZXI6OmNhbkNvbnN1bWUodWlu
dDY0X3QgYnl0ZXMpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6OmRpc3Rh
bmNlKG1faXQsIG1fZW5kKSkgPj0gYnl0ZXMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1f
ZXJyb3JDb2RlID0gRGVjb2RlckVycm9yOjpJbmNvbXBsZXRlQ0JPUkRhdGE7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIENCT1JSZWFkZXI6OmNoZWNrTWluaW1hbEVuY29kaW5nKHVpbnQ4
X3QgYWRkaXRpb25hbEJ5dGVzLCB1aW50NjRfdCB1aW50RGF0YSkKK3sKKyAgICBpZiAoKGFkZGl0
aW9uYWxCeXRlcyA9PSAxICYmIHVpbnREYXRhIDwgMjQpIHx8IHVpbnREYXRhIDw9ICgxVUxMIDw8
IDggKiAoYWRkaXRpb25hbEJ5dGVzID4+IDEpKSAtIDEpIHsKKyAgICAgICAgbV9lcnJvckNvZGUg
PSBEZWNvZGVyRXJyb3I6Ok5vbk1pbmltYWxDQk9SRW5jb2Rpbmc7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0JPUlJlYWRlcjo6Y2hl
Y2tFeHRyYW5lb3VzRGF0YSgpCit7CisgICAgaWYgKG1faXQgIT0gbV9lbmQpCisgICAgICAgIG1f
ZXJyb3JDb2RlID0gRGVjb2RlckVycm9yOjpFeHRyYW5lb3VzRGF0YTsKK30KKworYm9vbCBDQk9S
UmVhZGVyOjpjaGVja0R1cGxpY2F0ZUtleShjb25zdCBDQk9SVmFsdWUmIG5ld0tleSwgY29uc3Qg
Q0JPUlZhbHVlOjpNYXBWYWx1ZSYgbWFwKQoreworICAgIGlmIChtYXAuZmluZChuZXdLZXkpICE9
IG1hcC5lbmQoKSkgeworICAgICAgICBtX2Vycm9yQ29kZSA9IERlY29kZXJFcnJvcjo6RHVwbGlj
YXRlS2V5OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIENCT1JSZWFkZXI6Omhhc1ZhbGlkVVRGOEZvcm1hdChjb25zdCBTdHJpbmcmIHN0
cmluZ0RhdGEpCit7CisgICAgLy8gSW52YWxpZCBVVEY4IGJ5dGVzIHByb2R1Y2UgYW4gZW1wdHkg
V1RGU3RyaW5nLgorICAgIGlmIChzdHJpbmdEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICBtX2Vy
cm9yQ29kZSA9IERlY29kZXJFcnJvcjo6SW52YWxpZFVURjg7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0JPUlJlYWRlcjo6Y2hlY2tP
dXRPZk9yZGVyS2V5KGNvbnN0IENCT1JWYWx1ZSYgbmV3S2V5LCBjb25zdCBDQk9SVmFsdWU6Ok1h
cFZhbHVlJiBtYXApCit7CisgICAgYXV0byBjb21wYXJhdG9yID0gbWFwLmtleV9jb21wKCk7Cisg
ICAgaWYgKCFtYXAuZW1wdHkoKSAmJiBjb21wYXJhdG9yKG5ld0tleSwgbWFwLnJiZWdpbigpLT5m
aXJzdCkpIHsKKyAgICAgICAgbV9lcnJvckNvZGUgPSBEZWNvZGVyRXJyb3I6Ok91dE9mT3JkZXJL
ZXk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0NCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBDQk9SUmVhZGVyOjpnZXRFcnJvckNvZGUoKQorewor
ICAgIHJldHVybiBtX2Vycm9yQ29kZTsKK30KKworLy8gc3RhdGljCitjb25zdCBjaGFyKiBDQk9S
UmVhZGVyOjplcnJvckNvZGVUb1N0cmluZyhEZWNvZGVyRXJyb3IgZXJyb3IpCit7CisgICAgc3dp
dGNoIChlcnJvcikgeworICAgIGNhc2UgRGVjb2RlckVycm9yOjpDQk9STm9FcnJvcjoKKyAgICAg
ICAgcmV0dXJuIGtOb0Vycm9yOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpVbnN1cHBvcnRlZE1h
am9yVHlwZToKKyAgICAgICAgcmV0dXJuIGtVbnN1cHBvcnRlZE1ham9yVHlwZTsKKyAgICBjYXNl
IERlY29kZXJFcnJvcjo6VW5rbm93bkFkZGl0aW9uYWxJbmZvOgorICAgICAgICByZXR1cm4ga1Vu
a25vd25BZGRpdGlvbmFsSW5mbzsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6SW5jb21wbGV0ZUNC
T1JEYXRhOgorICAgICAgICByZXR1cm4ga0luY29tcGxldGVDQk9SRGF0YTsKKyAgICBjYXNlIERl
Y29kZXJFcnJvcjo6SW5jb3JyZWN0TWFwS2V5VHlwZToKKyAgICAgICAgcmV0dXJuIGtJbmNvcnJl
Y3RNYXBLZXlUeXBlOworICAgIGNhc2UgRGVjb2RlckVycm9yOjpUb29NdWNoTmVzdGluZzoKKyAg
ICAgICAgcmV0dXJuIGtUb29NdWNoTmVzdGluZzsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6SW52
YWxpZFVURjg6CisgICAgICAgIHJldHVybiBrSW52YWxpZFVURjg7CisgICAgY2FzZSBEZWNvZGVy
RXJyb3I6OkV4dHJhbmVvdXNEYXRhOgorICAgICAgICByZXR1cm4ga0V4dHJhbmVvdXNEYXRhOwor
ICAgIGNhc2UgRGVjb2RlckVycm9yOjpEdXBsaWNhdGVLZXk6CisgICAgICAgIHJldHVybiBrRHVw
bGljYXRlS2V5OworICAgIGNhc2UgRGVjb2RlckVycm9yOjpPdXRPZk9yZGVyS2V5OgorICAgICAg
ICByZXR1cm4ga01hcEtleU91dE9mT3JkZXI7CisgICAgY2FzZSBEZWNvZGVyRXJyb3I6Ok5vbk1p
bmltYWxDQk9SRW5jb2Rpbmc6CisgICAgICAgIHJldHVybiBrTm9uTWluaW1hbENCT1JFbmNvZGlu
ZzsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6VW5zdXBwb3J0ZWRTaW1wbGVWYWx1ZToKKyAgICAg
ICAgcmV0dXJuIGtVbnN1cHBvcnRlZFNpbXBsZVZhbHVlOworICAgIGNhc2UgRGVjb2RlckVycm9y
OjpVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnRWYWx1ZToKKyAgICAgICAgcmV0dXJuIGtVbnN1cHBv
cnRlZEZsb2F0aW5nUG9pbnRWYWx1ZTsKKyAgICBjYXNlIERlY29kZXJFcnJvcjo6T3V0T2ZSYW5n
ZUludGVnZXJWYWx1ZToKKyAgICAgICAgcmV0dXJuIGtPdXRPZlJhbmdlSW50ZWdlclZhbHVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gIlVua25vd24gZXJyb3IgY29kZS4iOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgY2Jv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JS
ZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SUmVhZGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTI4NjlmOWVjNTc3ZDkxODNhM2JhOGYwMzMzNjE0ZDJiMDkxMjU5Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9D
Qk9SUmVhZGVyLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDQk9SVmFsdWUu
aCIKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLy8gQ29uY2lzZSBCaW5hcnkgT2JqZWN0IFJlcHJl
c2VudGF0aW9uIChDQk9SKSBkZWNvZGVyIGFzIGRlZmluZWQgYnkKKy8vIGh0dHBzOi8vdG9vbHMu
aWV0Zi5vcmcvaHRtbC9yZmM3MDQ5LiBUaGlzIGRlY29kZXIgb25seSBhY2NlcHRzIGNhbm9uaWNh
bAorLy8gQ0JPUiBhcyBkZWZpbmVkIGJ5IHNlY3Rpb24gMy45LgorLy8gU3VwcG9ydGVkOgorLy8g
ICogTWFqb3IgdHlwZXM6CisvLyAgICAgKiAwOiBVbnNpZ25lZCBpbnRlZ2VycywgdXAgdG8gNjQt
Yml0LgorLy8gICAgICogMjogQnl0ZSBzdHJpbmdzLgorLy8gICAgICogMzogVVRGLTggc3RyaW5n
cy4KKy8vICAgICAqIDQ6IERlZmluaXRlLWxlbmd0aCBhcnJheXMuCisvLyAgICAgKiA1OiBEZWZp
bml0ZS1sZW5ndGggbWFwcy4KKy8vICAgICAqIDc6IFNpbXBsZSB2YWx1ZXMuCisvLworLy8gUmVx
dWlyZW1lbnRzIGZvciBjYW5vbmljYWwgQ0JPUiByZXByZXNlbnRhdGlvbjoKKy8vICAtIER1cGxp
Y2F0ZSBrZXlzIGZvciBtYXAgYXJlIG5vdCBhbGxvd2VkLgorLy8gIC0gS2V5cyBmb3IgbWFwIG11
c3QgYmUgc29ydGVkIGZpcnN0IGJ5IGxlbmd0aCBhbmQgdGhlbiBieSBieXRlLXdpc2UKKy8vICAg
IGxleGljYWwgb3JkZXIuCisvLworLy8gS25vd24gbGltaXRhdGlvbnMgYW5kIGludGVycHJldGF0
aW9ucyBvZiB0aGUgUkZDOgorLy8gIC0gRG9lcyBub3Qgc3VwcG9ydCBuZWdhdGl2ZSBpbnRlZ2Vy
cywgaW5kZWZpbml0ZSBkYXRhIHN0cmVhbXMgYW5kIHRhZ2dpbmcuCisvLyAgLSBGbG9hdGluZyBw
b2ludCByZXByZXNlbnRhdGlvbnMgYW5kIEJSRUFLIHN0b3AgY29kZSBpbiBtYWpvcgorLy8gICAg
dHlwZSA3IGFyZSBub3Qgc3VwcG9ydGVkLgorLy8gIC0gTm9uLWNoYXJhY3RlciBjb2RlcG9pbnQg
YXJlIG5vdCBzdXBwb3J0ZWQgZm9yIE1ham9yIHR5cGUgMy4KKy8vICAtIEluY29tcGxldGUgQ0JP
UiBkYXRhIGl0ZW1zIGFyZSB0cmVhdGVkIGFzIHN5bnRheCBlcnJvcnMuCisvLyAgLSBUcmFpbGlu
ZyBkYXRhIGJ5dGVzIGFyZSB0cmVhdGVkIGFzIGVycm9ycy4KKy8vICAtIFVua25vd24gYWRkaXRp
b25hbCBpbmZvcm1hdGlvbiBmb3JtYXRzIGFyZSB0cmVhdGVkIGFzIHN5bnRheCBlcnJvcnMuCisv
LyAgLSBDYWxsZXJzIGNhbiBkZWNvZGUgQ0JPUiB2YWx1ZXMgd2l0aCBhdCBtb3N0IDE2IG5lc3Rl
ZCBkZXB0aCBsYXllci4gTW9yZQorLy8gICAgc3RyaWN0IHJlc3RyaWN0aW9ucyBvbiBuZXN0aW5n
IGxheWVyIHNpemUgb2YgQ0JPUiB2YWx1ZXMgY2FuIGJlIGVuZm9yY2VkCisvLyAgICBieSBzZXR0
aW5nIHxtYXhOZXN0aW5nTGV2ZWx8LgorLy8gIC0gT25seSBDQk9SIG1hcHMgd2l0aCBpbnRlZ2Vy
IG9yIHN0cmluZyB0eXBlIGtleXMgYXJlIHN1cHBvcnRlZCBkdWUgdG8gdGhlCisvLyAgICBjb3N0
IG9mIHNlcmlhbGl6YXRpb24gd2hlbiBzb3J0aW5nIG1hcCBrZXlzLgorLy8gIC0gU2ltcGxlIHZh
bHVlcyB0aGF0IGFyZSB1bmFzc2lnbmVkL3Jlc2VydmVkIGFzIHBlciBSRkMgNzA0OSBhcmUgbm90
CisvLyAgICBzdXBwb3J0ZWQgYW5kIHRyZWF0ZWQgYXMgZXJyb3JzLgorCituYW1lc3BhY2UgY2Jv
ciB7CisKK2NsYXNzIENCT1JSZWFkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENCT1JS
ZWFkZXIpOworcHVibGljOgorICAgIHVzaW5nIEJ5dGVzID0gVmVjdG9yPHVpbnQ4X3Q+OworCisg
ICAgZW51bSBjbGFzcyBEZWNvZGVyRXJyb3IgeworICAgICAgICBDQk9STm9FcnJvciA9IDAsCisg
ICAgICAgIFVuc3VwcG9ydGVkTWFqb3JUeXBlLAorICAgICAgICBVbmtub3duQWRkaXRpb25hbElu
Zm8sCisgICAgICAgIEluY29tcGxldGVDQk9SRGF0YSwKKyAgICAgICAgSW5jb3JyZWN0TWFwS2V5
VHlwZSwKKyAgICAgICAgVG9vTXVjaE5lc3RpbmcsCisgICAgICAgIEludmFsaWRVVEY4LAorICAg
ICAgICBFeHRyYW5lb3VzRGF0YSwKKyAgICAgICAgRHVwbGljYXRlS2V5LAorICAgICAgICBPdXRP
Zk9yZGVyS2V5LAorICAgICAgICBOb25NaW5pbWFsQ0JPUkVuY29kaW5nLAorICAgICAgICBVbnN1
cHBvcnRlZFNpbXBsZVZhbHVlLAorICAgICAgICBVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnRWYWx1
ZSwKKyAgICAgICAgT3V0T2ZSYW5nZUludGVnZXJWYWx1ZSwKKyAgICB9OworCisgICAgLy8gQ0JP
UiBuZXN0ZWQgZGVwdGggc3VmZmljaWVudCBmb3IgbW9zdCB1c2UgY2FzZXMuCisgICAgc3RhdGlj
IGNvbnN0IGludCBrQ0JPUk1heERlcHRoID0gMTY7CisKKyAgICB+Q0JPUlJlYWRlcigpOworCisg
ICAgLy8gUmVhZHMgYW5kIHBhcnNlcyB8aW5wdXRfZGF0YXwgaW50byBhIENCT1JWYWx1ZS4gSWYg
YW55IG9uZSBvZiB0aGUgc3ludGF4CisgICAgLy8gZm9ybWF0cyBpcyB2aW9sYXRlZCAtaW5jbHVk
aW5nIHVua25vd24gYWRkaXRpb25hbCBpbmZvIGFuZCBpbmNvbXBsZXRlCisgICAgLy8gQ0JPUiBk
YXRhLSB0aGVuIGFuIGVtcHR5IG9wdGlvbmFsIGlzIHJldHVybmVkLiBPcHRpb25hbCB8ZXJyb3JD
b2RlT3V0fAorICAgIC8vIGNhbiBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyIHRvIG9idGFpbiBh
ZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0CisgICAgLy8gZGVjb2RpbmcgZmFpbHVyZXMuCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiByZWFkKGNv
bnN0IEJ5dGVzJiwgRGVjb2RlckVycm9yKiBlcnJvckNvZGVPdXQgPSBudWxscHRyLCBpbnQgbWF4
TmVzdGluZ0xldmVsID0ga0NCT1JNYXhEZXB0aCk7CisKKyAgICAvLyBUcmFuc2xhdGVzIGVycm9y
cyB0byBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlcy4KKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogZXJyb3JDb2RlVG9TdHJpbmcoRGVjb2RlckVycm9yIGVycm9yQ29kZSk7CisKK3ByaXZhdGU6
CisgICAgQ0JPUlJlYWRlcihCeXRlczo6Y29uc3RfaXRlcmF0b3IsIGNvbnN0IEJ5dGVzOjpjb25z
dF9pdGVyYXRvcik7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGRlY29kZUNCT1IoaW50
IG1heE5lc3RpbmdMZXZlbCk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGRlY29kZVZh
bHVlVG9OZWdhdGl2ZSh1aW50NjRfdCB2YWx1ZSk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFs
dWU+IGRlY29kZVZhbHVlVG9VbnNpZ25lZCh1aW50NjRfdCB2YWx1ZSk7CisgICAgc3RkOjpvcHRp
b25hbDxDQk9SVmFsdWU+IHJlYWRTaW1wbGVWYWx1ZSh1aW50OF90IGFkZGl0aW9uYWxJbmZvLCB1
aW50NjRfdCB2YWx1ZSk7CisgICAgYm9vbCByZWFkVmFyaWFkaWNMZW5ndGhJbnRlZ2VyKHVpbnQ4
X3QgYWRkaXRpb25hbEluZm8sIHVpbnQ2NF90KiB2YWx1ZSk7CisgICAgc3RkOjpvcHRpb25hbDxD
Qk9SVmFsdWU+IHJlYWRCeXRlcyh1aW50NjRfdCBudW1CeXRlcyk7CisgICAgc3RkOjpvcHRpb25h
bDxDQk9SVmFsdWU+IHJlYWRTdHJpbmcodWludDY0X3QgbnVtQnl0ZXMpOworICAgIHN0ZDo6b3B0
aW9uYWw8Q0JPUlZhbHVlPiByZWFkQ0JPUkFycmF5KHVpbnQ2NF90IGxlbmd0aCwgaW50IG1heE5l
c3RpbmdMZXZlbCk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IHJlYWRDQk9STWFwKHVp
bnQ2NF90IGxlbmd0aCwgaW50IG1heE5lc3RpbmdMZXZlbCk7CisgICAgYm9vbCBjYW5Db25zdW1l
KHVpbnQ2NF90IGJ5dGVzKTsKKyAgICB2b2lkIGNoZWNrRXh0cmFuZW91c0RhdGEoKTsKKyAgICBi
b29sIGNoZWNrRHVwbGljYXRlS2V5KGNvbnN0IENCT1JWYWx1ZSYgbmV3S2V5LCBjb25zdCBDQk9S
VmFsdWU6Ok1hcFZhbHVlJik7CisgICAgYm9vbCBoYXNWYWxpZFVURjhGb3JtYXQoY29uc3QgU3Ry
aW5nJik7CisgICAgYm9vbCBjaGVja091dE9mT3JkZXJLZXkoY29uc3QgQ0JPUlZhbHVlJiBuZXdL
ZXksIGNvbnN0IENCT1JWYWx1ZTo6TWFwVmFsdWUmKTsKKyAgICBib29sIGNoZWNrTWluaW1hbEVu
Y29kaW5nKHVpbnQ4X3QgYWRkaXRpb25hbEJ5dGVzLCB1aW50NjRfdCB1aW50RGF0YSk7CisKKyAg
ICBEZWNvZGVyRXJyb3IgZ2V0RXJyb3JDb2RlKCk7CisKKyAgICBCeXRlczo6Y29uc3RfaXRlcmF0
b3IgbV9pdDsKKyAgICBjb25zdCBCeXRlczo6Y29uc3RfaXRlcmF0b3IgbV9lbmQ7CisgICAgRGVj
b2RlckVycm9yIG1fZXJyb3JDb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgY2JvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MjczMjlhYzM5MzhjZWJjMzljYmY5NjU0NmRmMzk1NjQ4MTEwNjAwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdXRobi9jYm9yL0NCT1JWYWx1
ZS5jcHAKQEAgLTAsMCArMSwyOTUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNCT1JWYWx1ZS5o
IgorCisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBjYm9y
IHsKKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoKQorICAgIDogbV90eXBlKFR5cGU6Ok5vbmUpCit7
Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKENCT1JWYWx1ZSYmIHRoYXQpCit7CisgICAgaW50
ZXJuYWxNb3ZlQ29uc3RydWN0RnJvbShXVEZNb3ZlKHRoYXQpKTsKK30KKworQ0JPUlZhbHVlOjpD
Qk9SVmFsdWUoVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7CisgICAgLy8gSW5pdGlh
bGl6ZSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlLgorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAg
Y2FzZSBUeXBlOjpVbnNpZ25lZDoKKyAgICBjYXNlIFR5cGU6Ok5lZ2F0aXZlOgorICAgICAgICBt
X2ludGVnZXJWYWx1ZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6OkJ5dGVT
dHJpbmc6CisgICAgICAgIG5ldyAoJm1fYnl0ZVN0cmluZ1ZhbHVlKSBCaW5hcnlWYWx1ZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpTdHJpbmc6CisgICAgICAgIG5ldyAoJm1f
c3RyaW5nVmFsdWUpIFN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpB
cnJheToKKyAgICAgICAgbmV3ICgmbV9hcnJheVZhbHVlKSBBcnJheVZhbHVlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGU6Ok1hcDoKKyAgICAgICAgbmV3ICgmbV9tYXBWYWx1ZSkg
TWFwVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6U2ltcGxlVmFsdWU6
CisgICAgICAgIG1fc2ltcGxlVmFsdWUgPSBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVbmRlZmlu
ZWQ7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGU6Ok5vbmU6CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0NCT1JWYWx1ZTo6Q0JP
UlZhbHVlKGludCBpbnRlZ2VyVmFsdWUpCisgICAgOiBDQk9SVmFsdWUoc3RhdGljX2Nhc3Q8aW50
NjRfdD4oaW50ZWdlclZhbHVlKSkKK3sKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoaW50NjRf
dCBpbnRlZ2VyVmFsdWUpCisgICAgOiBtX2ludGVnZXJWYWx1ZShpbnRlZ2VyVmFsdWUpCit7Cisg
ICAgbV90eXBlID0gaW50ZWdlclZhbHVlID49IDAgPyBUeXBlOjpVbnNpZ25lZCA6IFR5cGU6Ok5l
Z2F0aXZlOworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShjb25zdCBCaW5hcnlWYWx1ZSYgaW5C
eXRlcykKKyAgICA6IG1fdHlwZShUeXBlOjpCeXRlU3RyaW5nKQorICAgICwgbV9ieXRlU3RyaW5n
VmFsdWUoaW5CeXRlcykKK3sKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoQmluYXJ5VmFsdWUm
JiBpbkJ5dGVzKQorICAgIDogbV90eXBlKFR5cGU6OkJ5dGVTdHJpbmcpCisgICAgLCBtX2J5dGVT
dHJpbmdWYWx1ZShXVEZNb3ZlKGluQnl0ZXMpKQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1
ZShjb25zdCBjaGFyKiBpblN0cmluZykKKyAgICA6IENCT1JWYWx1ZShTdHJpbmcoaW5TdHJpbmcp
KQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShTdHJpbmcmJiBpblN0cmluZykKKyAgICA6
IG1fdHlwZShUeXBlOjpTdHJpbmcpCisgICAgLCBtX3N0cmluZ1ZhbHVlKFdURk1vdmUoaW5TdHJp
bmcpKQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShjb25zdCBTdHJpbmcmIGluU3RyaW5n
KQorICAgIDogbV90eXBlKFR5cGU6OlN0cmluZykKKyAgICAsIG1fc3RyaW5nVmFsdWUoaW5TdHJp
bmcpCit7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IEFycmF5VmFsdWUmIGluQXJy
YXkpCisgICAgOiBtX3R5cGUoVHlwZTo6QXJyYXkpCisgICAgLCBtX2FycmF5VmFsdWUoKQorewor
ICAgIG1fYXJyYXlWYWx1ZS5yZXNlcnZlQ2FwYWNpdHkoaW5BcnJheS5zaXplKCkpOworICAgIGZv
ciAoY29uc3QgYXV0byYgdmFsIDogaW5BcnJheSkKKyAgICAgICAgbV9hcnJheVZhbHVlLmFwcGVu
ZCh2YWwuY2xvbmUoKSk7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKEFycmF5VmFsdWUmJiBp
bkFycmF5KQorICAgIDogbV90eXBlKFR5cGU6OkFycmF5KQorICAgICwgbV9hcnJheVZhbHVlKFdU
Rk1vdmUoaW5BcnJheSkpCit7Cit9CisKK0NCT1JWYWx1ZTo6Q0JPUlZhbHVlKGNvbnN0IE1hcFZh
bHVlJiBpbk1hcCkKKyAgICA6IG1fdHlwZShUeXBlOjpNYXApCisgICAgLCBtX21hcFZhbHVlKCkK
K3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogaW5NYXApCisgICAgICAgIG1fbWFwVmFsdWUu
ZW1wbGFjZV9oaW50KG1fbWFwVmFsdWUuZW5kKCksIGl0LmZpcnN0LmNsb25lKCksIGl0LnNlY29u
ZC5jbG9uZSgpKTsKK30KKworQ0JPUlZhbHVlOjpDQk9SVmFsdWUoTWFwVmFsdWUmJiBpbk1hcCkK
KyAgICA6IG1fdHlwZShUeXBlOjpNYXApCisgICAgLCBtX21hcFZhbHVlKFdURk1vdmUoaW5NYXAp
KQoreworfQorCitDQk9SVmFsdWU6OkNCT1JWYWx1ZShTaW1wbGVWYWx1ZSBpblNpbXBsZSkKKyAg
ICA6IG1fdHlwZShUeXBlOjpTaW1wbGVWYWx1ZSkKKyAgICAsIG1fc2ltcGxlVmFsdWUoaW5TaW1w
bGUpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oaW5TaW1wbGUpID49IDIwICYmIHN0
YXRpY19jYXN0PGludD4oaW5TaW1wbGUpIDw9IDIzKTsKK30KKworQ0JPUlZhbHVlJiBDQk9SVmFs
dWU6Om9wZXJhdG9yPShDQk9SVmFsdWUmJiB0aGF0KQoreworICAgIGludGVybmFsQ2xlYW51cCgp
OworICAgIGludGVybmFsTW92ZUNvbnN0cnVjdEZyb20oV1RGTW92ZSh0aGF0KSk7CisKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK0NCT1JWYWx1ZTo6fkNCT1JWYWx1ZSgpCit7CisgICAgaW50ZXJu
YWxDbGVhbnVwKCk7Cit9CisKK0NCT1JWYWx1ZSBDQk9SVmFsdWU6OmNsb25lKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgVHlwZTo6Tm9uZToKKyAgICAgICAgcmV0
dXJuIENCT1JWYWx1ZSgpOworICAgIGNhc2UgVHlwZTo6VW5zaWduZWQ6CisgICAgY2FzZSBUeXBl
OjpOZWdhdGl2ZToKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZShtX2ludGVnZXJWYWx1ZSk7Cisg
ICAgY2FzZSBUeXBlOjpCeXRlU3RyaW5nOgorICAgICAgICByZXR1cm4gQ0JPUlZhbHVlKG1fYnl0
ZVN0cmluZ1ZhbHVlKTsKKyAgICBjYXNlIFR5cGU6OlN0cmluZzoKKyAgICAgICAgcmV0dXJuIENC
T1JWYWx1ZShtX3N0cmluZ1ZhbHVlKTsKKyAgICBjYXNlIFR5cGU6OkFycmF5OgorICAgICAgICBy
ZXR1cm4gQ0JPUlZhbHVlKG1fYXJyYXlWYWx1ZSk7CisgICAgY2FzZSBUeXBlOjpNYXA6CisgICAg
ICAgIHJldHVybiBDQk9SVmFsdWUobV9tYXBWYWx1ZSk7CisgICAgY2FzZSBUeXBlOjpTaW1wbGVW
YWx1ZToKKyAgICAgICAgcmV0dXJuIENCT1JWYWx1ZShtX3NpbXBsZVZhbHVlKTsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ0JPUlZhbHVlKCk7Cit9CisK
K2NvbnN0IGludDY0X3QmIENCT1JWYWx1ZTo6Z2V0SW50ZWdlcigpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGlzSW50ZWdlcigpKTsKKyAgICByZXR1cm4gbV9pbnRlZ2VyVmFsdWU7Cit9CisKK2NvbnN0
IGludDY0X3QmIENCT1JWYWx1ZTo6Z2V0VW5zaWduZWQoKSBjb25zdAoreworICAgIEFTU0VSVChp
c1Vuc2lnbmVkKCkpOworICAgIEFTU0VSVChtX2ludGVnZXJWYWx1ZSA+PSAwKTsKKyAgICByZXR1
cm4gbV9pbnRlZ2VyVmFsdWU7Cit9CisKK2NvbnN0IGludDY0X3QmIENCT1JWYWx1ZTo6Z2V0TmVn
YXRpdmUoKSBjb25zdAoreworICAgIEFTU0VSVChpc05lZ2F0aXZlKCkpOworICAgIEFTU0VSVCht
X2ludGVnZXJWYWx1ZSA8IDApOworICAgIHJldHVybiBtX2ludGVnZXJWYWx1ZTsKK30KKworY29u
c3QgU3RyaW5nJiBDQk9SVmFsdWU6OmdldFN0cmluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
U3RyaW5nKCkpOworICAgIHJldHVybiBtX3N0cmluZ1ZhbHVlOworfQorCitjb25zdCBDQk9SVmFs
dWU6OkJpbmFyeVZhbHVlJiBDQk9SVmFsdWU6OmdldEJ5dGVTdHJpbmcoKSBjb25zdAoreworICAg
IEFTU0VSVChpc0J5dGVTdHJpbmcoKSk7CisgICAgcmV0dXJuIG1fYnl0ZVN0cmluZ1ZhbHVlOwor
fQorCitjb25zdCBDQk9SVmFsdWU6OkFycmF5VmFsdWUmIENCT1JWYWx1ZTo6Z2V0QXJyYXkoKSBj
b25zdAoreworICAgIEFTU0VSVChpc0FycmF5KCkpOworICAgIHJldHVybiBtX2FycmF5VmFsdWU7
Cit9CisKK2NvbnN0IENCT1JWYWx1ZTo6TWFwVmFsdWUmIENCT1JWYWx1ZTo6Z2V0TWFwKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNNYXAoKSk7CisgICAgcmV0dXJuIG1fbWFwVmFsdWU7Cit9CisK
K0NCT1JWYWx1ZTo6U2ltcGxlVmFsdWUgQ0JPUlZhbHVlOjpnZXRTaW1wbGVWYWx1ZSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGlzU2ltcGxlKCkpOworICAgIHJldHVybiBtX3NpbXBsZVZhbHVlOwor
fQorCit2b2lkIENCT1JWYWx1ZTo6aW50ZXJuYWxNb3ZlQ29uc3RydWN0RnJvbShDQk9SVmFsdWUm
JiB0aGF0KQoreworICAgIG1fdHlwZSA9IHRoYXQubV90eXBlOworCisgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIFR5cGU6OlVuc2lnbmVkOgorICAgIGNhc2UgVHlwZTo6TmVnYXRpdmU6
CisgICAgICAgIG1faW50ZWdlclZhbHVlID0gdGhhdC5tX2ludGVnZXJWYWx1ZTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZTo6Qnl0ZVN0cmluZzoKKyAgICAgICAgbmV3ICgmbV9ieXRl
U3RyaW5nVmFsdWUpIEJpbmFyeVZhbHVlKFdURk1vdmUodGhhdC5tX2J5dGVTdHJpbmdWYWx1ZSkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpTdHJpbmc6CisgICAgICAgIG5ldyAo
Jm1fc3RyaW5nVmFsdWUpIFN0cmluZyhXVEZNb3ZlKHRoYXQubV9zdHJpbmdWYWx1ZSkpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlOjpBcnJheToKKyAgICAgICAgbmV3ICgmbV9hcnJh
eVZhbHVlKSBBcnJheVZhbHVlKFdURk1vdmUodGhhdC5tX2FycmF5VmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZTo6TWFwOgorICAgICAgICBuZXcgKCZtX21hcFZhbHVlKSBN
YXBWYWx1ZShXVEZNb3ZlKHRoYXQubV9tYXBWYWx1ZSkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlOjpTaW1wbGVWYWx1ZToKKyAgICAgICAgbV9zaW1wbGVWYWx1ZSA9IHRoYXQubV9z
aW1wbGVWYWx1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZTo6Tm9uZToKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBD
Qk9SVmFsdWU6OmludGVybmFsQ2xlYW51cCgpCit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICBjYXNlIFR5cGU6OkJ5dGVTdHJpbmc6CisgICAgICAgIG1fYnl0ZVN0cmluZ1ZhbHVlLn5CaW5h
cnlWYWx1ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OlN0cmluZzoKKyAgICAg
ICAgbV9zdHJpbmdWYWx1ZS5+U3RyaW5nKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlw
ZTo6QXJyYXk6CisgICAgICAgIG1fYXJyYXlWYWx1ZS5+QXJyYXlWYWx1ZSgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFR5cGU6Ok1hcDoKKyAgICAgICAgbV9tYXBWYWx1ZS5+TWFwVmFsdWUo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpOb25lOgorICAgIGNhc2UgVHlwZTo6
VW5zaWduZWQ6CisgICAgY2FzZSBUeXBlOjpOZWdhdGl2ZToKKyAgICBjYXNlIFR5cGU6OlNpbXBs
ZVZhbHVlOgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV90eXBlID0gVHlwZTo6Tm9uZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgY2JvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdXRobi9jYm9yL0NCT1JWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdXRobi9jYm9yL0NCT1JWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4ZGM0OTdjZGM2N2FjNWQ5ZGVh
MDUyMjg5YzBmZmZlODYxZmY0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlZhbHVlLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8vIENv
cHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
CisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3Ry
aWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgY2JvciB7CisKKy8vIEEgY2xhc3MgZm9yIENvbmNpc2Ug
QmluYXJ5IE9iamVjdCBSZXByZXNlbnRhdGlvbiAoQ0JPUikgdmFsdWVzLgorLy8gVGhpcyBkb2Vz
IG5vdCBzdXBwb3J0OgorLy8gICogRmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKy8vICAqIEluZGVm
aW5pdGUtbGVuZ3RoIGVuY29kaW5ncy4KK2NsYXNzIFdFQkNPUkVfRVhQT1JUIENCT1JWYWx1ZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0JPUlZhbHVlKTsKK3B1YmxpYzoKKyAgICBzdHJ1
Y3QgQ1RBUExlc3MgeworICAgICAgICAvLyBDb21wYXJpc29uIHByZWRpY2F0ZSB0byBvcmRlciBr
ZXlzIGluIGEgZGljdGlvbmFyeSBhcyByZXF1aXJlZCBieSB0aGUKKyAgICAgICAgLy8gQ2xpZW50
LXRvLUF1dGhlbnRpY2F0b3IgUHJvdG9jb2wgKENUQVApIHNwZWMgMi4wLgorICAgICAgICAvLwor
ICAgICAgICAvLyBUaGUgc29ydCBvcmRlciBkZWZpbmVkIGluIENUQVAgaXM6CisgICAgICAgIC8v
ICAgKiBJZiB0aGUgbWFqb3IgdHlwZXMgYXJlIGRpZmZlcmVudCwgdGhlIG9uZSB3aXRoIHRoZSBs
b3dlciB2YWx1ZSBpbgorICAgICAgICAvLyAgICAgbnVtZXJpY2FsIG9yZGVyIHNvcnRzIGVhcmxp
ZXIuCisgICAgICAgIC8vICAgKiBJZiB0d28ga2V5cyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzLCB0
aGUgc2hvcnRlciBvbmUgc29ydHMgZWFybGllci4KKyAgICAgICAgLy8gICAqIElmIHR3byBrZXlz
IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLCB0aGUgb25lIHdpdGggdGhlIGxvd2VyIHZhbHVlIGluCisg
ICAgICAgIC8vICAgICAoYnl0ZS13aXNlKSBsZXhpY2FsIG9yZGVyIHNvcnRzIGVhcmxpZXIuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIFNlZSBzZWN0aW9uIDYgb2YgaHR0cHM6Ly9maWRvYWxsaWFu
Y2Uub3JnL3NwZWNzL2ZpZG8tdjIuMC1yZC0yMDE3MDkyNy8KKyAgICAgICAgLy8gZmlkby1jbGll
bnQtdG8tYXV0aGVudGljYXRvci1wcm90b2NvbC12Mi4wLXJkLTIwMTcwOTI3Lmh0bWwuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFRIRSBDVEFQIFNPUlQgT1JERVIgSU1QTEVNRU5URUQgSEVSRSBE
SUZGRVJTIEZST00gVEhFIENBTk9OSUNBTCBDQk9SCisgICAgICAgIC8vIE9SREVSIGRlZmluZWQg
aW4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcwNDkjc2VjdGlvbi0zLjksIGluIHRo
YXQKKyAgICAgICAgLy8gdGhlIGxhdHRlciBzb3J0cyBwdXJlbHkgYnkgc2VyaWFsaXNlZCBrZXkg
YW5kIGRvZXNuJ3Qgc3BlY2lmeSB0aGF0IG1ham9yCisgICAgICAgIC8vIHR5cGVzIGFyZSBjb21w
YXJlZCBmaXJzdC4gVGh1cyB0aGUgc2hvcnRlc3Qga2V5IHNvcnRzIGZpcnN0IGJ5IHRoZSBSRkMK
KyAgICAgICAgLy8gcnVsZXMgKGlycmVzcGVjdGl2ZSBvZiB0aGUgbWFqb3IgdHlwZSksIGJ1dCBt
YXkgbm90IGJ5IENUQVAgcnVsZXMuCisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDQk9S
VmFsdWUmIGEsIGNvbnN0IENCT1JWYWx1ZSYgYikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKChhLmlzSW50ZWdlcigpIHx8IGEuaXNTdHJpbmcoKSkgJiYgKGIuaXNJbnRlZ2Vy
KCkgfHwgYi5pc1N0cmluZygpKSk7CisgICAgICAgICAgICBpZiAoYS50eXBlKCkgIT0gYi50eXBl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGEudHlwZSgpIDwgYi50eXBlKCk7CisgICAgICAg
ICAgICBzd2l0Y2ggKGEudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIFR5cGU6OlVuc2lnbmVk
OgorICAgICAgICAgICAgICAgIHJldHVybiBhLmdldEludGVnZXIoKSA8IGIuZ2V0SW50ZWdlcigp
OworICAgICAgICAgICAgY2FzZSBUeXBlOjpOZWdhdGl2ZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gYS5nZXRJbnRlZ2VyKCkgPiBiLmdldEludGVnZXIoKTsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZTo6U3RyaW5nOiB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgYVN0ciA9IGEuZ2V0U3Ry
aW5nKCk7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFMZW5ndGggPSBhU3RyLmxlbmd0
aCgpOworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGJTdHIgPSBiLmdldFN0cmluZygpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBiTGVuZ3RoID0gYlN0ci5sZW5ndGgoKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhTGVuZ3RoIDwgYkxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
Ojpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYVN0ciwgYlN0cik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB1c2luZyBCaW5hcnlWYWx1ZSA9IFZl
Y3Rvcjx1aW50OF90PjsKKyAgICB1c2luZyBBcnJheVZhbHVlID0gVmVjdG9yPENCT1JWYWx1ZT47
CisgICAgdXNpbmcgTWFwVmFsdWUgPSBzdGQ6Om1hcDxDQk9SVmFsdWUsIENCT1JWYWx1ZSwgQ1RB
UExlc3M+OworCisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgVW5zaWduZWQgPSAwLAor
ICAgICAgICBOZWdhdGl2ZSA9IDEsCisgICAgICAgIEJ5dGVTdHJpbmcgPSAyLAorICAgICAgICBT
dHJpbmcgPSAzLAorICAgICAgICBBcnJheSA9IDQsCisgICAgICAgIE1hcCA9IDUsCisgICAgICAg
IFNpbXBsZVZhbHVlID0gNywKKyAgICAgICAgTm9uZSA9IC0xLAorICAgIH07CisKKyAgICBlbnVt
IGNsYXNzIFNpbXBsZVZhbHVlIHsKKyAgICAgICAgRmFsc2VWYWx1ZSA9IDIwLAorICAgICAgICBU
cnVlVmFsdWUgPSAyMSwKKyAgICAgICAgTnVsbFZhbHVlID0gMjIsCisgICAgICAgIFVuZGVmaW5l
ZCA9IDIzLAorICAgIH07CisKKyAgICBDQk9SVmFsdWUoQ0JPUlZhbHVlJiYgdGhhdCk7CisgICAg
Q0JPUlZhbHVlKCk7IC8vIEEgTk9ORSB2YWx1ZS4KKworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShU
eXBlKTsKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUoaW50KTsKKyAgICBleHBsaWNpdCBDQk9SVmFs
dWUoaW50NjRfdCk7CisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKHVpbnQ2NF90KSA9IGRlbGV0ZTsK
KworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShjb25zdCBCaW5hcnlWYWx1ZSYpOworICAgIGV4cGxp
Y2l0IENCT1JWYWx1ZShCaW5hcnlWYWx1ZSYmKTsKKworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShj
b25zdCBjaGFyKik7CisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKFN0cmluZyYmKTsKKyAgICBleHBs
aWNpdCBDQk9SVmFsdWUoY29uc3QgU3RyaW5nJik7CisKKyAgICBleHBsaWNpdCBDQk9SVmFsdWUo
Y29uc3QgQXJyYXlWYWx1ZSYpOworICAgIGV4cGxpY2l0IENCT1JWYWx1ZShBcnJheVZhbHVlJiYp
OworCisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKGNvbnN0IE1hcFZhbHVlJik7CisgICAgZXhwbGlj
aXQgQ0JPUlZhbHVlKE1hcFZhbHVlJiYpOworCisgICAgZXhwbGljaXQgQ0JPUlZhbHVlKFNpbXBs
ZVZhbHVlKTsKKworICAgIENCT1JWYWx1ZSYgb3BlcmF0b3I9KENCT1JWYWx1ZSYmKTsKKworICAg
IH5DQk9SVmFsdWUoKTsKKworICAgIC8vIENCT1JWYWx1ZSdzIGNvcHkgY29uc3RydWN0b3IgYW5k
IGNvcHkgYXNzaWdubWVudCBvcGVyYXRvciBhcmUgZGVsZXRlZC4KKyAgICAvLyBVc2UgdGhpcyB0
byBvYnRhaW4gYSBkZWVwIGNvcHkgZXhwbGljaXRseS4KKyAgICBDQk9SVmFsdWUgY2xvbmUoKSBj
b25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHZhbHVlIHN0b3JlZCBieSB0
aGUgY3VycmVudCBWYWx1ZSBvYmplY3QuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IHJl
cHJlc2VudHMgYSBnaXZlbiB0eXBlLgorICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3Qg
eyByZXR1cm4gdHlwZSA9PSBtX3R5cGU7IH0KKyAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBUeXBlOjpOb25lOyB9CisgICAgYm9vbCBpc1Vuc2lnbmVkKCkgY29uc3Qg
eyByZXR1cm4gdHlwZSgpID09IFR5cGU6OlVuc2lnbmVkOyB9CisgICAgYm9vbCBpc05lZ2F0aXZl
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6Ok5lZ2F0aXZlOyB9CisgICAgYm9vbCBp
c0ludGVnZXIoKSBjb25zdCB7IHJldHVybiBpc1Vuc2lnbmVkKCkgfHwgaXNOZWdhdGl2ZSgpOyB9
CisgICAgYm9vbCBpc0J5dGVTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6
Qnl0ZVN0cmluZzsgfQorICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg
PT0gVHlwZTo6U3RyaW5nOyB9CisgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IFR5cGU6OkFycmF5OyB9CisgICAgYm9vbCBpc01hcCgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBUeXBlOjpNYXA7IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4g
dHlwZSgpID09IFR5cGU6OlNpbXBsZVZhbHVlOyB9CisKKyAgICAvLyBUaGVzZSB3aWxsIGFsbCBm
YXRhbGx5IGFzc2VydCBpZiB0aGUgdHlwZSBkb2Vzbid0IG1hdGNoLgorICAgIFNpbXBsZVZhbHVl
IGdldFNpbXBsZVZhbHVlKCkgY29uc3Q7CisgICAgY29uc3QgaW50NjRfdCYgZ2V0SW50ZWdlcigp
IGNvbnN0OworICAgIGNvbnN0IGludDY0X3QmIGdldFVuc2lnbmVkKCkgY29uc3Q7CisgICAgY29u
c3QgaW50NjRfdCYgZ2V0TmVnYXRpdmUoKSBjb25zdDsKKyAgICBjb25zdCBCaW5hcnlWYWx1ZSYg
Z2V0Qnl0ZVN0cmluZygpIGNvbnN0OworICAgIC8vIFJldHVybmVkIHN0cmluZyBtYXkgY29udGFp
biBOVUwgY2hhcmFjdGVycy4KKyAgICBjb25zdCBTdHJpbmcmIGdldFN0cmluZygpIGNvbnN0Owor
ICAgIGNvbnN0IEFycmF5VmFsdWUmIGdldEFycmF5KCkgY29uc3Q7CisgICAgY29uc3QgTWFwVmFs
dWUmIGdldE1hcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworCisgICAg
dW5pb24geworICAgICAgICBTaW1wbGVWYWx1ZSBtX3NpbXBsZVZhbHVlOworICAgICAgICBpbnQ2
NF90IG1faW50ZWdlclZhbHVlOworICAgICAgICBCaW5hcnlWYWx1ZSBtX2J5dGVTdHJpbmdWYWx1
ZTsKKyAgICAgICAgU3RyaW5nIG1fc3RyaW5nVmFsdWU7CisgICAgICAgIEFycmF5VmFsdWUgbV9h
cnJheVZhbHVlOworICAgICAgICBNYXBWYWx1ZSBtX21hcFZhbHVlOworICAgIH07CisKKyAgICB2
b2lkIGludGVybmFsTW92ZUNvbnN0cnVjdEZyb20oQ0JPUlZhbHVlJiYpOworICAgIHZvaWQgaW50
ZXJuYWxDbGVhbnVwKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBjYm9yCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmMwY2FiY2RmNThmNTgxZDI2MWU1MWVmOTZmYjQ1YzBjYzAzNmViMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SV3JpdGVyLmNw
cApAQCAtMCwwICsxLDE5MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ0JPUldyaXRlci5oIgor
CisjaW5jbHVkZSAiQ0JPUkJpbmFyeS5oIgorCituYW1lc3BhY2UgY2JvciB7CisKK0NCT1JXcml0
ZXI6On5DQk9SV3JpdGVyKCkKK3sKK30KKworLy8gc3RhdGljCitzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gQ0JPUldyaXRlcjo6d3JpdGUoY29uc3QgQ0JPUlZhbHVlJiBub2RlLCBzaXpl
X3QgbWF4TmVzdGluZ0xldmVsKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBjYm9yOworICAgIENC
T1JXcml0ZXIgd3JpdGVyKCZjYm9yKTsKKyAgICBpZiAod3JpdGVyLmVuY29kZUNCT1Iobm9kZSwg
c3RhdGljX2Nhc3Q8aW50PihtYXhOZXN0aW5nTGV2ZWwpKSkKKyAgICAgICAgcmV0dXJuIGNib3I7
CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworQ0JPUldyaXRlcjo6Q0JPUldyaXRlcihW
ZWN0b3I8dWludDhfdD4qIGNib3IpCisgICAgOiBtX2VuY29kZWRDQk9SKGNib3IpCit7Cit9CisK
K2Jvb2wgQ0JPUldyaXRlcjo6ZW5jb2RlQ0JPUihjb25zdCBDQk9SVmFsdWUmIG5vZGUsIGludCBt
YXhOZXN0aW5nTGV2ZWwpCit7CisgICAgaWYgKG1heE5lc3RpbmdMZXZlbCA8IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobm9kZS50eXBlKCkpIHsKKyAgICBjYXNlIENC
T1JWYWx1ZTo6VHlwZTo6Tm9uZTogeworICAgICAgICBzdGFydEl0ZW0oQ0JPUlZhbHVlOjpUeXBl
OjpCeXRlU3RyaW5nLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFJl
cHJlc2VudHMgdW5zaWduZWQgaW50ZWdlcnMuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6OlVu
c2lnbmVkOiB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBub2RlLmdldFVuc2lnbmVkKCk7Cisg
ICAgICAgIHN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVkLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIC8vIFJl
cHJlc2VudHMgbmVnYXRpdmUgaW50ZWdlcnMuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6Ok5l
Z2F0aXZlOiB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBub2RlLmdldE5lZ2F0aXZlKCk7Cisg
ICAgICAgIHN0YXJ0SXRlbShDQk9SVmFsdWU6OlR5cGU6Ok5lZ2F0aXZlLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oLSh2YWx1ZSArIDEpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAvLyBSZXByZXNlbnRzIGEgYnl0ZSBzdHJpbmcuCisgICAgY2FzZSBDQk9SVmFsdWU6OlR5cGU6
OkJ5dGVTdHJpbmc6IHsKKyAgICAgICAgY29uc3QgQ0JPUlZhbHVlOjpCaW5hcnlWYWx1ZSYgYnl0
ZXMgPSBub2RlLmdldEJ5dGVTdHJpbmcoKTsKKyAgICAgICAgc3RhcnRJdGVtKENCT1JWYWx1ZTo6
VHlwZTo6Qnl0ZVN0cmluZywgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVzLnNpemUoKSkpOwor
ICAgICAgICAvLyBBZGQgdGhlIGJ5dGVzLgorICAgICAgICBtX2VuY29kZWRDQk9SLT5hcHBlbmRW
ZWN0b3IoYnl0ZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBDQk9S
VmFsdWU6OlR5cGU6OlN0cmluZzogeworICAgICAgICAvLyBXVEZTdHJpbmcgdXNlcyBVVEYxNiBi
dXQgUkZDNzA0OSByZXF1aXJlcyBVVEY4CisgICAgICAgIGF1dG8gdXRmOFN0cmluZyA9IG5vZGUu
Z2V0U3RyaW5nKCkudXRmOCgpOworICAgICAgICBzdGFydEl0ZW0oQ0JPUlZhbHVlOjpUeXBlOjpT
dHJpbmcsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih1dGY4U3RyaW5nLmxlbmd0aCgpKSk7CisgICAg
ICAgIC8vIEFkZCB0aGUgY2hhcmFjdGVycy4KKyAgICAgICAgbV9lbmNvZGVkQ0JPUi0+YXBwZW5k
KHV0ZjhTdHJpbmcuZGF0YSgpLCB1dGY4U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIC8vIFJlcHJlc2VudHMgYW4gYXJyYXkuCisgICAgY2FzZSBDQk9S
VmFsdWU6OlR5cGU6OkFycmF5OiB7CisgICAgICAgIGNvbnN0IENCT1JWYWx1ZTo6QXJyYXlWYWx1
ZSYgYXJyYXkgPSBub2RlLmdldEFycmF5KCk7CisgICAgICAgIHN0YXJ0SXRlbShDQk9SVmFsdWU6
OlR5cGU6OkFycmF5LCBhcnJheS5zaXplKCkpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bHVlIDogYXJyYXkpIHsKKyAgICAgICAgICAgIGlmICghZW5jb2RlQ0JPUih2YWx1ZSwgbWF4TmVz
dGluZ0xldmVsIC0gMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAvLyBSZXByZXNlbnRzIGEgbWFwLgor
ICAgIGNhc2UgQ0JPUlZhbHVlOjpUeXBlOjpNYXA6IHsKKyAgICAgICAgY29uc3QgQ0JPUlZhbHVl
OjpNYXBWYWx1ZSYgbWFwID0gbm9kZS5nZXRNYXAoKTsKKyAgICAgICAgc3RhcnRJdGVtKENCT1JW
YWx1ZTo6VHlwZTo6TWFwLCBtYXAuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHZhbHVlIDogbWFwKSB7CisgICAgICAgICAgICBpZiAoIWVuY29kZUNCT1IodmFsdWUuZmlyc3Qs
IG1heE5lc3RpbmdMZXZlbCAtIDEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICghZW5jb2RlQ0JPUih2YWx1ZS5zZWNvbmQsIG1heE5lc3RpbmdMZXZlbCAt
IDEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gUmVwcmVzZW50cyBhIHNpbXBsZSB2YWx1ZS4KKyAg
ICBjYXNlIENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxlVmFsdWU6IHsKKyAgICAgICAgY29uc3QgQ0JP
UlZhbHVlOjpTaW1wbGVWYWx1ZSBzaW1wbGVWYWx1ZSA9IG5vZGUuZ2V0U2ltcGxlVmFsdWUoKTsK
KyAgICAgICAgc3RhcnRJdGVtKENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxlVmFsdWUsIHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzaW1wbGVWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENCT1JXcml0ZXI6OnN0YXJ0
SXRlbShDQk9SVmFsdWU6OlR5cGUgdHlwZSwgdWludDY0X3Qgc2l6ZSkKK3sKKyAgICBtX2VuY29k
ZWRDQk9SLT5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHR5cGUpIDw8IGNvbnN0YW50czo6a01ham9yVHlwZUJpdFNoaWZ0KSk7CisgICAgc2V0VWludChz
aXplKTsKK30KKwordm9pZCBDQk9SV3JpdGVyOjpzZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24odWlu
dDhfdCBhZGRpdGlvbmFsSW5mb3JtYXRpb24pCit7CisgICAgQVNTRVJUKCFtX2VuY29kZWRDQk9S
LT5pc0VtcHR5KCkpOworICAgIEFTU0VSVCgoYWRkaXRpb25hbEluZm9ybWF0aW9uICYgY29uc3Rh
bnRzOjprQWRkaXRpb25hbEluZm9ybWF0aW9uTWFzaykgPT0gYWRkaXRpb25hbEluZm9ybWF0aW9u
KTsKKyAgICBtX2VuY29kZWRDQk9SLT5sYXN0KCkgfD0gKGFkZGl0aW9uYWxJbmZvcm1hdGlvbiAm
IGNvbnN0YW50czo6a0FkZGl0aW9uYWxJbmZvcm1hdGlvbk1hc2spOworfQorCit2b2lkIENCT1JX
cml0ZXI6OnNldFVpbnQodWludDY0X3QgdmFsdWUpCit7CisgICAgc2l6ZV90IGNvdW50ID0gZ2V0
TnVtVWludEJ5dGVzKHZhbHVlKTsKKyAgICBpbnQgc2hpZnQgPSAtMTsKKyAgICAvLyBWYWx1ZXMg
dW5kZXIgMjQgYXJlIGVuY29kZWQgZGlyZWN0bHkgaW4gdGhlIGluaXRpYWwgYnl0ZS4KKyAgICAv
LyBPdGhlcndpc2UsIHRoZSBsYXN0IDUgYml0cyBvZiB0aGUgaW5pdGlhbCBieXRlIGNvbnRhaW5z
IHRoZSBsZW5ndGgKKyAgICAvLyBvZiB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBpcyBlbmNvZGVk
IGluIGZvbGxvd2luZyBieXRlcy4KKyAgICBzd2l0Y2ggKGNvdW50KSB7CisgICAgY2FzZSAwOgor
ICAgICAgICBzZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oc3RhdGljX2Nhc3Q8dWludDhfdD4odmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBzZXRBZGRpdGlvbmFs
SW5mb3JtYXRpb24oY29uc3RhbnRzOjprQWRkaXRpb25hbEluZm9ybWF0aW9uMUJ5dGUpOworICAg
ICAgICBzaGlmdCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgc2V0
QWRkaXRpb25hbEluZm9ybWF0aW9uKGNvbnN0YW50czo6a0FkZGl0aW9uYWxJbmZvcm1hdGlvbjJC
eXRlcyk7CisgICAgICAgIHNoaWZ0ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0Ogor
ICAgICAgICBzZXRBZGRpdGlvbmFsSW5mb3JtYXRpb24oY29uc3RhbnRzOjprQWRkaXRpb25hbElu
Zm9ybWF0aW9uNEJ5dGVzKTsKKyAgICAgICAgc2hpZnQgPSAzOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIDg6CisgICAgICAgIHNldEFkZGl0aW9uYWxJbmZvcm1hdGlvbihjb25zdGFudHM6OmtB
ZGRpdGlvbmFsSW5mb3JtYXRpb244Qnl0ZXMpOworICAgICAgICBzaGlmdCA9IDc7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZm9yICg7IHNoaWZ0ID49IDA7IHNoaWZ0LS0pCisgICAg
ICAgIG1fZW5jb2RlZENCT1ItPmFwcGVuZCgweEZGICYgKHZhbHVlID4+IChzaGlmdCAqIDgpKSk7
Cit9CisKK3NpemVfdCBDQk9SV3JpdGVyOjpnZXROdW1VaW50Qnl0ZXModWludDY0X3QgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlIDwgMjQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICh2YWx1
ZSA8PSAweEZGKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAodmFsdWUgPD0gMHhGRkZGKQor
ICAgICAgICByZXR1cm4gMjsKKyAgICBpZiAodmFsdWUgPD0gMHhGRkZGRkZGRikKKyAgICAgICAg
cmV0dXJuIDQ7CisgICAgcmV0dXJuIDg7Cit9CisKK30gLy8gbmFtZXNwYWNlIGNib3IKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXV0aG4vY2Jvci9DQk9SV3JpdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk1MzkxYjUxY2U5YTllOTIxOTg1YjkzYjMwYTQyYzA4ZWNkYTkwNTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRl
ci5oCkBAIC0wLDAgKzEsMTE0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ0JPUlZhbHVlLmgiCisjaW5j
bHVkZSA8c3RkZGVmLmg+CisKKy8vIEEgYmFzaWMgQ29uY2lzZSBCaW5hcnkgT2JqZWN0IFJlcHJl
c2VudGF0aW9uIChDQk9SKSBlbmNvZGVyIGFzIGRlZmluZWQgYnkKKy8vIGh0dHBzOi8vdG9vbHMu
aWV0Zi5vcmcvaHRtbC9yZmM3MDQ5LiBUaGlzIGlzIGEgZ2VuZXJpYyBlbmNvZGVyIHRoYXQgc3Vw
cGxpZXMKKy8vIGNhbm9uaWNhbCwgd2VsbC1mb3JtZWQgQ0JPUiB2YWx1ZXMgYnV0IGRvZXMgbm90
IGd1YXJhbnRlZSB0aGVpciB2YWxpZGl0eQorLy8gKHNlZSBodHRwczovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNzA0OSNzZWN0aW9uLTMuMikuCisvLyBTdXBwb3J0ZWQ6CisvLyAgKiBNYWpvciB0
eXBlczoKKy8vICAgICAqIDA6IFVuc2lnbmVkIGludGVnZXJzLCB1cCB0byBJTlQ2NF9NQVguCisv
LyAgICAgKiAxOiBOZWdhdGl2ZSBpbnRlZ2VycywgdG8gSU5UNjRfTUlOLgorLy8gICAgICogMjog
Qnl0ZSBzdHJpbmdzLgorLy8gICAgICogMzogVVRGLTggc3RyaW5ncy4KKy8vICAgICAqIDQ6IEFy
cmF5cywgd2l0aCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGtub3duIGF0IHRoZSBzdGFydC4KKy8v
ICAgICAqIDU6IE1hcHMsIHdpdGggdGhlIG51bWJlciBvZiBlbGVtZW50cyBrbm93biBhdCB0aGUg
c3RhcnQKKy8vICAgICAgICAgICAgICBvZiB0aGUgY29udGFpbmVyLgorLy8gICAgICogNzogU2lt
cGxlIHZhbHVlcy4KKy8vCisvLyBVbnN1cHBvcnRlZDoKKy8vICAqIEZsb2F0aW5nLXBvaW50IG51
bWJlcnMuCisvLyAgKiBJbmRlZmluaXRlLWxlbmd0aCBlbmNvZGluZ3MuCisvLyAgKiBQYXJzaW5n
LgorLy8KKy8vIFJlcXVpcmVtZW50cyBmb3IgY2Fub25pY2FsIENCT1IgYXMgc3VnZ2VzdGVkIGJ5
IFJGQyA3MDQ5IGFyZToKKy8vICAxKSBBbGwgbWFqb3IgZGF0YSB0eXBlcyBmb3IgdGhlIENCT1Ig
dmFsdWVzIG11c3QgYmUgYXMgc2hvcnQgYXMgcG9zc2libGUuCisvLyAgICAgICogVW5zaWduZWQg
aW50ZWdlciBiZXR3ZWVuIDAgdG8gMjMgbXVzdCBiZSBleHByZXNzZWQgaW4gc2FtZSBieXRlIGFz
CisvLyAgICAgICAgICAgIHRoZSBtYWpvciB0eXBlLgorLy8gICAgICAqIDI0IHRvIDI1NSBtdXN0
IGJlIGV4cHJlc3NlZCBvbmx5IHdpdGggYW4gYWRkaXRpb25hbCB1aW50OF90LgorLy8gICAgICAq
IDI1NiB0byA2NTUzNSBtdXN0IGJlIGV4cHJlc3NlZCBvbmx5IHdpdGggYW4gYWRkaXRpb25hbCB1
aW50MTZfdC4KKy8vICAgICAgKiA2NTUzNiB0byA0Mjk0OTY3Mjk1IG11c3QgYmUgZXhwcmVzc2Vk
IG9ubHkgd2l0aCBhbiBhZGRpdGlvbmFsCisvLyAgICAgICAgICAgIHVpbnQzMl90LiAqIFRoZSBy
dWxlcyBmb3IgZXhwcmVzc2lvbiBvZiBsZW5ndGggaW4gbWFqb3IgdHlwZXMKKy8vICAgICAgICAg
ICAgMiB0byA1IGZvbGxvdyB0aGUgYWJvdmUgcnVsZSBmb3IgaW50ZWdlcnMuCisvLyAgMikgS2V5
cyBpbiBldmVyeSBtYXAgbXVzdCBiZSBzb3J0ZWQgKGZpcnN0IGJ5IG1ham9yIHR5cGUsIHRoZW4g
Ynkga2V5CisvLyAgICAgICAgIGxlbmd0aCwgdGhlbiBieSB2YWx1ZSBpbiBieXRlLXdpc2UgbGV4
aWNhbCBvcmRlcikuCisvLyAgMykgSW5kZWZpbml0ZSBsZW5ndGggaXRlbXMgbXVzdCBiZSBjb252
ZXJ0ZWQgdG8gZGVmaW5pdGUgbGVuZ3RoIGl0ZW1zLgorLy8gIDQpIEFsbCBtYXBzIG11c3Qgbm90
IGhhdmUgZHVwbGljYXRlIGtleXMuCisvLworLy8gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBD
Qk9SV3JpdGVyIGVuY29kZXIgbWVldHMgYWxsIHRoZSByZXF1aXJlbWVudHMgb2YKKy8vIGNhbm9u
aWNhbCBDQk9SLgorCituYW1lc3BhY2UgY2JvciB7CisKK2NsYXNzIENCT1JXcml0ZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENCT1JXcml0ZXIpOworcHVibGljOgorICAgIC8vIERlZmF1
bHQgdGhhdCBzaG91bGQgYmUgc3VmZmljaWVudGx5IGxhcmdlIGZvciBtb3N0IHVzZSBjYXNlcy4K
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrRGVmYXVsdE1heE5lc3RpbmdEZXB0aCA9IDE2
OworCisgICAgfkNCT1JXcml0ZXIoKTsKKworICAgIC8vIFJldHVybnMgdGhlIENCT1IgYnl0ZSBz
dHJpbmcgcmVwcmVzZW50YXRpb24gb2YgfG5vZGV8LCB1bmxlc3MgaXRzIG5lc3RpbmcKKyAgICAv
LyBkZXB0aCBpcyBncmVhdGVyIHRoYW4gfG1heF9uZXN0aW5nX2RlcHRofCwgaW4gd2hpY2ggY2Fz
ZSBhbiBlbXB0eSBvcHRpb25hbAorICAgIC8vIHZhbHVlIGlzIHJldHVybmVkLiBUaGUgbmVzdGlu
ZyBkZXB0aCBvZiB8bm9kZXwgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mCisgICAgLy8gYXJy
YXlzL21hcHMgdGhhdCBoYXMgdG8gYmUgdHJhdmVyc2VkIHRvIHJlYWNoIHRoZSBtb3N0IG5lc3Rl
ZCBDQk9SVmFsdWUKKyAgICAvLyBjb250YWluZWQgaW4gfG5vZGV8LiBQcmltaXRpdmUgdmFsdWVz
IGFuZCBlbXB0eSBjb250YWluZXJzIGhhdmUgbmVzdGluZworICAgIC8vIGRlcHRocyBvZiAwLgor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
d3JpdGUoY29uc3QgQ0JPUlZhbHVlJiwgc2l6ZV90IG1heE5lc3RpbmdMZXZlbCA9IGtEZWZhdWx0
TWF4TmVzdGluZ0RlcHRoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQk9SV3JpdGVyKFZl
Y3Rvcjx1aW50OF90PiopOworCisgICAgLy8gQ2FsbGVkIHJlY3Vyc2l2ZWx5IHRvIGJ1aWxkIHRo
ZSBDQk9SIGJ5dGVzdHJpbmcuIFdoZW4gY29tcGxldGVkLAorICAgIC8vIHxtX2VuY29kZWRDQk9S
fCB3aWxsIGNvbnRhaW4gdGhlIENCT1IuCisgICAgYm9vbCBlbmNvZGVDQk9SKGNvbnN0IENCT1JW
YWx1ZSYsIGludCBtYXhOZXN0aW5nTGV2ZWwpOworCisgICAgLy8gRW5jb2RlcyB0aGUgdHlwZSBh
bmQgc2l6ZSBvZiB0aGUgZGF0YSBiZWluZyBhZGRlZC4KKyAgICB2b2lkIHN0YXJ0SXRlbShDQk9S
VmFsdWU6OlR5cGUsIHVpbnQ2NF90IHNpemUpOworCisgICAgLy8gRW5jb2RlcyB0aGUgYWRkaXRp
b25hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGRhdGEuCisgICAgdm9pZCBzZXRBZGRpdGlvbmFsSW5m
b3JtYXRpb24odWludDhfdCk7CisKKyAgICAvLyBFbmNvZGVzIGFuIHVuc2lnbmVkIGludGVnZXIg
dmFsdWUuIFRoaXMgaXMgdXNlZCB0byBib3RoIHdyaXRlCisgICAgLy8gdW5zaWduZWQgaW50ZWdl
cnMgYW5kIHRvIGVuY29kZSB0aGUgbGVuZ3RocyBvZiBvdGhlciBtYWpvciB0eXBlcy4KKyAgICB2
b2lkIHNldFVpbnQodWludDY0X3QgdmFsdWUpOworCisgICAgLy8gR2V0IHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgbmVlZGVkIHRvIHN0b3JlIHRoZSB1bnNpZ25lZCBpbnRlZ2VyLgorICAgIHNpemVfdCBn
ZXROdW1VaW50Qnl0ZXModWludDY0X3QgdmFsdWUpOworCisgICAgLy8gSG9sZHMgdGhlIGVuY29k
ZWQgQ0JPUiBkYXRhLgorICAgIFZlY3Rvcjx1aW50OF90PiogbV9lbmNvZGVkQ0JPUjsKK307CisK
K30gLy8gbmFtZXNwYWNlIGNib3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZmM5YWNjY2IzY2U2NTVkNDFm
NWE3MmI2ZWJkNTdjYjM5NmVhNTNhZC4uMzNjMWQwNmNhNDhiMDUzMjIzNDY3MTMwYmE0OTdlZDhi
ZmYwMTgxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTI0NSw2ICsyNDUsOSBAQCBNb2R1bGVzL3dlYmF1
ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAogTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vz
c29yLmNwcAogCiBNb2R1bGVzL3dlYmF1dGhuL1B1YmxpY0tleUNyZWRlbnRpYWwuY3BwCitNb2R1
bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUlJlYWRlci5jcHAKK01vZHVsZXMvd2ViYXV0aG4vY2Jvci9D
Qk9SVmFsdWUuY3BwCitNb2R1bGVzL3dlYmF1dGhuL2Nib3IvQ0JPUldyaXRlci5jcHAKIAogTW9k
dWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAKIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTE0ODllYWIyYjE0YzNmMmM2NmQw
MmE5YWVkY2VjZjM1ZGUyY2VjNS4uNzkyNzM5MDhhNmM2N2Q4ZTY3ODZmNzRlZTM1MjYwYWM0ZjA2
MThjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTY0MSw2ICsxNjQxLDEwIEBACiAJCTU3MjFBOTg3MUVDRTUzQjEwMDgxMjk1
QSAvKiBDcnlwdG9EaWdlc3RBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3MjFBOTg2MUVDRTUzQjEwMDgxMjk1QSAvKiBDcnlwdG9EaWdl
c3RBbGdvcml0aG0uaCAqLzsgfTsKIAkJNTcyMUE5OEIxRUNFNTcwNDAwODEyOTVBIC8qIENyeXB0
b0FsZ29yaXRobVJzYVBzc1BhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTcyMUE5ODgxRUNFNTcwNDAwODEyOTVBIC8qIENyeXB0b0FsZ29yaXRo
bVJzYVBzc1BhcmFtcy5oICovOyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2lt
dWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9Owor
CQk1NzMwM0JCOTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JCNDIwMDZDNkVEMDAzNTU5NjUg
LyogQ0JPUlZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTczMDNCQkEyMDA2QzZFRTAwMzU1OTY1IC8qIENCT1JXcml0ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQkI1MjAwNkM2RUQw
MDM1NTk2NSAvKiBDQk9SV3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTczMDNCQkIyMDA2QzZFRTAwMzU1OTY1IC8qIENCT1JCaW5hcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQkI2
MjAwNkM2RUQwMDM1NTk2NSAvKiBDQk9SQmluYXJ5LmggKi87IH07CisJCTU3MzAzQkMxMjAwNkUw
MEMwMDM1NTk2NSAvKiBDQk9SUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JCRjIwMDZFMDBDMDAzNTU5NjUgLyogQ0JPUlJlYWRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MzQ4
OTM5MURBQzZCNkUwMERDMDY2NyAvKiBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzM0ODkzODFEQUM2QjZE
MDBEQzA2NjcgLyogQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oICovOyB9OwogCQk1NzM5RTEy
RjFEQUM3Rjc4MDBFMTQzODMgLyogSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzM5RTEyRTFEQUM3Rjc4
MDBFMTQzODMgLyogSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmggKi87IH07CiAJCTU3NTBB
OTc1MUU2OEQwMDAwMDcwNUM0QSAvKiBDcnlwdG9LZXlFQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1MEE5NzMxRTY4RDAwMDAwNzA1QzRBIC8qIENy
eXB0b0tleUVDLmggKi87IH07CkBAIC04MTY4LDYgKzgxNzIsMTMgQEAKIAkJNTcyMUE5OEExRUNF
NTcwNDAwODEyOTVBIC8qIFJzYVBzc1BhcmFtcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUnNhUHNzUGFyYW1zLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVs
YXRlZENsaWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU3MzAzQkI0MjAwNkM2RUQwMDM1NTk2NSAvKiBDQk9SVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0JPUlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU3MzAzQkI1MjAwNkM2RUQwMDM1NTk2NSAvKiBDQk9SV3JpdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENCT1JXcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTczMDNCQjYyMDA2QzZFRDAwMzU1OTY1IC8qIENCT1JCaW5hcnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0JPUkJpbmFyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1NzMwM0JCNzIwMDZDNkVEMDAzNTU5NjUgLyogQ0JPUlZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENCT1JWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkI4MjAwNkM2RUQwMDM1NTk2NSAv
KiBDQk9SV3JpdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENC
T1JXcml0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzMwM0JCRTIwMDZF
MDA0MDAzNTU5NjUgLyogQ0JPUlJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDQk9SUmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTczMDNCQkYyMDA2RTAwQzAwMzU1OTY1IC8qIENCT1JSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ0JPUlJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NzM0ODkzODFEQUM2QjZEMDBEQzA2NjcgLyogQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MzlFMTJFMURBQzdGNzgw
MEUxNDM4MyAvKiBKU0NyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MzlFMTMwMURBQzdGRDEwMEUxNDM4MyAvKiBKU0NyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4MDU2LDYgKzE4MDY3LDIwIEBACiAJCQlwYXRoID0gInVuaWZpZWQtc291
cmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1NzMwM0JCMzIwMDZD
NkVEMDAzNTU5NjUgLyogY2JvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTczMDNCQjYyMDA2QzZFRDAwMzU1OTY1IC8qIENCT1JCaW5hcnkuaCAqLywK
KwkJCQk1NzMwM0JCRTIwMDZFMDA0MDAzNTU5NjUgLyogQ0JPUlJlYWRlci5jcHAgKi8sCisJCQkJ
NTczMDNCQkYyMDA2RTAwQzAwMzU1OTY1IC8qIENCT1JSZWFkZXIuaCAqLywKKwkJCQk1NzMwM0JC
NzIwMDZDNkVEMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmNwcCAqLywKKwkJCQk1NzMwM0JCNDIwMDZD
NkVEMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmggKi8sCisJCQkJNTczMDNCQjgyMDA2QzZFRDAwMzU1
OTY1IC8qIENCT1JXcml0ZXIuY3BwICovLAorCQkJCTU3MzAzQkI1MjAwNkM2RUQwMDM1NTk2NSAv
KiBDQk9SV3JpdGVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNib3I7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogCQk1N0M3QTY4ODFFNTY5NDZEMDBDNjdENzEgLyogY3JlZGVu
dGlhbG1hbmFnZW1lbnQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMTgwOTYsNiArMTgxMjEsNyBAQAogCQk1N0Q4NDYyQTFGRUFGNTdGMDBDQTM2ODIgLyog
d2ViYXV0aG4gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTU3MzAzQkIzMjAwNkM2RUQwMDM1NTk2NSAvKiBjYm9yICovLAogCQkJCTU3RDg0NjJDMUZFQUY2
OEYwMENBMzY4MiAvKiBQdWJsaWNLZXlDcmVkZW50aWFsLmNwcCAqLywKIAkJCQk1N0Q4NDYyQjFG
RUFGNjhGMDBDQTM2ODIgLyogUHVibGljS2V5Q3JlZGVudGlhbC5oICovLAogCQkJCTU3RDg0NjJE
MUZFQUY2OEYwMENBMzY4MiAvKiBQdWJsaWNLZXlDcmVkZW50aWFsLmlkbCAqLywKQEAgLTI2NTE4
LDYgKzI2NTQ0LDEwIEBACiAJCQkJMDdCNzExNkQxRDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVE
ZXZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3QjcxMTZGMUQ4OTlFNjMwMDlGMEZGQiAvKiBD
YXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDNzM0MTUxOTc3ODk2
RDAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTczMDNCQkIy
MDA2QzZFRTAwMzU1OTY1IC8qIENCT1JCaW5hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3MzAz
QkMxMjAwNkUwMEMwMDM1NTk2NSAvKiBDQk9SUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
NzMwM0JCOTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1NzMwM0JCQTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUldyaXRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0RGNEI3MTYxRTAwQjdFNTAwRTIzNUEyIC8qIENETS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0Q5NEE1REUxRjcyRjU3QjAwRjUyNUM1IC8qIENETUNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggMmFlNWRhNWY1ZTI0NzgyZWViZTk0ZDg4ZWNlZDFiZmI1MDVmNWI5OC4uZTY3NzM0Y2E5ZGYw
NTMxMGQwNjc2NjI4ZjBhZDBmMjcyZGM0OTVmNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE4LTAxLTExICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkF1dGhOXSBJbXBv
cnQgYSBDQk9SIGNvZGVyIGZyb20gQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTUyMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYw
NTU3Mjk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFsc28gaW1wb3J0cyBhbGwgdW5pdCB0ZXN0cyBpbnRvIG91ciBBUEkgdGVzdHMg
dG8gZW5zdXJlIGFsbAorICAgICAgICB3b3JrYXJvdW5kcyBhbmQgbW9kaWZpY2F0aW9uIGFnYWlu
c3QgdGhlIG9yaWdpbmFsIGNvZGViYXNlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGFueSBvcmln
aW5hbCBmdW5jdGlvbmFsaXRpZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ0JPUlJlYWRlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
Qk9SVmFsdWVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0JPUldyaXRlclRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmVxKToKKyAgICAgICAgV29ya2Fyb3Vu
ZHMgYXBwbGllZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE4LTAxLTEw
ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVG9vbHMvZ3RrL2luc3RhbGwtZGVwZW5kZW5jaWVzOiBQYWNrYWdlcyBnZW9jbHVlLCBy
dWJ5LWhpZ2hsaW5lLCB4b3JnLXV0aWxzIGRvIG5vdCBleGlzdCBpbiBBcmNoIExpbnV4CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDI0OTk2YjI3MjgzYmFlNzA1ZjQxZmQ3MzQ4MWNhNjJmYTZm
ZmYzZjUuLjFmMzI2NTNmNDMyM2E5ZjdhYjMyMDVjMWJlZDhmMmY3NTUzZmE3MDEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yMTgsNiArMjE4LDkgQEAKIAkJNTcxNEVDQkIxQ0E4QkZFNDAw
MDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQTFDQThC
RkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovOyB9
OwogCQk1NzE0RUNCRDFDQThDMjJBMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxV
UkwyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTcxNEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFs
VVJMMi5odG1sICovOyB9OwogCQk1NzFGN0ZEMDFGMjk2MUZCMDA5NDY2NDggLyogSW5kZXhlZERC
U3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMtd2FsIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MUY3RkNGMUYy
OTYxRTEwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGli
aWxpdHkuc3FsaXRlMy13YWwgKi87IH07CisJCTU3MzAzQkM5MjAwODI0RDMwMDM1NTk2NSAvKiBD
Qk9SVmFsdWVUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MzAzQkFDMjAwNkM1NjAwMDM1NTk2NSAvKiBDQk9SVmFsdWVUZXN0LmNwcCAqLzsg
fTsKKwkJNTczMDNCQ0EyMDA4MkMwMTAwMzU1OTY1IC8qIENCT1JXcml0ZXJUZXN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MzAzQkFCMjAwNkM1
NTQwMDM1NTk2NSAvKiBDQk9SV3JpdGVyVGVzdC5jcHAgKi87IH07CisJCTU3MzAzQkNCMjAwODM3
NjUwMDM1NTk2NSAvKiBDQk9SUmVhZGVyVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzMwM0JDMjIwMDcxRTIyMDAzNTU5NjUgLyogQ0JPUlJl
YWRlclRlc3QuY3BwICovOyB9OwogCQk1NzU5OUUyMTFGMDcxOTE5MDBBM0ZCOEMgLyogSW5kZXhl
ZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTlFMjAxRjA3MTkxNzAwQTNGQjhD
IC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tbSAqLzsg
fTsKIAkJNTc1OTlFMjcxRjA3MUFBMDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9u
ZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3NTk5RTI0MUYwNzE5MkMwMEEzRkI4QyAvKiBJ
bmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMyAqLzsg
fTsKIAkJNTc1OTlFMjgxRjA3MUFBMDAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9u
ZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzLXNobSBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzU5OUUyNjFGMDcxOTJDMDBBM0ZCOEMg
LyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5LnNxbGl0ZTMt
c2htICovOyB9OwpAQCAtMTM3OSw2ICsxMzgyLDkgQEAKIAkJNTcxNEVDQkExQ0E4QkZEMTAwMDUx
QUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQkMxQ0E4QzIxODAwMDUxQUM4IC8qIERv
d25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMMi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwyLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3MUY3RkNGMUYyOTYxRTEwMDk0NjY0OCAvKiBJbmRleGVkREJTdHJ1Y3R1cmVk
Q2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHkuc3FsaXRlMy13YWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkluZGV4ZWREQlN0
cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5zcWxpdGUzLXdhbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkFCMjAwNkM1NTQwMDM1NTk2NSAvKiBDQk9SV3Jp
dGVyVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDQk9SV3Jp
dGVyVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MzAzQkFDMjAwNkM1
NjAwMDM1NTk2NSAvKiBDQk9SVmFsdWVUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENCT1JWYWx1ZVRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1NzMwM0JDMjIwMDcxRTIyMDAzNTU5NjUgLyogQ0JPUlJlYWRlclRlc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0JPUlJlYWRlclRlc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzM1RjAyNTFGM0E0RUE2MDAwRUU4MDEgLyogVGVz
dFdlYktpdEFQSS1pT1MuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC5lbnRpdGxlbWVudHM7IHBhdGggPSAiVGVz
dFdlYktpdEFQSS1pT1MuZW50aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTc1OTlFMjAxRjA3MTkxNzAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJh
Y2t3YXJkQ29tcGF0aWJpbGl0eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc1OTlFMjMxRjA3MTkyQzAwQTNGQjhDIC8q
IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eVdyaXRlLmh0bWwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0
bWw7IHBhdGggPSBJbmRleGVkREJTdHJ1Y3R1cmVkQ2xvbmVCYWNrd2FyZENvbXBhdGliaWxpdHlX
cml0ZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMyw2ICsyMjA5LDkg
QEAKIAkJCQk2MzU0RjREMDFGN0MzQUI1MDBEODlERjMgLyogQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlci5jcHAgKi8sCiAJCQkJOTNBNzIwRTUxOEYxQTBFODAwQTg0OEUxIC8qIENhbGN1bGF0aW9u
VmFsdWUuY3BwICovLAogCQkJCTA3QzA0NkM5MUU0MjU3M0UwMDcyMDFFNyAvKiBDQVJpbmdCdWZm
ZXIuY3BwICovLAorCQkJCTU3MzAzQkMyMjAwNzFFMjIwMDM1NTk2NSAvKiBDQk9SUmVhZGVyVGVz
dC5jcHAgKi8sCisJCQkJNTczMDNCQUMyMDA2QzU2MDAwMzU1OTY1IC8qIENCT1JWYWx1ZVRlc3Qu
Y3BwICovLAorCQkJCTU3MzAzQkFCMjAwNkM1NTQwMDM1NTk2NSAvKiBDQk9SV3JpdGVyVGVzdC5j
cHAgKi8sCiAJCQkJN0MzOTY1MDUxQ0RENzRGOTAwOTREQkI4IC8qIENvbG9yLmNwcCAqLywKIAkJ
CQkxQzlFQjg0MDFFMzgwREExMDA1QzY0NDIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCAq
LywKIAkJCQk3Q0IxODRDNDFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVudEV4dGVuc2lvbnMuY3Bw
ICovLApAQCAtMzMzMSw2ICszMzQwLDkgQEAKIAkJCQk3QzgzRTA0MTFEMEE2M0YyMDBGRUJDRjMg
LyogQ2FuZGlkYXRlVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFNzFBNDExQUU2
MDA0NDdDNEMgLyogQ2FuSGFuZGxlUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0Mw
NDZDQTFFNDI2MkE4MDA3MjAxRTcgLyogQ0FSaW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTU3MzAzQkNCMjAwODM3NjUwMDM1NTk2NSAvKiBDQk9SUmVhZGVyVGVzdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1NzMwM0JDOTIwMDgyNEQzMDAzNTU5NjUgLyogQ0JPUlZhbHVlVGVzdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1NzMwM0JDQTIwMDgyQzAxMDAzNTU5NjUgLyogQ0JPUldy
aXRlclRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRTYxQTQxMUFFNjAwNDQ3QzRD
IC8qIENsb3NlRnJvbVdpdGhpbkNyZWF0ZVBhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdFQjcxQTQxMUE3RTAwNDQ3QzRDIC8qIENsb3NlTmV3V2luZG93SW5OYXZpZ2F0aW9uUG9saWN5
RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFNTFBNDExQUU2MDA0NDdDNEMg
LyogQ2xvc2VUaGVuVGVybWluYXRlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NCT1JSZWFkZXJUZXN0LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SUmVhZGVyVGVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTQwMDJiMzc2M2I3MWVkMGRmNjUwZDAyYzU4NDIxOGFkNzkyMzk0NgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SUmVhZGVyVGVzdC5j
cHAKQEAgLTAsMCArMSw3NjUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
Ky8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ0JPUlJl
YWRlci5oPgorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKy8vIExl
dmVyYWdpbmcgUkZDIDcwNDkgZXhhbXBsZXMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY2Jvci90
ZXN0LXZlY3RvcnMvYmxvYi9tYXN0ZXIvYXBwZW5kaXhfYS5qc29uLgorbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCit1c2luZyBuYW1lc3BhY2UgY2JvcjsKKworVEVTVChDQk9SUmVhZGVyVGVz
dCwgVGVzdFJlYWRVaW50KQoreworICAgIHN0cnVjdCBVaW50VGVzdENhc2UgeworICAgICAgICBj
b25zdCBpbnQ2NF90IHZhbHVlOworICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gY2JvckRh
dGE7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBVaW50VGVzdENhc2Uga1VpbnRUZXN0Q2Fz
ZXNbXSA9IHsKKyAgICAgICAgeyAwLCB7IDB4MDAgfSB9LAorICAgICAgICB7IDEsIHsgMHgwMSB9
IH0sCisgICAgICAgIHsgMjMsIHsgMHgxNyB9IH0sCisgICAgICAgIHsgMjQsIHsgMHgxOCwgMHgx
OCB9IH0sCisgICAgICAgIHsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCksIHsg
MHgxOCwgMHhmZiB9IH0sCisgICAgICAgIHsgMUxMIDw8IDgsIHsgMHgxOSwgMHgwMSwgMHgwMCB9
IH0sCisgICAgICAgIHsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpLCB7IDB4
MTksIDB4ZmYsIDB4ZmYgfSB9LAorICAgICAgICB7IDFMTCA8PCAxNiwgeyAweDFhLCAweDAwLCAw
eDAxLCAweDAwLCAweDAwIH0gfSwKKyAgICAgICAgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCksIHsgMHgxYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9IH0sCisgICAgICAg
IHsgMUxMIDw8IDMyLCB7IDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1heCgpLAorICAgICAgICAgICAgeyAweDFiLCAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZG
LCAweEZGLCAweEZGLCAweEZGIH0gfSwKKyAgICB9OworCisgICAgZm9yIChjb25zdCBVaW50VGVz
dENhc2UmIHRlc3RDYXNlIDoga1VpbnRUZXN0Q2FzZXMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25h
bDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsK
KyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEFTU0VSVF9U
UlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpVbnNpZ25lZCk7Cisg
ICAgICAgIEVYUEVDVF9FUShjYm9yLnZhbHVlKCkuZ2V0SW50ZWdlcigpLCB0ZXN0Q2FzZS52YWx1
ZSk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VWludEVuY29kZWRXaXRo
Tm9uTWluaW11bUJ5dGVMZW5ndGgpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiBub25NaW5pbWFsVWludEVuY29kaW5nc1tdID0geworICAgICAgICAvLyBVaW50IDIzIGVuY29k
ZWQgd2l0aCAxIGJ5dGUuCisgICAgICAgIHsgMHgxOCwgMHgxNyB9LAorICAgICAgICAvLyBVaW50
IDI1NSBlbmNvZGVkIHdpdGggMiBieXRlcy4KKyAgICAgICAgeyAweDE5LCAweDAwLCAweGZmIH0s
CisgICAgICAgIC8vIFVpbnQgNjU1MzUgZW5jb2RlZCB3aXRoIDQgYnl0ZS4KKyAgICAgICAgeyAw
eDFhLCAweDAwLCAweDAwLCAweGZmLCAweGZmIH0sCisgICAgICAgIC8vIFVpbnQgNDI5NDk2NzI5
NSBlbmNvZGVkIHdpdGggOCBieXRlLgorICAgICAgICB7IDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKyAgICAgICAgLy8gV2hlbiBkZWNvZGlu
ZyBieXRlIGhhcyBtb3JlIHRoYW4gb25lIHN5bnRheCBlcnJvciwgdGhlIGZpcnN0IHN5bnRheAor
ICAgICAgICAvLyBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgZGVzZXJpYWxpemF0aW9uIGlzIHJl
dHVybmVkIGFzIHRoZSBlcnJvciBjb2RlLgorICAgICAgICB7CisgICAgICAgICAgICAweGEyLCAv
LyBtYXAgd2l0aCBub24tbWluaW1hbGx5IGVuY29kZWQga2V5CisgICAgICAgICAgICAweDE3LCAv
LyBrZXkgMjQKKyAgICAgICAgICAgIDB4NjEsIDB4NDIsIC8vIHZhbHVlIDoiQiIKKyAgICAgICAg
ICAgIDB4MTgsIDB4MTcsIC8vIGtleSAyMyBlbmNvZGVkIHdpdGggZXh0cmEgYnl0ZQorICAgICAg
ICAgICAgMHg2MSwgMHg0NSAvLyB2YWx1ZSAiRSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgMHhhMiwgLy8gbWFwIHdpdGggb3V0IG9mIG9yZGVyIGFuZCBub24tbWluaW1hbGx5
IGVuY29kZWQga2V5CisgICAgICAgICAgICAweDE4LCAweDE3LCAvLyBrZXkgMjMgZW5jb2RlZCB3
aXRoIGV4dHJhIGJ5dGUKKyAgICAgICAgICAgIDB4NjEsIDB4NDUsIC8vIHZhbHVlICJFIgorICAg
ICAgICAgICAgMHgxNywgLy8ga2V5IDIzCisgICAgICAgICAgICAweDYxLCAweDQyIC8vIHZhbHVl
IDoiQiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgMHhhMiwgLy8gbWFwIHdp
dGggZHVwbGljYXRlIG5vbi1taW5pbWFsbHkgZW5jb2RlZCBrZXkKKyAgICAgICAgICAgIDB4MTgs
IDB4MTcsIC8vIGtleSAyMyBlbmNvZGVkIHdpdGggZXh0cmEgYnl0ZQorICAgICAgICAgICAgMHg2
MSwgMHg0NSwgLy8gdmFsdWUgIkUiCisgICAgICAgICAgICAweDE4LCAweDE3LCAvLyBrZXkgMjMg
ZW5jb2RlZCB3aXRoIGV4dHJhIGJ5dGUKKyAgICAgICAgICAgIDB4NjEsIDB4NDIgLy8gdmFsdWUg
OiJCIgorICAgICAgICB9LAorICAgIH07CisKKyAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3Ig
ZXJyb3JDb2RlOworICAgIGZvciAoY29uc3QgYXV0byYgbm9uTWluaW1hbFVpbnQgOiBub25NaW5p
bWFsVWludEVuY29kaW5ncykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2Jv
ciA9IENCT1JSZWFkZXI6OnJlYWQobm9uTWluaW1hbFVpbnQsICZlcnJvckNvZGUpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVy
cm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6Ok5vbk1pbmltYWxDQk9SRW5jb2Rp
bmcpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWROZWdhdGl2ZUlu
dCkKK3sKKyAgICBzdHJ1Y3QgTmVnYXRpdmVJbnRUZXN0Q2FzZSB7CisgICAgICAgIGNvbnN0IGlu
dDY0X3QgbmVnYXRpdmVJbnQ7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBjYm9yRGF0
YTsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IE5lZ2F0aXZlSW50VGVzdENhc2Uga05lZ2F0
aXZlSW50VGVzdENhc2VzW10gPSB7CisgICAgICAgIHsgLTFMTCwgeyAweDIwIH0gfSwKKyAgICAg
ICAgeyAtMjRMTCwgeyAweDM3IH0gfSwKKyAgICAgICAgeyAtMjVMTCwgeyAweDM4LCAweDE4IH0g
fSwKKyAgICAgICAgeyAtMjU2TEwsIHsgMHgzOCwgMHhmZiB9IH0sCisgICAgICAgIHsgLTEwMDBM
TCwgeyAweDM5LCAweDAzLCAweGU3IH0gfSwKKyAgICAgICAgeyAtMTAwMDAwMExMLCB7IDB4M2Es
IDB4MDAsIDB4MGYsIDB4NDIsIDB4M2YgfSB9LAorICAgICAgICB7IC00Mjk0OTY3Mjk2TEwsIHsg
MHgzYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9IH0sCisgICAgICAgIHsgc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ2NF90Pjo6bWluKCksCisgICAgICAgICAgICB7IDB4M2IsIDB4N2YsIDB4ZmYs
IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSB9CisgICAgfTsKKworICAgIGZv
ciAoY29uc3QgTmVnYXRpdmVJbnRUZXN0Q2FzZSYgdGVzdENhc2UgOiBrTmVnYXRpdmVJbnRUZXN0
Q2FzZXMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVh
ZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5o
YXNfdmFsdWUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0g
Q0JPUlZhbHVlOjpUeXBlOjpOZWdhdGl2ZSk7CisgICAgICAgIEVYUEVDVF9FUShjYm9yLnZhbHVl
KCkuZ2V0SW50ZWdlcigpLCB0ZXN0Q2FzZS5uZWdhdGl2ZUludCk7CisgICAgfQorfQorCitURVNU
KENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZEJ5dGVzKQoreworICAgIHN0cnVjdCBCeXRlVGVzdENh
c2UgeworICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gdmFsdWU7CisgICAgICAgIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiBjYm9yRGF0YTsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IEJ5
dGVUZXN0Q2FzZSBrQnl0ZVN0cmluZ1Rlc3RDYXNlc1tdID0geworICAgICAgICB7eyB9LCB7MHg0
MH19LAorICAgICAgICB7ezB4MDEsIDB4MDIsIDB4MDMsIDB4MDR9LCB7MHg0NCwgMHgwMSwgMHgw
MiwgMHgwMywgMHgwNH19LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IEJ5dGVUZXN0Q2FzZSYg
dGVzdENhc2UgOiBrQnl0ZVN0cmluZ1Rlc3RDYXNlcykgeworICAgICAgICBzdGQ6Om9wdGlvbmFs
PENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQodGVzdENhc2UuY2JvckRhdGEpOwor
ICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RS
VUUoY2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OkJ5dGVTdHJpbmcpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShjYm9yLnZhbHVlKCkuZ2V0Qnl0ZVN0cmluZygpID09IHRlc3RD
YXNlLnZhbHVlKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkU3Ry
aW5nKQoreworICAgIHN0cnVjdCBTdHJpbmdUZXN0Q2FzZSB7CisgICAgICAgIGNvbnN0IFN0cmlu
ZyB2YWx1ZTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGNib3JEYXRhOworICAgIH07
CisKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nVGVzdENhc2Uga1N0cmluZ1Rlc3RDYXNlc1tdID0g
eworICAgICAgICB7ICIiLCB7IDB4NjAgfSB9LAorICAgICAgICB7ICJhIiwgeyAweDYxLCAweDYx
IH0gfSwKKyAgICAgICAgeyAiSUVURiIsIHsgMHg2NCwgMHg0OSwgMHg0NSwgMHg1NCwgMHg0NiB9
IH0sCisgICAgICAgIHsgIlwiXFwiLCB7IDB4NjIsIDB4MjIsIDB4NWMgfSB9LAorICAgICAgICB7
IFN0cmluZzo6ZnJvbVVURjgoIlx4YzNceGJjIiksIHsgMHg2MiwgMHhjMywgMHhiYyB9IH0sCisg
ICAgICAgIHsgU3RyaW5nOjpmcm9tVVRGOCgiXHhlNlx4YjBceGI0IiksIHsgMHg2MywgMHhlNiwg
MHhiMCwgMHhiNCB9IH0sCisgICAgICAgIHsgU3RyaW5nOjpmcm9tVVRGOCgiXHhmMFx4OTBceDg1
XHg5MSIpLCB7IDB4NjQsIDB4ZjAsIDB4OTAsIDB4ODUsIDB4OTEgfSB9LAorICAgIH07CisKKyAg
ICBmb3IgKGNvbnN0IFN0cmluZ1Rlc3RDYXNlJiB0ZXN0Q2FzZSA6IGtTdHJpbmdUZXN0Q2FzZXMp
IHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpy
ZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFs
dWUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0gQ0JPUlZh
bHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBFWFBFQ1RfVFJVRShjYm9yLnZhbHVlKCkuZ2V0
U3RyaW5nKCkgPT0gdGVzdENhc2UudmFsdWUpOworICAgIH0KK30KKworVEVTVChDQk9SUmVhZGVy
VGVzdCwgVGVzdFJlYWRTdHJpbmdXaXRoTlVMKQoreworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
eworICAgICAgICBjb25zdCBTdHJpbmcgdmFsdWU7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiBjYm9yRGF0YTsKKyAgICB9IGtTdHJpbmdUZXN0Q2FzZXNbXSA9IHsKKyAgICAgICAgeyBT
dHJpbmcoInN0cmluZ193aXRob3V0X251bCIpLAorICAgICAgICAgICAgeyAweDcyLCAweDczLCAw
eDc0LCAweDcyLCAweDY5LCAweDZFLCAweDY3LCAweDVGLCAweDc3LCAweDY5LCAweDc0LCAweDY4
LAorICAgICAgICAgICAgICAgIDB4NkYsIDB4NzUsIDB4NzQsIDB4NUYsIDB4NkUsIDB4NzUsIDB4
NkMgfSB9LAorICAgICAgICB7IFN0cmluZygibnVsX3Rlcm1pbmF0ZWRfc3RyaW5nXDAiLCAyMiks
CisgICAgICAgICAgICB7IDB4NzYsIDB4NkUsIDB4NzUsIDB4NkMsIDB4NUYsIDB4NzQsIDB4NjUs
IDB4NzIsIDB4NkQsIDB4NjksIDB4NkUsIDB4NjEsCisgICAgICAgICAgICAgICAgMHg3NCwgMHg2
NSwgMHg2NCwgMHg1RiwgMHg3MywgMHg3NCwgMHg3MiwgMHg2OSwgMHg2RSwgMHg2NywgMHgwMCB9
IH0sCisgICAgICAgIHsgU3RyaW5nKCJlbWJlZGRlZFwwbnVsIiwgMTIpLAorICAgICAgICAgICAg
eyAweDZDLCAweDY1LCAweDZELCAweDYyLCAweDY1LCAweDY0LCAweDY0LCAweDY1LCAweDY0LCAw
eDAwLCAweDZFLCAweDc1LAorICAgICAgICAgICAgICAgIDB4NkMgfSB9LAorICAgICAgICB7IFN0
cmluZygidHJhaWxpbmdfbnVsc1wwXDAiLCAxNSksCisgICAgICAgICAgICB7IDB4NkYsIDB4NzQs
IDB4NzIsIDB4NjEsIDB4NjksIDB4NkMsIDB4NjksIDB4NkUsIDB4NjcsIDB4NUYsIDB4NkUsIDB4
NzUsCisgICAgICAgICAgICAgICAgMHg2QywgMHg3MywgMHgwMCwgMHgwMCB9IH0sCisgICAgfTsK
KworICAgIGZvciAoY29uc3QgYXV0byYgdGVzdENhc2UgOiBrU3RyaW5nVGVzdENhc2VzKSB7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZCh0
ZXN0Q2FzZS5jYm9yRGF0YSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkp
OworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLnZhbHVlKCkudHlwZSgpID09IENCT1JWYWx1ZTo6
VHlwZTo6U3RyaW5nKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Jvci52YWx1ZSgpLmdldFN0cmlu
ZygpID09IHRlc3RDYXNlLnZhbHVlKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3Qs
IFRlc3RSZWFkU3RyaW5nV2l0aEludmFsaWRCeXRlU2VxdWVuY2VBZnRlck5VTCkKK3sKKyAgICAv
LyBVVEYtOCB2YWxpZGF0aW9uIHNob3VsZCBub3Qgc3RvcCBhdCB0aGUgZmlyc3QgTlVMIGNoYXJh
Y3RlciBpbiB0aGUgc3RyaW5nLgorICAgIC8vIFRoYXQgaXMsIGEgc3RyaW5nIHdpdGggYW4gaW52
YWxpZCBieXRlIHNlcXVlbmNlIHNob3VsZCBmYWlsIFVURi04CisgICAgLy8gdmFsaWRhdGlvbiBl
dmVuIGlmIHRoZSBpbnZhbGlkIGNoYXJhY3RlciBpcyBsb2NhdGVkIGFmdGVyIG9uZSBvciBtb3Jl
IE5VTAorICAgIC8vIGNoYXJhY3RlcnMuIEhlcmUsIDB4QTYgaXMgYW4gdW5leHBlY3RlZCBjb250
aW51YXRpb24gYnl0ZS4KKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHN0cmluZ1dp
dGhJbnZhbGlkQ29udGludWF0aW9uQnl0ZSA9IHsKKyAgICAgICAgMHg2MywgMHgwMCwgMHgwMCwg
MHhBNgorICAgIH07CisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoc3RyaW5n
V2l0aEludmFsaWRDb250aW51YXRpb25CeXRlLCAmZXJyb3JDb2RlKTsKKyAgICBFWFBFQ1RfRkFM
U0UoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JS
ZWFkZXI6OkRlY29kZXJFcnJvcjo6SW52YWxpZFVURjgpOworfQorCitURVNUKENCT1JSZWFkZXJU
ZXN0LCBUZXN0UmVhZEFycmF5KQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4g
a0FycmF5VGVzdENhc2VDQk9SID0geworICAgICAgICAweDk4LCAweDE5LCAvLyBhcnJheSBvZiAy
NSBlbGVtZW50cworICAgICAgICAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAw
eDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLAorICAgICAgICAweDBkLCAweDBlLCAw
eDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4
LAorICAgICAgICAweDE4LCAweDE4LCAweDE5LAorICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFs
PENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoa0FycmF5VGVzdENhc2VDQk9SKTsK
KyAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICBjb25zdCBDQk9SVmFsdWUg
Y2JvckFycmF5ID0gV1RGTW92ZShjYm9yLnZhbHVlKCkpOworICAgIEFTU0VSVF9UUlVFKGNib3JB
cnJheS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpBcnJheSk7CisgICAgQVNTRVJUX0VRKGNi
b3JBcnJheS5nZXRBcnJheSgpLnNpemUoKSwgMjV1KTsKKworICAgIFZlY3RvcjxDQk9SVmFsdWU+
IGFycmF5OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU7IGkrKykgeworICAgICAgICBBU1NF
UlRfVFJVRShjYm9yQXJyYXkuZ2V0QXJyYXkoKVtpXS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBl
OjpVbnNpZ25lZCk7CisgICAgICAgIEVYUEVDVF9FUShjYm9yQXJyYXkuZ2V0QXJyYXkoKVtpXS5n
ZXRJbnRlZ2VyKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGkgKyAxKSk7CisgICAgfQorfQorCitU
RVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZE1hcFdpdGhNYXBWYWx1ZSkKK3sKKyAgICBzdGF0
aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtNYXBUZXN0Q2FzZUNCT1IgPSB7CisgICAgICAgIDB4
YTQsIC8vIG1hcCB3aXRoIDQga2V5IHZhbHVlIHBhaXJzOgorICAgICAgICAweDE4LCAweDE4LCAv
LyAyNAorICAgICAgICAweDYzLCAweDYxLCAweDYyLCAweDYzLCAvLyAiYWJjIgorCisgICAgICAg
IDB4NjAsIC8vICIiCisgICAgICAgIDB4NjEsIDB4MmUsIC8vICIuIgorCisgICAgICAgIDB4NjEs
IDB4NjIsIC8vICJiIgorICAgICAgICAweDYxLCAweDQyLCAvLyAiQiIKKworICAgICAgICAweDYy
LCAweDYxLCAweDYxLCAvLyAiYWEiCisgICAgICAgIDB4NjIsIDB4NDEsIDB4NDEsIC8vICJBQSIK
KyAgICB9OworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVy
OjpyZWFkKGtNYXBUZXN0Q2FzZUNCT1IpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVl
KCkpOworICAgIGNvbnN0IENCT1JWYWx1ZSBjYm9yVmFsID0gV1RGTW92ZShjYm9yLnZhbHVlKCkp
OworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6TWFw
KTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5zaXplKCksIDR1KTsKKworICAgIGNv
bnN0IENCT1JWYWx1ZSBrZXlVaW50KDI0KTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAo
KS5jb3VudChrZXlVaW50KSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCku
ZmluZChrZXlVaW50KS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlN0cmluZyk7
CisgICAgRVhQRUNUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleVVpbnQpLT5zZWNvbmQu
Z2V0U3RyaW5nKCkgPT0gImFiYyIpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleUVtcHR5U3Ry
aW5nKCIiKTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5jb3VudChrZXlFbXB0eVN0
cmluZyksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5RW1w
dHlTdHJpbmcpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAg
ICBFWFBFQ1RfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5RW1wdHlTdHJpbmcpLT5zZWNv
bmQuZ2V0U3RyaW5nKCkgPT0gIi4iKTsKKworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlCKCJiIik7
CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCkuY291bnQoa2V5QiksIDF1KTsKKyAgICBB
U1NFUlRfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5QiktPnNlY29uZC50eXBlKCkgPT0g
Q0JPUlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgIEVYUEVDVF9UUlVFKGNib3JWYWwuZ2V0TWFw
KCkuZmluZChrZXlCKS0+c2Vjb25kLmdldFN0cmluZygpID09ICJCIik7CisKKyAgICBjb25zdCBD
Qk9SVmFsdWUga2V5QWEoImFhIik7CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCkuY291
bnQoa2V5QWEpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtl
eUFhKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgRVhQ
RUNUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleUFhKS0+c2Vjb25kLmdldFN0cmluZygp
ID09ICJBQSIpOworfQorCitURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZE1hcFdpdGhJbnRl
Z2VyS2V5cykKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtNYXBXaXRoSW50
ZWdlcktleUNCT1IgPSB7CisgICAgICAgIDB4QTQsIC8vIG1hcCB3aXRoIDQga2V5IHZhbHVlIHBh
aXJzCisgICAgICAgIDB4MDEsIC8vIGtleSA6IDEKKyAgICAgICAgMHg2MSwgMHg2MSwgLy8gdmFs
dWUgOiAiYSIKKworICAgICAgICAweDA5LCAvLyBrZXkgOiA5CisgICAgICAgIDB4NjEsIDB4NjIs
IC8vIHZhbHVlIDogImIiCisKKyAgICAgICAgMHgxOSwgMHgwMywgMHhFNywgLy8ga2V5IDogOTk5
CisgICAgICAgIDB4NjEsIDB4NjMsIC8vIHZhbHVlICJjIgorCisgICAgICAgIDB4MTksIDB4MDQs
IDB4NTcsIC8vIGtleSA6IDExMTEKKyAgICAgICAgMHg2MSwgMHg2NCwgLy8gdmFsdWUgOiAiZCIK
KyAgICB9OworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVy
OjpyZWFkKGtNYXBXaXRoSW50ZWdlcktleUNCT1IpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFz
X3ZhbHVlKCkpOworICAgIGNvbnN0IENCT1JWYWx1ZSBjYm9yVmFsID0gV1RGTW92ZShjYm9yLnZh
bHVlKCkpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwudHlwZSgpID09IENCT1JWYWx1ZTo6VHlw
ZTo6TWFwKTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5zaXplKCksIDR1KTsKKwor
ICAgIGNvbnN0IENCT1JWYWx1ZSBrZXkxKDEpOworICAgIEFTU0VSVF9FUShjYm9yVmFsLmdldE1h
cCgpLmNvdW50KGtleTEpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5m
aW5kKGtleTEpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAg
ICBBU1NFUlRfVFJVRShjYm9yVmFsLmdldE1hcCgpLmZpbmQoa2V5MSktPnNlY29uZC5nZXRTdHJp
bmcoKSA9PSAiYSIpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleTkoOSk7CisgICAgQVNTRVJU
X0VRKGNib3JWYWwuZ2V0TWFwKCkuY291bnQoa2V5OSksIDF1KTsKKyAgICBBU1NFUlRfVFJVRShj
Ym9yVmFsLmdldE1hcCgpLmZpbmQoa2V5OSktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpU
eXBlOjpTdHJpbmcpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXk5
KS0+c2Vjb25kLmdldFN0cmluZygpID09ICJiIik7CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5
OTk5KDk5OSk7CisgICAgQVNTRVJUX0VRKGNib3JWYWwuZ2V0TWFwKCkuY291bnQoa2V5OTk5KSwg
MXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXk5OTkpLT5zZWNv
bmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICBBU1NFUlRfVFJVRShj
Ym9yVmFsLmdldE1hcCgpLmZpbmQoa2V5OTk5KS0+c2Vjb25kLmdldFN0cmluZygpID09ICJjIik7
CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5MTExMSgxMTExKTsKKyAgICBBU1NFUlRfRVEoY2Jv
clZhbC5nZXRNYXAoKS5jb3VudChrZXkxMTExKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JW
YWwuZ2V0TWFwKCkuZmluZChrZXkxMTExKS0+c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5
cGU6OlN0cmluZyk7CisgICAgQVNTRVJUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleTEx
MTEpLT5zZWNvbmQuZ2V0U3RyaW5nKCkgPT0gImQiKTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVz
dCwgVGVzdFJlYWRNYXBXaXRoQXJyYXkpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiBrTWFwQXJyYXlUZXN0Q2FzZUNCT1IgPSB7CisgICAgICAgIDB4YTIsIC8vIG1hcCBvZiAy
IHBhaXJzCisgICAgICAgIDB4NjEsIDB4NjEsIC8vICJhIgorICAgICAgICAweDAxLAorCisgICAg
ICAgIDB4NjEsIDB4NjIsIC8vICJiIgorICAgICAgICAweDgyLCAvLyBhcnJheSB3aXRoIDIgZWxl
bWVudHMKKyAgICAgICAgMHgwMiwKKyAgICAgICAgMHgwMywKKyAgICB9OworCisgICAgc3RkOjpv
cHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBBcnJheVRlc3RD
YXNlQ0JPUik7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgY29uc3Qg
Q0JPUlZhbHVlIGNib3JWYWwgPSBXVEZNb3ZlKGNib3IudmFsdWUoKSk7CisgICAgQVNTRVJUX1RS
VUUoY2JvclZhbC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNYXApOworICAgIEFTU0VSVF9F
UShjYm9yVmFsLmdldE1hcCgpLnNpemUoKSwgMnUpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtl
eUEoImEiKTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5jb3VudChrZXlBKSwgMXUp
OworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXlBKS0+c2Vjb25kLnR5
cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVkKTsKKyAgICBFWFBFQ1RfRVEoY2JvclZh
bC5nZXRNYXAoKS5maW5kKGtleUEpLT5zZWNvbmQuZ2V0SW50ZWdlcigpLCAxdSk7CisKKyAgICBj
b25zdCBDQk9SVmFsdWUga2V5QigiYiIpOworICAgIEFTU0VSVF9FUShjYm9yVmFsLmdldE1hcCgp
LmNvdW50KGtleUIpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUoY2JvclZhbC5nZXRNYXAoKS5maW5k
KGtleUIpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6QXJyYXkpOworCisgICAg
Y29uc3QgQ0JPUlZhbHVlIG5lc3RlZEFycmF5ID0gY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleUIp
LT5zZWNvbmQuY2xvbmUoKTsKKyAgICBBU1NFUlRfRVEobmVzdGVkQXJyYXkuZ2V0QXJyYXkoKS5z
aXplKCksIDJ1KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBB
U1NFUlRfVFJVRShuZXN0ZWRBcnJheS5nZXRBcnJheSgpW2ldLnR5cGUoKSA9PSBDQk9SVmFsdWU6
OlR5cGU6OlVuc2lnbmVkKTsKKyAgICAgICAgRVhQRUNUX0VRKG5lc3RlZEFycmF5LmdldEFycmF5
KClbaV0uZ2V0SW50ZWdlcigpLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihpICsgMikpOworICAgIH0K
K30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWROZXN0ZWRNYXApCit7CisgICAgc3Rh
dGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTmVzdGVkTWFwVGVzdENhc2UgPSB7CisgICAgICAg
IDB4YTIsIC8vIG1hcCBvZiAyIHBhaXJzCisgICAgICAgIDB4NjEsIDB4NjEsIC8vICJhIgorICAg
ICAgICAweDAxLAorCisgICAgICAgIDB4NjEsIDB4NjIsIC8vICJiIgorICAgICAgICAweGEyLCAv
LyBtYXAgb2YgMiBwYWlycworICAgICAgICAweDYxLCAweDYzLCAvLyAiYyIKKyAgICAgICAgMHgw
MiwKKworICAgICAgICAweDYxLCAweDY0LCAvLyAiZCIKKyAgICAgICAgMHgwMywKKyAgICB9Owor
CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtO
ZXN0ZWRNYXBUZXN0Q2FzZSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7Cisg
ICAgY29uc3QgQ0JPUlZhbHVlIGNib3JWYWwgPSBXVEZNb3ZlKGNib3IudmFsdWUoKSk7CisgICAg
QVNTRVJUX1RSVUUoY2JvclZhbC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNYXApOworICAg
IEFTU0VSVF9FUShjYm9yVmFsLmdldE1hcCgpLnNpemUoKSwgMnUpOworCisgICAgY29uc3QgQ0JP
UlZhbHVlIGtleUEoImEiKTsKKyAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5jb3VudChr
ZXlBKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXlBKS0+
c2Vjb25kLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OlVuc2lnbmVkKTsKKyAgICBFWFBFQ1Rf
RVEoY2JvclZhbC5nZXRNYXAoKS5maW5kKGtleUEpLT5zZWNvbmQuZ2V0SW50ZWdlcigpLCAxdSk7
CisKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5QigiYiIpOworICAgIEFTU0VSVF9FUShjYm9yVmFs
LmdldE1hcCgpLmNvdW50KGtleUIpLCAxdSk7CisgICAgY29uc3QgQ0JPUlZhbHVlIG5lc3RlZE1h
cCA9IGNib3JWYWwuZ2V0TWFwKCkuZmluZChrZXlCKS0+c2Vjb25kLmNsb25lKCk7CisgICAgQVNT
RVJUX1RSVUUobmVzdGVkTWFwLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6Ok1hcCk7CisgICAg
QVNTRVJUX0VRKG5lc3RlZE1hcC5nZXRNYXAoKS5zaXplKCksIDJ1KTsKKworICAgIGNvbnN0IENC
T1JWYWx1ZSBrZXlDKCJjIik7CisgICAgQVNTRVJUX0VRKG5lc3RlZE1hcC5nZXRNYXAoKS5jb3Vu
dChrZXlDKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKG5lc3RlZE1hcC5nZXRNYXAoKS5maW5kKGtl
eUMpLT5zZWNvbmQudHlwZSgpID09IENCT1JWYWx1ZTo6VHlwZTo6VW5zaWduZWQpOworICAgIEVY
UEVDVF9FUShuZXN0ZWRNYXAuZ2V0TWFwKCkuZmluZChrZXlDKS0+c2Vjb25kLmdldEludGVnZXIo
KSwgMnUpOworCisgICAgY29uc3QgQ0JPUlZhbHVlIGtleUQoImQiKTsKKyAgICBBU1NFUlRfRVEo
bmVzdGVkTWFwLmdldE1hcCgpLmNvdW50KGtleUQpLCAxdSk7CisgICAgQVNTRVJUX1RSVUUobmVz
dGVkTWFwLmdldE1hcCgpLmZpbmQoa2V5RCktPnNlY29uZC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpU
eXBlOjpVbnNpZ25lZCk7CisgICAgRVhQRUNUX0VRKG5lc3RlZE1hcC5nZXRNYXAoKS5maW5kKGtl
eUQpLT5zZWNvbmQuZ2V0SW50ZWdlcigpLCAzdSk7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3Qs
IFRlc3RJbnRlZ2VyUmFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBr
TWF4UG9zaXRpdmVJbnQgPSB7CisgICAgICAgIDB4MWIsIDB4N0YsIDB4RkYsIDB4RkYsIDB4RkYs
IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8
dWludDhfdD4ga01pbk5lZ2F0aXZlSW50ID0geworICAgICAgICAweDNiLCAweDdGLCAweEZGLCAw
eEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGCisgICAgfTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8Q0JPUlZhbHVlPiBtYXhQb3NpdGl2ZUludCA9IENCT1JSZWFkZXI6OnJlYWQoa01heFBv
c2l0aXZlSW50KTsKKyAgICBBU1NFUlRfVFJVRShtYXhQb3NpdGl2ZUludC5oYXNfdmFsdWUoKSk7
CisgICAgRVhQRUNUX0VRKG1heFBvc2l0aXZlSW50LnZhbHVlKCkuZ2V0SW50ZWdlcigpLCBJTlQ2
NF9NQVgpOworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IG1pbk5lZ2F0aXZlSW50ID0g
Q0JPUlJlYWRlcjo6cmVhZChrTWluTmVnYXRpdmVJbnQpOworICAgIEFTU0VSVF9UUlVFKG1pbk5l
Z2F0aXZlSW50Lmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfRVEobWluTmVnYXRpdmVJbnQudmFs
dWUoKS5nZXRJbnRlZ2VyKCksIElOVDY0X01JTik7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3Qs
IFRlc3RJbnRlZ2VyT3V0T2ZSYW5nZUVycm9yKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8
dWludDhfdD4ga091dE9mUmFuZ2VQb3NpdGl2ZUludCA9IHsKKyAgICAgICAgMHgxYiwgMHg4MCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorICAgIH07CisKKyAgICBz
dGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtPdXRPZlJhbmdlTmVnYXRpdmVJbnQgPSB7Cisg
ICAgICAgIDB4M2IsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gcG9zaXRpdmVJbnRPdXRPZlJhbmdlQ0JPUiA9IENC
T1JSZWFkZXI6OnJlYWQoa091dE9mUmFuZ2VQb3NpdGl2ZUludCwgJmVycm9yQ29kZSk7CisgICAg
RVhQRUNUX0ZBTFNFKHBvc2l0aXZlSW50T3V0T2ZSYW5nZUNCT1IpOworICAgIEVYUEVDVF9UUlVF
KGVycm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6Ok91dE9mUmFuZ2VJbnRlZ2Vy
VmFsdWUpOworCisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IG5lZ2F0aXZlSW50T3V0T2ZS
YW5nZUNCT1IgPSBDQk9SUmVhZGVyOjpyZWFkKGtPdXRPZlJhbmdlTmVnYXRpdmVJbnQsICZlcnJv
ckNvZGUpOworICAgIEVYUEVDVF9GQUxTRShuZWdhdGl2ZUludE91dE9mUmFuZ2VDQk9SKTsKKyAg
ICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpPdXRP
ZlJhbmdlSW50ZWdlclZhbHVlKTsKK30KKworVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRT
aW1wbGVWYWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3Qg
Q0JPUlZhbHVlOjpTaW1wbGVWYWx1ZSB2YWx1ZTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+IGNib3JEYXRhOworICAgIH0ga1NpbXBsZVZhbHVlVGVzdENhc2VzW10gPSB7CisgICAgICAg
IHsgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6RmFsc2VWYWx1ZSwgeyAweGY0IH0gfSwKKyAgICAg
ICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpUcnVlVmFsdWUsIHsgMHhmNSB9IH0sCisgICAg
ICAgIHsgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6TnVsbFZhbHVlLCB7IDB4ZjYgfSB9LAorICAg
ICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlVuZGVmaW5lZCwgeyAweGY3IH0gfSwKKyAg
ICB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiB0ZXN0Q2FzZSA6IGtTaW1wbGVWYWx1ZVRlc3RD
YXNlcykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFk
ZXI6OnJlYWQodGVzdENhc2UuY2JvckRhdGEpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhh
c192YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBD
Qk9SVmFsdWU6OlR5cGU6OlNpbXBsZVZhbHVlKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci52
YWx1ZSgpLmdldFNpbXBsZVZhbHVlKCkgPT0gdGVzdENhc2UudmFsdWUpOworICAgIH0KK30KKwor
VEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnROdW1i
ZXJzKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4gZmxvYXRpbmdQb2ludENi
b3JzW10gPSB7CisgICAgICAgIC8vIDE2IGJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZS4KKyAgICAg
ICAgeyAweGY5LCAweDEwLCAweDAwIH0sCisgICAgICAgIC8vIDMyIGJpdCBmbG9hdGluZyBwb2lu
dCB2YWx1ZS4KKyAgICAgICAgeyAweGZhLCAweDEwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAg
ICAgIC8vIDY0IGJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZS4KKyAgICAgICAgeyAweGZiLCAweDEw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KKyAgICB9OworCisg
ICAgZm9yIChjb25zdCBhdXRvJiB1bnN1cHBvcnRlZF9mbG9hdGluZ19wb2ludCA6IGZsb2F0aW5n
UG9pbnRDYm9ycykgeworICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2Rl
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJl
YWQodW5zdXBwb3J0ZWRfZmxvYXRpbmdfcG9pbnQsICZlcnJvckNvZGUpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yQ29k
ZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OlVuc3VwcG9ydGVkRmxvYXRpbmdQb2ludFZh
bHVlKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RJbmNvbXBsZXRlQ0JP
UkRhdGFFcnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGluY29tcGxl
dGVDYm9yTGlzdFtdID0geworICAgICAgICAvLyBBZGRpdGlvbmFsIGluZm8gYnl0ZSBjb3JyZXNw
b25kcyB0byB1bnNpZ25lZCBpbnQgdGhhdCBjb3JyZXNwb25kcworICAgICAgICAvLyB0byAyIGFk
ZGl0aW9uYWwgYnl0ZXMuIEJ1dCBhY3R1YWwgZGF0YSBlbmNvZGVkICBpbiBvbmUgYnl0ZS4KKyAg
ICAgICAgeyAweDE5LCAweDAzIH0sCisgICAgICAgIC8vIENCT1IgYnl0ZXN0cmluZyBvZiBsZW5n
dGggMyBlbmNvZGVkIHdpdGggYWRkaXRpb25hbCBpbmZvIG9mIGxlbmd0aCA0LgorICAgICAgICB7
IDB4NDQsIDB4MDEsIDB4MDIsIDB4MDMgfSwKKyAgICAgICAgLy8gQ0JPUiBzdHJpbmcgZGF0YSAi
SUVURiIgb2YgbGVuZ3RoIDQgZW5jb2RlZCB3aXRoIGFkZGl0aW9uYWwgaW5mbyBvZgorICAgICAg
ICAvLyBsZW5ndGggNS4KKyAgICAgICAgeyAweDY1LCAweDQ5LCAweDQ1LCAweDU0LCAweDQ2IH0s
CisgICAgICAgIC8vIENCT1IgYXJyYXkgb2YgbGVuZ3RoIDEgZW5jb2RlZCB3aXRoIGFkZGl0aW9u
YWwgaW5mbyBvZiBsZW5ndGggMi4KKyAgICAgICAgeyAweDgyLCAweDAyIH0sCisgICAgICAgIC8v
IENCT1IgbWFwIHdpdGggc2luZ2xlIGtleSB2YWx1ZSBwYWlyIGVuY29kZWQgd2l0aCBhZGRpdGlv
bmFsIGluZm8gb2YKKyAgICAgICAgLy8gbGVuZ3RoIDIuCisgICAgICAgIHsgMHhhMiwgMHg2MSwg
MHg2MSwgMHgwMSB9LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGluY29tcGxldGVf
ZGF0YSA6IGluY29tcGxldGVDYm9yTGlzdCkgeworICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVy
RXJyb3IgZXJyb3JDb2RlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9
IENCT1JSZWFkZXI6OnJlYWQoaW5jb21wbGV0ZV9kYXRhLCAmZXJyb3JDb2RlKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJv
ckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpJbmNvbXBsZXRlQ0JPUkRhdGEpOwor
ICAgIH0KK30KKworLy8gV2hpbGUgUkZDIDcwNDkgYWxsb3dzIENCT1IgbWFwIGtleXMgd2l0aCBh
bGwgdHlwZXMsIGN1cnJlbnQgZGVjb2RlciBvbmx5CisvLyBzdXBwb3J0cyB1bnNpZ25lZCBpbnRl
Z2VyIGFuZCBzdHJpbmcga2V5cy4KK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RVbnN1cHBvcnRl
ZE1hcEtleUZvcm1hdEVycm9yKQoreworICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4g
a01hcFdpdGhVaW50S2V5ID0geworICAgICAgICAweGEyLCAvLyBtYXAgb2YgMiBwYWlycworCisg
ICAgICAgIDB4ODIsIDB4MDEsIDB4MDIsIC8vIGludmFsaWQga2V5IDogWzEsIDJdCisgICAgICAg
IDB4MDIsIC8vIHZhbHVlIDogMgorCisgICAgICAgIDB4NjEsIDB4NjQsIC8vIGtleSA6ICJkIgor
ICAgICAgICAweDAzLCAvLyB2YWx1ZSA6IDMKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVj
b2RlckVycm9yIGVycm9yQ29kZTsKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9
IENCT1JSZWFkZXI6OnJlYWQoa01hcFdpdGhVaW50S2V5LCAmZXJyb3JDb2RlKTsKKyAgICBFWFBF
Q1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09
IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6SW5jb3JyZWN0TWFwS2V5VHlwZSk7Cit9CisKK1RF
U1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RVbmtub3duQWRkaXRpb25hbEluZm9FcnJvcikKK3sKKyAg
ICBzdGF0aWMgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGtVbmtub3duQWRkaXRpb25hbEluZm9MaXN0
W10gPSB7CisgICAgICAgIC8vICJJRVRGIiBlbmNvZGVkIHdpdGggbWFqb3IgdHlwZSAzIGFuZCBh
ZGRpdGlvbmFsIGluZm8gb2YgMjguCisgICAgICAgIHsgMHg3QywgMHg0OSwgMHg0NSwgMHg1NCwg
MHg0NiB9LAorICAgICAgICAvLyAiXCJcXCIgZW5jb2RlZCB3aXRoIG1ham9yIHR5cGUgMyBhbmQg
YWRkaXRpb25hbCBpbmZvIG9mIDI5LgorICAgICAgICB7IDB4N0QsIDB4MjIsIDB4NWMgfSwKKyAg
ICAgICAgLy8gIlx4YzNceGJjIiBlbmNvZGVkIHdpdGggbWFqb3IgdHlwZSAzIGFuZCBhZGRpdGlv
bmFsIGluZm8gb2YgMzAuCisgICAgICAgIHsgMHg3RSwgMHhjMywgMHhiYyB9LAorICAgICAgICAv
LyAiXHhlNlx4YjBceGI0IiBlbmNvZGVkIHdpdGggbWFqb3IgdHlwZSAzIGFuZCBhZGRpdGlvbmFs
IGluZm8gb2YgMzEuCisgICAgICAgIHsgMHg3RiwgMHhlNiwgMHhiMCwgMHhiNCB9LAorICAgICAg
ICAvLyBNYWpvciB0eXBlIDcsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gMjg6IHVuYXNzaWduZWQu
CisgICAgICAgIHsgMHhGQyB9LAorICAgICAgICAvLyBNYWpvciB0eXBlIDcsIGFkZGl0aW9uYWwg
aW5mb3JtYXRpb24gMjk6IHVuYXNzaWduZWQuCisgICAgICAgIHsgMHhGRCB9LAorICAgICAgICAv
LyBNYWpvciB0eXBlIDcsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gMzA6IHVuYXNzaWduZWQuCisg
ICAgICAgIHsgMHhGRSB9LAorICAgICAgICAvLyBNYWpvciB0eXBlIDcsIGFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gMzE6ICJicmVhayIgc3RvcCBjb2RlIGZvcgorICAgICAgICAvLyBpbmRlZmluaXRl
LWxlbmd0aCBpdGVtcy4KKyAgICAgICAgeyAweEZGIH0sCisgICAgfTsKKworICAgIGZvciAoY29u
c3QgYXV0byYgaW5jb3JyZWN0X2Nib3IgOiBrVW5rbm93bkFkZGl0aW9uYWxJbmZvTGlzdCkgewor
ICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2RlOworICAgICAgICBzdGQ6
Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoaW5jb3JyZWN0X2Ni
b3IsICZlcnJvckNvZGUpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJy
b3I6OlVua25vd25BZGRpdGlvbmFsSW5mbyk7CisgICAgfQorfQorCitURVNUKENCT1JSZWFkZXJU
ZXN0LCBUZXN0VG9vTXVjaE5lc3RpbmdFcnJvcikKK3sKKyAgICBzdGF0aWMgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+IGtaZXJvRGVwdGhDQk9STGlzdFtdID0geworICAgICAgICAvLyBVbnNpZ25lZCBp
bnQgd2l0aCB2YWx1ZSAxMDAuCisgICAgICAgIHsgMHgxOCwgMHg2NCB9LAorICAgICAgICAvLyBD
Qk9SIGJ5dGVzdHJpbmcgb2YgbGVuZ3RoIDQuCisgICAgICAgIHsgMHg0NCwgMHgwMSwgMHgwMiwg
MHgwMywgMHgwNCB9LAorICAgICAgICAvLyBDQk9SIHN0cmluZyBvZiBjb3JyZXNwb25kaW5nIHRv
ICJJRVRGLgorICAgICAgICB7IDB4NjQsIDB4NDksIDB4NDUsIDB4NTQsIDB4NDYgfSwKKyAgICAg
ICAgLy8gRW1wdHkgQ0JPUiBhcnJheS4KKyAgICAgICAgeyAweDgwIH0sCisgICAgICAgIC8vIEVt
cHR5IENCT1IgTWFwCisgICAgICAgIHsgMHhhMCB9LAorICAgIH07CisKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHplcm9EZXB0aERhdGEgOiBrWmVyb0RlcHRoQ0JPUkxpc3QpIHsKKyAgICAgICAgQ0JP
UlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxD
Qk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHplcm9EZXB0aERhdGEsICZlcnJvckNv
ZGUsIDApOworICAgICAgICBFWFBFQ1RfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6Q0JPUk5v
RXJyb3IpOworICAgIH0KKworICAgIC8vIENvcnJlc3BvbmRzIHRvIGEgQ0JPUiBzdHJ1Y3R1cmUg
d2l0aCBhIG5lc3RpbmcgZGVwdGggb2YgMjoKKyAgICAvLyAgICAgIHsiYSI6IDEsCisgICAgLy8g
ICAgICAgImIiOiBbMiwgM119CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTmVz
dGVkQ0JPUkRhdGEgPSB7CisgICAgICAgIDB4YTIsIC8vIG1hcCBvZiAyIHBhaXJzCisgICAgICAg
IDB4NjEsIDB4NjEsIC8vICJhIgorICAgICAgICAweDAxLAorCisgICAgICAgIDB4NjEsIDB4NjIs
IC8vICJiIgorICAgICAgICAweDgyLCAvLyBhcnJheSB3aXRoIDIgZWxlbWVudHMKKyAgICAgICAg
MHgwMiwKKyAgICAgICAgMHgwMywKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVy
cm9yIGVycm9yQ29kZTsKKyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvclNpbmdsZUxh
eWVyTWF4ID0gQ0JPUlJlYWRlcjo6cmVhZChrTmVzdGVkQ0JPUkRhdGEsICZlcnJvckNvZGUsIDEp
OworICAgIEVYUEVDVF9GQUxTRShjYm9yU2luZ2xlTGF5ZXJNYXguaGFzX3ZhbHVlKCkpOworICAg
IEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OlRvb011
Y2hOZXN0aW5nKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yRG91YmxlTGF5
ZXJNYXggPSBDQk9SUmVhZGVyOjpyZWFkKGtOZXN0ZWRDQk9SRGF0YSwgJmVycm9yQ29kZSwgMik7
CisgICAgRVhQRUNUX1RSVUUoY2JvckRvdWJsZUxheWVyTWF4Lmhhc192YWx1ZSgpKTsKKyAgICBF
WFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpDQk9STm9F
cnJvcik7Cit9CisKK1RFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RPdXRPZk9yZGVyS2V5RXJyb3Ip
Cit7CisgICAgc3RhdGljIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBrTWFwc1dpdGhVbnNvcnRlZEtl
eXNbXSA9IHsKKyAgICAgICAgezB4YTIsIC8vIG1hcCB3aXRoIDIga2V5cyB3aXRoIHNhbWUgbWFq
b3IgdHlwZSBhbmQgbGVuZ3RoCisgICAgICAgICAgICAweDYxLCAweDYyLCAvLyBrZXkgImIiCisg
ICAgICAgICAgICAweDYxLCAweDQyLCAvLyB2YWx1ZSA6IkIiCisKKyAgICAgICAgICAgIDB4NjEs
IDB4NjEsIC8vIGtleSAiYSIgKG91dCBvZiBvcmRlciBieXRlLXdpc2UgbGV4aWNhbGx5KQorICAg
ICAgICAgICAgMHg2MSwgMHg0NSwgLy8gdmFsdWUgIkUiCisgICAgICAgIH0sCisgICAgICAgIHsw
eGEyLCAvLyBtYXAgd2l0aCAyIGtleXMgd2l0aCBkaWZmZXJlbnQgbWFqb3IgdHlwZQorICAgICAg
ICAgICAgMHg2MSwgMHg2MiwgLy8ga2V5ICJiIgorICAgICAgICAgICAgMHgwMiwgLy8gdmFsdWUg
MgorCisgICAgICAgICAgICAvLyBrZXkgMTAwMCAob3V0IG9mIG9yZGVyIHNpbmNlIGxvd2VyIG1h
am9yIHR5cGUgc29ydHMgZmlyc3QpCisgICAgICAgICAgICAweDE5LCAweDAzLCAweGU4LAorICAg
ICAgICAgICAgMHg2MSwgMHg2MSwgLy8gdmFsdWUgYQorICAgICAgICB9LAorICAgICAgICB7MHhh
MiwgLy8gbWFwIHdpdGggMiBrZXlzIHdpdGggc2FtZSBtYWpvciB0eXBlCisgICAgICAgICAgICAw
eDE5LCAweDAzLCAweGU4LCAvLyBrZXkgMTAwMCAgKG91dCBvZiBvcmRlciBkdWUgdG8gbG9uZ2Vy
IGxlbmd0aCkKKyAgICAgICAgICAgIDB4NjEsIDB4NjEsIC8vIHZhbHVlICJhIgorCisgICAgICAg
ICAgICAweDBhLCAvLyBrZXkgMTAKKyAgICAgICAgICAgIDB4NjEsIDB4NjJ9LCAvLyB2YWx1ZSAi
YiIKKyAgICB9OworCisgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHVuc29ydGVkTWFwIDoga01hcHNXaXRoVW5zb3J0ZWRLZXlzKSB7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0KKyAgICAgICAgQ0JPUlJl
YWRlcjo6cmVhZCh1bnNvcnRlZE1hcCwgJmVycm9yQ29kZSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENC
T1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6T3V0T2ZPcmRlcktleSk7CisgICAgfQorfQorCitURVNU
KENCT1JSZWFkZXJUZXN0LCBUZXN0RHVwbGljYXRlS2V5RXJyb3IpCit7CisgICAgc3RhdGljIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiBrTWFwV2l0aER1cGxpY2F0ZUtleSA9IHsKKyAgICAgICAgMHhh
NiwgLy8gbWFwIG9mIDYgcGFpcnM6CisgICAgICAgIDB4NjAsIC8vICIiCisgICAgICAgIDB4NjEs
IDB4MmUsIC8vICIuIgorCisgICAgICAgIDB4NjEsIDB4NjIsIC8vICJiIgorICAgICAgICAweDYx
LCAweDQyLCAvLyAiQiIKKworICAgICAgICAweDYxLCAweDYyLCAvLyAiYiIgKER1cGxpY2F0ZSBr
ZXkpCisgICAgICAgIDB4NjEsIDB4NDMsIC8vICJDIgorCisgICAgICAgIDB4NjEsIDB4NjQsIC8v
ICJkIgorICAgICAgICAweDYxLCAweDQ0LCAvLyAiRCIKKworICAgICAgICAweDYxLCAweDY1LCAv
LyAiZSIKKyAgICAgICAgMHg2MSwgMHg0NCwgLy8gIkQiCisKKyAgICAgICAgMHg2MiwgMHg2MSwg
MHg2MSwgLy8gImFhIgorICAgICAgICAweDYyLCAweDQxLCAweDQxLCAvLyAiQUEiCisgICAgfTsK
KworICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNvZGU7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoa01hcFdpdGhEdXBsaWNh
dGVLZXksICZlcnJvckNvZGUpOworICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsK
KyAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpE
dXBsaWNhdGVLZXkpOworfQorCisvLyBMZXZlcmFnaW5nIE1hcmt1cyBLdWhu4oCZcyBVVEYtOCBk
ZWNvZGVyIHN0cmVzcyB0ZXN0LiBTZWUKKy8vIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2sy
NS91Y3MvZXhhbXBsZXMvVVRGLTgtdGVzdC50eHQgZm9yIGRldGFpbHMuCitURVNUKENCT1JSZWFk
ZXJUZXN0LCBUZXN0SW5jb3JyZWN0U3RyaW5nRW5jb2RpbmdFcnJvcikKK3sKKyAgICBzdGF0aWMg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+IHV0ZjhDaGFyYWN0ZXJFbmNvZGluZ3NbXSA9IHsKKyAgICAg
ICAgLy8gQ29ycmVzcG9uZHMgdG8gdXRmOCBlbmNvZGluZyBvZiAi7Z+/IiAoc2VjdGlvbiAyLjMu
MSBvZiBzdHJlc3MgdGVzdCkuCisgICAgICAgIHsgMHg2MywgMHhFRCwgMHg5RiwgMHhCRiB9LAor
ICAgICAgICAvLyBDb3JyZXNwb25kcyB0byB1dGY4IGVuY29kaW5nIG9mICLugIAiIChzZWN0aW9u
IDIuMy4yIG9mIHN0cmVzcyB0ZXN0KS4KKyAgICAgICAgeyAweDYzLCAweEVFLCAweDgwLCAweDgw
IH0sCisgICAgICAgIC8vIENvcnJlc3BvbmRzIHRvIHV0ZjggZW5jb2Rpbmcgb2YgIu+/vSIgIChz
ZWN0aW9uIDIuMy4zIG9mIHN0cmVzcyB0ZXN0KS4KKyAgICAgICAgeyAweDYzLCAweEVGLCAweEJG
LCAweEJEIH0sCisgICAgfTsKKworICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNv
ZGU7CisgICAgZm9yIChjb25zdCBhdXRvJiBjYm9yX2J5dGUgOiB1dGY4Q2hhcmFjdGVyRW5jb2Rp
bmdzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjb3JyZWN0bHlFbmNvZGVk
Q2JvciA9IENCT1JSZWFkZXI6OnJlYWQoY2Jvcl9ieXRlLCAmZXJyb3JDb2RlKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoY29ycmVjdGx5RW5jb2RlZENib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBF
WFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpDQk9STm9F
cnJvcik7CisgICAgfQorCisgICAgLy8gSW5jb3JyZWN0IFVURjggZW5jb2RpbmcgcmVmZXJlbmNl
ZCBieSBzZWN0aW9uIDMuNS4zIG9mIHRoZSBzdHJlc3MgdGVzdC4KKyAgICBWZWN0b3I8dWludDhf
dD4gaW1wb3NzaWJsZV91dGZfYnl0ZSB7IDB4NjQsIDB4ZmUsIDB4ZmUsIDB4ZmYsIDB4ZmYgfTsK
KyAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gaW5jb3JyZWN0bHlFbmNvZGVkQ2JvciA9IENC
T1JSZWFkZXI6OnJlYWQoaW1wb3NzaWJsZV91dGZfYnl0ZSwgJmVycm9yQ29kZSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGluY29ycmVjdGx5RW5jb2RlZENib3IpOworICAgIEVYUEVDVF9UUlVFKGVycm9y
Q29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OkludmFsaWRVVEY4KTsKK30KKworVEVT
VChDQk9SUmVhZGVyVGVzdCwgVGVzdEV4dHJhbmVvdXNDQk9SRGF0YUVycm9yKQoreworICAgIHN0
YXRpYyBjb25zdCBWZWN0b3I8dWludDhfdD4gemVyb1BhZGRlZENib3JMaXN0W10gPSB7CisgICAg
ICAgIC8vIDEgZXh0cmEgYnl0ZSBhZnRlciBhIDItYnl0ZSB1bnNpZ25lZCBpbnQuCisgICAgICAg
IHsgMHgxOSwgMHgwMywgMHgwNSwgMHgwMCB9LAorICAgICAgICAvLyAxIGV4dHJhIGJ5dGUgYWZ0
ZXIgYSA0LWJ5dGUgY2JvciBieXRlIGFycmF5LgorICAgICAgICB7IDB4NDQsIDB4MDEsIDB4MDIs
IDB4MDMsIDB4MDQsIDB4MDAgfSwKKyAgICAgICAgLy8gMSBleHRyYSBieXRlIGFmdGVyIGEgNC1i
eXRlIHN0cmluZy4KKyAgICAgICAgeyAweDY0LCAweDQ5LCAweDQ1LCAweDU0LCAweDQ2LCAweDAw
IH0sCisgICAgICAgIC8vIDEgZXh0cmEgYnl0ZSBhZnRlciBDQk9SIGFycmF5IG9mIGxlbmd0aCAy
LgorICAgICAgICB7IDB4ODIsIDB4MDEsIDB4MDIsIDB4MDAgfSwKKyAgICAgICAgLy8gMSBleHRy
YSBrZXkgdmFsdWUgcGFpciBhZnRlciBDQk9SIG1hcCBvZiBzaXplIDIuCisgICAgICAgIHsgMHhh
MSwgMHg2MSwgMHg2MywgMHgwMiwgMHg2MSwgMHg2NCwgMHgwMyB9LAorICAgIH07CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGV4dHJhbmVvdXNfY2JvckRhdGEgOiB6ZXJvUGFkZGVkQ2Jvckxpc3Qp
IHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGV4dHJhbmVv
dXNfY2JvckRhdGEsICZlcnJvckNvZGUpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNf
dmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpE
ZWNvZGVyRXJyb3I6OkV4dHJhbmVvdXNEYXRhKTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlJlYWRl
clRlc3QsIFRlc3RVbnN1cHBvcnRlZFNpbXBsZXZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBW
ZWN0b3I8dWludDhfdD4gdW5zdXBwb3J0ZWRTaW1wbGVWYWx1ZXNbXSA9IHsKKyAgICAgICAgLy8g
U2ltcGxlIHZhbHVlICgwLCB1bmFzc2lnbmVkKQorICAgICAgICB7IDB4RTAgfSwKKyAgICAgICAg
Ly8gU2ltcGxlIHZhbHVlICgxOSwgdW5hc3NpZ25lZCkKKyAgICAgICAgeyAweEYzIH0sCisgICAg
ICAgIC8vIFNpbXBsZSB2YWx1ZSAoMjQsIHJlc2VydmVkKQorICAgICAgICB7IDB4RjgsIDB4MTgg
fSwKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgyOCwgcmVzZXJ2ZWQpCisgICAgICAgIHsgMHhG
OCwgMHgxQyB9LAorICAgICAgICAvLyBTaW1wbGUgdmFsdWUgKDI5LCByZXNlcnZlZCkKKyAgICAg
ICAgeyAweEY4LCAweDFEIH0sCisgICAgICAgIC8vIFNpbXBsZSB2YWx1ZSAoMzAsIHJlc2VydmVk
KQorICAgICAgICB7IDB4RjgsIDB4MUUgfSwKKyAgICAgICAgLy8gU2ltcGxlIHZhbHVlICgzMSwg
cmVzZXJ2ZWQpCisgICAgICAgIHsgMHhGOCwgMHgxRiB9LAorICAgICAgICAvLyBTaW1wbGUgdmFs
dWUgKDMyLCB1bmFzc2lnbmVkKQorICAgICAgICB7IDB4RjgsIDB4MjAgfSwKKyAgICAgICAgLy8g
U2ltcGxlIHZhbHVlICgyNTUsIHVuYXNzaWduZWQpCisgICAgICAgIHsgMHhGOCwgMHhGRiB9LAor
ICAgIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHVuc3VwcG9ydGVkU2ltcGxlVmFsIDogdW5z
dXBwb3J0ZWRTaW1wbGVWYWx1ZXMpIHsKKyAgICAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9y
IGVycm9yQ29kZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9S
UmVhZGVyOjpyZWFkKHVuc3VwcG9ydGVkU2ltcGxlVmFsLCAmZXJyb3JDb2RlKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcnJv
ckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpVbnN1cHBvcnRlZFNpbXBsZVZhbHVl
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SVmFsdWVUZXN0LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SVmFsdWVUZXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZDdkOTE3ZThkZjRiMWIxZmM5YmQwZTI0OWUyYWQ4Nzc0YzgwNzc4Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NCT1JWYWx1ZVRlc3Qu
Y3BwCkBAIC0wLDAgKzEsMzgxIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ0JP
UlZhbHVlLmg+CisKKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK3VzaW5nIG5hbWVzcGFjZSBjYm9yOworCisvLyBUZXN0IGNvbnN0cnVjdG9ycworVEVT
VChDQk9SVmFsdWVUZXN0LCBDb25zdHJ1Y3RVbnNpZ25lZCkKK3sKKyAgICBDQk9SVmFsdWUgdmFs
dWUoMzcpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6VW5zaWduZWQgPT0gdmFs
dWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoMzd1LCB2YWx1ZS5nZXRJbnRlZ2VyKCkpOworfQor
CitURVNUKENCT1JWYWx1ZVRlc3QsIENvbnN0cnVjdE5lZ2F0aXZlKQoreworICAgIENCT1JWYWx1
ZSB2YWx1ZSgtMSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpOZWdhdGl2ZSA9
PSB2YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9FUSgtMSwgdmFsdWUuZ2V0SW50ZWdlcigpKTsK
K30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBDb25zdHJ1Y3RTdHJpbmdGcm9tQ29uc3RDaGFyUHRy
KQoreworICAgIGNvbnN0IGNoYXIqIHN0ciA9ICJmb29iYXIiOworICAgIENCT1JWYWx1ZSB2YWx1
ZShzdHIpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nID09IHZhbHVl
LnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoImZvb2JhciIgPT0gdmFsdWUuZ2V0U3RyaW5nKCkp
OworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIENvbnN0cnVjdFN0cmluZ0Zyb21XVEZTdHJpbmdD
b25zdFJlZikKK3sKKyAgICBTdHJpbmcgc3RyID0gImZvb2JhciI7CisgICAgQ0JPUlZhbHVlIHZh
bHVlKHN0cik7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTdHJpbmcgPT0gdmFs
dWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSgiZm9vYmFyIiA9PSB2YWx1ZS5nZXRTdHJpbmco
KSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29uc3RydWN0U3RyaW5nRnJvbVdURlN0cmlu
Z1JlZlJlZikKK3sKKyAgICBTdHJpbmcgc3RyID0gImZvb2JhciI7CisgICAgQ0JPUlZhbHVlIHZh
bHVlKFdURk1vdmUoc3RyKSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTdHJp
bmcgPT0gdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSgiZm9vYmFyIiA9PSB2YWx1ZS5n
ZXRTdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29uc3RydWN0Qnl0ZXN0cmlu
ZykKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoQ0JPUlZhbHVlOjpCaW5hcnlWYWx1ZSh7IDB4Riwg
MHgwLCAweDAsIDB4QiwgMHhBLCAweDIgfSkpOworICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6
VHlwZTo6Qnl0ZVN0cmluZyA9PSB2YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JW
YWx1ZTo6QmluYXJ5VmFsdWUoeyAweEYsIDB4MCwgMHgwLCAweEIsIDB4QSwgMHgyIH0pID09IHZh
bHVlLmdldEJ5dGVTdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29uc3RydWN0
QXJyYXkpCit7CisgICAgQ0JPUlZhbHVlOjpBcnJheVZhbHVlIGFycmF5OworICAgIGFycmF5LmFw
cGVuZChDQk9SVmFsdWUoImZvbyIpKTsKKyAgICB7CisgICAgICAgIENCT1JWYWx1ZSB2YWx1ZShh
cnJheSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QXJyYXkgPT0gdmFs
dWUudHlwZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDF1LCB2YWx1ZS5nZXRBcnJheSgpLnNpemUo
KSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nID09IHZhbHVl
LmdldEFycmF5KClbMF0udHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoImZvbyIgPT0gdmFs
dWUuZ2V0QXJyYXkoKVswXS5nZXRTdHJpbmcoKSk7CisgICAgfQorCisgICAgYXJyYXkubGFzdCgp
ID0gQ0JPUlZhbHVlKCJiYXIiKTsKKyAgICB7CisgICAgICAgIENCT1JWYWx1ZSB2YWx1ZShXVEZN
b3ZlKGFycmF5KSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6QXJyYXkg
PT0gdmFsdWUudHlwZSgpKTsKKyAgICAgICAgQVNTRVJUX0VRKDF1LCB2YWx1ZS5nZXRBcnJheSgp
LnNpemUoKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nID09
IHZhbHVlLmdldEFycmF5KClbMF0udHlwZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoImJhciIg
PT0gdmFsdWUuZ2V0QXJyYXkoKVswXS5nZXRTdHJpbmcoKSk7CisgICAgfQorfQorCitURVNUKENC
T1JWYWx1ZVRlc3QsIENvbnN0cnVjdE1hcCkKK3sKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIG1h
cDsKKyAgICBjb25zdCBDQk9SVmFsdWUga2V5Rm9vKCJmb28iKTsKKyAgICBtYXBbQ0JPUlZhbHVl
KCJmb28iKV0gPSBDQk9SVmFsdWUoImJhciIpOworICAgIHsKKyAgICAgICAgQ0JPUlZhbHVlIHZh
bHVlKG1hcCk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6TWFwID09IHZh
bHVlLnR5cGUoKSk7CisgICAgICAgIEFTU0VSVF9FUSh2YWx1ZS5nZXRNYXAoKS5jb3VudChrZXlG
b28pLCAxdSk7CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nID09
IHZhbHVlLmdldE1hcCgpLmZpbmQoa2V5Rm9vKS0+c2Vjb25kLnR5cGUoKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCJiYXIiID09IHZhbHVlLmdldE1hcCgpLmZpbmQoa2V5Rm9vKS0+c2Vjb25kLmdl
dFN0cmluZygpKTsKKyAgICB9CisKKyAgICBtYXBbQ0JPUlZhbHVlKCJmb28iKV0gPSBDQk9SVmFs
dWUoImJheiIpOworICAgIHsKKyAgICAgICAgQ0JPUlZhbHVlIHZhbHVlKFdURk1vdmUobWFwKSk7
CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6TWFwID09IHZhbHVlLnR5cGUo
KSk7CisgICAgICAgIEFTU0VSVF9FUSh2YWx1ZS5nZXRNYXAoKS5jb3VudChrZXlGb28pLCAxdSk7
CisgICAgICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U3RyaW5nID09IHZhbHVlLmdl
dE1hcCgpLmZpbmQoa2V5Rm9vKS0+c2Vjb25kLnR5cGUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KCJiYXoiID09IHZhbHVlLmdldE1hcCgpLmZpbmQoa2V5Rm9vKS0+c2Vjb25kLmdldFN0cmluZygp
KTsKKyAgICB9Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29uc3RydWN0U2ltcGxlVmFsdWUp
Cit7CisgICAgQ0JPUlZhbHVlIGZhbHNlVmFsdWUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6RmFs
c2VWYWx1ZSk7CisgICAgQVNTRVJUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTaW1wbGVWYWx1ZSA9
PSBmYWxzZVZhbHVlLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpTaW1wbGVW
YWx1ZTo6RmFsc2VWYWx1ZSA9PSBmYWxzZVZhbHVlLmdldFNpbXBsZVZhbHVlKCkpOworCisgICAg
Q0JPUlZhbHVlIHRydWVWYWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpUcnVlVmFsdWUpOwor
ICAgIEFTU0VSVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxlVmFsdWUgPT0gdHJ1ZVZhbHVl
LnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VHJ1ZVZh
bHVlID09IHRydWVWYWx1ZS5nZXRTaW1wbGVWYWx1ZSgpKTsKKworICAgIENCT1JWYWx1ZSBudWxs
VmFsdWUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6TnVsbFZhbHVlKTsKKyAgICBBU1NFUlRfVFJV
RShDQk9SVmFsdWU6OlR5cGU6OlNpbXBsZVZhbHVlID09IG51bGxWYWx1ZS50eXBlKCkpOworICAg
IEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6Ok51bGxWYWx1ZSA9PSBudWxsVmFs
dWUuZ2V0U2ltcGxlVmFsdWUoKSk7CisKKyAgICBDQk9SVmFsdWUgdW5kZWZpbmVkVmFsdWUoQ0JP
UlZhbHVlOjpTaW1wbGVWYWx1ZTo6VW5kZWZpbmVkKTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFs
dWU6OlR5cGU6OlNpbXBsZVZhbHVlID09IHVuZGVmaW5lZFZhbHVlLnR5cGUoKSk7CisgICAgRVhQ
RUNUX1RSVUUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VW5kZWZpbmVkID09IHVuZGVmaW5lZFZh
bHVlLmdldFNpbXBsZVZhbHVlKCkpOworfQorCisvLyBUZXN0IGNvcHkgY29uc3RydWN0b3JzCitU
RVNUKENCT1JWYWx1ZVRlc3QsIENvcHlVbnNpZ25lZCkKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUo
NzQpOworICAgIENCT1JWYWx1ZSBjb3BpZWRWYWx1ZSh2YWx1ZS5jbG9uZSgpKTsKKyAgICBBU1NF
UlRfVFJVRSh2YWx1ZS50eXBlKCkgPT0gY29waWVkVmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1Rf
RVEodmFsdWUuZ2V0SW50ZWdlcigpLCBjb3BpZWRWYWx1ZS5nZXRJbnRlZ2VyKCkpOworCisgICAg
Q0JPUlZhbHVlIGJsYW5rOworCisgICAgYmxhbmsgPSB2YWx1ZS5jbG9uZSgpOworICAgIEFTU0VS
VF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9FUSh2YWx1
ZS5nZXRJbnRlZ2VyKCksIGJsYW5rLmdldEludGVnZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVl
VGVzdCwgQ29weU5lZ2F0aXZlSW50KQoreworICAgIENCT1JWYWx1ZSB2YWx1ZSgtNzQpOworICAg
IENCT1JWYWx1ZSBjb3BpZWRWYWx1ZSh2YWx1ZS5jbG9uZSgpKTsKKyAgICBBU1NFUlRfVFJVRSh2
YWx1ZS50eXBlKCkgPT0gY29waWVkVmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEodmFsdWUu
Z2V0SW50ZWdlcigpLCBjb3BpZWRWYWx1ZS5nZXRJbnRlZ2VyKCkpOworCisgICAgQ0JPUlZhbHVl
IGJsYW5rOworCisgICAgYmxhbmsgPSB2YWx1ZS5jbG9uZSgpOworICAgIEFTU0VSVF9UUlVFKHZh
bHVlLnR5cGUoKSA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5nZXRJbnRl
Z2VyKCksIGJsYW5rLmdldEludGVnZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgQ29w
eVN0cmluZykKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoImZvb2JhciIpOworICAgIENCT1JWYWx1
ZSBjb3BpZWRWYWx1ZSh2YWx1ZS5jbG9uZSgpKTsKKyAgICBBU1NFUlRfVFJVRSh2YWx1ZS50eXBl
KCkgPT0gY29waWVkVmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS5nZXRTdHJp
bmcoKSA9PSBjb3BpZWRWYWx1ZS5nZXRTdHJpbmcoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7
CisKKyAgICBibGFuayA9IHZhbHVlLmNsb25lKCk7CisgICAgQVNTRVJUX1RSVUUodmFsdWUudHlw
ZSgpID09IGJsYW5rLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUuZ2V0U3RyaW5nKCkg
PT0gYmxhbmsuZ2V0U3RyaW5nKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIENvcHlCeXRl
c3RyaW5nKQoreworICAgIENCT1JWYWx1ZSB2YWx1ZShDQk9SVmFsdWU6OkJpbmFyeVZhbHVlKHsg
MHhGLCAweDAsIDB4MCwgMHhCLCAweEEsIDB4MiB9KSk7CisgICAgQ0JPUlZhbHVlIGNvcGllZFZh
bHVlKHZhbHVlLmNsb25lKCkpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBjb3Bp
ZWRWYWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLmdldEJ5dGVTdHJpbmcoKSA9
PSBjb3BpZWRWYWx1ZS5nZXRCeXRlU3RyaW5nKCkpOworCisgICAgQ0JPUlZhbHVlIGJsYW5rOwor
CisgICAgYmxhbmsgPSB2YWx1ZS5jbG9uZSgpOworICAgIEFTU0VSVF9UUlVFKHZhbHVlLnR5cGUo
KSA9PSBibGFuay50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLmdldEJ5dGVTdHJpbmco
KSA9PSBibGFuay5nZXRCeXRlU3RyaW5nKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIENv
cHlBcnJheSkKK3sKKyAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgYXJyYXk7CisgICAgYXJyYXku
YXBwZW5kKDEyMyk7CisgICAgQ0JPUlZhbHVlIHZhbHVlKFdURk1vdmUoYXJyYXkpKTsKKworICAg
IENCT1JWYWx1ZSBjb3BpZWRWYWx1ZSh2YWx1ZS5jbG9uZSgpKTsKKyAgICBBU1NFUlRfRVEoMXUs
IGNvcGllZFZhbHVlLmdldEFycmF5KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfVFJVRShjb3BpZWRW
YWx1ZS5nZXRBcnJheSgpWzBdLmlzVW5zaWduZWQoKSk7CisgICAgRVhQRUNUX0VRKHZhbHVlLmdl
dEFycmF5KClbMF0uZ2V0SW50ZWdlcigpLCBjb3BpZWRWYWx1ZS5nZXRBcnJheSgpWzBdLmdldElu
dGVnZXIoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisgICAgYmxhbmsgPSB2YWx1ZS5jbG9u
ZSgpOworICAgIEVYUEVDVF9FUSgxdSwgYmxhbmsuZ2V0QXJyYXkoKS5zaXplKCkpOworfQorCitU
RVNUKENCT1JWYWx1ZVRlc3QsIENvcHlNYXApCit7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBt
YXA7CisgICAgQ0JPUlZhbHVlIGtleUEoImEiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKCJhIildID0g
Q0JPUlZhbHVlKDEyMyk7CisgICAgQ0JPUlZhbHVlIHZhbHVlKFdURk1vdmUobWFwKSk7CisKKyAg
ICBDQk9SVmFsdWUgY29waWVkVmFsdWUodmFsdWUuY2xvbmUoKSk7CisgICAgRVhQRUNUX0VRKDF1
LCBjb3BpZWRWYWx1ZS5nZXRNYXAoKS5zaXplKCkpOworICAgIEFTU0VSVF9FUSh2YWx1ZS5nZXRN
YXAoKS5jb3VudChrZXlBKSwgMXUpOworICAgIEFTU0VSVF9FUShjb3BpZWRWYWx1ZS5nZXRNYXAo
KS5jb3VudChrZXlBKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGNvcGllZFZhbHVlLmdldE1hcCgp
LmZpbmQoa2V5QSktPnNlY29uZC5pc1Vuc2lnbmVkKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5n
ZXRNYXAoKS5maW5kKGtleUEpLT5zZWNvbmQuZ2V0SW50ZWdlcigpLCBjb3BpZWRWYWx1ZS5nZXRN
YXAoKS5maW5kKGtleUEpLT5zZWNvbmQuZ2V0SW50ZWdlcigpKTsKKworICAgIENCT1JWYWx1ZSBi
bGFuazsKKyAgICBibGFuayA9IHZhbHVlLmNsb25lKCk7CisgICAgRVhQRUNUX0VRKDF1LCBibGFu
ay5nZXRNYXAoKS5zaXplKCkpOworICAgIEFTU0VSVF9FUShibGFuay5nZXRNYXAoKS5jb3VudChr
ZXlBKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKGJsYW5rLmdldE1hcCgpLmZpbmQoa2V5QSktPnNl
Y29uZC5pc1Vuc2lnbmVkKCkpOworICAgIEVYUEVDVF9FUSh2YWx1ZS5nZXRNYXAoKS5maW5kKGtl
eUEpLT5zZWNvbmQuZ2V0SW50ZWdlcigpLCBibGFuay5nZXRNYXAoKS5maW5kKGtleUEpLT5zZWNv
bmQuZ2V0SW50ZWdlcigpKTsKK30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBDb3B5U2ltcGxlVmFs
dWUpCit7CisgICAgQ0JPUlZhbHVlIHZhbHVlKENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlRydWVW
YWx1ZSk7CisgICAgQ0JPUlZhbHVlIGNvcGllZFZhbHVlKHZhbHVlLmNsb25lKCkpOworICAgIEVY
UEVDVF9UUlVFKHZhbHVlLnR5cGUoKSA9PSBjb3BpZWRWYWx1ZS50eXBlKCkpOworICAgIEVYUEVD
VF9UUlVFKHZhbHVlLmdldFNpbXBsZVZhbHVlKCkgPT0gY29waWVkVmFsdWUuZ2V0U2ltcGxlVmFs
dWUoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisKKyAgICBibGFuayA9IHZhbHVlLmNsb25l
KCk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUudHlwZSgpID09IGJsYW5rLnR5cGUoKSk7CisgICAg
RVhQRUNUX1RSVUUodmFsdWUuZ2V0U2ltcGxlVmFsdWUoKSA9PSBibGFuay5nZXRTaW1wbGVWYWx1
ZSgpKTsKK30KKworLy8gVGVzdCBtb3ZlIGNvbnN0cnVjdG9ycyBhbmQgbW92ZS1hc3NpZ25tZW50
CitURVNUKENCT1JWYWx1ZVRlc3QsIE1vdmVVbnNpZ25lZCkKK3sKKyAgICBDQk9SVmFsdWUgdmFs
dWUoNzQpOworICAgIENCT1JWYWx1ZSBtb3ZlZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAg
RVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpVbnNpZ25lZCA9PSBtb3ZlZF92YWx1ZS50eXBl
KCkpOworICAgIEVYUEVDVF9FUSg3NHUsIG1vdmVkX3ZhbHVlLmdldEludGVnZXIoKSk7CisKKyAg
ICBDQk9SVmFsdWUgYmxhbms7CisKKyAgICBibGFuayA9IENCT1JWYWx1ZSg2NTQpOworICAgIEVY
UEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6VW5zaWduZWQgPT0gYmxhbmsudHlwZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoNjU0dSwgYmxhbmsuZ2V0SW50ZWdlcigpKTsKK30KKworVEVTVChDQk9SVmFs
dWVUZXN0LCBNb3ZlTmVnYXRpdmVJbnRlZ2VyKQoreworICAgIENCT1JWYWx1ZSB2YWx1ZSgtNzQp
OworICAgIENCT1JWYWx1ZSBtb3ZlZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgRVhQRUNU
X1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpOZWdhdGl2ZSA9PSBtb3ZlZF92YWx1ZS50eXBlKCkpOwor
ICAgIEVYUEVDVF9FUSgtNzQsIG1vdmVkX3ZhbHVlLmdldEludGVnZXIoKSk7CisKKyAgICBDQk9S
VmFsdWUgYmxhbms7CisKKyAgICBibGFuayA9IENCT1JWYWx1ZSgtNjU0KTsKKyAgICBFWFBFQ1Rf
VFJVRShDQk9SVmFsdWU6OlR5cGU6Ok5lZ2F0aXZlID09IGJsYW5rLnR5cGUoKSk7CisgICAgRVhQ
RUNUX0VRKC02NTQsIGJsYW5rLmdldEludGVnZXIoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVz
dCwgTW92ZVN0cmluZykKK3sKKyAgICBDQk9SVmFsdWUgdmFsdWUoImZvb2JhciIpOworICAgIENC
T1JWYWx1ZSBtb3ZlZF92YWx1ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JP
UlZhbHVlOjpUeXBlOjpTdHJpbmcgPT0gbW92ZWRfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRSgiZm9vYmFyIiA9PSBtb3ZlZF92YWx1ZS5nZXRTdHJpbmcoKSk7CisKKyAgICBDQk9SVmFs
dWUgYmxhbms7CisKKyAgICBibGFuayA9IENCT1JWYWx1ZSgiZm9vYmFyIik7CisgICAgRVhQRUNU
X1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpTdHJpbmcgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRSgiZm9vYmFyIiA9PSBibGFuay5nZXRTdHJpbmcoKSk7Cit9CisKK1RFU1QoQ0JPUlZh
bHVlVGVzdCwgTW92ZUJ5dGVzdHJpbmcpCit7CisgICAgY29uc3QgQ0JPUlZhbHVlOjpCaW5hcnlW
YWx1ZSBieXRlcyh7IDB4RiwgMHgwLCAweDAsIDB4QiwgMHhBLCAweDIgfSk7CisgICAgQ0JPUlZh
bHVlIHZhbHVlKGJ5dGVzKTsKKyAgICBDQk9SVmFsdWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1
ZSkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6VHlwZTo6Qnl0ZVN0cmluZyA9PSBtb3Zl
ZF92YWx1ZS50eXBlKCkpOworICAgIEVYUEVDVF9UUlVFKGJ5dGVzID09IG1vdmVkX3ZhbHVlLmdl
dEJ5dGVTdHJpbmcoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisKKyAgICBibGFuayA9IENC
T1JWYWx1ZShieXRlcyk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpCeXRlU3Ry
aW5nID09IGJsYW5rLnR5cGUoKSk7CisgICAgRVhQRUNUX1RSVUUoYnl0ZXMgPT0gYmxhbmsuZ2V0
Qnl0ZVN0cmluZygpKTsKK30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBNb3ZlQ29uc3RydWN0TWFw
KQoreworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbWFwOworICAgIGNvbnN0IENCT1JWYWx1ZSBr
ZXlBKCJhIik7CisgICAgbWFwW0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxMjMpOworCisg
ICAgQ0JPUlZhbHVlIHZhbHVlKFdURk1vdmUobWFwKSk7CisgICAgQ0JPUlZhbHVlIG1vdmVkX3Zh
bHVlKFdURk1vdmUodmFsdWUpKTsKKyAgICBBU1NFUlRfVFJVRShDQk9SVmFsdWU6OlR5cGU6Ok1h
cCA9PSBtb3ZlZF92YWx1ZS50eXBlKCkpOworICAgIEFTU0VSVF9FUShtb3ZlZF92YWx1ZS5nZXRN
YXAoKS5jb3VudChrZXlBKSwgMXUpOworICAgIEFTU0VSVF9UUlVFKG1vdmVkX3ZhbHVlLmdldE1h
cCgpLmZpbmQoa2V5QSktPnNlY29uZC5pc1Vuc2lnbmVkKCkpOworICAgIEVYUEVDVF9FUSgxMjN1
LCBtb3ZlZF92YWx1ZS5nZXRNYXAoKS5maW5kKGtleUEpLT5zZWNvbmQuZ2V0SW50ZWdlcigpKTsK
K30KKworVEVTVChDQk9SVmFsdWVUZXN0LCBNb3ZlQXNzaWduTWFwKQoreworICAgIENCT1JWYWx1
ZTo6TWFwVmFsdWUgbWFwOworICAgIGNvbnN0IENCT1JWYWx1ZSBrZXlBKCJhIik7CisgICAgbWFw
W0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxMjMpOworCisgICAgQ0JPUlZhbHVlIGJsYW5r
OworICAgIGJsYW5rID0gQ0JPUlZhbHVlKFdURk1vdmUobWFwKSk7CisgICAgQVNTRVJUX1RSVUUo
YmxhbmsuaXNNYXAoKSk7CisgICAgQVNTRVJUX0VRKGJsYW5rLmdldE1hcCgpLmNvdW50KGtleUEp
LCAxdSk7CisgICAgQVNTRVJUX1RSVUUoYmxhbmsuZ2V0TWFwKCkuZmluZChrZXlBKS0+c2Vjb25k
LmlzVW5zaWduZWQoKSk7CisgICAgRVhQRUNUX0VRKDEyM3UsIGJsYW5rLmdldE1hcCgpLmZpbmQo
a2V5QSktPnNlY29uZC5nZXRJbnRlZ2VyKCkpOworfQorCitURVNUKENCT1JWYWx1ZVRlc3QsIE1v
dmVBcnJheSkKK3sKKyAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgYXJyYXk7CisgICAgYXJyYXku
YXBwZW5kKDEyMyk7CisgICAgQ0JPUlZhbHVlIHZhbHVlKGFycmF5KTsKKyAgICBDQk9SVmFsdWUg
bW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1ZSkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1ZTo6
VHlwZTo6QXJyYXkgPT0gbW92ZWRfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTIzdSwg
bW92ZWRfdmFsdWUuZ2V0QXJyYXkoKS5sYXN0KCkuZ2V0SW50ZWdlcigpKTsKKworICAgIENCT1JW
YWx1ZSBibGFuazsKKyAgICBibGFuayA9IENCT1JWYWx1ZShXVEZNb3ZlKGFycmF5KSk7CisgICAg
RVhQRUNUX1RSVUUoQ0JPUlZhbHVlOjpUeXBlOjpBcnJheSA9PSBibGFuay50eXBlKCkpOworICAg
IEVYUEVDVF9FUSgxMjN1LCBibGFuay5nZXRBcnJheSgpLmxhc3QoKS5nZXRJbnRlZ2VyKCkpOwor
fQorCitURVNUKENCT1JWYWx1ZVRlc3QsIE1vdmVTaW1wbGVWYWx1ZSkKK3sKKyAgICBDQk9SVmFs
dWUgdmFsdWUoQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6VW5kZWZpbmVkKTsKKyAgICBDQk9SVmFs
dWUgbW92ZWRfdmFsdWUoV1RGTW92ZSh2YWx1ZSkpOworICAgIEVYUEVDVF9UUlVFKENCT1JWYWx1
ZTo6VHlwZTo6U2ltcGxlVmFsdWUgPT0gbW92ZWRfdmFsdWUudHlwZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVbmRlZmluZWQgPT0gbW92ZWRfdmFsdWUuZ2V0
U2ltcGxlVmFsdWUoKSk7CisKKyAgICBDQk9SVmFsdWUgYmxhbms7CisKKyAgICBibGFuayA9IENC
T1JWYWx1ZShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVbmRlZmluZWQpOworICAgIEVYUEVDVF9U
UlVFKENCT1JWYWx1ZTo6VHlwZTo6U2ltcGxlVmFsdWUgPT0gYmxhbmsudHlwZSgpKTsKKyAgICBF
WFBFQ1RfVFJVRShDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpVbmRlZmluZWQgPT0gYmxhbmsuZ2V0
U2ltcGxlVmFsdWUoKSk7Cit9CisKK1RFU1QoQ0JPUlZhbHVlVGVzdCwgU2VsZlN3YXApCit7Cisg
ICAgQ0JPUlZhbHVlIHRlc3QoMSk7CisgICAgc3RkOjpzd2FwKHRlc3QsIHRlc3QpOworICAgIEVY
UEVDVF9FUSh0ZXN0LmdldEludGVnZXIoKSwgMXUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q0JPUldyaXRlclRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NC
T1JXcml0ZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWM4NDY1YjBhNDNkYjAxODMyZjk3ZDMxZjk4
MGE5MGFhZDc2ZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NCT1JXcml0ZXJUZXN0LmNwcApAQCAtMCwwICsxLDQ2MiBAQAorLy8gQ29weXJp
Z2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Ky8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisv
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NCT1JXcml0ZXIuaD4KKworI2luY2x1ZGUgPGxpbWl0cz4K
KworLy8gTGV2ZXJhZ2luZyBSRkMgNzA0OSBleGFtcGxlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNv
bS9jYm9yL3Rlc3QtdmVjdG9ycy9ibG9iL21hc3Rlci9hcHBlbmRpeF9hLmpzb24uCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK3VzaW5nIG5hbWVzcGFjZSBjYm9yOworCitib29sIGVxKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY2JvciwgY29uc3QgQ1N0cmluZyYgZXhwZWN0KQoreworICAg
IGlmIChjYm9yLnNpemUoKSAhPSBleHBlY3QubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gIW1lbWNtcChjYm9yLmRhdGEoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oZXhwZWN0LmRhdGEoKSksIGNib3Iuc2l6ZSgpKTsKK30KKworYm9vbCBlcShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGNib3IsIGNvbnN0IHVpbnQ4X3QqIGV4cGVjdCwgY29uc3Qg
c2l6ZV90IGV4cGVjdExlbmd0aCkKK3sKKyAgICBpZiAoY2Jvci5zaXplKCkgIT0gZXhwZWN0TGVu
Z3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtZW1jbXAoY2Jvci5kYXRh
KCksIGV4cGVjdCwgZXhwZWN0TGVuZ3RoKTsKK30KKworVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVz
dFdyaXRlVWludCkKK3sKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IGludDY0
X3QgdmFsdWU7CisgICAgICAgIGNvbnN0IENTdHJpbmcgY2JvcjsKKyAgICB9IFVpbnRUZXN0Q2Fz
ZTsKKworICAgIHN0YXRpYyBjb25zdCBVaW50VGVzdENhc2Uga1VpbnRUZXN0Q2FzZXNbXSA9IHsK
KyAgICAgICAgLy8gUmVtaW5kZXI6IG11c3Qgc3BlY2lmeSBsZW5ndGggd2hlbiBjcmVhdGluZyBz
dHJpbmcgcGllY2VzCisgICAgICAgIC8vIHdpdGggbnVsbCBieXRlcywgZWxzZSB0aGUgc3RyaW5n
IHdpbGwgdHJ1bmNhdGUgcHJlbWF0dXJlbHkuCisgICAgICAgIHswLCBDU3RyaW5nKCJceDAwIiwg
MSl9LAorICAgICAgICB7MSwgQ1N0cmluZygiXHgwMSIpfSwKKyAgICAgICAgezEwLCBDU3RyaW5n
KCJceDBhIil9LAorICAgICAgICB7MjMsIENTdHJpbmcoIlx4MTciKX0sCisgICAgICAgIHsyNCwg
Q1N0cmluZygiXHgxOFx4MTgiKX0sCisgICAgICAgIHsyNSwgQ1N0cmluZygiXHgxOFx4MTkiKX0s
CisgICAgICAgIHsxMDAsIENTdHJpbmcoIlx4MThceDY0Iil9LAorICAgICAgICB7MTAwMCwgQ1N0
cmluZygiXHgxOVx4MDNceGU4Iil9LAorICAgICAgICB7MTAwMDAwMCwgQ1N0cmluZygiXHgxYVx4
MDBceDBmXHg0Mlx4NDAiLCA1KX0sCisgICAgICAgIHsweEZGRkZGRkZGLCBDU3RyaW5nKCJceDFh
XHhmZlx4ZmZceGZmXHhmZiIpfSwKKyAgICAgICAgezB4MTAwMDAwMDAwLAorICAgICAgICAgICAg
Q1N0cmluZygiXHgxYlx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwIiwgOSl9LAorICAg
ICAgICB7c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCksCisgICAgICAgICAgICBD
U3RyaW5nKCJceDFiXHg3Zlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiKX0KKyAgICB9Owor
CisgICAgZm9yIChjb25zdCBVaW50VGVzdENhc2UmIHRlc3RDYXNlIDoga1VpbnRUZXN0Q2FzZXMp
IHsKKyAgICAgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKHRlc3RD
YXNlLnZhbHVlKSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIHRlc3RDYXNlLmNib3IpKTsKKyAgICB9
Cit9CisKK1RFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZU5lZ2F0aXZlSW50ZWdlcikKK3sK
KyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgaW50NjRfdCBuZWdhdGl2
ZUludDsKKyAgICAgICAgY29uc3QgQ1N0cmluZyBjYm9yOworICAgIH0ga05lZ2F0aXZlSW50VGVz
dENhc2VzW10gPSB7CisgICAgICAgIHsgLTFMTCwgQ1N0cmluZygiXHgyMCIpIH0sCisgICAgICAg
IHsgLTEwTEwsIENTdHJpbmcoIlx4MjkiKSB9LAorICAgICAgICB7IC0yM0xMLCBDU3RyaW5nKCJc
eDM2IikgfSwKKyAgICAgICAgeyAtMjRMTCwgQ1N0cmluZygiXHgzNyIpIH0sCisgICAgICAgIHsg
LTI1TEwsIENTdHJpbmcoIlx4MzhceDE4IikgfSwKKyAgICAgICAgeyAtMTAwTEwsIENTdHJpbmco
Ilx4MzhceDYzIikgfSwKKyAgICAgICAgeyAtMTAwMExMLCBDU3RyaW5nKCJceDM5XHgwM1x4ZTci
KSB9LAorICAgICAgICB7IC00Mjk0OTY3Mjk2TEwsIENTdHJpbmcoIlx4M2FceGZmXHhmZlx4ZmZc
eGZmIikgfSwKKyAgICAgICAgeyAtNDI5NDk2NzI5N0xMLAorICAgICAgICAgICAgQ1N0cmluZygi
XHgzYlx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwIiwgOSkgfSwKKyAgICAgICAgeyBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSwKKyAgICAgICAgICAgIENTdHJpbmco
Ilx4M2JceDdmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIpIH0sCisgICAgfTsKKworICAg
IGZvciAoY29uc3QgYXV0byYgdGVzdENhc2UgOiBrTmVnYXRpdmVJbnRUZXN0Q2FzZXMpIHsKKyAg
ICAgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKHRlc3RDYXNlLm5l
Z2F0aXZlSW50KSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIHRlc3RDYXNlLmNib3IpKTsKKyAgICB9
Cit9CisKK1RFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZUJ5dGVzKQoreworICAgIHR5cGVk
ZWYgc3RydWN0IHsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzOworICAgICAg
ICBjb25zdCBDU3RyaW5nIGNib3I7CisgICAgfSBCeXRlc1Rlc3RDYXNlOworCisgICAgc3RhdGlj
IGNvbnN0IEJ5dGVzVGVzdENhc2Uga0J5dGVzVGVzdENhc2VzW10gPSB7CisgICAgICAgIHsgeyB9
LCBDU3RyaW5nKCJceDQwIikgfSwKKyAgICAgICAgeyB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQg
fSwgQ1N0cmluZygiXHg0NFx4MDFceDAyXHgwM1x4MDQiKSB9LAorICAgIH07CisKKyAgICBmb3Ig
KGNvbnN0IEJ5dGVzVGVzdENhc2UmIHRlc3RDYXNlIDoga0J5dGVzVGVzdENhc2VzKSB7CisgICAg
ICAgIGF1dG8gY2JvciA9IENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1ZSh0ZXN0Q2FzZS5ieXRl
cykpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0Q2FzZS5jYm9yKSk7CisgICAgfQorfQorCitU
RVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVTdHJpbmcpCit7CisgICAgdHlwZWRlZiBzdHJ1
Y3QgeworICAgICAgICBjb25zdCBTdHJpbmcgc3RyaW5nOworICAgICAgICBjb25zdCBDU3RyaW5n
IGNib3I7CisgICAgfSBTdHJpbmdUZXN0Q2FzZTsKKworICAgIHN0YXRpYyBjb25zdCBTdHJpbmdU
ZXN0Q2FzZSBrU3RyaW5nVGVzdENhc2VzW10gPSB7CisgICAgICAgIHsgIiIsIENTdHJpbmcoIlx4
NjAiKSB9LAorICAgICAgICB7ICJhIiwgQ1N0cmluZygiXHg2MVx4NjEiKSB9LAorICAgICAgICB7
ICJJRVRGIiwgQ1N0cmluZygiXHg2NFx4NDlceDQ1XHg1NFx4NDYiKSB9LAorICAgICAgICB7ICJc
IlxcIiwgQ1N0cmluZygiXHg2Mlx4MjJceDVjIikgfSwKKyAgICAgICAgeyBTdHJpbmc6OmZyb21V
VEY4KCJceGMzXHhiYyIpLCBDU3RyaW5nKCJceDYyXHhjM1x4YmMiKSB9LAorICAgICAgICB7IFN0
cmluZzo6ZnJvbVVURjgoIlx4ZTZceGIwXHhiNCIpLCBDU3RyaW5nKCJceDYzXHhlNlx4YjBceGI0
IikgfSwKKyAgICAgICAgeyBTdHJpbmc6OmZyb21VVEY4KCJceGYwXHg5MFx4ODVceDkxIiksIENT
dHJpbmcoIlx4NjRceGYwXHg5MFx4ODVceDkxIikgfQorICAgIH07CisKKyAgICBmb3IgKGNvbnN0
IFN0cmluZ1Rlc3RDYXNlJiB0ZXN0Q2FzZSA6IGtTdHJpbmdUZXN0Q2FzZXMpIHsKKyAgICAgICAg
YXV0byBjYm9yID0gQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKHRlc3RDYXNlLnN0cmluZykp
OworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0Q2FzZS5jYm9yKSk7CisgICAgfQorfQorCitURVNU
KENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVBcnJheSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWlu
dDhfdCBrQXJyYXlUZXN0Q2FzZUNib3JbXSA9IHsKKyAgICAgICAgMHg5OCwgMHgxOSwgLy8gYXJy
YXkgb2YgMjUgZWxlbWVudHMKKyAgICAgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwg
MHgwNiwgMHgwNywgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywKKyAgICAgICAgMHgwZCwg
MHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgx
NywgMHgxOCwKKyAgICAgICAgMHgxOCwgMHgxOCwgMHgxOSwKKyAgICB9OworICAgIFZlY3RvcjxD
Qk9SVmFsdWU+IGFycmF5OworICAgIGZvciAoaW50NjRfdCBpID0gMTsgaSA8PSAyNTsgaSsrKQor
ICAgICAgICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKGkpKTsKKyAgICBhdXRvIGNib3IgPSBDQk9S
V3JpdGVyOjp3cml0ZShDQk9SVmFsdWUoYXJyYXkpKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yLmhh
c192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIGtBcnJheVRlc3RD
YXNlQ2Jvciwgc2l6ZW9mKGtBcnJheVRlc3RDYXNlQ2JvcikpKTsKK30KKworVEVTVChDQk9SV3Jp
dGVyVGVzdCwgVGVzdFdyaXRlTWFwV2l0aE1hcFZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCB1
aW50OF90IGtNYXBUZXN0Q2FzZUNib3JbXSA9IHsKKyAgICAgICAgMHhiNiwgLy8gbWFwIG9mIDgg
cGFpcnM6CisgICAgICAgIDB4MDAsIC8vIGtleSAwCisgICAgICAgIDB4NjEsIDB4NjEsIC8vIHZh
bHVlICJhIgorCisgICAgICAgIDB4MTcsIC8vIGtleSAyMworICAgICAgICAweDYxLCAgMHg2Miwg
Ly8gdmFsdWUgImIiCisKKyAgICAgICAgMHgxOCwgMHgxOCwgLy8ga2V5IDI0CisgICAgICAgIDB4
NjEsIDB4NjMsIC8vIHZhbHVlICJjIgorCisgICAgICAgIDB4MTgsIDB4RkYsIC8vIGtleSAyNTUK
KyAgICAgICAgMHg2MSwgIDB4NjQsIC8vIHZhbHVlICJkIgorCisgICAgICAgIDB4MTksIDB4MDEs
IDB4MDAsIC8vIGtleSAyNTYKKyAgICAgICAgMHg2MSwgMHg2NSwgLy8gdmFsdWUgImUiCisKKyAg
ICAgICAgMHgxOSwgMHhGRiwgMHhGRiwgLy8ga2V5IDY1NTM1CisgICAgICAgIDB4NjEsICAweDY2
LCAvLyB2YWx1ZSAiZiIKKworICAgICAgICAweDFBLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAv
LyBrZXkgNjU1MzYKKyAgICAgICAgMHg2MSwgMHg2NywgLy8gdmFsdWUgImciCisKKyAgICAgICAg
MHgxQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgLy8ga2V5IDQyOTQ5NjcyOTUKKyAgICAgICAg
MHg2MSwgMHg2OCwgLy8gdmFsdWUgImgiCisKKyAgICAgICAgLy8ga2V5IDQyOTQ5NjcyOTYKKyAg
ICAgICAgMHgxQiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgICAgICAgMHg2MSwgMHg2OSwgLy8gIHZhbHVlICJpIgorCisgICAgICAgIC8vIGtleSBJ
TlQ2NF9NQVgKKyAgICAgICAgMHgxYiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhm
ZiwgMHhmZiwgMHhmZiwKKyAgICAgICAgMHg2MSwgMHg2YSwgLy8gIHZhbHVlICJqIgorCisgICAg
ICAgIDB4MjAsIC8vIGtleSAtMQorICAgICAgICAweDYxLCAweDZiLCAvLyB2YWx1ZSAiayIKKwor
ICAgICAgICAweDM3LCAvLyBrZXkgLTI0CisgICAgICAgIDB4NjEsICAweDZjLCAvLyB2YWx1ZSAi
bCIKKworICAgICAgICAweDM4LCAweDE4LCAvLyBrZXkgLTI1CisgICAgICAgIDB4NjEsIDB4NmQs
IC8vIHZhbHVlICJtIgorCisgICAgICAgIDB4MzgsIDB4RkYsIC8vIGtleSAtMjU2CisgICAgICAg
IDB4NjEsIDB4NmUsIC8vIHZhbHVlICJuIgorCisgICAgICAgIDB4MzksIDB4MDEsIDB4MDAsIC8v
IGtleSAtMjU3CisgICAgICAgIDB4NjEsIDB4NmYsIC8vIHZhbHVlICJvIgorCisgICAgICAgIDB4
M0EsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIC8vIGtleSAtNjU1MzcKKyAgICAgICAgMHg2MSwg
MHg3MCwgLy8gdmFsdWUgInAiCisKKyAgICAgICAgMHgzQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhG
RiwgLy8ga2V5IC00Mjk0OTY3Mjk2CisgICAgICAgIDB4NjEsIDB4NzEsIC8vIHZhbHVlICJxIgor
CisgICAgICAgIC8vIGtleSAtNDI5NDk2NzI5NworICAgICAgICAweDNCLCAweDAwLCAweDAwLCAw
eDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAweDYxLCAweDcyLCAv
LyAgdmFsdWUgInIiCisKKyAgICAgICAgLy8ga2V5IElOVDY0X01JTgorICAgICAgICAweDNiLCAw
eDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgICAgICAw
eDYxLCAweDczLCAvLyAgdmFsdWUgInMiCisKKyAgICAgICAgMHg2MCwgLy8ga2V5ICIiCisgICAg
ICAgIDB4NjEsIDB4MmUsIC8vIHZhbHVlICIuIgorCisgICAgICAgIDB4NjEsIDB4NjUsIC8vIGtl
eSAiZSIKKyAgICAgICAgMHg2MSwgMHg0NSwgLy8gdmFsdWUgIkUiCisKKyAgICAgICAgMHg2Miwg
MHg2MSwgMHg2MSwgLy8ga2V5ICJhYSIKKyAgICAgICAgMHg2MiwgMHg0MSwgMHg0MSwgLy8gdmFs
dWUgIkFBIgorICAgIH07CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAgLy8gU2hv
cnRlciBzdHJpbmdzIHNvcnQgZmlyc3QgaW4gQ1RBUCwgdGh1cyB0aGUg4oCcYWHigJ0gdmFsdWUg
c2hvdWxkIGJlCisgICAgLy8gc2VyaWFsaXNlZCBsYXN0IGluIHRoZSBtYXAuCisgICAgbWFwW0NC
T1JWYWx1ZSgiYWEiKV0gPSBDQk9SVmFsdWUoIkFBIik7CisgICAgbWFwW0NCT1JWYWx1ZSgiZSIp
XSA9IENCT1JWYWx1ZSgiRSIpOworICAgIC8vIFRoZSBlbXB0eSBzdHJpbmcgaXMgc2hvcnRlciB0
aGFuIGFsbCBvdGhlcnMsIHNvIHNob3VsZCBhcHBlYXIgZmlyc3QgYW1vbmcKKyAgICAvLyB0aGUg
c3RyaW5ncy4KKyAgICBtYXBbQ0JPUlZhbHVlKCIiKV0gPSBDQk9SVmFsdWUoIi4iKTsKKyAgICAv
LyBNYXAga2V5cyBhcmUgc29ydGVkIGJ5IG1ham9yIHR5cGUsIGJ5IGJ5dGUgbGVuZ3RoLCBhbmQg
dGhlbiBieQorICAgIC8vIGJ5dGUtd2lzZSBsZXhpY2FsIG9yZGVyLiBTbyBhbGwgaW50ZWdlciB0
eXBlIGtleXMgc2hvdWxkIGFwcGVhciBiZWZvcmUKKyAgICAvLyBrZXkgIiIgYW5kIGFsbCBwb3Np
dGl2ZSBpbnRlZ2VyIGtleXMgc2hvdWxkIGFwcGVhciBiZWZvcmUgbmVnYXRpdmUgaW50ZWdlcgor
ICAgIC8vIGtleXMuCisgICAgbWFwW0NCT1JWYWx1ZSgtMSldID0gQ0JPUlZhbHVlKCJrIik7Cisg
ICAgbWFwW0NCT1JWYWx1ZSgtMjQpXSA9IENCT1JWYWx1ZSgibCIpOworICAgIG1hcFtDQk9SVmFs
dWUoLTI1KV0gPSBDQk9SVmFsdWUoIm0iKTsKKyAgICBtYXBbQ0JPUlZhbHVlKC0yNTYpXSA9IENC
T1JWYWx1ZSgibiIpOworICAgIG1hcFtDQk9SVmFsdWUoLTI1NyldID0gQ0JPUlZhbHVlKCJvIik7
CisgICAgbWFwW0NCT1JWYWx1ZSgtNjU1MzcpXSA9IENCT1JWYWx1ZSgicCIpOworICAgIG1hcFtD
Qk9SVmFsdWUoaW50NjRfdCgtNDI5NDk2NzI5NikpXSA9IENCT1JWYWx1ZSgicSIpOworICAgIG1h
cFtDQk9SVmFsdWUoaW50NjRfdCgtNDI5NDk2NzI5NykpXSA9IENCT1JWYWx1ZSgiciIpOworICAg
IG1hcFtDQk9SVmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpXSA9IENC
T1JWYWx1ZSgicyIpOworICAgIG1hcFtDQk9SVmFsdWUoMCldID0gQ0JPUlZhbHVlKCJhIik7Cisg
ICAgbWFwW0NCT1JWYWx1ZSgyMyldID0gQ0JPUlZhbHVlKCJiIik7CisgICAgbWFwW0NCT1JWYWx1
ZSgyNCldID0gQ0JPUlZhbHVlKCJjIik7CisgICAgbWFwW0NCT1JWYWx1ZShzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ4X3Q+OjptYXgoKSldID0gQ0JPUlZhbHVlKCJkIik7CisgICAgbWFwW0NCT1JW
YWx1ZSgyNTYpXSA9IENCT1JWYWx1ZSgiZSIpOworICAgIG1hcFtDQk9SVmFsdWUoc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKV0gPSBDQk9SVmFsdWUoImYiKTsKKyAgICBtYXBb
Q0JPUlZhbHVlKDY1NTM2KV0gPSBDQk9SVmFsdWUoImciKTsKKyAgICBtYXBbQ0JPUlZhbHVlKGlu
dDY0X3Qoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSldID0gQ0JPUlZhbHVl
KCJoIik7CisgICAgbWFwW0NCT1JWYWx1ZShpbnQ2NF90KDQyOTQ5NjcyOTYpKV0gPSBDQk9SVmFs
dWUoImkiKTsKKyAgICBtYXBbQ0JPUlZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1heCgpKV0gPSBDQk9SVmFsdWUoImoiKTsKKyAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjp3
cml0ZShDQk9SVmFsdWUobWFwKSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7
CisgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCBrTWFwVGVzdENhc2VDYm9yLCBzaXpl
b2Yoa01hcFRlc3RDYXNlQ2JvcikpKTsKK30KKworVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdy
aXRlTWFwV2l0aEFycmF5KQoreworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGtNYXBBcnJheVRl
c3RDYXNlQ2JvcltdID0geworICAgICAgICAweGEyLCAvLyBtYXAgb2YgMiBwYWlycworICAgICAg
ICAweDYxLCAweDYxLCAvLyAiYSIKKyAgICAgICAgMHgwMSwKKworICAgICAgICAweDYxLCAweDYy
LCAvLyAiYiIKKyAgICAgICAgMHg4MiwgLy8gYXJyYXkgd2l0aCAyIGVsZW1lbnRzCisgICAgICAg
IDB4MDIsCisgICAgICAgIDB4MDMsCisgICAgfTsKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIG1h
cDsKKyAgICBtYXBbQ0JPUlZhbHVlKCJhIildID0gQ0JPUlZhbHVlKDEpOworICAgIENCT1JWYWx1
ZTo6QXJyYXlWYWx1ZSBhcnJheTsKKyAgICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDIpKTsKKyAg
ICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDMpKTsKKyAgICBtYXBbQ0JPUlZhbHVlKCJiIildID0g
Q0JPUlZhbHVlKGFycmF5KTsKKyAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjp3cml0ZShDQk9S
VmFsdWUobWFwKSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CisgICAgRVhQ
RUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCBrTWFwQXJyYXlUZXN0Q2FzZUNib3IsIHNpemVvZihr
TWFwQXJyYXlUZXN0Q2FzZUNib3IpKSk7Cit9CisKK1RFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RX
cml0ZU5lc3RlZE1hcCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBrTmVzdGVkTWFwVGVz
dENhc2VbXSA9IHsKKyAgICAgICAgMHhhMiwgLy8gbWFwIG9mIDIgcGFpcnMKKyAgICAgICAgMHg2
MSwgMHg2MSwgLy8gImEiCisgICAgICAgIDB4MDEsCisKKyAgICAgICAgMHg2MSwgMHg2MiwgLy8g
ImIiCisgICAgICAgIDB4YTIsIC8vIG1hcCBvZiAyIHBhaXJzCisgICAgICAgIDB4NjEsIDB4NjMs
IC8vICJjIgorICAgICAgICAweDAyLAorCisgICAgICAgIDB4NjEsIDB4NjQsIC8vICJkIgorICAg
ICAgICAweDAzLAorICAgIH07CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAgbWFw
W0NCT1JWYWx1ZSgiYSIpXSA9IENCT1JWYWx1ZSgxKTsKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVl
IG5lc3RlZE1hcDsKKyAgICBuZXN0ZWRNYXBbQ0JPUlZhbHVlKCJjIildID0gQ0JPUlZhbHVlKDIp
OworICAgIG5lc3RlZE1hcFtDQk9SVmFsdWUoImQiKV0gPSBDQk9SVmFsdWUoMyk7CisgICAgbWFw
W0NCT1JWYWx1ZSgiYiIpXSA9IENCT1JWYWx1ZShuZXN0ZWRNYXApOworICAgIGF1dG8gY2JvciA9
IENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1ZShtYXApKTsKKyAgICBBU1NFUlRfVFJVRShjYm9y
Lmhhc192YWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIGtOZXN0ZWRN
YXBUZXN0Q2FzZSwgc2l6ZW9mKGtOZXN0ZWRNYXBUZXN0Q2FzZSkpKTsKK30KKworVEVTVChDQk9S
V3JpdGVyVGVzdCwgVGVzdFdyaXRlU2ltcGxlVmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0IHN0
cnVjdCB7CisgICAgICAgIENCT1JWYWx1ZTo6U2ltcGxlVmFsdWUgc2ltcGxlVmFsdWU7CisgICAg
ICAgIGNvbnN0IENTdHJpbmcgY2JvcjsKKyAgICB9IGtTaW1wbGVUZXN0Q2FzZVtdID0geworICAg
ICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OkZhbHNlVmFsdWUsIENTdHJpbmcoIlx4ZjQi
KSB9LAorICAgICAgICB7IENCT1JWYWx1ZTo6U2ltcGxlVmFsdWU6OlRydWVWYWx1ZSwgQ1N0cmlu
ZygiXHhmNSIpIH0sCisgICAgICAgIHsgQ0JPUlZhbHVlOjpTaW1wbGVWYWx1ZTo6TnVsbFZhbHVl
LCBDU3RyaW5nKCJceGY2IikgfSwKKyAgICAgICAgeyBDQk9SVmFsdWU6OlNpbXBsZVZhbHVlOjpV
bmRlZmluZWQsIENTdHJpbmcoIlx4ZjciKSB9CisgICAgfTsKKworICAgIGZvciAoY29uc3QgYXV0
byYgdGVzdENhc2UgOiBrU2ltcGxlVGVzdENhc2UpIHsKKyAgICAgICAgYXV0byBjYm9yID0gQ0JP
UldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKHRlc3RDYXNlLnNpbXBsZVZhbHVlKSk7CisgICAgICAg
IEFTU0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShlcShj
Ym9yLnZhbHVlKCksIHRlc3RDYXNlLmNib3IpKTsKKyAgICB9Cit9CisKKy8vIEZvciBtYWpvciB0
eXBlIDAsIDIsIDMsIGVtcHR5IENCT1IgYXJyYXksIGFuZCBlbXB0eSBDQk9SIG1hcCwgdGhlIG5l
c3RpbmcKKy8vIGRlcHRoIGlzIGV4cGVjdGVkIHRvIGJlIDAgc2luY2UgdGhlIENCT1IgZGVjb2Rl
ciBkb2VzIG5vdCBuZWVkIHRvIHBhcnNlCisvLyBhbnkgbmVzdGVkIENCT1IgdmFsdWUgZWxlbWVu
dHMuCitURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVTaW5nbGVMYXllcikKK3sKKyAgICBj
b25zdCBDQk9SVmFsdWUgc2ltcGxlVWludCA9IENCT1JWYWx1ZSgxKTsKKyAgICBjb25zdCBDQk9S
VmFsdWUgc2ltcGxlU3RyaW5nID0gQ0JPUlZhbHVlKCJhIik7CisgICAgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+IGJ5dGVEYXRhID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgICAgY29uc3Qg
Q0JPUlZhbHVlIHNpbXBsZUJ5dGVzdHJpbmcgPSBDQk9SVmFsdWUoYnl0ZURhdGEpOworICAgIENC
T1JWYWx1ZTo6QXJyYXlWYWx1ZSBlbXB0eUNib3JBcnJheTsKKyAgICBDQk9SVmFsdWU6Ok1hcFZh
bHVlIGVtcHR5Q2Jvck1hcDsKKyAgICBjb25zdCBDQk9SVmFsdWUgZW1wdHlBcnJheVZhbHVlID0g
Q0JPUlZhbHVlKGVtcHR5Q2JvckFycmF5KTsKKyAgICBjb25zdCBDQk9SVmFsdWUgZW1wdHlNYXBW
YWx1ZSA9IENCT1JWYWx1ZShlbXB0eUNib3JNYXApOworICAgIENCT1JWYWx1ZTo6QXJyYXlWYWx1
ZSBzaW1wbGVBcnJheTsKKyAgICBzaW1wbGVBcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDIpKTsKKyAg
ICBDQk9SVmFsdWU6Ok1hcFZhbHVlIHNpbXBsZU1hcDsKKyAgICBzaW1wbGVNYXBbQ0JPUlZhbHVl
KCJiIildID0gQ0JPUlZhbHVlKDMpOworICAgIGNvbnN0IENCT1JWYWx1ZSBzaW5nbGVMYXllckNi
b3JNYXAgPSBDQk9SVmFsdWUoc2ltcGxlTWFwKTsKKyAgICBjb25zdCBDQk9SVmFsdWUgc2luZ2xl
TGF5ZXJDYm9yQXJyYXkgPSBDQk9SVmFsdWUoc2ltcGxlQXJyYXkpOworCisgICAgRVhQRUNUX1RS
VUUoQ0JPUldyaXRlcjo6d3JpdGUoc2ltcGxlVWludCwgMCkuaGFzX3ZhbHVlKCkpOworICAgIEVY
UEVDVF9UUlVFKENCT1JXcml0ZXI6OndyaXRlKHNpbXBsZVN0cmluZywgMCkuaGFzX3ZhbHVlKCkp
OworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6OndyaXRlKHNpbXBsZUJ5dGVzdHJpbmcsIDAp
Lmhhc192YWx1ZSgpKTsKKworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6OndyaXRlKGVtcHR5
QXJyYXlWYWx1ZSwgMCkuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6
OndyaXRlKGVtcHR5TWFwVmFsdWUsIDApLmhhc192YWx1ZSgpKTsKKworICAgIEVYUEVDVF9GQUxT
RShDQk9SV3JpdGVyOjp3cml0ZShzaW5nbGVMYXllckNib3JBcnJheSwgMCkuaGFzX3ZhbHVlKCkp
OworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6OndyaXRlKHNpbmdsZUxheWVyQ2JvckFycmF5
LCAxKS5oYXNfdmFsdWUoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6d3JpdGUo
c2luZ2xlTGF5ZXJDYm9yTWFwLCAwKS5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JP
UldyaXRlcjo6d3JpdGUoc2luZ2xlTGF5ZXJDYm9yTWFwLCAxKS5oYXNfdmFsdWUoKSk7Cit9CisK
Ky8vIE1ham9yIHR5cGUgNSBuZXN0ZWQgQ0JPUiBtYXAgdmFsdWUgd2l0aCBmb2xsb3dpbmcgc3Ry
dWN0dXJlLgorLy8gICAgIHsiYSI6IDEsCisvLyAgICAgICJiIjogeyJjIjogMiwKKy8vICAgICAg
ICAgICAgImQiOiAzfX0KK1RFU1QoQ0JPUldyaXRlclRlc3QsIE5lc3RlZE1hcHMpCit7CisgICAg
Q0JPUlZhbHVlOjpNYXBWYWx1ZSBjYm9yTWFwOworICAgIGNib3JNYXBbQ0JPUlZhbHVlKCJhIild
ID0gQ0JPUlZhbHVlKDEpOworICAgIENCT1JWYWx1ZTo6TWFwVmFsdWUgbmVzdGVkTWFwOworICAg
IG5lc3RlZE1hcFtDQk9SVmFsdWUoImMiKV0gPSBDQk9SVmFsdWUoMik7CisgICAgbmVzdGVkTWFw
W0NCT1JWYWx1ZSgiZCIpXSA9IENCT1JWYWx1ZSgzKTsKKyAgICBjYm9yTWFwW0NCT1JWYWx1ZSgi
YiIpXSA9IENCT1JWYWx1ZShuZXN0ZWRNYXApOworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6
OndyaXRlKENCT1JWYWx1ZShjYm9yTWFwKSwgMikuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9G
QUxTRShDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUoY2Jvck1hcCksIDEpLmhhc192YWx1ZSgp
KTsKK30KKworLy8gVGVzdGluZyBXcml0ZSgpIGZ1bmN0aW9uIGZvciBmb2xsb3dpbmcgQ0JPUiBz
dHJ1Y3R1cmUgd2l0aCBkZXB0aCBvZiAzLgorLy8gICAgIFsxLAorLy8gICAgICAyLAorLy8gICAg
ICAzLAorLy8gICAgICB7ImEiOiAxLAorLy8gICAgICAgImIiOiB7ImMiOiAyLAorLy8gICAgICAg
ICAgICAgImQiOiAzfX1dCitURVNUKENCT1JXcml0ZXJUZXN0LCBVbmJhbGFuY2VkTmVzdGVkQ29u
dGFpbmVycykKK3sKKyAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgY2JvckFycmF5OworICAgIENC
T1JWYWx1ZTo6TWFwVmFsdWUgY2Jvck1hcDsKKyAgICBDQk9SVmFsdWU6Ok1hcFZhbHVlIG5lc3Rl
ZE1hcDsKKworICAgIGNib3JNYXBbQ0JPUlZhbHVlKCJhIildID0gQ0JPUlZhbHVlKDEpOworICAg
IG5lc3RlZE1hcFtDQk9SVmFsdWUoImMiKV0gPSBDQk9SVmFsdWUoMik7CisgICAgbmVzdGVkTWFw
W0NCT1JWYWx1ZSgiZCIpXSA9IENCT1JWYWx1ZSgzKTsKKyAgICBjYm9yTWFwW0NCT1JWYWx1ZSgi
YiIpXSA9IENCT1JWYWx1ZShuZXN0ZWRNYXApOworICAgIGNib3JBcnJheS5hcHBlbmQoQ0JPUlZh
bHVlKDEpKTsKKyAgICBjYm9yQXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgyKSk7CisgICAgY2JvckFy
cmF5LmFwcGVuZChDQk9SVmFsdWUoMykpOworICAgIGNib3JBcnJheS5hcHBlbmQoQ0JPUlZhbHVl
KGNib3JNYXApKTsKKworICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1
ZShjYm9yQXJyYXkpLCAzKS5oYXNfdmFsdWUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKENCT1JXcml0
ZXI6OndyaXRlKENCT1JWYWx1ZShjYm9yQXJyYXkpLCAyKS5oYXNfdmFsdWUoKSk7Cit9CisKKy8v
IFRlc3RpbmcgV3JpdGUoKSBmdW5jdGlvbiBmb3IgZm9sbG93aW5nIENCT1Igc3RydWN0dXJlLgor
Ly8gICAgIHsiYSI6IDEsCisvLyAgICAgICJiIjogeyJjIjogMiwKKy8vICAgICAgICAgICAgImQi
OiAzCisvLyAgICAgICAgICAgICJoIjogeyAiZSI6IDQsCisvLyAgICAgICAgICAgICAgICAgICAi
ZiI6IDUsCisvLyAgICAgICAgICAgICAgICAgICAiZyI6IFs2LCA3LCBbOF1dfX19CisvLyBTaW5j
ZSBhYm92ZSBDQk9SIGNvbnRhaW5zIDUgbmVzdGluZyBsZXZlbHMuIFRodXMsIFdyaXRlKCkgaXMg
ZXhwZWN0ZWQgdG8KKy8vIHJldHVybiBlbXB0eSBvcHRpb25hbCBvYmplY3Qgd2hlbiBtYXhpbXVt
IG5lc3RpbmcgbGF5ZXIgc2l6ZSBpcyBzZXQgdG8gNC4KK1RFU1QoQ0JPUldyaXRlclRlc3QsIE92
ZXJseU5lc3RlZENCT1IpCit7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBtYXA7CisgICAgQ0JP
UlZhbHVlOjpNYXBWYWx1ZSBuZXN0ZWRNYXA7CisgICAgQ0JPUlZhbHVlOjpNYXBWYWx1ZSBpbm5l
ck5lc3RlZE1hcDsKKyAgICBDQk9SVmFsdWU6OkFycmF5VmFsdWUgaW5uZXJBcnJheTsKKyAgICBD
Qk9SVmFsdWU6OkFycmF5VmFsdWUgYXJyYXk7CisKKyAgICBtYXBbQ0JPUlZhbHVlKCJhIildID0g
Q0JPUlZhbHVlKDEpOworICAgIG5lc3RlZE1hcFtDQk9SVmFsdWUoImMiKV0gPSBDQk9SVmFsdWUo
Mik7CisgICAgbmVzdGVkTWFwW0NCT1JWYWx1ZSgiZCIpXSA9IENCT1JWYWx1ZSgzKTsKKyAgICBp
bm5lck5lc3RlZE1hcFtDQk9SVmFsdWUoImUiKV0gPSBDQk9SVmFsdWUoNCk7CisgICAgaW5uZXJO
ZXN0ZWRNYXBbQ0JPUlZhbHVlKCJmIildID0gQ0JPUlZhbHVlKDUpOworICAgIGlubmVyQXJyYXku
YXBwZW5kKENCT1JWYWx1ZSg2KSk7CisgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSg2KSk7Cisg
ICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1ZSg3KSk7CisgICAgYXJyYXkuYXBwZW5kKENCT1JWYWx1
ZShpbm5lckFycmF5KSk7CisgICAgaW5uZXJOZXN0ZWRNYXBbQ0JPUlZhbHVlKCJnIildID0gQ0JP
UlZhbHVlKGFycmF5KTsKKyAgICBuZXN0ZWRNYXBbQ0JPUlZhbHVlKCJoIildID0gQ0JPUlZhbHVl
KGlubmVyTmVzdGVkTWFwKTsKKyAgICBtYXBbQ0JPUlZhbHVlKCJiIildID0gQ0JPUlZhbHVlKG5l
c3RlZE1hcCk7CisKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUo
bWFwKSwgNSkuaGFzX3ZhbHVlKCkpOworICAgIEVYUEVDVF9GQUxTRShDQk9SV3JpdGVyOjp3cml0
ZShDQk9SVmFsdWUobWFwKSwgNCkuaGFzX3ZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>