<?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>89366</bug_id>
          
          <creation_ts>2012-06-18 11:42:48 -0700</creation_ts>
          <short_desc>FastMalloc.cpp needs to be reordered before padding bug can be fixed</short_desc>
          <delta_ts>2012-11-13 19:45:09 -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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>89608</dependson>
          <blocked>83344</blocked>
    
    <blocked>88344</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">alex.christensen</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>651587</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-18 11:42:48 -0700</bug_when>
    <thetext>FastMalloc.cpp cannot be compiled by MSVC for x64 because of an error with a 0-length array.  This can be fixed by using specialized templates, but the code needs to be reordered before doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651589</commentid>
    <comment_count>1</comment_count>
      <attachid>148140</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-18 11:44:57 -0700</bug_when>
    <thetext>Created attachment 148140
patch

patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651593</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-18 11:47:09 -0700</bug_when>
    <thetext>Attachment 148140 did not pass style-queue:

Source/WTF/wtf/FastMalloc.cpp:1293:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WTF/wtf/FastMalloc.cpp:970:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WTF/wtf/FastMalloc.cpp:1114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1116:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1118:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1120:  The parameter name &quot;N&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1123:  The parameter name &quot;N&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1123:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1125:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1126:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1132:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1132:  tc_length is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1135:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1139:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1140:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1154:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1158:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1159:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1160:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1160:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WTF/wtf/FastMalloc.cpp:1161:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1163:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1164:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1164:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1165:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1165:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1166:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1166:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WTF/wtf/FastMalloc.cpp:1167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1169:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1170:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1171:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1172:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1174:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1175:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1176:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1177:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1179:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1180:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1181:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1184:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1185:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1185:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1186:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1186:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1188:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1190:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1191:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1191:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1192:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1193:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1194:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1195:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1197:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1198:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1198:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1199:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1199:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1200:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1201:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1201:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1202:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1203:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1204:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1204:  locked_size_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1206:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1206:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1207:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1208:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1208:  lock_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1210:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1211:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1211:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1211:  Extra space between size_t and size_class_  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:1211:  size_class_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1212:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1212:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1212:  Extra space between Span and empty_  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:1212:  empty_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1213:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1213:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1213:  Extra space between Span and nonempty_  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:1213:  nonempty_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1214:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1214:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1214:  Extra space between size_t and counter_  [whitespace/declaration] [3]
Source/WTF/wtf/FastMalloc.cpp:1214:  counter_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1216:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1216:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1217:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1218:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1219:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1219:  tc_slots_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1221:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1221:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1222:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1223:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1223:  used_slots_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1224:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1224:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1225:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1226:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1227:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1227:  cache_size_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1233:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1233:  pad_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1260:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:1279:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1290:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1291:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1293:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1293:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1293:  kernel_supports_tls is incoFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/Fa...&quot; exit_code: 1
rrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:1294:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1294:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1296:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WTF/wtf/FastMalloc.cpp:1297:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1302:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1303:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1305:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1305:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WTF/wtf/FastMalloc.cpp:1308:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WTF/wtf/FastMalloc.cpp:1310:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1312:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WTF/wtf/FastMalloc.cpp:1313:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WTF/wtf/FastMalloc.cpp:1314:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1318:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1320:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WTF/wtf/FastMalloc.cpp:1323:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1324:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1326:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1329:  One space before end of line comments  [whitespace/comments] [5]
Source/WTF/wtf/FastMalloc.cpp:1330:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 147 in 2 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>652532</commentid>
    <comment_count>3</comment_count>
      <attachid>148140</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-06-19 09:42:42 -0700</bug_when>
    <thetext>Comment on attachment 148140
patch

The code you&apos;ve moved was not following webkit style guidelines (like arbitrary space identation). I believe it&apos;s ok to move and fix the style at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652579</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-19 10:40:05 -0700</bug_when>
    <thetext>If you want your patch to be landed and you&apos;re not a committer yet, you should also ask for cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652789</commentid>
    <comment_count>5</comment_count>
      <attachid>148140</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-19 14:07:39 -0700</bug_when>
    <thetext>Comment on attachment 148140
patch

Rejecting attachment 148140 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
commit-queue/Source/WebKit/chromium/third_party/v8-i18n --revision 104 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
46&gt;At revision 104.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/12990096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653582</commentid>
    <comment_count>6</comment_count>
      <attachid>148591</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 10:09:38 -0700</bug_when>
    <thetext>Created attachment 148591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653586</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 10:13:12 -0700</bug_when>
    <thetext>Attachment 148591 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/Fa...&quot; exit_code: 1
Source/WTF/wtf/FastMalloc.cpp:574:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:588:  The parameter name &quot;&quot;&quot;&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WTF/wtf/FastMalloc.cpp:4241:  std::bad_alloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4392:  __libc_malloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4393:  __libc_free is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4394:  __libc_realloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4395:  __libc_calloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4396:  __libc_cfree is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4397:  __libc_memalign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4398:  __libc_valloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4399:  __libc_pvalloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4400:  __posix_memalign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4404:  __libc_malloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4405:  __libc_free is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4406:  __libc_realloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4407:  __libc_calloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4408:  __libc_cfree is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4409:  __libc_memalign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4410:  __libc_valloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4411:  __libc_pvalloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WTF/wtf/FastMalloc.cpp:4412:  __posix_memalign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 21 in 2 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>653589</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 10:16:12 -0700</bug_when>
    <thetext>I just went through the whole file and fixed all the style errors except for a few.  This one doesn&apos;t have any tabs, so it *should* commit ok...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653615</commentid>
    <comment_count>9</comment_count>
      <attachid>148591</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-20 10:28:13 -0700</bug_when>
    <thetext>Comment on attachment 148591
Patch

Attachment 148591 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12997277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653617</commentid>
    <comment_count>10</comment_count>
      <attachid>148597</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 10:30:22 -0700</bug_when>
    <thetext>Created attachment 148597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653619</commentid>
    <comment_count>11</comment_count>
      <attachid>148599</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 10:37:50 -0700</bug_when>
    <thetext>Created attachment 148599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653735</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 11:59:58 -0700</bug_when>
    <thetext>Too much change at once :( Please either just move the code or fix the style, don&apos;t do both in one patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653748</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 12:07:24 -0700</bug_when>
    <thetext>You review it then, Rafael.

(In reply to comment #3)
&gt; (From update of attachment 148140 [details])
&gt; The code you&apos;ve moved was not following webkit style guidelines (like arbitrary space identation). I believe it&apos;s ok to move and fix the style at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653781</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 12:41:44 -0700</bug_when>
    <thetext>Either way, there is going to be a big patch.  We need to move code that is not following webkit style, which means that it needs to be formatted into webkit style to be committed.  This means changing variable names from variables with underscores, which must be changed everywhere the variable is used.  This quickly makes it so I have to reformat the whole file, which I did.

It was quite tedious, but it should be easy to check.  Just use kdiff3 or something similar.  Most of the changes are spaces or variable names.

(In reply to comment #12)
&gt; Too much change at once :( Please either just move the code or fix the style, don&apos;t do both in one patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653908</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 14:46:22 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Either way, there is going to be a big patch.  We need to move code that is not following webkit style, which means that it needs to be formatted into webkit style to be committed.  This means changing variable names from variables with underscores, which must be changed everywhere the variable is used.  This quickly makes it so I have to reformat the whole file, which I did.
&gt; 
&gt; It was quite tedious, but it should be easy to check.  Just use kdiff3 or something similar.  Most of the changes are spaces or variable names.

A preferred approach for a big move like this is to fix all styles in one patch, move all code on the second patch, then fix the code on the third patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653961</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 15:58:06 -0700</bug_when>
    <thetext>Whatever.  Bug 89608.  All I did to get that is unmove the code.  I think it&apos;s a bit excessive to have 3 patches, but whatever.

&gt; A preferred approach for a big move like this is to fix all styles in one patch, move all code on the second patch, then fix the code on the third patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765996</commentid>
    <comment_count>17</comment_count>
      <attachid>173971</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 13:35:30 -0800</bug_when>
    <thetext>Created attachment 173971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766000</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 13:36:23 -0800</bug_when>
    <thetext>I have revised the patch to work against current ToT.  No code changes are present in this patch, aside from the reordering of some items in the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766009</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 13:40:07 -0800</bug_when>
    <thetext>I will land the patch once the EWS is finished processing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766018</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 13:50:43 -0800</bug_when>
    <thetext>Committed r134479: &lt;http://trac.webkit.org/changeset/134479&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766234</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-13 17:38:40 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; We need to move code that is not following webkit style, which means that it needs to be formatted into webkit style to be committed.

This is a false premise. We could simply inform the style checker that this file does not match the WebKit style. But it seems others on the project are OK with doing this large patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766336</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 19:45:09 -0800</bug_when>
    <thetext>We no longer need to commit the big reformatting patch.  The only thing changed in this issue was the reordering of some of the file contents so that the new template declarations can be established for use in the rest of the file.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148140</attachid>
            <date>2012-06-18 11:44:57 -0700</date>
            <delta_ts>2012-06-20 10:09:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>reorder_fastmalloc.patch</filename>
            <type>text/plain</type>
            <size>21261</size>
            <attacher name="Alex Christensen">alex.christensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjA2MDkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA2LTE4ICBBbGV4IENocmlzdGVuc2VuICA8
YWxleC5jaHJpc3RlbnNlbkBmbGV4c2ltLmNvbT4KKworICAgICAgICBGYXN0TWFsbG9jLmNwcCBu
ZWVkcyB0byBiZSByZW9yZGVyZWQgYmVmb3JlIHBhZGRpbmcgYnVnIGNhbiBiZSBmaXhlZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkzNjYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9GYXN0TWFs
bG9jLmNwcDoKKyAgICAgICAgUmVvcmRlcmVkIGRlZmluaXRpb25zIHRvIHByZXBhcmUgZm9yIGFk
ZGluZyBzcGVjaWFsaXplZCB0ZW1wbGF0ZQorICAgICAgICAoV1RGKToKKyAgICAgICAgKFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0Zy
ZWVMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0
Ojp0Y19sZW5ndGgpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0Ojpl
bnVtZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0
UGFkZGVkKToKKyAgICAgICAgKEZhc3RNYWxsb2Nab25lKToKKyAgICAgICAgKFdURjo6RmFzdE1h
bGxvY1pvbmU6Omdvb2RTaXplKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OmNoZWNr
KToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OnByaW50KToKKyAgICAgICAgKFdURjo6
RmFzdE1hbGxvY1pvbmU6OmxvZyk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpmb3Jj
ZUxvY2spOgorICAgICAgICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6Zm9yY2VVbmxvY2spOgorICAg
ICAgICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6c3RhdGlzdGljcyk6CisgICAgICAgIChXVEY6OkZh
c3RNYWxsb2Nab25lOjp6b25lVmFsbG9jKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6
OnpvbmVEZXN0cm95KToKKyAgICAgICAgKFdURjo6S2VybmVsU3VwcG9ydHNUTFMpOgorICAgICAg
ICAoV1RGOjpDaGVja0lmS2VybmVsU3VwcG9ydHNUTFMpOgorICAgICAgICAoVENNYWxsb2NfVGhy
ZWFkQ2FjaGUpOgorCiAyMDEyLTA2LTE4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90
QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIwNDg1IGFu
ZCByMTIwNTgyLgpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDEyMDYwOCkKKysr
IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsMTAz
ICs0OTQsNiBAQCBuYW1lc3BhY2UgV1RGIHsKICNkZWZpbmUgTUVTU0FHRSBMT0dfRVJST1IKICNk
ZWZpbmUgQ0hFQ0tfQ09ORElUSU9OIEFTU0VSVAogCi0jaWYgT1MoREFSV0lOKQotc3RydWN0IFNw
YW47Ci1jbGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkOwotY2xhc3MgVENNYWxs
b2NfUGFnZUhlYXA7Ci1jbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZTsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvcjsKLQotY2xhc3MgRmFzdE1hbGxvY1pvbmUg
ewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKLQotICAgIHN0YXRpYyBrZXJuX3Jl
dHVybl90IGVudW1lcmF0ZSh0YXNrX3QsIHZvaWQqLCB1bnNpZ25lZCB0eXBlTW1hc2ssIHZtX2Fk
ZHJlc3NfdCB6b25lQWRkcmVzcywgbWVtb3J5X3JlYWRlcl90LCB2bV9yYW5nZV9yZWNvcmRlcl90
KTsKLSAgICBzdGF0aWMgc2l6ZV90IGdvb2RTaXplKG1hbGxvY196b25lX3QqLCBzaXplX3Qgc2l6
ZSkgeyByZXR1cm4gc2l6ZTsgfQotICAgIHN0YXRpYyBib29sZWFuX3QgY2hlY2sobWFsbG9jX3pv
bmVfdCopIHsgcmV0dXJuIHRydWU7IH0KLSAgICBzdGF0aWMgdm9pZCAgcHJpbnQobWFsbG9jX3pv
bmVfdCosIGJvb2xlYW5fdCkgeyB9Ci0gICAgc3RhdGljIHZvaWQgbG9nKG1hbGxvY196b25lX3Qq
LCB2b2lkKikgeyB9Ci0gICAgc3RhdGljIHZvaWQgZm9yY2VMb2NrKG1hbGxvY196b25lX3QqKSB7
IH0KLSAgICBzdGF0aWMgdm9pZCBmb3JjZVVubG9jayhtYWxsb2Nfem9uZV90KikgeyB9Ci0gICAg
c3RhdGljIHZvaWQgc3RhdGlzdGljcyhtYWxsb2Nfem9uZV90KiwgbWFsbG9jX3N0YXRpc3RpY3Nf
dCogc3RhdHMpIHsgbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YobWFsbG9jX3N0YXRpc3RpY3NfdCkp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgRmFzdE1hbGxvY1pvbmUoVENNYWxsb2NfUGFnZUhlYXAqLCBU
Q01hbGxvY19UaHJlYWRDYWNoZSoqLCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiwg
UGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4qLCBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY19UaHJl
YWRDYWNoZT4qKTsKLSAgICBzdGF0aWMgc2l6ZV90IHNpemUobWFsbG9jX3pvbmVfdCosIGNvbnN0
IHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCogem9uZU1hbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6
ZV90KTsKLSAgICBzdGF0aWMgdm9pZCogem9uZUNhbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90
IG51bUl0ZW1zLCBzaXplX3Qgc2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQgem9uZUZyZWUobWFsbG9j
X3pvbmVfdCosIHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCogem9uZVJlYWxsb2MobWFsbG9jX3pv
bmVfdCosIHZvaWQqLCBzaXplX3QpOwotICAgIHN0YXRpYyB2b2lkKiB6b25lVmFsbG9jKG1hbGxv
Y196b25lX3QqLCBzaXplX3QpIHsgTE9HX0VSUk9SKCJ2YWxsb2MgaXMgbm90IHN1cHBvcnRlZCIp
OyByZXR1cm4gMDsgfQotICAgIHN0YXRpYyB2b2lkIHpvbmVEZXN0cm95KG1hbGxvY196b25lX3Qq
KSB7IH0KLQotICAgIG1hbGxvY196b25lX3QgbV96b25lOwotICAgIFRDTWFsbG9jX1BhZ2VIZWFw
KiBtX3BhZ2VIZWFwOwotICAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiogbV90aHJlYWRIZWFwczsK
LSAgICBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiBtX2NlbnRyYWxDYWNoZXM7Ci0g
ICAgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4qIG1fc3BhbkFsbG9jYXRvcjsKLSAgICBQYWdlSGVh
cEFsbG9jYXRvcjxUQ01hbGxvY19UaHJlYWRDYWNoZT4qIG1fcGFnZUhlYXBBbGxvY2F0b3I7Ci19
OwotCi0jZW5kaWYKLQotI2VuZGlmCi0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLS8vIFRoaXMgI2lm
ZGVmIHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgc2V0LiAgU2V0IE5PX1RDTUFMTE9DX1NBTVBMRVMg
aWYKLS8vIHlvdSdyZSBwb3J0aW5nIHRvIGEgc3lzdGVtIHdoZXJlIHlvdSByZWFsbHkgY2FuJ3Qg
Z2V0IGEgc3RhY2t0cmFjZS4KLSNpZmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCi0vLyBXZSB1c2Ug
I2RlZmluZSBzbyBjb2RlIGNvbXBpbGVzIGV2ZW4gaWYgeW91ICNpbmNsdWRlIHN0YWNrdHJhY2Uu
aCBzb21laG93LgotIyBkZWZpbmUgR2V0U3RhY2tUcmFjZShzdGFjaywgZGVwdGgsIHNraXApICAo
MCkKLSNlbHNlCi0jIGluY2x1ZGUgPGdvb2dsZS9zdGFja3RyYWNlLmg+Ci0jZW5kaWYKLSNlbmRp
ZgotCi0vLyBFdmVuIGlmIHdlIGhhdmUgc3VwcG9ydCBmb3IgdGhyZWFkLWxvY2FsIHN0b3JhZ2Ug
aW4gdGhlIGNvbXBpbGVyCi0vLyBhbmQgbGlua2VyLCB0aGUgT1MgbWF5IG5vdCBzdXBwb3J0IGl0
LiAgV2UgbmVlZCB0byBjaGVjayB0aGF0IGF0Ci0vLyBydW50aW1lLiAgUmlnaHQgbm93LCB3ZSBo
YXZlIHRvIGtlZXAgYSBtYW51YWwgc2V0IG9mICJiYWQiIE9TZXMuCi0jaWYgZGVmaW5lZChIQVZF
X1RMUykKLSAgc3RhdGljIGJvb2wga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOyAgICAgIC8v
IGJlIGNvbnNlcnZhdGl2ZQotICBzdGF0aWMgaW5saW5lIGJvb2wgS2VybmVsU3VwcG9ydHNUTFMo
KSB7Ci0gICAgcmV0dXJuIGtlcm5lbF9zdXBwb3J0c190bHM7Ci0gIH0KLSMgaWYgIUhBVkVfREVD
TF9VTkFNRSAgIC8vIGlmIHRvbyBvbGQgZm9yIHVuYW1lLCBwcm9iYWJseSB0b28gb2xkIGZvciBU
TFMKLSAgICBzdGF0aWMgdm9pZCBDaGVja0lmS2VybmVsU3VwcG9ydHNUTFMoKSB7Ci0gICAgICBr
ZXJuZWxfc3VwcG9ydHNfdGxzID0gZmFsc2U7Ci0gICAgfQotIyBlbHNlCi0jICAgaW5jbHVkZSA8
c3lzL3V0c25hbWUuaD4gICAgLy8gREVDTF9VTkFNRSBjaGVja2VkIGZvciA8c3lzL3V0c25hbWUu
aD4gdG9vCi0gICAgc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkgewotICAg
ICAgc3RydWN0IHV0c25hbWUgYnVmOwotICAgICAgaWYgKHVuYW1lKCZidWYpICE9IDApIHsgICAv
LyBzaG91bGQgYmUgaW1wb3NzaWJsZQotICAgICAgICBNRVNTQUdFKCJ1bmFtZSBmYWlsZWQgYXNz
dW1pbmcgbm8gVExTIHN1cHBvcnQgKGVycm5vPSVkKVxuIiwgZXJybm8pOwotICAgICAgICBrZXJu
ZWxfc3VwcG9ydHNfdGxzID0gZmFsc2U7Ci0gICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYnVm
LnN5c25hbWUsICJsaW51eCIpID09IDApIHsKLSAgICAgICAgLy8gVGhlIGxpbnV4IGNhc2U6IHRo
ZSBmaXJzdCBrZXJuZWwgdG8gc3VwcG9ydCBUTFMgd2FzIDIuNi4wCi0gICAgICAgIGlmIChidWYu
cmVsZWFzZVswXSA8ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicpICAgIC8vIDAueCBvciAx
LngKLSAgICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gZmFsc2U7Ci0gICAgICAgIGVsc2Ug
aWYgKGJ1Zi5yZWxlYXNlWzBdID09ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicgJiYKLSAg
ICAgICAgICAgICAgICAgYnVmLnJlbGVhc2VbMl0gPj0gJzAnICYmIGJ1Zi5yZWxlYXNlWzJdIDwg
JzYnICYmCi0gICAgICAgICAgICAgICAgIGJ1Zi5yZWxlYXNlWzNdID09ICcuJykgICAgICAgICAg
ICAgICAgICAgICAgIC8vIDIuMCAtIDIuNQotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMg
PSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSB0
cnVlOwotICAgICAgfSBlbHNlIHsgICAgICAgIC8vIHNvbWUgb3RoZXIga2VybmVsLCB3ZSdsbCBi
ZSBvcHRpbWlzaXRpYwotICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gdHJ1ZTsKLSAgICAg
IH0KLSAgICAgIC8vIFRPRE8oY3NpbHZlcnMpOiBWTE9HKDEpIHRoZSB0bHMgc3RhdHVzIG9uY2Ug
d2Ugc3VwcG9ydCBSQVdfVkxPRwotICAgIH0KLSMgIGVuZGlmICAvLyBIQVZFX0RFQ0xfVU5BTUUK
LSNlbmRpZiAgICAvLyBIQVZFX1RMUwotCi0vLyBfX1RIUk9XIGlzIGRlZmluZWQgaW4gZ2xpYmMg
c3lzdGVtcy4gIEl0IG1lYW5zLCBjb3VudGVyLWludHVpdGl2ZWx5LAotLy8gIlRoaXMgZnVuY3Rp
b24gd2lsbCBuZXZlciB0aHJvdyBhbiBleGNlcHRpb24uIiAgSXQncyBhbiBvcHRpb25hbAotLy8g
b3B0aW1pemF0aW9uIHRvb2wsIGJ1dCB3ZSBtYXkgbmVlZCB0byB1c2UgaXQgdG8gbWF0Y2ggZ2xp
YmMgcHJvdG90eXBlcy4KLSNpZm5kZWYgX19USFJPVyAgICAvLyBJIGd1ZXNzIHdlJ3JlIG5vdCBv
biBhIGdsaWJjIHN5c3RlbQotIyBkZWZpbmUgX19USFJPVyAgIC8vIF9fVEhST1cgaXMganVzdCBh
biBvcHRpbWl6YXRpb24sIHNvIG9rIHRvIG1ha2UgaXQgIiIKLSNlbmRpZgotCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIC8vIENvbmZpZ3VyYXRpb24KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA2NCw3ICs5NjcsNyBAQCBj
bGFzcyBQYWdlSGVhcEFsbG9jYXRvciB7CiAgIH0KICNlbmRpZgogfTsKLQorCQogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogLy8gU3BhbiAtIGEgY29udGlndW91cyBydW4gb2YgcGFnZXMKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTEyMDIsNiArMTEwNSwyMzEgQEAgc3RhdGljIGlubGluZSB2b2lkIERM
TF9QcmVwZW5kKFNwYW4qIGxpcwogICBsaXN0LT5uZXh0ID0gc3BhbjsKIH0KIAorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBEYXRhIGtlcHQgcGVyIHNpemUtY2xhc3MgaW4gY2VudHJhbCBjYWNoZQorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK2NsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgeworIHB1YmxpYzoKKyAg
dm9pZCBJbml0KHNpemVfdCBjbCk7CisKKyAgLy8gVGhlc2UgbWV0aG9kcyBhbGwgZG8gaW50ZXJu
YWwgbG9ja2luZy4KKworICAvLyBJbnNlcnQgdGhlIHNwZWNpZmllZCByYW5nZSBpbnRvIHRoZSBj
ZW50cmFsIGZyZWVsaXN0LiAgTiBpcyB0aGUgbnVtYmVyIG9mCisgIC8vIGVsZW1lbnRzIGluIHRo
ZSByYW5nZS4KKyAgdm9pZCBJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQg
Tik7CisKKyAgLy8gUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRz
IGludG8gTi4KKyAgdm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGlu
dCAqTik7CisKKyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyZWUgb2JqZWN0cyBpbiBjYWNo
ZS4KKyAgc2l6ZV90IGxlbmd0aCgpIHsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Cisg
ICAgcmV0dXJuIGNvdW50ZXJfOworICB9CisKKyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZy
ZWUgb2JqZWN0cyBpbiB0aGUgdHJhbnNmZXIgY2FjaGUuCisgIGludCB0Y19sZW5ndGgoKSB7Cisg
ICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOworICAgIHJldHVybiB1c2VkX3Nsb3RzXyAqIG51
bV9vYmplY3RzX3RvX21vdmVbc2l6ZV9jbGFzc19dOworICB9CisKKyNpZmRlZiBXVEZfQ0hBTkdF
UworICB0ZW1wbGF0ZSA8Y2xhc3MgRmluZGVyLCBjbGFzcyBSZWFkZXI+CisgIHZvaWQgZW51bWVy
YXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyLCBUQ01h
bGxvY19DZW50cmFsX0ZyZWVMaXN0KiByZW1vdGVDZW50cmFsRnJlZUxpc3QpCisgIHsKKyAgICBm
b3IgKFNwYW4qIHNwYW4gPSAmZW1wdHlfOyBzcGFuICYmIHNwYW4gIT0gJmVtcHR5Xzsgc3BhbiA9
IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4tPm5leHQpIDogMCkpCisgICAgICBBU1NFUlQoIXNw
YW4tPm9iamVjdHMpOworCisgICAgQVNTRVJUKCFub25lbXB0eV8ub2JqZWN0cyk7CisgICAgc3Rh
dGljIGNvbnN0IHB0cmRpZmZfdCBub25lbXB0eU9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KCZub25lbXB0eV8pIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odGhp
cyk7CisKKyAgICBTcGFuKiByZW1vdGVOb25lbXB0eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkgKyBub25lbXB0
eU9mZnNldCk7CisgICAgU3BhbiogcmVtb3RlU3BhbiA9IG5vbmVtcHR5Xy5uZXh0OworCisgICAg
Zm9yIChTcGFuKiBzcGFuID0gcmVhZGVyKHJlbW90ZVNwYW4pOyBzcGFuICYmIHJlbW90ZVNwYW4g
IT0gcmVtb3RlTm9uZW1wdHk7IHJlbW90ZVNwYW4gPSBzcGFuLT5uZXh0LCBzcGFuID0gKHNwYW4t
Pm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkgeworICAgICAgZm9yICh2b2lkKiBuZXh0
T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9IHJlYWRlci5u
ZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG5leHRPYmplY3Qp
KSkKKyAgICAgICAgZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOworICAgIH0KKyAgfQorI2VuZGlm
CisKKyBwcml2YXRlOgorICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAorICAvLyBSZW1vdmUg
b2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4KKyAgLy8gUmV0dXJuIE5VTEwgaWYgbm8gZnJl
ZSBlbnRyaWVzIGluIGNhY2hlLgorICB2b2lkKiBGZXRjaEZyb21TcGFucygpOworCisgIC8vIFJF
UVVJUkVTOiBsb2NrXyBpcyBoZWxkCisgIC8vIFJlbW92ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQg
cmV0dXJuLiAgRmV0Y2hlcworICAvLyBmcm9tIHBhZ2VoZWFwIGlmIGNhY2hlIGlzIGVtcHR5LiAg
T25seSByZXR1cm5zCisgIC8vIE5VTEwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgorICB2b2lkKiBG
ZXRjaEZyb21TcGFuc1NhZmUoKTsKKworICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAorICAv
LyBSZWxlYXNlIGEgbGlua2VkIGxpc3Qgb2Ygb2JqZWN0cyB0byBzcGFucy4KKyAgLy8gTWF5IHRl
bXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCisgIHZvaWQgUmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQg
KnN0YXJ0KTsKKworICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAorICAvLyBSZWxlYXNlIGFu
IG9iamVjdCB0byBzcGFucy4KKyAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCisg
IEFMV0FZU19JTkxJTkUgdm9pZCBSZWxlYXNlVG9TcGFucyh2b2lkKiBvYmplY3QpOworCisgIC8v
IFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCisgIC8vIFBvcHVsYXRlIGNhY2hlIGJ5IGZldGNoaW5n
IGZyb20gdGhlIHBhZ2UgaGVhcC4KKyAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18u
CisgIEFMV0FZU19JTkxJTkUgdm9pZCBQb3B1bGF0ZSgpOworCisgIC8vIFJFUVVJUkVTOiBsb2Nr
IGlzIGhlbGQuCisgIC8vIFRyaWVzIHRvIG1ha2Ugcm9vbSBmb3IgYSBUQ0VudHJ5LiAgSWYgdGhl
IGNhY2hlIGlzIGZ1bGwgaXQgd2lsbCB0cnkgdG8KKyAgLy8gZXhwYW5kIGl0IGF0IHRoZSBjb3N0
IG9mIHNvbWUgb3RoZXIgY2FjaGUgc2l6ZS4gIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcworICAv
LyBubyBzcGFjZS4KKyAgYm9vbCBNYWtlQ2FjaGVTcGFjZSgpOworCisgIC8vIFJFUVVJUkVTOiBs
b2NrXyBmb3IgbG9ja2VkX3NpemVfY2xhc3MgaXMgaGVsZC4KKyAgLy8gUGlja3MgYSAicmFuZG9t
IiBzaXplIGNsYXNzIHRvIHN0ZWFsIFRDRW50cnkgc2xvdCBmcm9tLiAgSW4gcmVhbGl0eSBpdAor
ICAvLyBqdXN0IGl0ZXJhdGVzIG92ZXIgdGhlIHNpemVjbGFzc2VzIGJ1dCBkb2VzIHNvIHdpdGhv
dXQgdGFraW5nIGEgbG9jay4KKyAgLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgIC8vIE1h
eSB0ZW1wb3JhcmlseSBsb2NrIGEgInJhbmRvbSIgc2l6ZSBjbGFzcy4KKyAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgYm9vbCBFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplX3QgbG9ja2VkX3NpemVfY2xh
c3MsIGJvb2wgZm9yY2UpOworCisgIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyAqbm90KiBoZWxkLgor
ICAvLyBUcmllcyB0byBzaHJpbmsgdGhlIENhY2hlLiAgSWYgZm9yY2UgaXMgdHJ1ZSBpdCB3aWxs
IHJlbGFzZSBvYmplY3RzIHRvCisgIC8vIHNwYW5zIGlmIGl0IGFsbG93cyBpdCB0byBzaHJpbmsg
dGhlIGNhY2hlLiAgUmV0dXJuIGZhbHNlIGlmIGl0IGZhaWxlZCB0bworICAvLyBzaHJpbmsgdGhl
IGNhY2hlLiAgRGVjcmVtZW50cyBjYWNoZV9zaXplXyBvbiBzdWNjZWVzcy4KKyAgLy8gTWF5IHRl
bXBvcmFyaWx5IHRha2UgbG9ja18uICBJZiBpdCB0YWtlcyBsb2NrXywgdGhlIGxvY2tlZF9zaXpl
X2NsYXNzCisgIC8vIGxvY2sgaXMgcmVsZWFzZWQgdG8gdGhlIHRocmVhZCBmcm9tIGhvbGRpbmcg
dHdvIHNpemUgY2xhc3MgbG9ja3MKKyAgLy8gY29uY3VycmVudGx5IHdoaWNoIGNvdWxkIGxlYWQg
dG8gYSBkZWFkbG9jay4KKyAgYm9vbCBTaHJpbmtDYWNoZShpbnQgbG9ja2VkX3NpemVfY2xhc3Ms
IGJvb2wgZm9yY2UpOworCisgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyBhbGwgdGhlIGRhdGEgbWVt
YmVycy4gIGNhY2hlZF9lbnRyaWVzIGFuZCBjYWNoZV9zaXplXworICAvLyBtYXkgYmUgbG9va2Vk
IGF0IHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4KKyAgU3BpbkxvY2sgbG9ja187CisKKyAgLy8g
V2Uga2VlcCBsaW5rZWQgbGlzdHMgb2YgZW1wdHkgYW5kIG5vbi1lbXB0eSBzcGFucy4KKyAgc2l6
ZV90ICAgc2l6ZV9jbGFzc187ICAgICAvLyBNeSBzaXplIGNsYXNzCisgIFNwYW4gICAgIGVtcHR5
XzsgICAgICAgICAgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0IG9mIGVtcHR5IHNwYW5zCisgIFNw
YW4gICAgIG5vbmVtcHR5XzsgICAgICAgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0IG9mIG5vbi1l
bXB0eSBzcGFucworICBzaXplX3QgICBjb3VudGVyXzsgICAgICAgIC8vIE51bWJlciBvZiBmcmVl
IG9iamVjdHMgaW4gY2FjaGUgZW50cnkKKworICAvLyBIZXJlIHdlIHJlc2VydmUgc3BhY2UgZm9y
IFRDRW50cnkgY2FjaGUgc2xvdHMuICBTaW5jZSBvbmUgc2l6ZSBjbGFzcyBjYW4KKyAgLy8gZW5k
IHVwIGdldHRpbmcgYWxsIHRoZSBUQ0VudHJpZXMgcXVvdGEgaW4gdGhlIHN5c3RlbSB3ZSBqdXN0
IHByZWFsbG9jYXRlCisgIC8vIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGVudHJpZXMgaGVyZS4KKyAg
VENFbnRyeSB0Y19zbG90c19ba051bVRyYW5zZmVyRW50cmllc107CisKKyAgLy8gTnVtYmVyIG9m
IGN1cnJlbnRseSB1c2VkIGNhY2hlZCBlbnRyaWVzIGluIHRjX3Nsb3RzXy4gIFRoaXMgdmFyaWFi
bGUgaXMKKyAgLy8gdXBkYXRlZCB1bmRlciBhIGxvY2sgYnV0IGNhbiBiZSByZWFkIHdpdGhvdXQg
b25lLgorICBpbnQzMl90IHVzZWRfc2xvdHNfOworICAvLyBUaGUgY3VycmVudCBudW1iZXIgb2Yg
c2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4gIFRoaXMgaXMgYW4KKyAgLy8gYWRhcHRpdmUgdmFs
dWUgdGhhdCBpcyBpbmNyZWFzZWQgaWYgdGhlcmUgaXMgbG90cyBvZiB0cmFmZmljCisgIC8vIG9u
IGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KKyAgaW50MzJfdCBjYWNoZV9zaXplXzsKK307CisKKy8vIFBh
ZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVsdGlwbGUgb2YgNjQgYnl0ZXMKK2NsYXNz
IFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMgVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdCB7CisgcHJpdmF0ZToKKyAgY2hhciBwYWRfWyg2NCAtIChzaXplb2YoVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdCkgJSA2NCkpICUgNjRdOworfTsKKworI2lmIE9TKERBUldJTikK
K3N0cnVjdCBTcGFuOworY2xhc3MgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZDsKK2Ns
YXNzIFRDTWFsbG9jX1BhZ2VIZWFwOworY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGU7Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFnZUhlYXBBbGxvY2F0b3I7CisKK2NsYXNzIEZhc3RN
YWxsb2Nab25lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0KCk7CisKKyAgICBzdGF0
aWMga2Vybl9yZXR1cm5fdCBlbnVtZXJhdGUodGFza190LCB2b2lkKiwgdW5zaWduZWQgdHlwZU1t
YXNrLCB2bV9hZGRyZXNzX3Qgem9uZUFkZHJlc3MsIG1lbW9yeV9yZWFkZXJfdCwgdm1fcmFuZ2Vf
cmVjb3JkZXJfdCk7CisgICAgc3RhdGljIHNpemVfdCBnb29kU2l6ZShtYWxsb2Nfem9uZV90Kiwg
c2l6ZV90IHNpemUpIHsgcmV0dXJuIHNpemU7IH0KKyAgICBzdGF0aWMgYm9vbGVhbl90IGNoZWNr
KG1hbGxvY196b25lX3QqKSB7IHJldHVybiB0cnVlOyB9CisgICAgc3RhdGljIHZvaWQgIHByaW50
KG1hbGxvY196b25lX3QqLCBib29sZWFuX3QpIHsgfQorICAgIHN0YXRpYyB2b2lkIGxvZyhtYWxs
b2Nfem9uZV90Kiwgdm9pZCopIHsgfQorICAgIHN0YXRpYyB2b2lkIGZvcmNlTG9jayhtYWxsb2Nf
em9uZV90KikgeyB9CisgICAgc3RhdGljIHZvaWQgZm9yY2VVbmxvY2sobWFsbG9jX3pvbmVfdCop
IHsgfQorICAgIHN0YXRpYyB2b2lkIHN0YXRpc3RpY3MobWFsbG9jX3pvbmVfdCosIG1hbGxvY19z
dGF0aXN0aWNzX3QqIHN0YXRzKSB7IG1lbXNldChzdGF0cywgMCwgc2l6ZW9mKG1hbGxvY19zdGF0
aXN0aWNzX3QpKTsgfQorCitwcml2YXRlOgorICAgIEZhc3RNYWxsb2Nab25lKFRDTWFsbG9jX1Bh
Z2VIZWFwKiwgVENNYWxsb2NfVGhyZWFkQ2FjaGUqKiwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dFBhZGRlZCosIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiwgUGFnZUhlYXBBbGxvY2F0b3I8VENN
YWxsb2NfVGhyZWFkQ2FjaGU+Kik7CisgICAgc3RhdGljIHNpemVfdCBzaXplKG1hbGxvY196b25l
X3QqLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQqIHpvbmVNYWxsb2MobWFsbG9jX3pv
bmVfdCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHpvbmVDYWxsb2MobWFsbG9jX3pvbmVf
dCosIHNpemVfdCBudW1JdGVtcywgc2l6ZV90IHNpemUpOworICAgIHN0YXRpYyB2b2lkIHpvbmVG
cmVlKG1hbGxvY196b25lX3QqLCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQqIHpvbmVSZWFsbG9j
KG1hbGxvY196b25lX3QqLCB2b2lkKiwgc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogem9uZVZh
bGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90KSB7IExPR19FUlJPUigidmFsbG9jIGlzIG5vdCBz
dXBwb3J0ZWQiKTsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgdm9pZCB6b25lRGVzdHJveShtYWxs
b2Nfem9uZV90KikgeyB9CisKKyAgICBtYWxsb2Nfem9uZV90IG1fem9uZTsKKyAgICBUQ01hbGxv
Y19QYWdlSGVhcCogbV9wYWdlSGVhcDsKKyAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSoqIG1fdGhy
ZWFkSGVhcHM7CisgICAgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCogbV9jZW50cmFs
Q2FjaGVzOworICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBtX3NwYW5BbGxvY2F0b3I7Cisg
ICAgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+KiBtX3BhZ2VIZWFwQWxs
b2NhdG9yOworfTsKKworI2VuZGlmCisKKyNlbmRpZgorCisjaWZuZGVmIFdURl9DSEFOR0VTCisv
LyBUaGlzICNpZmRlZiBzaG91bGQgYWxtb3N0IG5ldmVyIGJlIHNldC4gIFNldCBOT19UQ01BTExP
Q19TQU1QTEVTIGlmCisvLyB5b3UncmUgcG9ydGluZyB0byBhIHN5c3RlbSB3aGVyZSB5b3UgcmVh
bGx5IGNhbid0IGdldCBhIHN0YWNrdHJhY2UuCisjaWZkZWYgTk9fVENNQUxMT0NfU0FNUExFUwor
Ly8gV2UgdXNlICNkZWZpbmUgc28gY29kZSBjb21waWxlcyBldmVuIGlmIHlvdSAjaW5jbHVkZSBz
dGFja3RyYWNlLmggc29tZWhvdy4KKyMgZGVmaW5lIEdldFN0YWNrVHJhY2Uoc3RhY2ssIGRlcHRo
LCBza2lwKSAgKDApCisjZWxzZQorIyBpbmNsdWRlIDxnb29nbGUvc3RhY2t0cmFjZS5oPgorI2Vu
ZGlmCisjZW5kaWYKKworLy8gRXZlbiBpZiB3ZSBoYXZlIHN1cHBvcnQgZm9yIHRocmVhZC1sb2Nh
bCBzdG9yYWdlIGluIHRoZSBjb21waWxlcgorLy8gYW5kIGxpbmtlciwgdGhlIE9TIG1heSBub3Qg
c3VwcG9ydCBpdC4gIFdlIG5lZWQgdG8gY2hlY2sgdGhhdCBhdAorLy8gcnVudGltZS4gIFJpZ2h0
IG5vdywgd2UgaGF2ZSB0byBrZWVwIGEgbWFudWFsIHNldCBvZiAiYmFkIiBPU2VzLgorI2lmIGRl
ZmluZWQoSEFWRV9UTFMpCisgIHN0YXRpYyBib29sIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxz
ZTsgICAgICAvLyBiZSBjb25zZXJ2YXRpdmUKKyAgc3RhdGljIGlubGluZSBib29sIEtlcm5lbFN1
cHBvcnRzVExTKCkgeworICAgIHJldHVybiBrZXJuZWxfc3VwcG9ydHNfdGxzOworICB9CisjIGlm
ICFIQVZFX0RFQ0xfVU5BTUUgICAvLyBpZiB0b28gb2xkIGZvciB1bmFtZSwgcHJvYmFibHkgdG9v
IG9sZCBmb3IgVExTCisgICAgc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkg
eworICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOworICAgIH0KKyMgZWxzZQorIyAg
IGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+ICAgIC8vIERFQ0xfVU5BTUUgY2hlY2tlZCBmb3IgPHN5
cy91dHNuYW1lLmg+IHRvbworICAgIHN0YXRpYyB2b2lkIENoZWNrSWZLZXJuZWxTdXBwb3J0c1RM
UygpIHsKKyAgICAgIHN0cnVjdCB1dHNuYW1lIGJ1ZjsKKyAgICAgIGlmICh1bmFtZSgmYnVmKSAh
PSAwKSB7ICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUKKyAgICAgICAgTUVTU0FHRSgidW5hbWUg
ZmFpbGVkIGFzc3VtaW5nIG5vIFRMUyBzdXBwb3J0IChlcnJubz0lZClcbiIsIGVycm5vKTsKKyAg
ICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOworICAgICAgfSBlbHNlIGlmIChzdHJj
YXNlY21wKGJ1Zi5zeXNuYW1lLCAibGludXgiKSA9PSAwKSB7CisgICAgICAgIC8vIFRoZSBsaW51
eCBjYXNlOiB0aGUgZmlyc3Qga2VybmVsIHRvIHN1cHBvcnQgVExTIHdhcyAyLjYuMAorICAgICAg
ICBpZiAoYnVmLnJlbGVhc2VbMF0gPCAnMicgJiYgYnVmLnJlbGVhc2VbMV0gPT0gJy4nKSAgICAv
LyAwLnggb3IgMS54CisgICAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOworICAg
ICAgICBlbHNlIGlmIChidWYucmVsZWFzZVswXSA9PSAnMicgJiYgYnVmLnJlbGVhc2VbMV0gPT0g
Jy4nICYmCisgICAgICAgICAgICAgICAgIGJ1Zi5yZWxlYXNlWzJdID49ICcwJyAmJiBidWYucmVs
ZWFzZVsyXSA8ICc2JyAmJgorICAgICAgICAgICAgICAgICBidWYucmVsZWFzZVszXSA9PSAnLicp
ICAgICAgICAgICAgICAgICAgICAgICAvLyAyLjAgLSAyLjUKKyAgICAgICAgICBrZXJuZWxfc3Vw
cG9ydHNfdGxzID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBrZXJuZWxfc3VwcG9y
dHNfdGxzID0gdHJ1ZTsKKyAgICAgIH0gZWxzZSB7ICAgICAgICAvLyBzb21lIG90aGVyIGtlcm5l
bCwgd2UnbGwgYmUgb3B0aW1pc2l0aWMKKyAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IHRy
dWU7CisgICAgICB9CisgICAgICAvLyBUT0RPKGNzaWx2ZXJzKTogVkxPRygxKSB0aGUgdGxzIHN0
YXR1cyBvbmNlIHdlIHN1cHBvcnQgUkFXX1ZMT0cKKyAgICB9CisjICBlbmRpZiAgLy8gSEFWRV9E
RUNMX1VOQU1FCisjZW5kaWYgICAgLy8gSEFWRV9UTFMKKworLy8gX19USFJPVyBpcyBkZWZpbmVk
IGluIGdsaWJjIHN5c3RlbXMuICBJdCBtZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKKy8vICJU
aGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uLiIgIEl0J3MgYW4gb3B0
aW9uYWwKKy8vIG9wdGltaXphdGlvbiB0b29sLCBidXQgd2UgbWF5IG5lZWQgdG8gdXNlIGl0IHRv
IG1hdGNoIGdsaWJjIHByb3RvdHlwZXMuCisjaWZuZGVmIF9fVEhST1cgICAgLy8gSSBndWVzcyB3
ZSdyZSBub3Qgb24gYSBnbGliYyBzeXN0ZW0KKyMgZGVmaW5lIF9fVEhST1cgICAvLyBfX1RIUk9X
IGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uLCBzbyBvayB0byBtYWtlIGl0ICIiCisjZW5kaWYKKwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gU3RhY2sgdHJhY2VzIGtlcHQgZm9yIHNhbXBsZWQgYWxs
b2NhdGlvbnMKIC8vICAgVGhlIGZvbGxvd2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFnZWhl
YXBfbG9ja18uCkBAIC0yMzQ4LDEzNCArMjQ3Niw2IEBAIGNsYXNzIFRDTWFsbG9jX1RocmVhZENh
Y2hlIHsKIH07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBrZXB0IHBlciBzaXplLWNsYXNzIGlu
IGNlbnRyYWwgY2FjaGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBUQ01hbGxvY19DZW50cmFsX0Zy
ZWVMaXN0IHsKLSBwdWJsaWM6Ci0gIHZvaWQgSW5pdChzaXplX3QgY2wpOwotCi0gIC8vIFRoZXNl
IG1ldGhvZHMgYWxsIGRvIGludGVybmFsIGxvY2tpbmcuCi0KLSAgLy8gSW5zZXJ0IHRoZSBzcGVj
aWZpZWQgcmFuZ2UgaW50byB0aGUgY2VudHJhbCBmcmVlbGlzdC4gIE4gaXMgdGhlIG51bWJlciBv
ZgotICAvLyBlbGVtZW50cyBpbiB0aGUgcmFuZ2UuCi0gIHZvaWQgSW5zZXJ0UmFuZ2Uodm9pZCAq
c3RhcnQsIHZvaWQgKmVuZCwgaW50IE4pOwotCi0gIC8vIFJldHVybnMgdGhlIGFjdHVhbCBudW1i
ZXIgb2YgZmV0Y2hlZCBlbGVtZW50cyBpbnRvIE4uCi0gIHZvaWQgUmVtb3ZlUmFuZ2Uodm9pZCAq
KnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQgKk4pOwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCi0gIHNpemVfdCBsZW5ndGgoKSB7Ci0gICAgU3Bpbkxv
Y2tIb2xkZXIgaCgmbG9ja18pOwotICAgIHJldHVybiBjb3VudGVyXzsKLSAgfQotCi0gIC8vIFJl
dHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gdGhlIHRyYW5zZmVyIGNhY2hlLgot
ICBpbnQgdGNfbGVuZ3RoKCkgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tfKTsKLSAgICBy
ZXR1cm4gdXNlZF9zbG90c18gKiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NfXTsKLSAg
fQotCi0jaWZkZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3Mg
UmVhZGVyPgotICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25z
dCBSZWFkZXImIHJlYWRlciwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCogcmVtb3RlQ2VudHJh
bEZyZWVMaXN0KQotICB7Ci0gICAgZm9yIChTcGFuKiBzcGFuID0gJmVtcHR5Xzsgc3BhbiAmJiBz
cGFuICE9ICZlbXB0eV87IHNwYW4gPSAoc3Bhbi0+bmV4dCA/IHJlYWRlcihzcGFuLT5uZXh0KSA6
IDApKQotICAgICAgQVNTRVJUKCFzcGFuLT5vYmplY3RzKTsKLQotICAgIEFTU0VSVCghbm9uZW1w
dHlfLm9iamVjdHMpOwotICAgIHN0YXRpYyBjb25zdCBwdHJkaWZmX3Qgbm9uZW1wdHlPZmZzZXQg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmbm9uZW1wdHlfKSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHRoaXMpOwotCi0gICAgU3BhbiogcmVtb3RlTm9uZW1wdHkgPSBy
ZWludGVycHJldF9jYXN0PFNwYW4qPihyZWludGVycHJldF9jYXN0PGNoYXIqPihyZW1vdGVDZW50
cmFsRnJlZUxpc3QpICsgbm9uZW1wdHlPZmZzZXQpOwotICAgIFNwYW4qIHJlbW90ZVNwYW4gPSBu
b25lbXB0eV8ubmV4dDsKLQotICAgIGZvciAoU3Bhbiogc3BhbiA9IHJlYWRlcihyZW1vdGVTcGFu
KTsgc3BhbiAmJiByZW1vdGVTcGFuICE9IHJlbW90ZU5vbmVtcHR5OyByZW1vdGVTcGFuID0gc3Bh
bi0+bmV4dCwgc3BhbiA9IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4tPm5leHQpIDogMCkpIHsK
LSAgICAgIGZvciAodm9pZCogbmV4dE9iamVjdCA9IHNwYW4tPm9iamVjdHM7IG5leHRPYmplY3Q7
IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCi0gICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0
KTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gcHJpdmF0ZToKLSAgLy8gUkVRVUlSRVM6IGxvY2tf
IGlzIGhlbGQKLSAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hlIGFuZCByZXR1cm4uCi0gIC8v
IFJldHVybiBOVUxMIGlmIG5vIGZyZWUgZW50cmllcyBpbiBjYWNoZS4KLSAgdm9pZCogRmV0Y2hG
cm9tU3BhbnMoKTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBSZW1vdmUg
b2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4gIEZldGNoZXMKLSAgLy8gZnJvbSBwYWdlaGVh
cCBpZiBjYWNoZSBpcyBlbXB0eS4gIE9ubHkgcmV0dXJucwotICAvLyBOVUxMIG9uIGFsbG9jYXRp
b24gZmFpbHVyZS4KLSAgdm9pZCogRmV0Y2hGcm9tU3BhbnNTYWZlKCk7Ci0KLSAgLy8gUkVRVUlS
RVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUmVsZWFzZSBhIGxpbmtlZCBsaXN0IG9mIG9iamVjdHMg
dG8gc3BhbnMuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgotICB2b2lkIFJl
bGVhc2VMaXN0VG9TcGFucyh2b2lkICpzdGFydCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlz
IGhlbGQKLSAgLy8gUmVsZWFzZSBhbiBvYmplY3QgdG8gc3BhbnMuCi0gIC8vIE1heSB0ZW1wb3Jh
cmlseSByZWxlYXNlIGxvY2tfLgotICBBTFdBWVNfSU5MSU5FIHZvaWQgUmVsZWFzZVRvU3BhbnMo
dm9pZCogb2JqZWN0KTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBQb3B1
bGF0ZSBjYWNoZSBieSBmZXRjaGluZyBmcm9tIHRoZSBwYWdlIGhlYXAuCi0gIC8vIE1heSB0ZW1w
b3JhcmlseSByZWxlYXNlIGxvY2tfLgotICBBTFdBWVNfSU5MSU5FIHZvaWQgUG9wdWxhdGUoKTsK
LQotICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkLgotICAvLyBUcmllcyB0byBtYWtlIHJvb20g
Zm9yIGEgVENFbnRyeS4gIElmIHRoZSBjYWNoZSBpcyBmdWxsIGl0IHdpbGwgdHJ5IHRvCi0gIC8v
IGV4cGFuZCBpdCBhdCB0aGUgY29zdCBvZiBzb21lIG90aGVyIGNhY2hlIHNpemUuICBSZXR1cm4g
ZmFsc2UgaWYgdGhlcmUgaXMKLSAgLy8gbm8gc3BhY2UuCi0gIGJvb2wgTWFrZUNhY2hlU3BhY2Uo
KTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gZm9yIGxvY2tlZF9zaXplX2NsYXNzIGlzIGhlbGQu
Ci0gIC8vIFBpY2tzIGEgInJhbmRvbSIgc2l6ZSBjbGFzcyB0byBzdGVhbCBUQ0VudHJ5IHNsb3Qg
ZnJvbS4gIEluIHJlYWxpdHkgaXQKLSAgLy8ganVzdCBpdGVyYXRlcyBvdmVyIHRoZSBzaXplY2xh
c3NlcyBidXQgZG9lcyBzbyB3aXRob3V0IHRha2luZyBhIGxvY2suCi0gIC8vIFJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzLgotICAvLyBNYXkgdGVtcG9yYXJpbHkgbG9jayBhICJyYW5kb20iIHNpemUg
Y2xhc3MuCi0gIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRXZpY3RSYW5kb21TaXplQ2xhc3Mo
c2l6ZV90IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNlKTsKLQotICAvLyBSRVFVSVJFUzog
bG9ja18gaXMgKm5vdCogaGVsZC4KLSAgLy8gVHJpZXMgdG8gc2hyaW5rIHRoZSBDYWNoZS4gIElm
IGZvcmNlIGlzIHRydWUgaXQgd2lsbCByZWxhc2Ugb2JqZWN0cyB0bwotICAvLyBzcGFucyBpZiBp
dCBhbGxvd3MgaXQgdG8gc2hyaW5rIHRoZSBjYWNoZS4gIFJldHVybiBmYWxzZSBpZiBpdCBmYWls
ZWQgdG8KLSAgLy8gc2hyaW5rIHRoZSBjYWNoZS4gIERlY3JlbWVudHMgY2FjaGVfc2l6ZV8gb24g
c3VjY2Vlc3MuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSB0YWtlIGxvY2tfLiAgSWYgaXQgdGFrZXMg
bG9ja18sIHRoZSBsb2NrZWRfc2l6ZV9jbGFzcwotICAvLyBsb2NrIGlzIHJlbGVhc2VkIHRvIHRo
ZSB0aHJlYWQgZnJvbSBob2xkaW5nIHR3byBzaXplIGNsYXNzIGxvY2tzCi0gIC8vIGNvbmN1cnJl
bnRseSB3aGljaCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCi0gIGJvb2wgU2hyaW5rQ2FjaGUo
aW50IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNlKTsKLQotICAvLyBUaGlzIGxvY2sgcHJv
dGVjdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuICBjYWNoZWRfZW50cmllcyBhbmQgY2FjaGVfc2l6
ZV8KLSAgLy8gbWF5IGJlIGxvb2tlZCBhdCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suCi0gIFNw
aW5Mb2NrIGxvY2tfOwotCi0gIC8vIFdlIGtlZXAgbGlua2VkIGxpc3RzIG9mIGVtcHR5IGFuZCBu
b24tZW1wdHkgc3BhbnMuCi0gIHNpemVfdCAgIHNpemVfY2xhc3NfOyAgICAgLy8gTXkgc2l6ZSBj
bGFzcwotICBTcGFuICAgICBlbXB0eV87ICAgICAgICAgIC8vIER1bW15IGhlYWRlciBmb3IgbGlz
dCBvZiBlbXB0eSBzcGFucwotICBTcGFuICAgICBub25lbXB0eV87ICAgICAgIC8vIER1bW15IGhl
YWRlciBmb3IgbGlzdCBvZiBub24tZW1wdHkgc3BhbnMKLSAgc2l6ZV90ICAgY291bnRlcl87ICAg
ICAgICAvLyBOdW1iZXIgb2YgZnJlZSBvYmplY3RzIGluIGNhY2hlIGVudHJ5Ci0KLSAgLy8gSGVy
ZSB3ZSByZXNlcnZlIHNwYWNlIGZvciBUQ0VudHJ5IGNhY2hlIHNsb3RzLiAgU2luY2Ugb25lIHNp
emUgY2xhc3MgY2FuCi0gIC8vIGVuZCB1cCBnZXR0aW5nIGFsbCB0aGUgVENFbnRyaWVzIHF1b3Rh
IGluIHRoZSBzeXN0ZW0gd2UganVzdCBwcmVhbGxvY2F0ZQotICAvLyBzdWZmaWNpZW50IG51bWJl
ciBvZiBlbnRyaWVzIGhlcmUuCi0gIFRDRW50cnkgdGNfc2xvdHNfW2tOdW1UcmFuc2ZlckVudHJp
ZXNdOwotCi0gIC8vIE51bWJlciBvZiBjdXJyZW50bHkgdXNlZCBjYWNoZWQgZW50cmllcyBpbiB0
Y19zbG90c18uICBUaGlzIHZhcmlhYmxlIGlzCi0gIC8vIHVwZGF0ZWQgdW5kZXIgYSBsb2NrIGJ1
dCBjYW4gYmUgcmVhZCB3aXRob3V0IG9uZS4KLSAgaW50MzJfdCB1c2VkX3Nsb3RzXzsKLSAgLy8g
VGhlIGN1cnJlbnQgbnVtYmVyIG9mIHNsb3RzIGZvciB0aGlzIHNpemUgY2xhc3MuICBUaGlzIGlz
IGFuCi0gIC8vIGFkYXB0aXZlIHZhbHVlIHRoYXQgaXMgaW5jcmVhc2VkIGlmIHRoZXJlIGlzIGxv
dHMgb2YgdHJhZmZpYwotICAvLyBvbiBhIGdpdmVuIHNpemUgY2xhc3MuCi0gIGludDMyX3QgY2Fj
aGVfc2l6ZV87Ci19OwotCi0vLyBQYWQgZWFjaCBDZW50cmFsQ2FjaGUgb2JqZWN0IHRvIG11bHRp
cGxlIG9mIDY0IGJ5dGVzCi1jbGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkIDog
cHVibGljIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewotIHByaXZhdGU6Ci0gIGNoYXIgcGFk
X1soNjQgLSAoc2l6ZW9mKFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QpICUgNjQpKSAlIDY0XTsK
LX07Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gR2xvYmFsIHZhcmlhYmxlcwogLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148591</attachid>
            <date>2012-06-20 10:09:38 -0700</date>
            <delta_ts>2012-06-20 10:30:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89366-20120620110840.patch</filename>
            <type>text/plain</type>
            <size>241413</size>
            <attacher name="Alex Christensen">alex.christensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjA4MjApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1MiBAQAorMjAxMi0wNi0yMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFsZXguY2hyaXN0ZW5zZW5AZmxleHNpbS5jb20+CisKKyAgICAgICAgRmFzdE1hbGxvYy5jcHAg
bmVlZHMgdG8gYmUgcmVvcmRlcmVkIGJlZm9yZSBwYWRkaW5nIGJ1ZyBjYW4gYmUgZml4ZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MzY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRmFzdE1h
bGxvYy5jcHA6CisgICAgICAgIFJlb3JkZXJlZCBhbmQgZml4ZWQgbWFueSBzdHlsZSBwcm9ibGVt
cyAKKyAgICAgICAgKFdURjo6dHJ5RmFzdE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RD
YWxsb2MpOgorICAgICAgICAoV1RGOjpmYXN0Q2FsbG9jKToKKyAgICAgICAgKFdURjo6ZmFzdEZy
ZWUpOgorICAgICAgICAoV1RGOjp0cnlGYXN0UmVhbGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RN
YWxsb2NTaXplKToKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OkNsYXNzSW5kZXgpOgor
ICAgICAgICAoVENFbnRyeSk6CisgICAgICAgIChXVEY6OlNMTF9OZXh0KToKKyAgICAgICAgKFdU
Rjo6U0xMU2V0TmV4dCk6CisgICAgICAgIChXVEY6OlNMTFB1c2gpOgorICAgICAgICAoV1RGOjpT
TExQb3ApOgorICAgICAgICAoV1RGOjpTTExQb3BSYW5nZSk6CisgICAgICAgIChXVEY6OlNMTFB1
c2hSYW5nZSk6CisgICAgICAgIChXVEY6OlNMTFNpemUpOgorICAgICAgICAoV1RGOjpTaXplQ2xh
c3MpOgorICAgICAgICAoV1RGOjpCeXRlU2l6ZUZvckNsYXNzKToKKyAgICAgICAgKFdURjo6TnVt
TW92ZVNpemUpOgorICAgICAgICAoV1RGOjpJbml0U2l6ZUNsYXNzZXMpOgorICAgICAgICAoV1RG
OjpNZXRhRGF0YUFsbG9jKToKKyAgICAgICAgKFBhZ2VIZWFwQWxsb2NhdG9yKToKKyAgICAgICAg
KFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFs
bG9jYXRvcjo6TmV3KToKKyAgICAgICAgKFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkRlbGV0ZSk6
CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjppbnVzZSk6CisgICAgICAgIChXVEY6
OlBhZ2VIZWFwQWxsb2NhdG9yOjpyZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMpOgorICAgICAg
ICAoV1RGOjpwYWdlcyk6CisgICAgICAgIChXVEY6OkFsbG9jYXRpb25TaXplKToKKyAgICAgICAg
KFNwYW4pOgorICAgICAgICAoV1RGOjpFdmVudCk6CisgICAgICAgIChXVEY6Ok5ld1NwYW4pOgor
ICAgICAgICAoV1RGOjpEZWxldGVTcGFuKToKKyAgICAgICAgKFdURjo6RExMSW5pdCk6CisgICAg
ICAgIChXVEY6OkRMTFJlbW92ZSk6CisgICAgICAgIChXVEY6OkRMTF9Jc0VtcHR5KToKKyAgICAg
ICAgKFdURjo6RExMTGVuZ3RoKToKKyAgICAgICAgKFdURjo6RExMUHJpbnQpOgorICAgICAgICAo
V1RGOjpETExQcmVwZW5kKToKKyAgICAgICAgKFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0KToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0Ojp0Y0xlbmd0aCk6CisgICAgICAgIChXVEY6OlRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjplbnVtZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChU
Q01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCk6CisgICAgICAgIChGYXN0TWFsbG9jWm9uZSk6
CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpnb29kU2l6ZSk6CisgICAgICAgIChXVEY6
OkZhc3RNYWxsb2Nab25lOjpjaGVjayk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpw
cmludCk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpsb2cpOgorICAgICAgICAoV1RG
OjpGYXN0TWFsbG9jWm9uZTo6Zm9yY2VMb2NrKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pv
bmU6OmZvcmNlVW5sb2NrKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OnN0YXRpc3Rp
Y3MpOgorICAgICAgICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6em9uZVZhbGxvYyk6CisgICAgICAg
IChXVEY6OkZhc3RNYWxsb2Nab25lOjp6b25lRGVzdHJveSk6CisgICAgICAgIChXVEY6Oktlcm5l
bFN1cHBvcnRzVExTKToKKyAgICAgICAgKFdURjo6Q2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKToK
KyAgICAgICAgKFN0YWNrVHJhY2UpOgorICAgICAgICAoTWFwU2VsZWN0b3IpOgorICAgICAgICAo
VENNYWxsb2NQYWdlSGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OkdldERl
c2NyaXB0b3IpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpHZXREZXNjcmlwdG9y
RW5zdXJlU2FmZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlN5c3RlbUJ5dGVz
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6RnJlZUJ5dGVzKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NQYWdlSGVhcDo6R2V0U2l6ZUNsYXNzSWZDYWNoZWQpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDYWNoZVNpemVDbGFzcyk6CisgICAgICAgIChTcGFuTGlz
dCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlJlY29yZFNwYW4pOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjppbml0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQ
YWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFn
ZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdl
SGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFw
OjpyZXNjaGVkdWxlU2NhdmVuZ2VyKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
c3VzcGVuZFNjYXZlbmdlcik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNjYXZl
bmdlclRpbWVyRmlyZWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpydW5TY2F2
ZW5nZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzaWduYWxTY2F2
ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNob3VsZFNjYXZlbmdlKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NQYWdlSGVhcDo6TmV3KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVh
cDo6QWxsb2NMYXJnZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlNwbGl0KToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6Q2FydmUpOgorICAgICAgICAoV1RGOjpU
Q01hbGxvY1BhZ2VIZWFwOjpEZWxldGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFw
OjpJbmNyZW1lbnRhbFNjYXZlbmdlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
UmVnaXN0ZXJTaXplQ2xhc3MpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpSZXR1
cm5lZEJ5dGVzKToKKyAgICAgICAgKFdURjo6UGFnZXNUb01CKToKKyAgICAgICAgKFdURjo6VENN
YWxsb2NQYWdlSGVhcDo6RHVtcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6Okdy
b3dIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6Q2hlY2spOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDaGVja0xpc3QpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Bh
Z2VIZWFwOjpSZWxlYXNlRnJlZVBhZ2VzKToKKyAgICAgICAgKFRDTWFsbG9jVGhyZWFkQ2FjaGVG
cmVlTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6SW5p
dCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6bGVuZ3RoKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjplbXB0eSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6bG93d2F0ZXJtYXJrKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjpjbGVhckxvd3dhdGVybWFy
ayk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UHVzaCk6Cisg
ICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UHVzaFJhbmdlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjpQb3BSYW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UG9wKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjplbnVtZXJhdGVGcmVlT2JqZWN0cyk6Cisg
ICAgICAgIChUQ01hbGxvY1RocmVhZENhY2hlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJl
YWRDYWNoZTo6ZnJlZWxpc3RsZW5ndGgpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENh
Y2hlOjpTaXplKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6ZW51bWVyYXRl
RnJlZU9iamVjdHMpOgorICAgICAgICAoV1RGOjpnZXRQYWdlSGVhcCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVuZ2UpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpzZXRUaHJlYWRI
ZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkluaXQpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJlbGVhc2VUb1NwYW5zKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkV2aWN0UmFuZG9tU2l6ZUNs
YXNzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Ok1ha2VDYWNoZVNw
YWNlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlNocmlua0NhY2hl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Okluc2VydFJhbmdlKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zU2FmZSk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFucyk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpQb3B1bGF0ZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlNhbXBsZUFsbG9jYXRpb24pOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0KToKKyAgICAgICAgKFdURjo6VENNYWxs
b2NUaHJlYWRDYWNoZTo6Q2xlYW51cCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6RGVhbGxv
Y2F0ZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkZldGNoRnJvbUNlbnRy
YWxDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlJlbGVhc2VUb0Nl
bnRyYWxDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlNjYXZlbmdl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUpOgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0TW9kdWxlKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6TmV3SGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkdldFRocmVhZEhlYXApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Ro
cmVhZENhY2hlOjpHZXRDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkdldENhY2hlSWZQcmVzZW50KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6
SW5pdFRTRCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkNyZWF0ZUNhY2hl
SWZOZWNlc3NhcnkpOgorCiAyMDEyLTA2LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGxvb2sgYXQgZGlzYXNzZW1i
bHkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxMjA4MjApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjggKzQyLDI4IEBA
CiAvLyAgICAgVGhpcyBpcyBzYWZlIGJlY2F1c2UgZWFjaCBzdWNoIGxpc3QgaXMgb25seSBhY2Nl
c3NlZCBieSBvbmUgdGhyZWFkLgogLy8gIDIuIFdlIGhhdmUgYSBsb2NrIHBlciBjZW50cmFsIGZy
ZWUtbGlzdCwgYW5kIGhvbGQgaXQgd2hpbGUgbWFuaXB1bGF0aW5nCiAvLyAgICAgdGhlIGNlbnRy
YWwgZnJlZSBsaXN0IGZvciBhIHBhcnRpY3VsYXIgc2l6ZS4KLS8vICAzLiBUaGUgY2VudHJhbCBw
YWdlIGFsbG9jYXRvciBpcyBwcm90ZWN0ZWQgYnkgInBhZ2VoZWFwX2xvY2siLgorLy8gIDMuIFRo
ZSBjZW50cmFsIHBhZ2UgYWxsb2NhdG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBMb2NrIi4K
IC8vICA0LiBUaGUgcGFnZW1hcCAod2hpY2ggbWFwcyBmcm9tIHBhZ2UtbnVtYmVyIHRvIGRlc2Ny
aXB0b3IpLAogLy8gICAgIGNhbiBiZSByZWFkIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGFu
ZCB3cml0dGVuIHdoaWxlIGhvbGRpbmcKLS8vICAgICB0aGUgInBhZ2VoZWFwX2xvY2siLgorLy8g
ICAgIHRoZSAicGFnZWhlYXBMb2NrIi4KIC8vICA1LiBUbyBpbXByb3ZlIHBlcmZvcm1hbmNlLCBh
IHN1YnNldCBvZiB0aGUgaW5mb3JtYXRpb24gb25lIGNhbiBnZXQKLS8vICAgICBmcm9tIHRoZSBw
YWdlbWFwIGlzIGNhY2hlZCBpbiBhIGRhdGEgc3RydWN0dXJlLCBwYWdlbWFwX2NhY2hlXywKLS8v
ICAgICB0aGF0IGF0b21pY2FsbHkgcmVhZHMgYW5kIHdyaXRlcyBpdHMgZW50cmllcy4gIFRoaXMg
Y2FjaGUgY2FuIGJlCisvLyAgICAgZnJvbSB0aGUgcGFnZW1hcCBpcyBjYWNoZWQgaW4gYSBkYXRh
IHN0cnVjdHVyZSwgcGFnZW1hcGNhY2hlLAorLy8gICAgIHRoYXQgYXRvbWljYWxseSByZWFkcyBh
bmQgd3JpdGVzIGl0cyBlbnRyaWVzLiBUaGlzIGNhY2hlIGNhbiBiZQogLy8gICAgIHJlYWQgYW5k
IHdyaXR0ZW4gd2l0aG91dCBsb2NraW5nLgogLy8KIC8vICAgICBUaGlzIG11bHRpLXRocmVhZGVk
IGFjY2VzcyB0byB0aGUgcGFnZW1hcCBpcyBzYWZlIGZvciBmYWlybHkKLS8vICAgICBzdWJ0bGUg
cmVhc29ucy4gIFdlIGJhc2ljYWxseSBhc3N1bWUgdGhhdCB3aGVuIGFuIG9iamVjdCBYIGlzCisv
LyAgICAgc3VidGxlIHJlYXNvbnMuIFdlIGJhc2ljYWxseSBhc3N1bWUgdGhhdCB3aGVuIGFuIG9i
amVjdCBYIGlzCiAvLyAgICAgYWxsb2NhdGVkIGJ5IHRocmVhZCBBIGFuZCBkZWFsbG9jYXRlZCBi
eSB0aHJlYWQgQiwgdGhlcmUgbXVzdAogLy8gICAgIGhhdmUgYmVlbiBhcHByb3ByaWF0ZSBzeW5j
aHJvbml6YXRpb24gaW4gdGhlIGhhbmRvZmYgb2Ygb2JqZWN0Ci0vLyAgICAgWCBmcm9tIHRocmVh
ZCBBIHRvIHRocmVhZCBCLiAgVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBwYWdlbWFwX2NhY2hl
Xy4KKy8vICAgICBYIGZyb20gdGhyZWFkIEEgdG8gdGhyZWFkIEIuIFRoZSBzYW1lIGxvZ2ljIGFw
cGxpZXMgdG8gcGFnZW1hcGNhY2hlLgogLy8KIC8vIFRIRSBQQUdFSUQtVE8tU0laRUNMQVNTIENB
Q0hFCi0vLyBIb3QgUGFnZUlELXRvLXNpemVjbGFzcyBtYXBwaW5ncyBhcmUgaGVsZCBieSBwYWdl
bWFwX2NhY2hlXy4gIElmIHRoaXMgY2FjaGUKKy8vIEhvdCBQYWdlSUQtdG8tc2l6ZWNsYXNzIG1h
cHBpbmdzIGFyZSBoZWxkIGJ5IHBhZ2VtYXBjYWNoZS4gSWYgdGhpcyBjYWNoZQogLy8gcmV0dXJu
cyAwIGZvciBhIHBhcnRpY3VsYXIgUGFnZUlEIHRoZW4gdGhhdCBtZWFucyAibm8gaW5mb3JtYXRp
b24sIiBub3QgdGhhdAotLy8gdGhlIHNpemVjbGFzcyBpcyAwLiAgVGhlIGNhY2hlIG1heSBoYXZl
IHN0YWxlIGluZm9ybWF0aW9uIGZvciBwYWdlcyB0aGF0IGRvCi0vLyBub3QgaG9sZCB0aGUgYmVn
aW5uaW5nIG9mIGFueSBmcmVlKCknYWJsZSBvYmplY3QuICBTdGFsZW5lc3MgaXMgZWxpbWluYXRl
ZAotLy8gaW4gUG9wdWxhdGUoKSBmb3IgcGFnZXMgd2l0aCBzaXplY2xhc3MgPiAwIG9iamVjdHMs
IGFuZCBpbiBkb19tYWxsb2MoKSBhbmQKLS8vIGRvX21lbWFsaWduKCkgZm9yIGFsbCBvdGhlciBy
ZWxldmFudCBwYWdlcy4KKy8vIHRoZSBzaXplY2xhc3MgaXMgMC4gVGhlIGNhY2hlIG1heSBoYXZl
IHN0YWxlIGluZm9ybWF0aW9uIGZvciBwYWdlcyB0aGF0IGRvCisvLyBub3QgaG9sZCB0aGUgYmVn
aW5uaW5nIG9mIGFueSBmcmVlKCknYWJsZSBvYmplY3QuIFN0YWxlbmVzcyBpcyBlbGltaW5hdGVk
CisvLyBpbiBQb3B1bGF0ZSgpIGZvciBwYWdlcyB3aXRoIHNpemVjbGFzcyA+IDAgb2JqZWN0cywg
YW5kIGluIGRvTWFsbG9jKCkgYW5kCisvLyBkb01lbWFsaWduKCkgZm9yIGFsbCBvdGhlciByZWxl
dmFudCBwYWdlcy4KIC8vCiAvLyBUT0RPOiBCaWFzIHJlY2xhbWF0aW9uIHRvIGxhcmdlciBhZGRy
ZXNzZXMKIC8vIFRPRE86IGltcGxlbWVudCBtYWxsaW5mby9tYWxsb3B0CkBAIC0yNDMsNyArMjQz
LDcgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdE1hbGxvYyhzaXplXwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKICAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRl
ciogaGVhZGVyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqPihyZXN1
bHQpOwotICAgIGhlYWRlci0+bV9zaXplID0gbjsKKyAgICBoZWFkZXItPm1zaXplID0gbjsKICAg
ICBoZWFkZXItPm1fdHlwZSA9IEludGVybmFsOjpBbGxvY1R5cGVNYWxsb2M7CiAgICAgaGVhZGVy
LT5tX3ByZWZpeCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbnRlcm5hbDo6VmFsaWRhdGlvblBy
ZWZpeCk7CiAgICAgcmVzdWx0ID0gaGVhZGVyICsgMTsKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZv
aWQqIGZhc3RNYWxsb2Moc2l6ZV90IG4pCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVHJ5TWFs
bG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVs
ZW1lbnRfc2l6ZSkKK1RyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG5F
bGVtZW50cywgc2l6ZV90IGVsZW1lbnRzaXplKQogewogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4o
KSk7CiAKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIHNpemVfdCB0b3Rh
bEJ5dGVzID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsKLSAgICBpZiAobl9lbGVtZW50cyA+
IDEgJiYgZWxlbWVudF9zaXplICYmICh0b3RhbEJ5dGVzIC8gZWxlbWVudF9zaXplKSAhPSBuX2Vs
ZW1lbnRzKQorICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gbkVsZW1lbnRzICogZWxlbWVudHNpemU7
CisgICAgaWYgKG5FbGVtZW50cyA+IDEgJiYgZWxlbWVudHNpemUgJiYgKHRvdGFsQnl0ZXMgLyBl
bGVtZW50c2l6ZSkgIT0gbkVsZW1lbnRzKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFRyeU1h
bGxvY1JldHVyblZhbHVlIHJldHVyblZhbHVlID0gdHJ5RmFzdE1hbGxvYyh0b3RhbEJ5dGVzKTsK
QEAgLTI5MSwyMSArMjkxLDIxIEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Mo
c2l6ZV8KICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0
OwogI2Vsc2UKLSAgICByZXR1cm4gY2FsbG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7Cisg
ICAgcmV0dXJuIGNhbGxvYyhuRWxlbWVudHMsIGVsZW1lbnRzaXplKTsKICNlbmRpZgogfQogCi12
b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQor
dm9pZCogZmFzdENhbGxvYyhzaXplX3QgbkVsZW1lbnRzLCBzaXplX3QgZWxlbWVudHNpemUpCiB7
CiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZB
TElEQVRJT04pCi0gICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0
Q2FsbG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7CisgICAgVHJ5TWFsbG9jUmV0dXJuVmFs
dWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0Q2FsbG9jKG5FbGVtZW50cywgZWxlbWVudHNpemUpOwog
ICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoIXJldHVyblZhbHVlLmdldFZhbHVlKHJlc3VsdCkp
CiAgICAgICAgIENSQVNIKCk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuX2Vs
ZW1lbnRzLCBlbGVtZW50X3NpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuRWxlbWVu
dHMsIGVsZW1lbnRzaXplKTsKICNlbmRpZgogCiAgICAgaWYgKCFyZXN1bHQpCkBAIC0zMjQsNyAr
MzI0LDcgQEAgdm9pZCBmYXN0RnJlZSh2b2lkKiBwKQogICAgIAogICAgIGZhc3RNYWxsb2NNYXRj
aFZhbGlkYXRlRnJlZShwLCBJbnRlcm5hbDo6QWxsb2NUeXBlTWFsbG9jKTsKICAgICBJbnRlcm5h
bDo6VmFsaWRhdGlvbkhlYWRlciogaGVhZGVyID0gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0
aW9uSGVhZGVyKHApOwotICAgIG1lbXNldChwLCAweENDLCBoZWFkZXItPm1fc2l6ZSk7CisgICAg
bWVtc2V0KHAsIDB4Q0MsIGhlYWRlci0+bXNpemUpOwogICAgIGZyZWUoaGVhZGVyKTsKICNlbHNl
CiAgICAgZnJlZShwKTsKQEAgLTM0Myw3ICszNDMsNyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0
cnlGYXN0UmVhbGxvYyh2b2lkCiAgICAgICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KHJlYWxsb2Mo
SW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKHApLCBuICsgSW50ZXJuYWw6OlZh
bGlkYXRpb25CdWZmZXJTaXplKSk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJlc3VsdC0+bV9zaXplID0gbjsKKyAgICAgICAgcmVzdWx0LT5t
c2l6ZSA9IG47CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIDE7CiAgICAgICAgICpmYXN0TWFs
bG9jVmFsaWRhdGlvblN1ZmZpeChyZXN1bHQpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7
CiAgICAgICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwpAQCAtMzg1LDkgKzM4NSw5IEBA
IEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKIHNpemVfdCBmYXN0TWFs
bG9jU2l6ZShjb25zdCB2b2lkKiBwKQogewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJ
T04pCi0gICAgcmV0dXJuIEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihjb25z
dF9jYXN0PHZvaWQqPihwKSktPm1fc2l6ZTsKKyAgICByZXR1cm4gSW50ZXJuYWw6OmZhc3RNYWxs
b2NWYWxpZGF0aW9uSGVhZGVyKGNvbnN0X2Nhc3Q8dm9pZCo+KHApKS0+bXNpemU7CiAjZWxpZiBP
UyhEQVJXSU4pCi0gICAgcmV0dXJuIG1hbGxvY19zaXplKHApOworICAgIHJldHVybiBtYWxsb2NT
aXplKHApOwogI2VsaWYgT1MoV0lORE9XUykKICAgICByZXR1cm4gX21zaXplKGNvbnN0X2Nhc3Q8
dm9pZCo+KHApKTsKICNlbHNlCkBAIC00NzIsMTcgKzQ3MiwxNyBAQCBzdGF0aWMgdm9pZCogKCpw
dGhyZWFkX2dldHNwZWNpZmljX2Z1bmN0CiAjZW5kaWYKIAogI2RlZmluZSBERUZJTkVfVkFSSUFC
TEUodHlwZSwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpIFwKLSAgbmFtZXNwYWNlIEZMQUdfX25hbWVz
cGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQgeyAg
XAotICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGNoYXIgRkxBR1Nfbm8jI25hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMj
dHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQorICAgIG5hbWVzcGFjZSBGTEFHX19uYW1lc3Bh
Y2VfZG9fbm90X3VzZV9kaXJlY3RseV91c2VfREVDTEFSRV8jI3R5cGUjI19pbnN0ZWFkIHsgIFwK
KyAgICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2hhciBGTEFHU19ubyMjbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNM
QVJFXyMjdHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQogICAKICNkZWZpbmUgREVGSU5FX2lu
dDY0KG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShpbnQ2NF90LCBu
YW1lLCB2YWx1ZSwgbWVhbmluZykKKyAgICBERUZJTkVfVkFSSUFCTEUoaW50NjRfdCwgbmFtZSwg
dmFsdWUsIG1lYW5pbmcpCiAgIAogI2RlZmluZSBERUZJTkVfZG91YmxlKG5hbWUsIHZhbHVlLCBt
ZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5n
KQorICAgIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKQogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtNDk0LDEwOSArNDk0LDEyIEBAIG5hbWVzcGFjZSBXVEYgewog
I2RlZmluZSBNRVNTQUdFIExPR19FUlJPUgogI2RlZmluZSBDSEVDS19DT05ESVRJT04gQVNTRVJU
CiAKLSNpZiBPUyhEQVJXSU4pCi1zdHJ1Y3QgU3BhbjsKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3RQYWRkZWQ7Ci1jbGFzcyBUQ01hbGxvY19QYWdlSGVhcDsKLWNsYXNzIFRDTWFsbG9j
X1RocmVhZENhY2hlOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhZ2VIZWFwQWxsb2Nh
dG9yOwotCi1jbGFzcyBGYXN0TWFsbG9jWm9uZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
aW5pdCgpOwotCi0gICAgc3RhdGljIGtlcm5fcmV0dXJuX3QgZW51bWVyYXRlKHRhc2tfdCwgdm9p
ZCosIHVuc2lnbmVkIHR5cGVNbWFzaywgdm1fYWRkcmVzc190IHpvbmVBZGRyZXNzLCBtZW1vcnlf
cmVhZGVyX3QsIHZtX3JhbmdlX3JlY29yZGVyX3QpOwotICAgIHN0YXRpYyBzaXplX3QgZ29vZFNp
emUobWFsbG9jX3pvbmVfdCosIHNpemVfdCBzaXplKSB7IHJldHVybiBzaXplOyB9Ci0gICAgc3Rh
dGljIGJvb2xlYW5fdCBjaGVjayhtYWxsb2Nfem9uZV90KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHN0YXRpYyB2b2lkICBwcmludChtYWxsb2Nfem9uZV90KiwgYm9vbGVhbl90KSB7IH0KLSAgICBz
dGF0aWMgdm9pZCBsb2cobWFsbG9jX3pvbmVfdCosIHZvaWQqKSB7IH0KLSAgICBzdGF0aWMgdm9p
ZCBmb3JjZUxvY2sobWFsbG9jX3pvbmVfdCopIHsgfQotICAgIHN0YXRpYyB2b2lkIGZvcmNlVW5s
b2NrKG1hbGxvY196b25lX3QqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBzdGF0aXN0aWNzKG1hbGxv
Y196b25lX3QqLCBtYWxsb2Nfc3RhdGlzdGljc190KiBzdGF0cykgeyBtZW1zZXQoc3RhdHMsIDAs
IHNpemVvZihtYWxsb2Nfc3RhdGlzdGljc190KSk7IH0KLQotcHJpdmF0ZToKLSAgICBGYXN0TWFs
bG9jWm9uZShUQ01hbGxvY19QYWdlSGVhcCosIFRDTWFsbG9jX1RocmVhZENhY2hlKiosIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBh
Z2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiopOwotICAgIHN0YXRpYyBzaXpl
X3Qgc2l6ZShtYWxsb2Nfem9uZV90KiwgY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyB2b2lkKiB6
b25lTWFsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QpOwotICAgIHN0YXRpYyB2b2lkKiB6b25l
Q2FsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QgbnVtSXRlbXMsIHNpemVfdCBzaXplKTsKLSAg
ICBzdGF0aWMgdm9pZCB6b25lRnJlZShtYWxsb2Nfem9uZV90Kiwgdm9pZCopOwotICAgIHN0YXRp
YyB2b2lkKiB6b25lUmVhbGxvYyhtYWxsb2Nfem9uZV90Kiwgdm9pZCosIHNpemVfdCk7Ci0gICAg
c3RhdGljIHZvaWQqIHpvbmVWYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCkgeyBMT0dfRVJS
T1IoInZhbGxvYyBpcyBub3Qgc3VwcG9ydGVkIik7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIHZv
aWQgem9uZURlc3Ryb3kobWFsbG9jX3pvbmVfdCopIHsgfQotCi0gICAgbWFsbG9jX3pvbmVfdCBt
X3pvbmU7Ci0gICAgVENNYWxsb2NfUGFnZUhlYXAqIG1fcGFnZUhlYXA7Ci0gICAgVENNYWxsb2Nf
VGhyZWFkQ2FjaGUqKiBtX3RocmVhZEhlYXBzOwotICAgIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3RQYWRkZWQqIG1fY2VudHJhbENhY2hlczsKLSAgICBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiog
bV9zcGFuQWxsb2NhdG9yOwotICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENh
Y2hlPiogbV9wYWdlSGVhcEFsbG9jYXRvcjsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKLQotI2lm
bmRlZiBXVEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBz
ZXQuICBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgotLy8geW91J3JlIHBvcnRpbmcgdG8gYSBz
eXN0ZW0gd2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQgYSBzdGFja3RyYWNlLgotI2lmZGVmIE5P
X1RDTUFMTE9DX1NBTVBMRVMKLS8vIFdlIHVzZSAjZGVmaW5lIHNvIGNvZGUgY29tcGlsZXMgZXZl
biBpZiB5b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNvbWVob3cuCi0jIGRlZmluZSBHZXRTdGFj
a1RyYWNlKHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQotI2Vsc2UKLSMgaW5jbHVkZSA8Z29vZ2xl
L3N0YWNrdHJhY2UuaD4KLSNlbmRpZgotI2VuZGlmCi0KLS8vIEV2ZW4gaWYgd2UgaGF2ZSBzdXBw
b3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0aGUgY29tcGlsZXIKLS8vIGFuZCBsaW5r
ZXIsIHRoZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuICBXZSBuZWVkIHRvIGNoZWNrIHRoYXQgYXQK
LS8vIHJ1bnRpbWUuICBSaWdodCBub3csIHdlIGhhdmUgdG8ga2VlcCBhIG1hbnVhbCBzZXQgb2Yg
ImJhZCIgT1Nlcy4KLSNpZiBkZWZpbmVkKEhBVkVfVExTKQotICBzdGF0aWMgYm9vbCBrZXJuZWxf
c3VwcG9ydHNfdGxzID0gZmFsc2U7ICAgICAgLy8gYmUgY29uc2VydmF0aXZlCi0gIHN0YXRpYyBp
bmxpbmUgYm9vbCBLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICByZXR1cm4ga2VybmVsX3N1cHBv
cnRzX3RsczsKLSAgfQotIyBpZiAhSEFWRV9ERUNMX1VOQU1FICAgLy8gaWYgdG9vIG9sZCBmb3Ig
dW5hbWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUwotICAgIHN0YXRpYyB2b2lkIENoZWNrSWZL
ZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsK
LSAgICB9Ci0jIGVsc2UKLSMgICBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAvLyBERUNMX1VO
QU1FIGNoZWNrZWQgZm9yIDxzeXMvdXRzbmFtZS5oPiB0b28KLSAgICBzdGF0aWMgdm9pZCBDaGVj
a0lmS2VybmVsU3VwcG9ydHNUTFMoKSB7Ci0gICAgICBzdHJ1Y3QgdXRzbmFtZSBidWY7Ci0gICAg
ICBpZiAodW5hbWUoJmJ1ZikgIT0gMCkgeyAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlCi0gICAg
ICAgIE1FU1NBR0UoInVuYW1lIGZhaWxlZCBhc3N1bWluZyBubyBUTFMgc3VwcG9ydCAoZXJybm89
JWQpXG4iLCBlcnJubyk7Ci0gICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKLSAg
ICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChidWYuc3lzbmFtZSwgImxpbnV4IikgPT0gMCkgewot
ICAgICAgICAvLyBUaGUgbGludXggY2FzZTogdGhlIGZpcnN0IGtlcm5lbCB0byBzdXBwb3J0IFRM
UyB3YXMgMi42LjAKLSAgICAgICAgaWYgKGJ1Zi5yZWxlYXNlWzBdIDwgJzInICYmIGJ1Zi5yZWxl
YXNlWzFdID09ICcuJykgICAgLy8gMC54IG9yIDEueAotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0
c190bHMgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYnVmLnJlbGVhc2VbMF0gPT0gJzInICYm
IGJ1Zi5yZWxlYXNlWzFdID09ICcuJyAmJgotICAgICAgICAgICAgICAgICBidWYucmVsZWFzZVsy
XSA+PSAnMCcgJiYgYnVmLnJlbGVhc2VbMl0gPCAnNicgJiYKLSAgICAgICAgICAgICAgICAgYnVm
LnJlbGVhc2VbM10gPT0gJy4nKSAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4wIC0gMi41Ci0g
ICAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IHRydWU7Ci0gICAgICB9IGVsc2UgeyAgICAgICAg
Ly8gc29tZSBvdGhlciBrZXJuZWwsIHdlJ2xsIGJlIG9wdGltaXNpdGljCi0gICAgICAgIGtlcm5l
bF9zdXBwb3J0c190bHMgPSB0cnVlOwotICAgICAgfQotICAgICAgLy8gVE9ETyhjc2lsdmVycyk6
IFZMT0coMSkgdGhlIHRscyBzdGF0dXMgb25jZSB3ZSBzdXBwb3J0IFJBV19WTE9HCi0gICAgfQot
IyAgZW5kaWYgIC8vIEhBVkVfREVDTF9VTkFNRQotI2VuZGlmICAgIC8vIEhBVkVfVExTCi0KLS8v
IF9fVEhST1cgaXMgZGVmaW5lZCBpbiBnbGliYyBzeXN0ZW1zLiAgSXQgbWVhbnMsIGNvdW50ZXIt
aW50dWl0aXZlbHksCi0vLyAiVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2Vw
dGlvbi4iICBJdCdzIGFuIG9wdGlvbmFsCi0vLyBvcHRpbWl6YXRpb24gdG9vbCwgYnV0IHdlIG1h
eSBuZWVkIHRvIHVzZSBpdCB0byBtYXRjaCBnbGliYyBwcm90b3R5cGVzLgotI2lmbmRlZiBfX1RI
Uk9XICAgIC8vIEkgZ3Vlc3Mgd2UncmUgbm90IG9uIGEgZ2xpYmMgc3lzdGVtCi0jIGRlZmluZSBf
X1RIUk9XICAgLy8gX19USFJPVyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbiwgc28gb2sgdG8gbWFr
ZSBpdCAiIgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ29uZmlndXJhdGlvbgogLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIC8vIE5vdCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIG9mIHRoZSBmb2xsb3dp
bmcgcGFyYW1ldGVycyBtYWtlCi0vLyBzZW5zZS4gIEluIHBhcnRpY3VsYXIsIGlmIGtNYXhTaXpl
IGluY3JlYXNlcywgeW91IG1heSBoYXZlIHRvCisvLyBzZW5zZS4gSW4gcGFydGljdWxhciwgaWYg
a01heFNpemUgaW5jcmVhc2VzLCB5b3UgbWF5IGhhdmUgdG8KIC8vIGluY3JlYXNlIGtOdW1DbGFz
c2VzIGFzIHdlbGwuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2hpZnQgID0gMTI7CiBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2l6ZSAgID0gMSA8PCBrUGFnZVNoaWZ0OwpAQCAtNjA5LDI0
ICs1MTIsMjQgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtQ2xhc3NlcyA9IDY4OwogLy8gMTI4
TUIKIHN0YXRpYyBjb25zdCBzaXplX3Qga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkID0g
MTI4IDw8IDIwOwogCi0vLyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBmZXRjaCBmcm9tIHN5
c3RlbSBhdCBhIHRpbWUuICBNdXN0IGJlCisvLyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBm
ZXRjaCBmcm9tIHN5c3RlbSBhdCBhIHRpbWUuIE11c3QgYmUKIC8vIHNpZ25pZmljYW50bHkgYmln
Z2VyIHRoYW4ga1BhZ2VTaXplIHRvIGFtb3J0aXplIHN5c3RlbS1jYWxsCi0vLyBvdmVyaGVhZCwg
YW5kIGFsc28gdG8gcmVkdWNlIGV4dGVybmFsIGZyYWdlbWVudGF0aW9uLiAgQWxzbywgd2UKKy8v
IG92ZXJoZWFkLCBhbmQgYWxzbyB0byByZWR1Y2UgZXh0ZXJuYWwgZnJhZ2VtZW50YXRpb24uIEFs
c28sIHdlCiAvLyBzaG91bGQga2VlcCB0aGlzIHZhbHVlIGJpZyBiZWNhdXNlIHZhcmlvdXMgaW5j
YXJuYXRpb25zIG9mIExpbnV4CiAvLyBoYXZlIHNtYWxsIGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9m
IG1tYXAoKSByZWdpb25zIHBlcgogLy8gYWRkcmVzcy1zcGFjZS4KIHN0YXRpYyBjb25zdCBzaXpl
X3Qga01pblN5c3RlbUFsbG9jID0gMSA8PCAoMjAgLSBrUGFnZVNoaWZ0KTsKIAogLy8gTnVtYmVy
IG9mIG9iamVjdHMgdG8gbW92ZSBiZXR3ZWVuIGEgcGVyLXRocmVhZCBsaXN0IGFuZCBhIGNlbnRy
YWwKLS8vIGxpc3QgaW4gb25lIHNob3QuICBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRvbyBzbWFs
bCBzbyB3ZSBjYW4KLS8vIGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nlc3Npbmcg
dGhlIGNlbnRyYWwgbGlzdC4gIE1ha2luZworLy8gbGlzdCBpbiBvbmUgc2hvdC4gV2Ugd2FudCB0
aGlzIHRvIGJlIG5vdCB0b28gc21hbGwgc28gd2UgY2FuCisvLyBhbW9ydGl6ZSB0aGUgbG9jayBv
dmVyaGVhZCBmb3IgYWNjZXNzaW5nIHRoZSBjZW50cmFsIGxpc3QuIE1ha2luZwogLy8gaXQgdG9v
IGJpZyBtYXkgdGVtcG9yYXJpbHkgY2F1c2UgdW5uZWNlc3NhcnkgbWVtb3J5IHdhc3RhZ2UgaW4g
dGhlCiAvLyBwZXItdGhyZWFkIGZyZWUgbGlzdCB1bnRpbCB0aGUgc2NhdmVuZ2VyIGNsZWFucyB1
cCB0aGUgbGlzdC4KLXN0YXRpYyBpbnQgbnVtX29iamVjdHNfdG9fbW92ZVtrTnVtQ2xhc3Nlc107
CitzdGF0aWMgaW50IG51bU9iamVjdHNUb01vdmVba051bUNsYXNzZXNdOwogCiAvLyBNYXhpbXVt
IGxlbmd0aCB3ZSBhbGxvdyBhIHBlci10aHJlYWQgZnJlZS1saXN0IHRvIGhhdmUgYmVmb3JlIHdl
Ci0vLyBtb3ZlIG9iamVjdHMgZnJvbSBpdCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGNlbnRyYWwg
ZnJlZS1saXN0LiAgV2UKLS8vIHdhbnQgdGhpcyBiaWcgdG8gYXZvaWQgbG9ja2luZyB0aGUgY2Vu
dHJhbCBmcmVlLWxpc3QgdG9vIG9mdGVuLiAgSXQKKy8vIG1vdmUgb2JqZWN0cyBmcm9tIGl0IGlu
dG8gdGhlIGNvcnJlc3BvbmRpbmcgY2VudHJhbCBmcmVlLWxpc3QuIFdlCisvLyB3YW50IHRoaXMg
YmlnIHRvIGF2b2lkIGxvY2tpbmcgdGhlIGNlbnRyYWwgZnJlZS1saXN0IHRvbyBvZnRlbi4gSXQK
IC8vIHNob3VsZCBub3QgaHVydCB0byBtYWtlIHRoaXMgbGlzdCBzb21ld2hhdCBiaWcgYmVjYXVz
ZSB0aGUKIC8vIHNjYXZlbmdpbmcgY29kZSB3aWxsIHNocmluayBpdCBkb3duIHdoZW4gaXRzIGNv
bnRlbnRzIGFyZSBub3QgaW4gdXNlLgogc3RhdGljIGNvbnN0IGludCBrTWF4RnJlZUxpc3RMZW5n
dGggPSAyNTY7CkBAIC02NDcsNyArNTUwLDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVs
dE92ZXJhbGxUaHJlYQogc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4UGFnZXMgPSBrTWluU3lzdGVt
QWxsb2M7CiAKIC8qIFRoZSBzbWFsbGVzdCBwcmltZSA+IDJebiAqLwotc3RhdGljIGludCBwcmlt
ZXNfbGlzdFtdID0geworc3RhdGljIGludCBwcmltZXNMaXN0W10gPSB7CiAgICAgLy8gU21hbGwg
dmFsdWVzIG1pZ2h0IGNhdXNlIGhpZ2ggcmF0ZXMgb2Ygc2FtcGxpbmcKICAgICAvLyBhbmQgaGVu
Y2UgY29tbWVudGVkIG91dC4KICAgICAvLyAyLCA1LCAxMSwgMTcsIDM3LCA2NywgMTMxLCAyNTcs
CkBAIC02NjYsOSArNTY5LDkgQEAgREVGSU5FX2ludDY0KHRjbWFsbG9jX3NhbXBsZV9wYXJhbWV0
ZXIsCiBzdGF0aWMgc2l6ZV90IHNhbXBsZV9wZXJpb2QgPSAwOwogI2Vsc2UKIERFRklORV9pbnQ2
NCh0Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyLCAyNjIxNDcsCi0gICAgICAgICAiVHdpY2UgdGhl
IGFwcHJveGltYXRlIGdhcCBiZXR3ZWVuIHNhbXBsaW5nIGFjdGlvbnMuIgotICAgICAgICAgIiBN
dXN0IGJlIGEgcHJpbWUgbnVtYmVyLiBPdGhlcndpc2Ugd2lsbCBiZSByb3VuZGVkIHVwIHRvIGEg
IgotICAgICAgICAgIiBsYXJnZXIgcHJpbWUgbnVtYmVyIik7CisgICAgICAgICJUd2ljZSB0aGUg
YXBwcm94aW1hdGUgZ2FwIGJldHdlZW4gc2FtcGxpbmcgYWN0aW9ucy4iCisgICAgICAgICIgTXVz
dCBiZSBhIHByaW1lIG51bWJlci4gT3RoZXJ3aXNlIHdpbGwgYmUgcm91bmRlZCB1cCB0byBhICIK
KyAgICAgICAgIiBsYXJnZXIgcHJpbWUgbnVtYmVyIik7CiBzdGF0aWMgc2l6ZV90IHNhbXBsZV9w
ZXJpb2QgPSAyNjIxNDc7CiAjZW5kaWYKIApAQCAtNjc4LDIyICs1ODEsMjIgQEAgc3RhdGljIFNw
aW5Mb2NrIHNhbXBsZV9wZXJpb2RfbG9jayA9IFNQSQogLy8gUGFyYW1ldGVycyBmb3IgY29udHJv
bGxpbmcgaG93IGZhc3QgbWVtb3J5IGlzIHJldHVybmVkIHRvIHRoZSBPUy4KIAogREVGSU5FX2Rv
dWJsZSh0Y21hbGxvY19yZWxlYXNlX3JhdGUsIDEsCi0gICAgICAgICAgICAgICJSYXRlIGF0IHdo
aWNoIHdlIHJlbGVhc2UgdW51c2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtLiAgIgotICAgICAgICAg
ICAgICAiWmVybyBtZWFucyB3ZSBuZXZlciByZWxlYXNlIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0
ZW0uICAiCi0gICAgICAgICAgICAgICJJbmNyZWFzZSB0aGlzIGZsYWcgdG8gcmV0dXJuIG1lbW9y
eSBmYXN0ZXI7IGRlY3JlYXNlIGl0ICIKLSAgICAgICAgICAgICAgInRvIHJldHVybiBtZW1vcnkg
c2xvd2VyLiAgUmVhc29uYWJsZSByYXRlcyBhcmUgaW4gdGhlICIKLSAgICAgICAgICAgICAgInJh
bmdlIFswLDEwXSIpOworICAgICAgICAgICAgIlJhdGUgYXQgd2hpY2ggd2UgcmVsZWFzZSB1bnVz
ZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0uICIKKyAgICAgICAgICAgICJaZXJvIG1lYW5zIHdlIG5l
dmVyIHJlbGVhc2UgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbS4gIgorICAgICAgICAgICAgIklu
Y3JlYXNlIHRoaXMgZmxhZyB0byByZXR1cm4gbWVtb3J5IGZhc3RlcjsgZGVjcmVhc2UgaXQgIgor
ICAgICAgICAgICAgInRvIHJldHVybiBtZW1vcnkgc2xvd2VyLiBSZWFzb25hYmxlIHJhdGVzIGFy
ZSBpbiB0aGUgIgorICAgICAgICAgICAgInJhbmdlIFswLDEwXSIpOwogCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIE1hcHBpbmcgZnJvbSBzaXplIHRvIHNpemVfY2xhc3MgYW5kIHZpY2UgdmVyc2EKKy8vIE1h
cHBpbmcgZnJvbSBzaXplIHRvIHNpemVjbGFzcyBhbmQgdmljZSB2ZXJzYQogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLS8vIFNpemVzIDw9IDEwMjQgaGF2ZSBhbiBhbGlnbm1lbnQgPj0gOC4gIFNvIGZvciBzdWNo
IHNpemVzIHdlIGhhdmUgYW4KLS8vIGFycmF5IGluZGV4ZWQgYnkgY2VpbChzaXplLzgpLiAgU2l6
ZXMgPiAxMDI0IGhhdmUgYW4gYWxpZ25tZW50ID49IDEyOC4KKy8vIFNpemVzIDw9IDEwMjQgaGF2
ZSBhbiBhbGlnbm1lbnQgPj0gOC4gU28gZm9yIHN1Y2ggc2l6ZXMgd2UgaGF2ZSBhbgorLy8gYXJy
YXkgaW5kZXhlZCBieSBjZWlsKHNpemUvOCkuIFNpemVzID4gMTAyNCBoYXZlIGFuIGFsaWdubWVu
dCA+PSAxMjguCiAvLyBTbyBmb3IgdGhlc2UgbGFyZ2VyIHNpemVzIHdlIGhhdmUgYW4gYXJyYXkg
aW5kZXhlZCBieSBjZWlsKHNpemUvMTI4KS4KIC8vCiAvLyBXZSBmbGF0dGVuIGJvdGggbG9naWNh
bCBhcnJheXMgaW50byBvbmUgcGh5c2ljYWwgYXJyYXkgYW5kIHVzZQotLy8gYXJpdGhtZXRpYyB0
byBjb21wdXRlIGFuIGFwcHJvcHJpYXRlIGluZGV4LiAgVGhlIGNvbnN0YW50cyB1c2VkIGJ5Cisv
LyBhcml0aG1ldGljIHRvIGNvbXB1dGUgYW4gYXBwcm9wcmlhdGUgaW5kZXguIFRoZSBjb25zdGFu
dHMgdXNlZCBieQogLy8gQ2xhc3NJbmRleCgpIHdlcmUgc2VsZWN0ZWQgdG8gbWFrZSB0aGUgZmxh
dHRlbmluZyB3b3JrLgogLy8KIC8vIEV4YW1wbGVzOgpAQCAtNzA5LDMwICs2MTIsMzEgQEAgREVG
SU5FX2RvdWJsZSh0Y21hbGxvY19yZWxlYXNlX3JhdGUsIDEsCiBzdGF0aWMgY29uc3Qgc2l6ZV90
IGtNYXhTbWFsbFNpemUgPSAxMDI0Owogc3RhdGljIGNvbnN0IGludCBzaGlmdF9hbW91bnRbMl0g
PSB7IDMsIDcgfTsgIC8vIEZvciBkaXZpZGVzIGJ5IDggb3IgMTI4CiBzdGF0aWMgY29uc3QgaW50
IGFkZF9hbW91bnRbMl0gPSB7IDcsIDEyNyArICgxMjAgPDwgNykgfTsKLXN0YXRpYyB1bnNpZ25l
ZCBjaGFyIGNsYXNzX2FycmF5WzM3N107CitzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFzc0FycmF5
WzM3N107CiAKLS8vIENvbXB1dGUgaW5kZXggb2YgdGhlIGNsYXNzX2FycmF5W10gZW50cnkgZm9y
IGEgZ2l2ZW4gc2l6ZQotc3RhdGljIGlubGluZSBpbnQgQ2xhc3NJbmRleChzaXplX3Qgcykgewot
ICBjb25zdCBpbnQgaSA9IChzID4ga01heFNtYWxsU2l6ZSk7Ci0gIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KChzICsgYWRkX2Ftb3VudFtpXSkgPj4gc2hpZnRfYW1vdW50W2ldKTsKKy8vIENvbXB1
dGUgaW5kZXggb2YgdGhlIGNsYXNzQXJyYXlbXSBlbnRyeSBmb3IgYSBnaXZlbiBzaXplCitzdGF0
aWMgaW5saW5lIGludCBDbGFzc0luZGV4KHNpemVfdCBzKQoreworICAgIGNvbnN0IGludCBpID0g
KHMgPiBrTWF4U21hbGxTaXplKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigocyArIGFk
ZF9hbW91bnRbaV0pID4+IHNoaWZ0X2Ftb3VudFtpXSk7CiB9CiAKIC8vIE1hcHBpbmcgZnJvbSBz
aXplIGNsYXNzIHRvIG1heCBzaXplIHN0b3JhYmxlIGluIHRoYXQgY2xhc3MKLXN0YXRpYyBzaXpl
X3QgY2xhc3NfdG9fc2l6ZVtrTnVtQ2xhc3Nlc107CitzdGF0aWMgc2l6ZV90IGNsYXNzVG9zaXpl
W2tOdW1DbGFzc2VzXTsKIAogLy8gTWFwcGluZyBmcm9tIHNpemUgY2xhc3MgdG8gbnVtYmVyIG9m
IHBhZ2VzIHRvIGFsbG9jYXRlIGF0IGEgdGltZQogc3RhdGljIHNpemVfdCBjbGFzc190b19wYWdl
c1trTnVtQ2xhc3Nlc107CiAKLS8vIFRyYW5zZmVyQ2FjaGUgaXMgdXNlZCB0byBjYWNoZSB0cmFu
c2ZlcnMgb2YgbnVtX29iamVjdHNfdG9fbW92ZVtzaXplX2NsYXNzXQorLy8gVHJhbnNmZXJDYWNo
ZSBpcyB1c2VkIHRvIGNhY2hlIHRyYW5zZmVycyBvZiBudW1PYmplY3RzVG9Nb3ZlW3NpemVjbGFz
c10KIC8vIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhyZWFkIGNhY2hlcyBhbmQgdGhlIGNlbnRy
YWwgY2FjaGUgZm9yIGEgZ2l2ZW4gc2l6ZQogLy8gY2xhc3MuCiBzdHJ1Y3QgVENFbnRyeSB7Ci0g
IHZvaWQgKmhlYWQ7ICAvLyBIZWFkIG9mIGNoYWluIG9mIG9iamVjdHMuCi0gIHZvaWQgKnRhaWw7
ICAvLyBUYWlsIG9mIGNoYWluIG9mIG9iamVjdHMuCisgICAgdm9pZCogaGVhZDsgLy8gSGVhZCBv
ZiBjaGFpbiBvZiBvYmplY3RzLgorICAgIHZvaWQqIHRhaWw7IC8vIFRhaWwgb2YgY2hhaW4gb2Yg
b2JqZWN0cy4KIH07CiAvLyBBIGNlbnRyYWwgY2FjaGUgZnJlZWxpc3QgY2FuIGhhdmUgYW55d2hl
cmUgZnJvbSAwIHRvIGtOdW1UcmFuc2ZlckVudHJpZXMKLS8vIHNsb3RzIHRvIHB1dCBsaW5rIGxp
c3QgY2hhaW5zIGludG8uICBUbyBrZWVwIG1lbW9yeSB1c2FnZSBib3VuZGVkIHRoZSB0b3RhbAot
Ly8gbnVtYmVyIG9mIFRDRW50cmllcyBhY3Jvc3Mgc2l6ZSBjbGFzc2VzIGlzIGZpeGVkLiAgQ3Vy
cmVudGx5IGVhY2ggc2l6ZQorLy8gc2xvdHMgdG8gcHV0IGxpbmsgbGlzdCBjaGFpbnMgaW50by4g
VG8ga2VlcCBtZW1vcnkgdXNhZ2UgYm91bmRlZCB0aGUgdG90YWwKKy8vIG51bWJlciBvZiBUQ0Vu
dHJpZXMgYWNyb3NzIHNpemUgY2xhc3NlcyBpcyBmaXhlZC4gQ3VycmVudGx5IGVhY2ggc2l6ZQog
Ly8gY2xhc3MgaXMgaW5pdGlhbGx5IGdpdmVuIG9uZSBUQ0VudHJ5IHdoaWNoIGFsc28gbWVhbnMg
dGhhdCB0aGUgbWF4aW11bSBhbnkKIC8vIG9uZSBjbGFzcyBjYW4gaGF2ZSBpcyBrTnVtQ2xhc3Nl
cy4KIHN0YXRpYyBjb25zdCBpbnQga051bVRyYW5zZmVyRW50cmllcyA9IGtOdW1DbGFzc2VzOwpA
QCAtNzU2LDMxMiArNjYwLDMyOCBAQCBzdGF0aWMgaW5saW5lIGludCBMZ0Zsb29yKHNpemVfdCBu
KSB7CiAvLyBTb21lIHZlcnkgYmFzaWMgbGlua2VkIGxpc3QgZnVuY3Rpb25zIGZvciBkZWFsaW5n
IHdpdGggdXNpbmcgdm9pZCAqIGFzCiAvLyBzdG9yYWdlLgogCi1zdGF0aWMgaW5saW5lIHZvaWQg
KlNMTF9OZXh0KHZvaWQgKnQpIHsKLSAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KHQpKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCAqU0xMX05leHQodm9pZCAqdCkKK3sKKyAgICByZXR1
cm4gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4odCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgU0xMX1NldE5leHQodm9pZCAqdCwgdm9pZCAqbikgewotICAqKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCoqPih0KSkgPSBuOworc3RhdGljIGlubGluZSB2b2lkIFNMTFNldE5leHQodm9pZCAqdCwg
dm9pZCAqbikKK3sKKyAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0KSkgPSBuOwogfQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgU0xMX1B1c2godm9pZCAqKmxpc3QsIHZvaWQgKmVsZW1lbnQp
IHsKLSAgU0xMX1NldE5leHQoZWxlbWVudCwgKmxpc3QpOwotICAqbGlzdCA9IGVsZW1lbnQ7Citz
dGF0aWMgaW5saW5lIHZvaWQgU0xMUHVzaCh2b2lkICoqbGlzdCwgdm9pZCAqZWxlbWVudCkKK3sK
KyAgICBTTExTZXROZXh0KGVsZW1lbnQsICpsaXN0KTsKKyAgICAqbGlzdCA9IGVsZW1lbnQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqU0xMX1BvcCh2b2lkICoqbGlzdCkgewotICB2b2lkICpy
ZXN1bHQgPSAqbGlzdDsKLSAgKmxpc3QgPSBTTExfTmV4dCgqbGlzdCk7Ci0gIHJldHVybiByZXN1
bHQ7CitzdGF0aWMgaW5saW5lIHZvaWQgKlNMTFBvcCh2b2lkICoqbGlzdCkKK3sKKyAgICB2b2lk
KiByZXN1bHQgPSAqbGlzdDsKKyAgICAqbGlzdCA9IFNMTF9OZXh0KCpsaXN0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAKLS8vIFJlbW92ZSBOIGVsZW1lbnRzIGZyb20gYSBsaW5rZWQgbGlz
dCB0byB3aGljaCBoZWFkIHBvaW50cy4gIGhlYWQgd2lsbCBiZQotLy8gbW9kaWZpZWQgdG8gcG9p
bnQgdG8gdGhlIG5ldyBoZWFkLiAgc3RhcnQgYW5kIGVuZCB3aWxsIHBvaW50IHRvIHRoZSBmaXJz
dAotLy8gYW5kIGxhc3Qgbm9kZXMgb2YgdGhlIHJhbmdlLiAgTm90ZSB0aGF0IGVuZCB3aWxsIHBv
aW50IHRvIE5VTEwgYWZ0ZXIgdGhpcworLy8gUmVtb3ZlIE4gZWxlbWVudHMgZnJvbSBhIGxpbmtl
ZCBsaXN0IHRvIHdoaWNoIGhlYWQgcG9pbnRzLiBoZWFkIHdpbGwgYmUKKy8vIG1vZGlmaWVkIHRv
IHBvaW50IHRvIHRoZSBuZXcgaGVhZC4gc3RhcnQgYW5kIGVuZCB3aWxsIHBvaW50IHRvIHRoZSBm
aXJzdAorLy8gYW5kIGxhc3Qgbm9kZXMgb2YgdGhlIHJhbmdlLiBOb3RlIHRoYXQgZW5kIHdpbGwg
cG9pbnQgdG8gMCBhZnRlciB0aGlzCiAvLyBmdW5jdGlvbiBpcyBjYWxsZWQuCi1zdGF0aWMgaW5s
aW5lIHZvaWQgU0xMX1BvcFJhbmdlKHZvaWQgKipoZWFkLCBpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2
b2lkICoqZW5kKSB7Ci0gIGlmIChOID09IDApIHsKLSAgICAqc3RhcnQgPSBOVUxMOwotICAgICpl
bmQgPSBOVUxMOwotICAgIHJldHVybjsKLSAgfQorc3RhdGljIGlubGluZSB2b2lkIFNMTFBvcFJh
bmdlKHZvaWQgKipoZWFkLCBpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKQoreworICAg
IGlmICghTikgeworICAgICAgICAqc3RhcnQgPSAwOworICAgICAgICAqZW5kID0gMDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICB2b2lkICp0bXAgPSAqaGVhZDsKLSAgZm9yIChpbnQgaSA9
IDE7IGkgPCBOOyArK2kpIHsKLSAgICB0bXAgPSBTTExfTmV4dCh0bXApOwotICB9CisgICAgdm9p
ZCogdG1wID0gKmhlYWQ7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBOOyArK2kpCisgICAgICAg
IHRtcCA9IFNMTF9OZXh0KHRtcCk7CiAKLSAgKnN0YXJ0ID0gKmhlYWQ7Ci0gICplbmQgPSB0bXA7
Ci0gICpoZWFkID0gU0xMX05leHQodG1wKTsKLSAgLy8gVW5saW5rIHJhbmdlIGZyb20gbGlzdC4K
LSAgU0xMX1NldE5leHQodG1wLCBOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIFNMTF9Q
dXNoUmFuZ2Uodm9pZCAqKmhlYWQsIHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpIHsKLSAgaWYgKCFz
dGFydCkgcmV0dXJuOwotICBTTExfU2V0TmV4dChlbmQsICpoZWFkKTsKLSAgKmhlYWQgPSBzdGFy
dDsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QgU0xMX1NpemUodm9pZCAqaGVhZCkgewotICBp
bnQgY291bnQgPSAwOwotICB3aGlsZSAoaGVhZCkgewotICAgIGNvdW50Kys7Ci0gICAgaGVhZCA9
IFNMTF9OZXh0KGhlYWQpOwotICB9Ci0gIHJldHVybiBjb3VudDsKKyAgICAqc3RhcnQgPSAqaGVh
ZDsKKyAgICAqZW5kID0gdG1wOworICAgICpoZWFkID0gU0xMX05leHQodG1wKTsKKyAgICAvLyBV
bmxpbmsgcmFuZ2UgZnJvbSBsaXN0LgorICAgIFNMTFNldE5leHQodG1wLCAwKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIFNMTFB1c2hSYW5nZSh2b2lkICoqaGVhZCwgdm9pZCAqc3RhcnQsIHZv
aWQgKmVuZCkKK3sKKyAgICBpZiAoIXN0YXJ0KQorICAgICAgICByZXR1cm47CisgICAgU0xMU2V0
TmV4dChlbmQsICpoZWFkKTsKKyAgICAqaGVhZCA9IHN0YXJ0OworfQorCitzdGF0aWMgaW5saW5l
IHNpemVfdCBTTExTaXplKHZvaWQgKmhlYWQpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICB3
aGlsZSAoaGVhZCkgeworICAgICAgICBjb3VudCsrOworICAgICAgICBoZWFkID0gU0xMX05leHQo
aGVhZCk7CisgICAgfQorICAgIHJldHVybiBjb3VudDsKIH0KIAogLy8gU2V0dXAgaGVscGVyIGZ1
bmN0aW9ucy4KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90IFNpemVDbGFzcyhzaXplX3Qg
c2l6ZSkgewotICByZXR1cm4gY2xhc3NfYXJyYXlbQ2xhc3NJbmRleChzaXplKV07CitzdGF0aWMg
QUxXQVlTX0lOTElORSBzaXplX3QgU2l6ZUNsYXNzKHNpemVfdCBzaXplKQoreworICAgIHJldHVy
biBjbGFzc0FycmF5W0NsYXNzSW5kZXgoc2l6ZSldOwogfQogCiAvLyBHZXQgdGhlIGJ5dGUtc2l6
ZSBmb3IgYSBzcGVjaWZpZWQgY2xhc3MKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHNpemVfdCBCeXRl
U2l6ZUZvckNsYXNzKHNpemVfdCBjbCkgewotICByZXR1cm4gY2xhc3NfdG9fc2l6ZVtjbF07Citz
dGF0aWMgQUxXQVlTX0lOTElORSBzaXplX3QgQnl0ZVNpemVGb3JDbGFzcyhzaXplX3QgY2wpCit7
CisgICAgcmV0dXJuIGNsYXNzVG9zaXplW2NsXTsKIH0KLXN0YXRpYyBpbnQgTnVtTW92ZVNpemUo
c2l6ZV90IHNpemUpIHsKLSAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIDA7Ci0gIC8vIFVzZSBhcHBy
b3ggNjRrIHRyYW5zZmVycyBiZXR3ZWVuIHRocmVhZCBhbmQgY2VudHJhbCBjYWNoZXMuCi0gIGlu
dCBudW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDY0LjAgKiAxMDI0LjAgLyBzaXplKTsKLSAgaWYgKG51
bSA8IDIpIG51bSA9IDI7Ci0gIC8vIENsYW1wIHdlbGwgYmVsb3cga01heEZyZWVMaXN0TGVuZ3Ro
IHRvIGF2b2lkIHBpbmcgcG9uZyBiZXR3ZWVuIGNlbnRyYWwKLSAgLy8gYW5kIHRocmVhZCBjYWNo
ZXMuCi0gIGlmIChudW0gPiBzdGF0aWNfY2FzdDxpbnQ+KDAuOCAqIGtNYXhGcmVlTGlzdExlbmd0
aCkpCi0gICAgbnVtID0gc3RhdGljX2Nhc3Q8aW50PigwLjggKiBrTWF4RnJlZUxpc3RMZW5ndGgp
OwotCi0gIC8vIEFsc28sIGF2b2lkIGJyaW5naW5nIGluIHRvbyBtYW55IG9iamVjdHMgaW50byBz
bWFsbCBvYmplY3QgZnJlZQotICAvLyBsaXN0cy4gIFRoZXJlIGFyZSBsb3RzIG9mIHN1Y2ggbGlz
dHMsIGFuZCBpZiB3ZSBhbGxvdyBlYWNoIG9uZSB0bwotICAvLyBmZXRjaCB0b28gbWFueSBhdCBh
IHRpbWUsIHdlIGVuZCB1cCBoYXZpbmcgdG8gc2NhdmVuZ2UgdG9vIG9mdGVuCi0gIC8vIChlc3Bl
Y2lhbGx5IHdoZW4gdGhlcmUgYXJlIGxvdHMgb2YgdGhyZWFkcyBhbmQgZWFjaCB0aHJlYWQgZ2V0
cyBhCi0gIC8vIHNtYWxsIGFsbG93YW5jZSBmb3IgaXRzIHRocmVhZCBjYWNoZSkuCi0gIC8vCi0g
IC8vIFRPRE86IE1ha2UgdGhyZWFkIGNhY2hlIGZyZWUgbGlzdCBzaXplcyBkeW5hbWljIHNvIHRo
YXQgd2UgZG8gbm90Ci0gIC8vIGhhdmUgdG8gZXF1YWxseSBkaXZpZGUgYSBmaXhlZCByZXNvdXJj
ZSBhbW9uZ3N0IGxvdHMgb2YgdGhyZWFkcy4KLSAgaWYgKG51bSA+IDMyKSBudW0gPSAzMjsKK3N0
YXRpYyBpbnQgTnVtTW92ZVNpemUoc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFzaXplKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAvLyBVc2UgYXBwcm94IDY0ayB0cmFuc2ZlcnMgYmV0d2VlbiB0
aHJlYWQgYW5kIGNlbnRyYWwgY2FjaGVzLgorICAgIGludCBudW0gPSBzdGF0aWNfY2FzdDxpbnQ+
KDY0LjAgKiAxMDI0LjAgLyBzaXplKTsKKyAgICBpZiAobnVtIDwgMikKKyAgICAgICAgbnVtID0g
MjsKKyAgICAvLyBDbGFtcCB3ZWxsIGJlbG93IGtNYXhGcmVlTGlzdExlbmd0aCB0byBhdm9pZCBw
aW5nIHBvbmcgYmV0d2VlbiBjZW50cmFsCisgICAgLy8gYW5kIHRocmVhZCBjYWNoZXMuCisgICAg
aWYgKG51bSA+IHN0YXRpY19jYXN0PGludD4oMC44ICoga01heEZyZWVMaXN0TGVuZ3RoKSkKKyAg
ICAgICAgbnVtID0gc3RhdGljX2Nhc3Q8aW50PigwLjggKiBrTWF4RnJlZUxpc3RMZW5ndGgpOwor
CisgICAgLy8gQWxzbywgYXZvaWQgYnJpbmdpbmcgaW4gdG9vIG1hbnkgb2JqZWN0cyBpbnRvIHNt
YWxsIG9iamVjdCBmcmVlCisgICAgLy8gbGlzdHMuIFRoZXJlIGFyZSBsb3RzIG9mIHN1Y2ggbGlz
dHMsIGFuZCBpZiB3ZSBhbGxvdyBlYWNoIG9uZSB0bworICAgIC8vIGZldGNoIHRvbyBtYW55IGF0
IGEgdGltZSwgd2UgZW5kIHVwIGhhdmluZyB0byBzY2F2ZW5nZSB0b28gb2Z0ZW4KKyAgICAvLyAo
ZXNwZWNpYWxseSB3aGVuIHRoZXJlIGFyZSBsb3RzIG9mIHRocmVhZHMgYW5kIGVhY2ggdGhyZWFk
IGdldHMgYQorICAgIC8vIHNtYWxsIGFsbG93YW5jZSBmb3IgaXRzIHRocmVhZCBjYWNoZSkuCisg
ICAgLy8KKyAgICAvLyBUT0RPOiBNYWtlIHRocmVhZCBjYWNoZSBmcmVlIGxpc3Qgc2l6ZXMgZHlu
YW1pYyBzbyB0aGF0IHdlIGRvIG5vdAorICAgIC8vIGhhdmUgdG8gZXF1YWxseSBkaXZpZGUgYSBm
aXhlZCByZXNvdXJjZSBhbW9uZ3N0IGxvdHMgb2YgdGhyZWFkcy4KKyAgICBpZiAobnVtID4gMzIp
CisgICAgICAgIG51bSA9IDMyOwogCi0gIHJldHVybiBudW07CisgICAgcmV0dXJuIG51bTsKIH0K
IAogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBhcnJheXMKLXN0YXRpYyB2b2lkIEluaXRTaXpl
Q2xhc3NlcygpIHsKLSAgLy8gRG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgb24gYWRkX2Ftb3VudFtd
L3NoaWZ0X2Ftb3VudFtdL2NsYXNzX2FycmF5W10KLSAgaWYgKENsYXNzSW5kZXgoMCkgPCAwKSB7
Ci0gICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBmb3Igc2l6ZSAwXG4iLCBDbGFz
c0luZGV4KDApKTsKLSAgICBDUkFTSCgpOwotICB9Ci0gIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+
KENsYXNzSW5kZXgoa01heFNpemUpKSA+PSBzaXplb2YoY2xhc3NfYXJyYXkpKSB7Ci0gICAgTUVT
U0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBmb3Iga01heFNpemVcbiIsIENsYXNzSW5kZXgo
a01heFNpemUpKTsKLSAgICBDUkFTSCgpOwotICB9CitzdGF0aWMgdm9pZCBJbml0U2l6ZUNsYXNz
ZXMoKQoreworICAgIC8vIERvIHNvbWUgc2FuaXR5IGNoZWNraW5nIG9uIGFkZF9hbW91bnRbXS9z
aGlmdF9hbW91bnRbXS9jbGFzc0FycmF5W10KKyAgICBpZiAoQ2xhc3NJbmRleCgwKSA8IDApIHsK
KyAgICAgICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBmb3Igc2l6ZSAwXG4iLCBD
bGFzc0luZGV4KDApKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgaWYgKHN0YXRpY19j
YXN0PHNpemVfdD4oQ2xhc3NJbmRleChrTWF4U2l6ZSkpID49IHNpemVvZihjbGFzc0FycmF5KSkg
eworICAgICAgICBNRVNTQUdFKCJJbnZhbGlkIGNsYXNzIGluZGV4ICVkIGZvciBrTWF4U2l6ZVxu
IiwgQ2xhc3NJbmRleChrTWF4U2l6ZSkpOworICAgICAgICBDUkFTSCgpOworICAgIH0KIAotICAv
LyBDb21wdXRlIHRoZSBzaXplIGNsYXNzZXMgd2Ugd2FudCB0byB1c2UKLSAgc2l6ZV90IHNjID0g
MTsgICAvLyBOZXh0IHNpemUgY2xhc3MgdG8gYXNzaWduCi0gIHVuc2lnbmVkIGNoYXIgYWxpZ25z
aGlmdCA9IGtBbGlnblNoaWZ0OwotICBpbnQgbGFzdF9sZyA9IC0xOwotICBmb3IgKHNpemVfdCBz
aXplID0ga0FsaWdubWVudDsgc2l6ZSA8PSBrTWF4U2l6ZTsgc2l6ZSArPSAoMSA8PCBhbGlnbnNo
aWZ0KSkgewotICAgIGludCBsZyA9IExnRmxvb3Ioc2l6ZSk7Ci0gICAgaWYgKGxnID4gbGFzdF9s
ZykgewotICAgICAgLy8gSW5jcmVhc2UgYWxpZ25tZW50IGV2ZXJ5IHNvIG9mdGVuLgotICAgICAg
Ly8KLSAgICAgIC8vIFNpbmNlIHdlIGRvdWJsZSB0aGUgYWxpZ25tZW50IGV2ZXJ5IHRpbWUgc2l6
ZSBkb3VibGVzIGFuZAotICAgICAgLy8gc2l6ZSA+PSAxMjgsIHRoaXMgbWVhbnMgdGhhdCBzcGFj
ZSB3YXN0ZWQgZHVlIHRvIGFsaWdubWVudCBpcwotICAgICAgLy8gYXQgbW9zdCAxNi8xMjggaS5l
LiwgMTIuNSUuICBQbHVzIHdlIGNhcCB0aGUgYWxpZ25tZW50IGF0IDI1NgotICAgICAgLy8gYnl0
ZXMsIHNvIHRoZSBzcGFjZSB3YXN0ZWQgYXMgYSBwZXJjZW50YWdlIHN0YXJ0cyBmYWxsaW5nIGZv
cgotICAgICAgLy8gc2l6ZXMgPiAySy4KLSAgICAgIGlmICgobGcgPj0gNykgJiYgKGFsaWduc2hp
ZnQgPCA4KSkgewotICAgICAgICBhbGlnbnNoaWZ0Kys7Ci0gICAgICB9Ci0gICAgICBsYXN0X2xn
ID0gbGc7Ci0gICAgfQotCi0gICAgLy8gQWxsb2NhdGUgZW5vdWdoIHBhZ2VzIHNvIGxlZnRvdmVy
IGlzIGxlc3MgdGhhbiAxLzggb2YgdG90YWwuCi0gICAgLy8gVGhpcyBib3VuZHMgd2FzdGVkIHNw
YWNlIHRvIGF0IG1vc3QgMTIuNSUuCi0gICAgc2l6ZV90IHBzaXplID0ga1BhZ2VTaXplOwotICAg
IHdoaWxlICgocHNpemUgJSBzaXplKSA+IChwc2l6ZSA+PiAzKSkgewotICAgICAgcHNpemUgKz0g
a1BhZ2VTaXplOwotICAgIH0KLSAgICBjb25zdCBzaXplX3QgbXlfcGFnZXMgPSBwc2l6ZSA+PiBr
UGFnZVNoaWZ0OwotCi0gICAgaWYgKHNjID4gMSAmJiBteV9wYWdlcyA9PSBjbGFzc190b19wYWdl
c1tzYy0xXSkgewotICAgICAgLy8gU2VlIGlmIHdlIGNhbiBtZXJnZSB0aGlzIGludG8gdGhlIHBy
ZXZpb3VzIGNsYXNzIHdpdGhvdXQKLSAgICAgIC8vIGluY3JlYXNpbmcgdGhlIGZyYWdtZW50YXRp
b24gb2YgdGhlIHByZXZpb3VzIGNsYXNzLgotICAgICAgY29uc3Qgc2l6ZV90IG15X29iamVjdHMg
PSAobXlfcGFnZXMgPDwga1BhZ2VTaGlmdCkgLyBzaXplOwotICAgICAgY29uc3Qgc2l6ZV90IHBy
ZXZfb2JqZWN0cyA9IChjbGFzc190b19wYWdlc1tzYy0xXSA8PCBrUGFnZVNoaWZ0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gY2xhc3NfdG9fc2l6ZVtzYy0xXTsKLSAgICAg
IGlmIChteV9vYmplY3RzID09IHByZXZfb2JqZWN0cykgewotICAgICAgICAvLyBBZGp1c3QgbGFz
dCBjbGFzcyB0byBpbmNsdWRlIHRoaXMgc2l6ZQotICAgICAgICBjbGFzc190b19zaXplW3NjLTFd
ID0gc2l6ZTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQWRk
IG5ldyBjbGFzcwotICAgIGNsYXNzX3RvX3BhZ2VzW3NjXSA9IG15X3BhZ2VzOwotICAgIGNsYXNz
X3RvX3NpemVbc2NdID0gc2l6ZTsKLSAgICBzYysrOwotICB9Ci0gIGlmIChzYyAhPSBrTnVtQ2xh
c3NlcykgewotICAgIE1FU1NBR0UoIndyb25nIG51bWJlciBvZiBzaXplIGNsYXNzZXM6IGZvdW5k
ICUiIFBSSXVTICIgaW5zdGVhZCBvZiAlZFxuIiwKKyAgICAvLyBDb21wdXRlIHRoZSBzaXplIGNs
YXNzZXMgd2Ugd2FudCB0byB1c2UKKyAgICBzaXplX3Qgc2MgPSAxOyAvLyBOZXh0IHNpemUgY2xh
c3MgdG8gYXNzaWduCisgICAgdW5zaWduZWQgY2hhciBhbGlnbnNoaWZ0ID0ga0FsaWduU2hpZnQ7
CisgICAgaW50IGxhc3RMZyA9IC0xOworICAgIGZvciAoc2l6ZV90IHNpemUgPSBrQWxpZ25tZW50
OyBzaXplIDw9IGtNYXhTaXplOyBzaXplICs9ICgxIDw8IGFsaWduc2hpZnQpKSB7CisgICAgICAg
IGludCBsZyA9IExnRmxvb3Ioc2l6ZSk7CisgICAgICAgIGlmIChsZyA+IGxhc3RMZykgeworICAg
ICAgICAgICAgLy8gSW5jcmVhc2UgYWxpZ25tZW50IGV2ZXJ5IHNvIG9mdGVuLgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGRvdWJsZSB0aGUgYWxpZ25tZW50IGV2ZXJ5
IHRpbWUgc2l6ZSBkb3VibGVzIGFuZAorICAgICAgICAgICAgLy8gc2l6ZSA+PSAxMjgsIHRoaXMg
bWVhbnMgdGhhdCBzcGFjZSB3YXN0ZWQgZHVlIHRvIGFsaWdubWVudCBpcworICAgICAgICAgICAg
Ly8gYXQgbW9zdCAxNi8xMjggaS5lLiwgMTIuNSUuIFBsdXMgd2UgY2FwIHRoZSBhbGlnbm1lbnQg
YXQgMjU2CisgICAgICAgICAgICAvLyBieXRlcywgc28gdGhlIHNwYWNlIHdhc3RlZCBhcyBhIHBl
cmNlbnRhZ2Ugc3RhcnRzIGZhbGxpbmcgZm9yCisgICAgICAgICAgICAvLyBzaXplcyA+IDJLLgor
ICAgICAgICAgICAgaWYgKChsZyA+PSA3KSAmJiAoYWxpZ25zaGlmdCA8IDgpKQorICAgICAgICAg
ICAgICAgIGFsaWduc2hpZnQrKzsKKyAgICAgICAgICAgIGxhc3RMZyA9IGxnOworICAgICAgICB9
CisKKyAgICAgICAgLy8gQWxsb2NhdGUgZW5vdWdoIHBhZ2VzIHNvIGxlZnRvdmVyIGlzIGxlc3Mg
dGhhbiAxLzggb2YgdG90YWwuCisgICAgICAgIC8vIFRoaXMgYm91bmRzIHdhc3RlZCBzcGFjZSB0
byBhdCBtb3N0IDEyLjUlLgorICAgICAgICBzaXplX3QgcHNpemUgPSBrUGFnZVNpemU7CisgICAg
ICAgIHdoaWxlICgocHNpemUgJSBzaXplKSA+IChwc2l6ZSA+PiAzKSkKKyAgICAgICAgICAgIHBz
aXplICs9IGtQYWdlU2l6ZTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG15UGFnZXMgPSBwc2l6ZSA+
PiBrUGFnZVNoaWZ0OworCisgICAgICAgIGlmIChzYyA+IDEgJiYgbXlQYWdlcyA9PSBjbGFzc190
b19wYWdlc1tzYy0xXSkgeworICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBtZXJnZSB0aGlz
IGludG8gdGhlIHByZXZpb3VzIGNsYXNzIHdpdGhvdXQKKyAgICAgICAgICAgIC8vIGluY3JlYXNp
bmcgdGhlIGZyYWdtZW50YXRpb24gb2YgdGhlIHByZXZpb3VzIGNsYXNzLgorICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IG15T2JqZWN0cyA9IChteVBhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gc2l6ZTsK
KyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwcmV2b2JqZWN0cyA9IChjbGFzc190b19wYWdlc1tz
Yy0xXSA8PCBrUGFnZVNoaWZ0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8gY2xhc3NUb3NpemVbc2MtMV07CisgICAgICAgICAgICBpZiAobXlPYmplY3RzID09IHBy
ZXZvYmplY3RzKSB7CisgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGxhc3QgY2xhc3MgdG8gaW5j
bHVkZSB0aGlzIHNpemUKKyAgICAgICAgICAgICAgICBjbGFzc1Rvc2l6ZVtzYy0xXSA9IHNpemU7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBBZGQgbmV3IGNsYXNzCisgICAgICAgIGNsYXNzX3RvX3BhZ2VzW3NjXSA9IG15
UGFnZXM7CisgICAgICAgIGNsYXNzVG9zaXplW3NjXSA9IHNpemU7CisgICAgICAgIHNjKys7Cisg
ICAgfQorICAgIGlmIChzYyAhPSBrTnVtQ2xhc3NlcykgeworICAgICAgICBNRVNTQUdFKCJ3cm9u
ZyBudW1iZXIgb2Ygc2l6ZSBjbGFzc2VzOiBmb3VuZCAlIiBQUkl1UyAiIGluc3RlYWQgb2YgJWRc
biIsCiAgICAgICAgICAgICBzYywgaW50KGtOdW1DbGFzc2VzKSk7Ci0gICAgQ1JBU0goKTsKLSAg
fQorICAgICAgICBDUkFTSCgpOworICAgIH0KIAotICAvLyBJbml0aWFsaXplIHRoZSBtYXBwaW5n
IGFycmF5cwotICBpbnQgbmV4dF9zaXplID0gMDsKLSAgZm9yICh1bnNpZ25lZCBjaGFyIGMgPSAx
OyBjIDwga051bUNsYXNzZXM7IGMrKykgewotICAgIGNvbnN0IHNpemVfdCBtYXhfc2l6ZV9pbl9j
bGFzcyA9IGNsYXNzX3RvX3NpemVbY107Ci0gICAgZm9yIChzaXplX3QgcyA9IG5leHRfc2l6ZTsg
cyA8PSBtYXhfc2l6ZV9pbl9jbGFzczsgcyArPSBrQWxpZ25tZW50KSB7Ci0gICAgICBjbGFzc19h
cnJheVtDbGFzc0luZGV4KHMpXSA9IGM7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBh
cnJheXMKKyAgICBpbnQgbmV4dHNpemUgPSAwOworICAgIGZvciAodW5zaWduZWQgY2hhciBjID0g
MTsgYyA8IGtOdW1DbGFzc2VzOyBjKyspIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG1heFNpemVp
bkNsYXNzID0gY2xhc3NUb3NpemVbY107CisgICAgICAgIGZvciAoc2l6ZV90IHMgPSBuZXh0c2l6
ZTsgcyA8PSBtYXhTaXplaW5DbGFzczsgcyArPSBrQWxpZ25tZW50KQorICAgICAgICAgICAgY2xh
c3NBcnJheVtDbGFzc0luZGV4KHMpXSA9IGM7CisgICAgICAgIG5leHRzaXplID0gc3RhdGljX2Nh
c3Q8aW50PihtYXhTaXplaW5DbGFzcyArIGtBbGlnbm1lbnQpOwogICAgIH0KLSAgICBuZXh0X3Np
emUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1heF9zaXplX2luX2NsYXNzICsga0FsaWdubWVudCk7Ci0g
IH0KIAotICAvLyBEb3VibGUtY2hlY2sgc2l6ZXMganVzdCB0byBiZSBzYWZlCi0gIGZvciAoc2l6
ZV90IHNpemUgPSAwOyBzaXplIDw9IGtNYXhTaXplOyBzaXplKyspIHsKLSAgICBjb25zdCBzaXpl
X3Qgc2MgPSBTaXplQ2xhc3Moc2l6ZSk7Ci0gICAgaWYgKHNjID09IDApIHsKLSAgICAgIE1FU1NB
R0UoIkJhZCBzaXplIGNsYXNzICUiIFBSSXVTICIgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXpl
KTsKLSAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFz
c190b19zaXplW3NjLTFdKSB7Ci0gICAgICBNRVNTQUdFKCJBbGxvY2F0aW5nIHVubmVjZXNzYXJp
bHkgbGFyZ2UgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMKLSAgICAgICAgICAgICAgIlxu
Iiwgc2MsIHNpemUpOwotICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgaWYgKHNjID49IGtOdW1D
bGFzc2VzKSB7Ci0gICAgICBNRVNTQUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAl
IiBQUkl1UyAiXG4iLCBzYywgc2l6ZSk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBjb25z
dCBzaXplX3QgcyA9IGNsYXNzX3RvX3NpemVbc2NdOwotICAgIGlmIChzaXplID4gcykgewotICAg
ICBNRVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBS
SXVTICIpXG4iLCBzLCBzaXplLCBzYyk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBpZiAo
cyA9PSAwKSB7Ci0gICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1
UyAiIChzYyA9ICUiIFBSSXVTICIpXG4iLCBzLCBzaXplLCBzYyk7Ci0gICAgICBDUkFTSCgpOwor
ICAgIC8vIERvdWJsZS1jaGVjayBzaXplcyBqdXN0IHRvIGJlIHNhZmUKKyAgICBmb3IgKHNpemVf
dCBzaXplID0gMDsgc2l6ZSA8PSBrTWF4U2l6ZTsgc2l6ZSsrKSB7CisgICAgICAgIGNvbnN0IHNp
emVfdCBzYyA9IFNpemVDbGFzcyhzaXplKTsKKyAgICAgICAgaWYgKCFzYykgeworICAgICAgICAg
ICAgTUVTU0FHRSgiQmFkIHNpemUgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIlxuIiwg
c2MsIHNpemUpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
c2MgPiAxICYmIHNpemUgPD0gY2xhc3NUb3NpemVbc2MtMV0pIHsKKyAgICAgICAgICAgIE1FU1NB
R0UoIkFsbG9jYXRpbmcgdW5uZWNlc3NhcmlseSBsYXJnZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAl
IiBQUkl1UworICAgICAgICAgICAgICAgICAgICAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIGlmIChzYyA+PSBrTnVtQ2xhc3Nlcykgewor
ICAgICAgICAgICAgTUVTU0FHRSgiQmFkIHNpemUgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJ
dVMgIlxuIiwgc2MsIHNpemUpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAg
ICAgICBjb25zdCBzaXplX3QgcyA9IGNsYXNzVG9zaXplW3NjXTsKKyAgICAgICAgaWYgKHNpemUg
PiBzKSB7CisgICAgICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQ
Ukl1UyAiIChzYyA9ICUiIFBSSXVTICIpXG4iLCBzLCBzaXplLCBzYyk7CisgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICB9CisgICAgICAgIGlmICghcykgeworICAgICAgICAgICAgTUVTU0FH
RSgiQmFkIHNpemUgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIiAoc2MgPSAlIiBQUkl1UyAiKVxu
Iiwgcywgc2l6ZSwgc2MpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQogICAgIH0K
LSAgfQogCi0gIC8vIEluaXRpYWxpemUgdGhlIG51bV9vYmplY3RzX3RvX21vdmUgYXJyYXkuCi0g
IGZvciAoc2l6ZV90IGNsID0gMTsgY2wgIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBudW1f
b2JqZWN0c190b19tb3ZlW2NsXSA9IE51bU1vdmVTaXplKEJ5dGVTaXplRm9yQ2xhc3MoY2wpKTsK
LSAgfQorICAgIC8vIEluaXRpYWxpemUgdGhlIG51bU9iamVjdHNUb01vdmUgYXJyYXkuCisgICAg
Zm9yIChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVtQ2xhc3NlczsgKytjbCkKKyAgICAgICAgbnVt
T2JqZWN0c1RvTW92ZVtjbF0gPSBOdW1Nb3ZlU2l6ZShCeXRlU2l6ZUZvckNsYXNzKGNsKSk7CiAK
ICNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgaWYgKGZhbHNlKSB7Ci0gICAgLy8gRHVtcCBjbGFzcyBz
aXplcyBhbmQgbWF4aW11bSBleHRlcm5hbCB3YXN0YWdlIHBlciBzaXplIGNsYXNzCi0gICAgZm9y
IChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgY29uc3Qg
aW50IGFsbG9jX3NpemUgPSBjbGFzc190b19wYWdlc1tjbF0gPDwga1BhZ2VTaGlmdDsKLSAgICAg
IGNvbnN0IGludCBhbGxvY19vYmpzID0gYWxsb2Nfc2l6ZSAvIGNsYXNzX3RvX3NpemVbY2xdOwot
ICAgICAgY29uc3QgaW50IG1pbl91c2VkID0gKGNsYXNzX3RvX3NpemVbY2wtMV0gKyAxKSAqIGFs
bG9jX29ianM7Ci0gICAgICBjb25zdCBpbnQgbWF4X3dhc3RlID0gYWxsb2Nfc2l6ZSAtIG1pbl91
c2VkOwotICAgICAgTUVTU0FHRSgiU0MgJTNkIFsgJThkIC4uICU4ZCBdIGZyb20gJThkIDsgJTIu
MGYlJSBtYXh3YXN0ZVxuIiwKLSAgICAgICAgICAgICAgaW50KGNsKSwKLSAgICAgICAgICAgICAg
aW50KGNsYXNzX3RvX3NpemVbY2wtMV0gKyAxKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3Rv
X3NpemVbY2xdKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFn
ZVNoaWZ0KSwKLSAgICAgICAgICAgICAgbWF4X3dhc3RlICogMTAwLjAgLyBhbGxvY19zaXplCi0g
ICAgICAgICAgICAgICk7CisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIC8vIER1bXAgY2xhc3Mg
c2l6ZXMgYW5kIG1heGltdW0gZXh0ZXJuYWwgd2FzdGFnZSBwZXIgc2l6ZSBjbGFzcworICAgICAg
ICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgICAg
ICAgICBjb25zdCBpbnQgYWxsb2NTaXplID0gY2xhc3NfdG9fcGFnZXNbY2xdIDw8IGtQYWdlU2hp
ZnQ7CisgICAgICAgICAgICBjb25zdCBpbnQgYWxsb2NPYmpzID0gYWxsb2NTaXplIC8gY2xhc3NU
b3NpemVbY2xdOworICAgICAgICAgICAgY29uc3QgaW50IG1pblVzZWQgPSAoY2xhc3NUb3NpemVb
Y2wtMV0gKyAxKSAqIGFsbG9jT2JqczsKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhXYXN0ZSA9
IGFsbG9jU2l6ZSAtIG1pblVzZWQ7CisgICAgICAgICAgICBNRVNTQUdFKCJTQyAlM2QgWyAlOGQg
Li4gJThkIF0gZnJvbSAlOGQgOyAlMi4wZiUlIG1heHdhc3RlXG4iLAorICAgICAgICAgICAgICAg
ICAgICBpbnQoY2wpLAorICAgICAgICAgICAgICAgICAgICBpbnQoY2xhc3NUb3NpemVbY2wtMV0g
KyAxKSwKKyAgICAgICAgICAgICAgICAgICAgaW50KGNsYXNzVG9zaXplW2NsXSksCisgICAgICAg
ICAgICAgICAgICAgIGludChjbGFzc190b19wYWdlc1tjbF0gPDwga1BhZ2VTaGlmdCksCisgICAg
ICAgICAgICAgICAgICAgIG1heFdhc3RlICogMTAwLjAgLyBhbGxvY1NpemUKKyAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogI2VuZGlmCiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIFNpbXBsZSBhbGxvY2F0b3IgZm9yIG9iamVjdHMgb2YgYSBzcGVjaWZp
ZWQgdHlwZS4gIEV4dGVybmFsIGxvY2tpbmcKKy8vIFNpbXBsZSBhbGxvY2F0b3IgZm9yIG9iamVj
dHMgb2YgYSBzcGVjaWZpZWQgdHlwZS4gRXh0ZXJuYWwgbG9ja2luZwogLy8gaXMgcmVxdWlyZWQg
YmVmb3JlIGFjY2Vzc2luZyBvbmUgb2YgdGhlc2Ugb2JqZWN0cy4KIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogLy8gTWV0YWRhdGEgYWxsb2NhdG9yIC0tIGtlZXBzIHN0YXRzIGFib3V0IGhvdyBtYW55
IGJ5dGVzIGFsbG9jYXRlZAotc3RhdGljIHVpbnQ2NF90IG1ldGFkYXRhX3N5c3RlbV9ieXRlcyA9
IDA7Ci1zdGF0aWMgdm9pZCogTWV0YURhdGFBbGxvYyhzaXplX3QgYnl0ZXMpIHsKLSAgdm9pZCog
cmVzdWx0ID0gVENNYWxsb2NfU3lzdGVtQWxsb2MoYnl0ZXMsIDApOwotICBpZiAocmVzdWx0ICE9
IE5VTEwpIHsKLSAgICBtZXRhZGF0YV9zeXN0ZW1fYnl0ZXMgKz0gYnl0ZXM7Ci0gIH0KLSAgcmV0
dXJuIHJlc3VsdDsKK3N0YXRpYyB1aW50NjRfdCBtZXRhZGF0YVN5c3RlbUJ5dGVzID0gMDsKK3N0
YXRpYyB2b2lkKiBNZXRhRGF0YUFsbG9jKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1
bHQgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhieXRlcywgMCk7CisgICAgaWYgKHJlc3VsdCkgCisg
ICAgICAgIG1ldGFkYXRhU3lzdGVtQnl0ZXMgKz0gYnl0ZXM7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+CiBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvciB7Ci0gcHJp
dmF0ZToKLSAgLy8gSG93IG11Y2ggdG8gYWxsb2NhdGUgZnJvbSBzeXN0ZW0gYXQgYSB0aW1lCi0g
IHN0YXRpYyBjb25zdCBzaXplX3Qga0FsbG9jSW5jcmVtZW50ID0gMzIgPDwgMTA7Citwcml2YXRl
OgorICAgIC8vIEhvdyBtdWNoIHRvIGFsbG9jYXRlIGZyb20gc3lzdGVtIGF0IGEgdGltZQorICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qga0FsbG9jSW5jcmVtZW50ID0gMzIgPDwgMTA7CiAKLSAgLy8g
QWxpZ25lZCBzaXplIG9mIFQKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25lZFNpemUKLSAg
PSAoKChzaXplb2YoVCkgKyBrQWxpZ25tZW50IC0gMSkgLyBrQWxpZ25tZW50KSAqIGtBbGlnbm1l
bnQpOworICAgIC8vIEFsaWduZWQgc2l6ZSBvZiBUCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBr
QWxpZ25lZFNpemUKKyAgICA9ICgoKHNpemVvZihUKSArIGtBbGlnbm1lbnQgLSAxKSAvIGtBbGln
bm1lbnQpICoga0FsaWdubWVudCk7CiAKLSAgLy8gRnJlZSBhcmVhIGZyb20gd2hpY2ggdG8gY2Fy
dmUgbmV3IG9iamVjdHMKLSAgY2hhciogZnJlZV9hcmVhXzsKLSAgc2l6ZV90IGZyZWVfYXZhaWxf
OworICAgIC8vIEZyZWUgYXJlYSBmcm9tIHdoaWNoIHRvIGNhcnZlIG5ldyBvYmplY3RzCisgICAg
Y2hhciogZnJlZUFyZWE7CisgICAgc2l6ZV90IGZyZWVBdmFpbDsKIAotICAvLyBMaW5rZWQgbGlz
dCBvZiBhbGwgcmVnaW9ucyBhbGxvY2F0ZWQgYnkgdGhpcyBhbGxvY2F0b3IKLSAgdm9pZCogYWxs
b2NhdGVkX3JlZ2lvbnNfOworICAgIC8vIExpbmtlZCBsaXN0IG9mIGFsbCByZWdpb25zIGFsbG9j
YXRlZCBieSB0aGlzIGFsbG9jYXRvcgorICAgIHZvaWQqIGFsbG9jYXRlZFJlZ2lvbnM7CiAKLSAg
Ly8gRnJlZSBsaXN0IG9mIGFscmVhZHkgY2FydmVkIG9iamVjdHMKLSAgdm9pZCogZnJlZV9saXN0
XzsKKyAgICAvLyBGcmVlIGxpc3Qgb2YgYWxyZWFkeSBjYXJ2ZWQgb2JqZWN0cworICAgIHZvaWQq
IGZyZWVMaXN0OwogCi0gIC8vIE51bWJlciBvZiBhbGxvY2F0ZWQgYnV0IHVuZnJlZWQgb2JqZWN0
cwotICBpbnQgaW51c2VfOworICAgIC8vIE51bWJlciBvZiBhbGxvY2F0ZWQgYnV0IHVuZnJlZWQg
b2JqZWN0cworICAgIGludCBpblVzZTsKIAotIHB1YmxpYzoKLSAgdm9pZCBJbml0KCkgewotICAg
IEFTU0VSVChrQWxpZ25lZFNpemUgPD0ga0FsbG9jSW5jcmVtZW50KTsKLSAgICBpbnVzZV8gPSAw
OwotICAgIGFsbG9jYXRlZF9yZWdpb25zXyA9IDA7Ci0gICAgZnJlZV9hcmVhXyA9IE5VTEw7Ci0g
ICAgZnJlZV9hdmFpbF8gPSAwOwotICAgIGZyZWVfbGlzdF8gPSBOVUxMOwotICB9CitwdWJsaWM6
CisgICAgdm9pZCBJbml0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChrQWxpZ25lZFNpemUgPD0g
a0FsbG9jSW5jcmVtZW50KTsKKyAgICAgICAgaW5Vc2UgPSAwOworICAgICAgICBhbGxvY2F0ZWRS
ZWdpb25zID0gMDsKKyAgICAgICAgZnJlZUFyZWEgPSAwOworICAgICAgICBmcmVlQXZhaWwgPSAw
OworICAgICAgICBmcmVlTGlzdCA9IDA7CisgICAgfQogCi0gIFQqIE5ldygpIHsKLSAgICAvLyBD
b25zdWx0IGZyZWUgbGlzdAotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoZnJlZV9saXN0XyAh
PSBOVUxMKSB7Ci0gICAgICByZXN1bHQgPSBmcmVlX2xpc3RfOwotICAgICAgZnJlZV9saXN0XyA9
ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3VsdCkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBpZiAoZnJlZV9hdmFpbF8gPCBrQWxpZ25lZFNpemUpIHsKLSAgICAgICAgLy8gTmVlZCBtb3Jl
IHJvb20KLSAgICAgICAgY2hhciogbmV3X2FsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNo
YXIqPihNZXRhRGF0YUFsbG9jKGtBbGxvY0luY3JlbWVudCkpOwotICAgICAgICBpZiAoIW5ld19h
bGxvY2F0aW9uKQotICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHZvaWQqKj4obmV3X2FsbG9jYXRpb24pID0gYWxsb2NhdGVkX3JlZ2lvbnNfOwotICAg
ICAgICBhbGxvY2F0ZWRfcmVnaW9uc18gPSBuZXdfYWxsb2NhdGlvbjsKLSAgICAgICAgZnJlZV9h
cmVhXyA9IG5ld19hbGxvY2F0aW9uICsga0FsaWduZWRTaXplOwotICAgICAgICBmcmVlX2F2YWls
XyA9IGtBbGxvY0luY3JlbWVudCAtIGtBbGlnbmVkU2l6ZTsKLSAgICAgIH0KLSAgICAgIHJlc3Vs
dCA9IGZyZWVfYXJlYV87Ci0gICAgICBmcmVlX2FyZWFfICs9IGtBbGlnbmVkU2l6ZTsKLSAgICAg
IGZyZWVfYXZhaWxfIC09IGtBbGlnbmVkU2l6ZTsKKyAgICBUKiBOZXcoKQorICAgIHsKKyAgICAg
ICAgLy8gQ29uc3VsdCBmcmVlIGxpc3QKKyAgICAgICAgdm9pZCogcmVzdWx0OworICAgICAgICBp
ZiAoZnJlZUxpc3QpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZyZWVMaXN0OworICAgICAgICAg
ICAgZnJlZUxpc3QgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihyZXN1bHQpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmcmVlQXZhaWwgPCBrQWxpZ25lZFNpemUpIHsK
KyAgICAgICAgICAgICAgICAvLyBOZWVkIG1vcmUgcm9vbQorICAgICAgICAgICAgICAgIGNoYXIq
IG5ld2FsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihNZXRhRGF0YUFsbG9jKGtB
bGxvY0luY3JlbWVudCkpOworICAgICAgICAgICAgICAgIGlmICghbmV3YWxsb2NhdGlvbikKKyAg
ICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgICAgICpyZWludGVycHJl
dF9jYXN0X3B0cjx2b2lkKio+KG5ld2FsbG9jYXRpb24pID0gYWxsb2NhdGVkUmVnaW9uczsKKyAg
ICAgICAgICAgICAgICAgYWxsb2NhdGVkUmVnaW9ucyA9IG5ld2FsbG9jYXRpb247CisgICAgICAg
ICAgICAgICAgZnJlZUFyZWEgPSBuZXdhbGxvY2F0aW9uICsga0FsaWduZWRTaXplOworICAgICAg
ICAgICAgICAgIGZyZWVBdmFpbCA9IGtBbGxvY0luY3JlbWVudCAtIGtBbGlnbmVkU2l6ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCA9IGZyZWVBcmVhOworICAgICAgICAgICAg
ZnJlZUFyZWEgKz0ga0FsaWduZWRTaXplOworICAgICAgICAgICAgZnJlZUF2YWlsIC09IGtBbGln
bmVkU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBpblVzZSsrOworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxUKj4ocmVzdWx0KTsKICAgICB9Ci0gICAgaW51c2VfKys7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7Ci0gIH0KIAotICB2b2lkIERlbGV0ZShU
KiBwKSB7Ci0gICAgKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocCkpID0gZnJlZV9saXN0XzsK
LSAgICBmcmVlX2xpc3RfID0gcDsKLSAgICBpbnVzZV8tLTsKLSAgfQorICAgIHZvaWQgRGVsZXRl
KFQqIHApCisgICAgeworICAgICAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBm
cmVlTGlzdDsKKyAgICAgICAgZnJlZUxpc3QgPSBwOworICAgICAgICBpblVzZS0tOworICAgIH0K
IAotICBpbnQgaW51c2UoKSBjb25zdCB7IHJldHVybiBpbnVzZV87IH0KKyAgICBpbnQgaW51c2Uo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluVXNlOworICAgIH0KIAogI2lmIGRlZmlu
ZWQoV1RGX0NIQU5HRVMpICYmIE9TKERBUldJTikKLSAgdGVtcGxhdGUgPGNsYXNzIFJlY29yZGVy
PgotICB2b2lkIHJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYgcmVjb3JkZXIs
IGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYgcmVhZGVyKQotICB7Ci0gICAgICBmb3IgKHZvaWQq
IGFkbWluQWxsb2NhdGlvbiA9IGFsbG9jYXRlZF9yZWdpb25zXzsgYWRtaW5BbGxvY2F0aW9uOyBh
ZG1pbkFsbG9jYXRpb24gPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPihhZG1pbkFsbG9jYXRpb24pKSkKLSAgICAgICAgICByZWNvcmRlci5yZWNv
cmRSZWdpb24ocmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGFkbWluQWxsb2NhdGlvbiks
IGtBbGxvY0luY3JlbWVudCk7Ci0gIH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgUmVjb3JkZXI+Cisg
ICAgdm9pZCByZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMoUmVjb3JkZXImIHJlY29yZGVyLCBj
b25zdCBSZW1vdGVNZW1vcnlSZWFkZXImIHJlYWRlcikKKyAgICB7CisgICAgICAgIGZvciAodm9p
ZCogYWRtaW5BbGxvY2F0aW9uID0gYWxsb2NhdGVkUmVnaW9uczsgYWRtaW5BbGxvY2F0aW9uOyBh
ZG1pbkFsbG9jYXRpb24gPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPihhZG1pbkFsbG9jYXRpb24pKSkKKyAgICAgICAgICAgIHJlY29yZGVyLnJl
Y29yZFJlZ2lvbihyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oYWRtaW5BbGxvY2F0aW9u
KSwga0FsbG9jSW5jcmVtZW50KTsKKyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTEwNzcsMTQ2ICs5
OTcsMzgzIEBAIHR5cGVkZWYgdWludHB0cl90IExlbmd0aDsKIAogc3RhdGljIGNvbnN0IExlbmd0
aCBrTWF4VmFsaWRQYWdlcyA9ICh+c3RhdGljX2Nhc3Q8TGVuZ3RoPigwKSkgPj4ga1BhZ2VTaGlm
dDsKIAotLy8gQ29udmVydCBieXRlIHNpemUgaW50byBwYWdlcy4gIFRoaXMgd29uJ3Qgb3ZlcmZs
b3csIGJ1dCBtYXkgcmV0dXJuCisvLyBDb252ZXJ0IGJ5dGUgc2l6ZSBpbnRvIHBhZ2VzLiBUaGlz
IHdvbid0IG92ZXJmbG93LCBidXQgbWF5IHJldHVybgogLy8gYW4gdW5yZWFzb25hYmx5IGxhcmdl
IHZhbHVlIGlmIGJ5dGVzIGlzIGh1Z2UgZW5vdWdoLgotc3RhdGljIGlubGluZSBMZW5ndGggcGFn
ZXMoc2l6ZV90IGJ5dGVzKSB7Ci0gIHJldHVybiAoYnl0ZXMgPj4ga1BhZ2VTaGlmdCkgKwotICAg
ICAgKChieXRlcyAmIChrUGFnZVNpemUgLSAxKSkgPiAwID8gMSA6IDApOworc3RhdGljIGlubGlu
ZSBMZW5ndGggcGFnZXMoc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiAoYnl0ZXMgPj4ga1Bh
Z2VTaGlmdCkgKyAoKGJ5dGVzICYgKGtQYWdlU2l6ZSAtIDEpKSA+IDAgPyAxIDogMCk7CiB9CiAK
IC8vIENvbnZlcnQgYSB1c2VyIHNpemUgaW50byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2ls
bCBhY3R1YWxseSBiZQogLy8gYWxsb2NhdGVkCi1zdGF0aWMgc2l6ZV90IEFsbG9jYXRpb25TaXpl
KHNpemVfdCBieXRlcykgewotICBpZiAoYnl0ZXMgPiBrTWF4U2l6ZSkgewotICAgIC8vIExhcmdl
IG9iamVjdDogd2UgYWxsb2NhdGUgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzCi0gICAgQVNT
RVJUKGJ5dGVzIDw9IChrTWF4VmFsaWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgcmV0dXJu
IHBhZ2VzKGJ5dGVzKSA8PCBrUGFnZVNoaWZ0OwotICB9IGVsc2Ugeworc3RhdGljIHNpemVfdCBB
bGxvY2F0aW9uU2l6ZShzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKGJ5dGVzID4ga01heFNpemUp
IHsKKyAgICAgICAgLy8gTGFyZ2Ugb2JqZWN0OiB3ZSBhbGxvY2F0ZSBhbiBpbnRlZ3JhbCBudW1i
ZXIgb2YgcGFnZXMKKyAgICAgICAgQVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFsaWRQYWdlcyA8PCBr
UGFnZVNoaWZ0KSk7CisgICAgICAgIHJldHVybiBwYWdlcyhieXRlcykgPDwga1BhZ2VTaGlmdDsK
KyAgICB9CiAgICAgLy8gU21hbGwgb2JqZWN0OiBmaW5kIHRoZSBzaXplIGNsYXNzIHRvIHdoaWNo
IGl0IGJlbG9uZ3MKICAgICByZXR1cm4gQnl0ZVNpemVGb3JDbGFzcyhTaXplQ2xhc3MoYnl0ZXMp
KTsKLSAgfQogfQogCiAvLyBJbmZvcm1hdGlvbiBrZXB0IGZvciBhIHNwYW4gKGEgY29udGlndW91
cyBydW4gb2YgcGFnZXMpLgogc3RydWN0IFNwYW4gewotICBQYWdlSUQgICAgICAgIHN0YXJ0OyAg
ICAgICAgICAvLyBTdGFydGluZyBwYWdlIG51bWJlcgotICBMZW5ndGggICAgICAgIGxlbmd0aDsg
ICAgICAgICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gc3BhbgotICBTcGFuKiAgICAgICAgIG5leHQ7
ICAgICAgICAgICAvLyBVc2VkIHdoZW4gaW4gbGluayBsaXN0Ci0gIFNwYW4qICAgICAgICAgcHJl
djsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBpbiBsaW5rIGxpc3QKLSAgdm9pZCogICAgICAgICBv
YmplY3RzOyAgICAgICAgLy8gTGlua2VkIGxpc3Qgb2YgZnJlZSBvYmplY3RzCi0gIHVuc2lnbmVk
IGludCAgZnJlZSA6IDE7ICAgICAgIC8vIElzIHRoZSBzcGFuIGZyZWUKKyAgICBQYWdlSUQgc3Rh
cnQ7IC8vIFN0YXJ0aW5nIHBhZ2UgbnVtYmVyCisgICAgTGVuZ3RoIGxlbmd0aDsgLy8gTnVtYmVy
IG9mIHBhZ2VzIGluIHNwYW4KKyAgICBTcGFuKiBuZXh0OyAvLyBVc2VkIHdoZW4gaW4gbGluayBs
aXN0CisgICAgU3BhbiogcHJldjsgLy8gVXNlZCB3aGVuIGluIGxpbmsgbGlzdAorICAgIHZvaWQq
IG9iamVjdHM7IC8vIExpbmtlZCBsaXN0IG9mIGZyZWUgb2JqZWN0cworICAgIHVuc2lnbmVkIGlu
dCBmcmVlIDogMTsgLy8gSXMgdGhlIHNwYW4gZnJlZQogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1Q
TEVTCi0gIHVuc2lnbmVkIGludCAgc2FtcGxlIDogMTsgICAgIC8vIFNhbXBsZWQgb2JqZWN0Pwor
ICAgIHVuc2lnbmVkIGludCBzYW1wbGUgOiAxOyAvLyBTYW1wbGVkIG9iamVjdD8KICNlbmRpZgot
ICB1bnNpZ25lZCBpbnQgIHNpemVjbGFzcyA6IDg7ICAvLyBTaXplLWNsYXNzIGZvciBzbWFsbCBv
YmplY3RzIChvciAwKQotICB1bnNpZ25lZCBpbnQgIHJlZmNvdW50IDogMTE7ICAvLyBOdW1iZXIg
b2Ygbm9uLWZyZWUgb2JqZWN0cwotICBib29sIGRlY29tbWl0dGVkIDogMTsKKyAgICB1bnNpZ25l
ZCBpbnQgc2l6ZWNsYXNzIDogODsgLy8gU2l6ZS1jbGFzcyBmb3Igc21hbGwgb2JqZWN0cyAob3Ig
MCkKKyAgICB1bnNpZ25lZCBpbnQgcmVmY291bnQgOiAxMTsgLy8gTnVtYmVyIG9mIG5vbi1mcmVl
IG9iamVjdHMKKyAgICBib29sIGRlY29tbWl0dGVkIDogMTsKIAogI3VuZGVmIFNQQU5fSElTVE9S
WQogI2lmZGVmIFNQQU5fSElTVE9SWQotICAvLyBGb3IgZGVidWdnaW5nLCB3ZSBjYW4ga2VlcCBh
IGxvZyBldmVudHMgcGVyIHNwYW4KLSAgaW50IG5leHRoaXN0b3J5OwotICBjaGFyIGhpc3Rvcnlb
NjRdOwotICBpbnQgdmFsdWVbNjRdOworICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHdlIGNhbiBrZWVw
IGEgbG9nIGV2ZW50cyBwZXIgc3BhbgorICAgIGludCBuZXh0aGlzdG9yeTsKKyAgICBjaGFyIGhp
c3RvcnlbNjRdOworICAgIGludCB2YWx1ZVs2NF07CiAjZW5kaWYKIH07CiAKICNkZWZpbmUgQVNT
RVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pIEFTU0VSVCghc3Bhbi0+ZGVjb21taXR0ZWQpCiAKICNp
ZmRlZiBTUEFOX0hJU1RPUlkKLXZvaWQgRXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50IHYg
PSAwKSB7Ci0gIHNwYW4tPmhpc3Rvcnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7Ci0gIHNwYW4t
PnZhbHVlW3NwYW4tPm5leHRoaXN0b3J5XSA9IHY7Ci0gIHNwYW4tPm5leHRoaXN0b3J5Kys7Ci0g
IGlmIChzcGFuLT5uZXh0aGlzdG9yeSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9yeSkpIHNwYW4tPm5l
eHRoaXN0b3J5ID0gMDsKK3ZvaWQgRXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50IHYgPSAw
KQoreworICAgIHNwYW4tPmhpc3Rvcnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7CisgICAgc3Bh
bi0+dmFsdWVbc3Bhbi0+bmV4dGhpc3RvcnldID0gdjsKKyAgICBzcGFuLT5uZXh0aGlzdG9yeSsr
OworICAgIGlmIChzcGFuLT5uZXh0aGlzdG9yeSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9yeSkpCisg
ICAgICAgIHNwYW4tPm5leHRoaXN0b3J5ID0gMDsKIH0KICNlbHNlCiAjZGVmaW5lIEV2ZW50KHMs
byx2KSAoKHZvaWQpIDApCiAjZW5kaWYKIAogLy8gQWxsb2NhdG9yL2RlYWxsb2NhdG9yIGZvciBz
cGFucwotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+IHNwYW5fYWxsb2NhdG9yOwotc3Rh
dGljIFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExlbmd0aCBsZW4pIHsKLSAgU3BhbiogcmVzdWx0
ID0gc3Bhbl9hbGxvY2F0b3IuTmV3KCk7Ci0gIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVz
dWx0KSk7Ci0gIHJlc3VsdC0+c3RhcnQgPSBwOwotICByZXN1bHQtPmxlbmd0aCA9IGxlbjsKK3N0
YXRpYyBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiBzcGFuQWxsb2NhdG9yOworc3RhdGljIFNwYW4q
IE5ld1NwYW4oUGFnZUlEIHAsIExlbmd0aCBsZW4pCit7CisgICAgU3BhbiogcmVzdWx0ID0gc3Bh
bkFsbG9jYXRvci5OZXcoKTsKKyAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkp
OworICAgIHJlc3VsdC0+c3RhcnQgPSBwOworICAgIHJlc3VsdC0+bGVuZ3RoID0gbGVuOwogI2lm
ZGVmIFNQQU5fSElTVE9SWQotICByZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKKyAgICByZXN1bHQt
Pm5leHRoaXN0b3J5ID0gMDsKICNlbmRpZgotICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNwYW4pIHsK
K3N0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNwYW4pCit7CiAjaWZuZGVmIE5E
RUJVRwotICAvLyBJbiBkZWJ1ZyBtb2RlLCB0cmFzaCB0aGUgY29udGVudHMgb2YgZGVsZXRlZCBT
cGFucwotICBtZW1zZXQoc3BhbiwgMHgzZiwgc2l6ZW9mKCpzcGFuKSk7CisgICAgLy8gSW4gZGVi
dWcgbW9kZSwgdHJhc2ggdGhlIGNvbnRlbnRzIG9mIGRlbGV0ZWQgU3BhbnMKKyAgICBtZW1zZXQo
c3BhbiwgMHgzZiwgc2l6ZW9mKCpzcGFuKSk7CiAjZW5kaWYKLSAgc3Bhbl9hbGxvY2F0b3IuRGVs
ZXRlKHNwYW4pOworICAgIHNwYW5BbGxvY2F0b3IuRGVsZXRlKHNwYW4pOwogfQogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAvLyBEb3VibHkgbGlua2VkIGxpc3Qgb2Ygc3BhbnMuCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfSW5pdChTcGFuKiBsaXN0KSB7Ci0g
IGxpc3QtPm5leHQgPSBsaXN0OwotICBsaXN0LT5wcmV2ID0gbGlzdDsKK3N0YXRpYyBpbmxpbmUg
dm9pZCBETExJbml0KFNwYW4qIGxpc3QpCit7CisgICAgbGlzdC0+bmV4dCA9IGxpc3Q7CisgICAg
bGlzdC0+cHJldiA9IGxpc3Q7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfUmVtb3ZlKFNw
YW4qIHNwYW4pIHsKLSAgc3Bhbi0+cHJldi0+bmV4dCA9IHNwYW4tPm5leHQ7Ci0gIHNwYW4tPm5l
eHQtPnByZXYgPSBzcGFuLT5wcmV2OwotICBzcGFuLT5wcmV2ID0gTlVMTDsKLSAgc3Bhbi0+bmV4
dCA9IE5VTEw7CitzdGF0aWMgaW5saW5lIHZvaWQgRExMUmVtb3ZlKFNwYW4qIHNwYW4pCit7Cisg
ICAgc3Bhbi0+cHJldi0+bmV4dCA9IHNwYW4tPm5leHQ7CisgICAgc3Bhbi0+bmV4dC0+cHJldiA9
IHNwYW4tPnByZXY7CisgICAgc3Bhbi0+cHJldiA9IDA7CisgICAgc3Bhbi0+bmV4dCA9IDA7CiB9
CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRExMX0lzRW1wdHkoY29uc3QgU3BhbiogbGlz
dCkgewotICByZXR1cm4gbGlzdC0+bmV4dCA9PSBsaXN0Oworc3RhdGljIEFMV0FZU19JTkxJTkUg
Ym9vbCBETExfSXNFbXB0eShjb25zdCBTcGFuKiBsaXN0KQoreworICAgIHJldHVybiBsaXN0LT5u
ZXh0ID09IGxpc3Q7CiB9CiAKLXN0YXRpYyBpbnQgRExMX0xlbmd0aChjb25zdCBTcGFuKiBsaXN0
KSB7Ci0gIGludCByZXN1bHQgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9
IGxpc3Q7IHMgPSBzLT5uZXh0KSB7Ci0gICAgcmVzdWx0Kys7Ci0gIH0KLSAgcmV0dXJuIHJlc3Vs
dDsKK3N0YXRpYyBpbnQgRExMTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QpCit7CisgICAgaW50IHJl
c3VsdCA9IDA7CisgICAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0g
cy0+bmV4dCkKKyAgICAgICAgcmVzdWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lm
IDAgLyogTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50IC0tIGNhdXNlcyBjb21waWxlciB3YXJuaW5n
cyBpZiBub3QgdXNlZCAqLwotc3RhdGljIHZvaWQgRExMX1ByaW50KGNvbnN0IGNoYXIqIGxhYmVs
LCBjb25zdCBTcGFuKiBsaXN0KSB7Ci0gIE1FU1NBR0UoIiUtMTBzICVwOiIsIGxhYmVsLCBsaXN0
KTsKLSAgZm9yIChjb25zdCBTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+
bmV4dCkgewotICAgIE1FU1NBR0UoIiA8JXAsJXUsJXU+Iiwgcywgcy0+c3RhcnQsIHMtPmxlbmd0
aCk7Ci0gIH0KLSAgTUVTU0FHRSgiXG4iKTsKK3N0YXRpYyB2b2lkIERMTFByaW50KGNvbnN0IGNo
YXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KQoreworICAgIE1FU1NBR0UoIiUtMTBzICVwOiIs
IGxhYmVsLCBsaXN0KTsKKyAgICBmb3IgKGNvbnN0IFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9
IGxpc3Q7IHMgPSBzLT5uZXh0KQorICAgICAgICBNRVNTQUdFKCIgPCVwLCV1LCV1PiIsIHMsIHMt
PnN0YXJ0LCBzLT5sZW5ndGgpOworICAgIE1FU1NBR0UoIlxuIik7Cit9CisjZW5kaWYKKworc3Rh
dGljIGlubGluZSB2b2lkIERMTFByZXBlbmQoU3BhbiogbGlzdCwgU3Bhbiogc3BhbikKK3sKKyAg
ICBBU1NFUlQoIXNwYW4tPm5leHQpOworICAgIEFTU0VSVCghc3Bhbi0+cHJldik7CisgICAgc3Bh
bi0+bmV4dCA9IGxpc3QtPm5leHQ7CisgICAgc3Bhbi0+cHJldiA9IGxpc3Q7CisgICAgbGlzdC0+
bmV4dC0+cHJldiA9IHNwYW47CisgICAgbGlzdC0+bmV4dCA9IHNwYW47CiB9CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gRGF0YSBrZXB0IHBlciBzaXplLWNsYXNzIGluIGNlbnRyYWwgY2FjaGUKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitjbGFzcyBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCB7CitwdWJsaWM6CisgICAg
dm9pZCBJbml0KHNpemVfdCBjbCk7CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFsbCBkbyBpbnRl
cm5hbCBsb2NraW5nLgorCisgICAgLy8gSW5zZXJ0IHRoZSBzcGVjaWZpZWQgcmFuZ2UgaW50byB0
aGUgY2VudHJhbCBmcmVlbGlzdC4gTiBpcyB0aGUgbnVtYmVyIG9mCisgICAgLy8gZWxlbWVudHMg
aW4gdGhlIHJhbmdlLgorICAgIHZvaWQgSW5zZXJ0UmFuZ2Uodm9pZCAqc3RhcnQsIHZvaWQgKmVu
ZCwgaW50KTsKKworICAgIC8vIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZmV0Y2hlZCBl
bGVtZW50cyBpbnRvIE4uCisgICAgdm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQg
KiplbmQsIGludCopOworCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyZWUgb2JqZWN0
cyBpbiBjYWNoZS4KKyAgICBzaXplX3QgbGVuZ3RoKCkKKyAgICB7CisgICAgICAgIFNwaW5Mb2Nr
SG9sZGVyIGgoJmxvY2spOworICAgICAgICByZXR1cm4gY291bnRlcjsKKyAgICB9CisKKyAgICAv
LyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJlZSBvYmplY3RzIGluIHRoZSB0cmFuc2ZlciBjYWNo
ZS4KKyAgICBpbnQgdGNMZW5ndGgoKQorICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgm
bG9jayk7CisgICAgICAgIHJldHVybiB1c2VkU2xvdHMgKiBudW1PYmplY3RzVG9Nb3ZlW3NpemVD
bGFzc107CisgICAgfQorCisjaWZkZWYgV1RGX0NIQU5HRVMKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
RmluZGVyLCBjbGFzcyBSZWFkZXI+CisgICAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5k
ZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIsIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0
KiByZW1vdGVDZW50cmFsRnJlZUxpc3QpCisgICAgeworICAgICAgICBmb3IgKFNwYW4qIHNwYW4g
PSAmZW1wdHk7IHNwYW4gJiYgc3BhbiAhPSAmZW1wdHk7IHNwYW4gPSAoc3Bhbi0+bmV4dCA/IHJl
YWRlcihzcGFuLT5uZXh0KSA6IDApKQorICAgICAgICAgICAgQVNTRVJUKCFzcGFuLT5vYmplY3Rz
KTsKKworICAgICAgICBBU1NFUlQoIW5vbmVtcHR5Lm9iamVjdHMpOworICAgICAgICBzdGF0aWMg
Y29uc3QgcHRyZGlmZl90IG5vbmVtcHR5T2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oJm5vbmVtcHR5KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHRoaXMpOwor
CisgICAgICAgIFNwYW4qIHJlbW90ZU5vbmVtcHR5ID0gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4o
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2VudHJhbEZyZWVMaXN0KSArIG5vbmVtcHR5
T2Zmc2V0KTsKKyAgICAgICAgU3BhbiogcmVtb3RlU3BhbiA9IG5vbmVtcHR5Lm5leHQ7CisKKyAg
ICAgICAgZm9yIChTcGFuKiBzcGFuID0gcmVhZGVyKHJlbW90ZVNwYW4pOyBzcGFuICYmIHJlbW90
ZVNwYW4gIT0gcmVtb3RlTm9uZW1wdHk7IHJlbW90ZVNwYW4gPSBzcGFuLT5uZXh0LCBzcGFuID0g
KHNwYW4tPm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkgeworICAgICAgICAgICAgZm9y
ICh2b2lkKiBuZXh0T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsgbmV4dE9iamVjdDsgbmV4dE9iamVj
dCA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KG5leHRPYmplY3QpKSkKKyAgICAgICAgICAgICAgICBmaW5kZXIudmlzaXQobmV4dE9iamVjdCk7
CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBSRVFVSVJFUzog
bG9jayBpcyBoZWxkCisgICAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hlIGFuZCByZXR1cm4u
CisgICAgLy8gUmV0dXJuIDAgaWYgbm8gZnJlZSBlbnRyaWVzIGluIGNhY2hlLgorICAgIHZvaWQq
IEZldGNoRnJvbVNwYW5zKCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkCisgICAg
Ly8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hlIGFuZCByZXR1cm4uIEZldGNoZXMKKyAgICAvLyBm
cm9tIHBhZ2VoZWFwIGlmIGNhY2hlIGlzIGVtcHR5LiBPbmx5IHJldHVybnMKKyAgICAvLyAwIG9u
IGFsbG9jYXRpb24gZmFpbHVyZS4KKyAgICB2b2lkKiBGZXRjaEZyb21TcGFuc1NhZmUoKTsKKwor
ICAgIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQKKyAgICAvLyBSZWxlYXNlIGEgbGlua2VkIGxp
c3Qgb2Ygb2JqZWN0cyB0byBzcGFucy4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkgcmVsZWFzZSBs
b2NrLgorICAgIHZvaWQgUmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0YXJ0KTsKKworICAgIC8v
IFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQKKyAgICAvLyBSZWxlYXNlIGFuIG9iamVjdCB0byBzcGFu
cy4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkgcmVsZWFzZSBsb2NrLgorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBSZWxlYXNlVG9TcGFucyh2b2lkKik7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBp
cyBoZWxkCisgICAgLy8gUG9wdWxhdGUgY2FjaGUgYnkgZmV0Y2hpbmcgZnJvbSB0aGUgcGFnZSBo
ZWFwLgorICAgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2suCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIFBvcHVsYXRlKCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkLgor
ICAgIC8vIFRyaWVzIHRvIG1ha2Ugcm9vbSBmb3IgYSBUQ0VudHJ5LiBJZiB0aGUgY2FjaGUgaXMg
ZnVsbCBpdCB3aWxsIHRyeSB0bworICAgIC8vIGV4cGFuZCBpdCBhdCB0aGUgY29zdCBvZiBzb21l
IG90aGVyIGNhY2hlIHNpemUuIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcworICAgIC8vIG5vIHNw
YWNlLgorICAgIGJvb2wgTWFrZUNhY2hlU3BhY2UoKTsKKworICAgIC8vIFJFUVVJUkVTOiBsb2Nr
IGZvciBsb2NrZWRTaXplQ2xhc3MgaXMgaGVsZC4KKyAgICAvLyBQaWNrcyBhICJyYW5kb20iIHNp
emUgY2xhc3MgdG8gc3RlYWwgVENFbnRyeSBzbG90IGZyb20uIEluIHJlYWxpdHkgaXQKKyAgICAv
LyBqdXN0IGl0ZXJhdGVzIG92ZXIgdGhlIHNpemVjbGFzc2VzIGJ1dCBkb2VzIHNvIHdpdGhvdXQg
dGFraW5nIGEgbG9jay4KKyAgICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKyAgICAvLyBN
YXkgdGVtcG9yYXJpbHkgbG9jayBhICJyYW5kb20iIHNpemUgY2xhc3MuCisgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgYm9vbCBFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplX3QgbG9ja2VkU2l6ZUNs
YXNzLCBib29sIGZvcmNlKTsKKworICAgIC8vIFJFUVVJUkVTOiBsb2NrIGlzICpub3QqIGhlbGQu
CisgICAgLy8gVHJpZXMgdG8gc2hyaW5rIHRoZSBDYWNoZS4gSWYgZm9yY2UgaXMgdHJ1ZSBpdCB3
aWxsIHJlbGFzZSBvYmplY3RzIHRvCisgICAgLy8gc3BhbnMgaWYgaXQgYWxsb3dzIGl0IHRvIHNo
cmluayB0aGUgY2FjaGUuIFJldHVybiBmYWxzZSBpZiBpdCBmYWlsZWQgdG8KKyAgICAvLyBzaHJp
bmsgdGhlIGNhY2hlLiBEZWNyZW1lbnRzIGNhY2hlU2l6ZSBvbiBzdWNjZWVzcy4KKyAgICAvLyBN
YXkgdGVtcG9yYXJpbHkgdGFrZSBsb2NrLiBJZiBpdCB0YWtlcyBsb2NrLCB0aGUgbG9ja2VkU2l6
ZUNsYXNzCisgICAgLy8gbG9jayBpcyByZWxlYXNlZCB0byB0aGUgdGhyZWFkIGZyb20gaG9sZGlu
ZyB0d28gc2l6ZSBjbGFzcyBsb2NrcworICAgIC8vIGNvbmN1cnJlbnRseSB3aGljaCBjb3VsZCBs
ZWFkIHRvIGEgZGVhZGxvY2suCisgICAgYm9vbCBTaHJpbmtDYWNoZShpbnQgbG9ja2VkU2l6ZUNs
YXNzLCBib29sIGZvcmNlKTsKKworICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyBhbGwgdGhlIGRh
dGEgbWVtYmVycy4gY2FjaGVkX2VudHJpZXMgYW5kIGNhY2hlU2l6ZQorICAgIC8vIG1heSBiZSBs
b29rZWQgYXQgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLgorICAgIFNwaW5Mb2NrIGxvY2s7CisK
KyAgICAvLyBXZSBrZWVwIGxpbmtlZCBsaXN0cyBvZiBlbXB0eSBhbmQgbm9uLWVtcHR5IHNwYW5z
LgorICAgIHNpemVfdCBzaXplQ2xhc3M7IC8vIE15IHNpemUgY2xhc3MKKyAgICBTcGFuIGVtcHR5
OyAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2YgZW1wdHkgc3BhbnMKKyAgICBTcGFuIG5vbmVt
cHR5OyAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCisgICAgc2l6
ZV90IGNvdW50ZXI7IC8vIE51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUgZW50cnkKKwor
ICAgIC8vIEhlcmUgd2UgcmVzZXJ2ZSBzcGFjZSBmb3IgVENFbnRyeSBjYWNoZSBzbG90cy4gU2lu
Y2Ugb25lIHNpemUgY2xhc3MgY2FuCisgICAgLy8gZW5kIHVwIGdldHRpbmcgYWxsIHRoZSBUQ0Vu
dHJpZXMgcXVvdGEgaW4gdGhlIHN5c3RlbSB3ZSBqdXN0IHByZWFsbG9jYXRlCisgICAgLy8gc3Vm
ZmljaWVudCBudW1iZXIgb2YgZW50cmllcyBoZXJlLgorICAgIFRDRW50cnkgdGNTbG90c1trTnVt
VHJhbnNmZXJFbnRyaWVzXTsKKworICAgIC8vIE51bWJlciBvZiBjdXJyZW50bHkgdXNlZCBjYWNo
ZWQgZW50cmllcyBpbiB0Y1Nsb3RzLiBUaGlzIHZhcmlhYmxlIGlzCisgICAgLy8gdXBkYXRlZCB1
bmRlciBhIGxvY2sgYnV0IGNhbiBiZSByZWFkIHdpdGhvdXQgb25lLgorICAgIGludDMyX3QgdXNl
ZFNsb3RzOworICAgIC8vIFRoZSBjdXJyZW50IG51bWJlciBvZiBzbG90cyBmb3IgdGhpcyBzaXpl
IGNsYXNzLiBUaGlzIGlzIGFuCisgICAgLy8gYWRhcHRpdmUgdmFsdWUgdGhhdCBpcyBpbmNyZWFz
ZWQgaWYgdGhlcmUgaXMgbG90cyBvZiB0cmFmZmljCisgICAgLy8gb24gYSBnaXZlbiBzaXplIGNs
YXNzLgorICAgIGludDMyX3QgY2FjaGVTaXplOworfTsKKworLy8gUGFkIGVhY2ggQ2VudHJhbENh
Y2hlIG9iamVjdCB0byBtdWx0aXBsZSBvZiA2NCBieXRlcworY2xhc3MgVENNYWxsb2NDZW50cmFs
RnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMgVENNYWxsb2NDZW50cmFsRnJlZUxpc3QgeworcHJpdmF0
ZToKKyAgICBjaGFyIHBhZFsoNjQgLSAoc2l6ZW9mKFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0KSAl
IDY0KSkgJSA2NF07Cit9OworCisjaWYgT1MoREFSV0lOKQorc3RydWN0IFNwYW47CitjbGFzcyBU
Q01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZDsKK2NsYXNzIFRDTWFsbG9jUGFnZUhlYXA7Citj
bGFzcyBUQ01hbGxvY1RocmVhZENhY2hlOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBh
Z2VIZWFwQWxsb2NhdG9yOworCitjbGFzcyBGYXN0TWFsbG9jWm9uZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIHZvaWQgaW5pdCgpOworCisgICAgc3RhdGljIGtlcm5fcmV0dXJuX3QgZW51bWVyYXRl
KHRhc2tfdCwgdm9pZCosIHVuc2lnbmVkIHR5cGVNbWFzaywgdm1fYWRkcmVzc190IHpvbmVBZGRy
ZXNzLCBtZW1vcnlfcmVhZGVyX3QsIHZtX3JhbmdlX3JlY29yZGVyX3QpOworICAgIHN0YXRpYyBz
aXplX3QgZ29vZFNpemUobWFsbG9jX3pvbmVfdCosIHNpemVfdCBzaXplKSB7IHJldHVybiBzaXpl
OyB9CisgICAgc3RhdGljIGJvb2xlYW5fdCBjaGVjayhtYWxsb2Nfem9uZV90KikgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHN0YXRpYyB2b2lkICBwcmludChtYWxsb2Nfem9uZV90KiwgYm9vbGVhbl90
KSB7IH0KKyAgICBzdGF0aWMgdm9pZCBsb2cobWFsbG9jX3pvbmVfdCosIHZvaWQqKSB7IH0KKyAg
ICBzdGF0aWMgdm9pZCBmb3JjZUxvY2sobWFsbG9jX3pvbmVfdCopIHsgfQorICAgIHN0YXRpYyB2
b2lkIGZvcmNlVW5sb2NrKG1hbGxvY196b25lX3QqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBzdGF0
aXN0aWNzKG1hbGxvY196b25lX3QqLCBtYWxsb2Nfc3RhdGlzdGljc190KiBzdGF0cykgeyBtZW1z
ZXQoc3RhdHMsIDAsIHNpemVvZihtYWxsb2Nfc3RhdGlzdGljc190KSk7IH0KKworcHJpdmF0ZToK
KyAgICBGYXN0TWFsbG9jWm9uZShUQ01hbGxvY1BhZ2VIZWFwKiwgVENNYWxsb2NUaHJlYWRDYWNo
ZSoqLCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCosIFBhZ2VIZWFwQWxsb2NhdG9yPFNw
YW4+KiwgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qKTsKKyAgICBzdGF0
aWMgc2l6ZV90IHNpemUobWFsbG9jX3pvbmVfdCosIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMg
dm9pZCogem9uZU1hbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9p
ZCogem9uZUNhbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90IG51bUl0ZW1zLCBzaXplX3QpOwor
ICAgIHN0YXRpYyB2b2lkIHpvbmVGcmVlKG1hbGxvY196b25lX3QqLCB2b2lkKik7CisgICAgc3Rh
dGljIHZvaWQqIHpvbmVSZWFsbG9jKG1hbGxvY196b25lX3QqLCB2b2lkKiwgc2l6ZV90KTsKKyAg
ICBzdGF0aWMgdm9pZCogem9uZVZhbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90KSB7IExPR19F
UlJPUigidmFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQiKTsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMg
dm9pZCB6b25lRGVzdHJveShtYWxsb2Nfem9uZV90KikgeyB9CisKKyAgICBtYWxsb2Nfem9uZV90
IG1fem9uZTsKKyAgICBUQ01hbGxvY1BhZ2VIZWFwKiBtX3BhZ2VIZWFwOworICAgIFRDTWFsbG9j
VGhyZWFkQ2FjaGUqKiBtX3RocmVhZEhlYXBzOworICAgIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0
UGFkZGVkKiBtX2NlbnRyYWxDYWNoZXM7CisgICAgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4qIG1f
c3BhbkFsbG9jYXRvcjsKKyAgICBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY1RocmVhZENhY2hl
PiogbV9wYWdlSGVhcEFsbG9jYXRvcjsKK307CisKKyNlbmRpZgorCiAjZW5kaWYKIAotc3RhdGlj
IGlubGluZSB2b2lkIERMTF9QcmVwZW5kKFNwYW4qIGxpc3QsIFNwYW4qIHNwYW4pIHsKLSAgQVNT
RVJUKHNwYW4tPm5leHQgPT0gTlVMTCk7Ci0gIEFTU0VSVChzcGFuLT5wcmV2ID09IE5VTEwpOwot
ICBzcGFuLT5uZXh0ID0gbGlzdC0+bmV4dDsKLSAgc3Bhbi0+cHJldiA9IGxpc3Q7Ci0gIGxpc3Qt
Pm5leHQtPnByZXYgPSBzcGFuOwotICBsaXN0LT5uZXh0ID0gc3BhbjsKKyNpZm5kZWYgV1RGX0NI
QU5HRVMKKy8vIFRoaXMgI2lmZGVmIHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgc2V0LiBTZXQgTk9f
VENNQUxMT0NfU0FNUExFUyBpZgorLy8geW91J3JlIHBvcnRpbmcgdG8gYSBzeXN0ZW0gd2hlcmUg
eW91IHJlYWxseSBjYW4ndCBnZXQgYSBzdGFja3RyYWNlLgorI2lmZGVmIE5PX1RDTUFMTE9DX1NB
TVBMRVMKKy8vIFdlIHVzZSAjZGVmaW5lIHNvIGNvZGUgY29tcGlsZXMgZXZlbiBpZiB5b3UgI2lu
Y2x1ZGUgc3RhY2t0cmFjZS5oIHNvbWVob3cuCisjIGRlZmluZSBHZXRTdGFja1RyYWNlKHN0YWNr
LCBkZXB0aCwgc2tpcCkgICgwKQorI2Vsc2UKKyMgaW5jbHVkZSA8Z29vZ2xlL3N0YWNrdHJhY2Uu
aD4KKyNlbmRpZgorI2VuZGlmCisKKy8vIEV2ZW4gaWYgd2UgaGF2ZSBzdXBwb3J0IGZvciB0aHJl
YWQtbG9jYWwgc3RvcmFnZSBpbiB0aGUgY29tcGlsZXIKKy8vIGFuZCBsaW5rZXIsIHRoZSBPUyBt
YXkgbm90IHN1cHBvcnQgaXQuIFdlIG5lZWQgdG8gY2hlY2sgdGhhdCBhdAorLy8gcnVudGltZS4g
UmlnaHQgbm93LCB3ZSBoYXZlIHRvIGtlZXAgYSBtYW51YWwgc2V0IG9mICJiYWQiIE9TZXMuCisj
aWYgZGVmaW5lZChIQVZFX1RMUykKK3N0YXRpYyBib29sIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFs
c2U7IC8vIGJlIGNvbnNlcnZhdGl2ZQorc3RhdGljIGlubGluZSBib29sIEtlcm5lbFN1cHBvcnRz
VExTKCkKK3sKKyAgICByZXR1cm4ga2VybmVsU3VwcG9ydHNUbHM7Cit9CisjIGlmICFIQVZFX0RF
Q0xfVU5BTUUgLy8gaWYgdG9vIG9sZCBmb3IgdW5hbWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRM
Uworc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkKK3sKKyAgICBrZXJuZWxT
dXBwb3J0c1RscyA9IGZhbHNlOworfQorIyBlbHNlCisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+
IC8vIERFQ0xfVU5BTUUgY2hlY2tlZCBmb3IgPHN5cy91dHNuYW1lLmg+IHRvbworc3RhdGljIHZv
aWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkKK3sKKyAgICBzdHJ1Y3QgdXRzbmFtZSBidWY7
CisgICAgaWYgKHVuYW1lKCZidWYpKSB7IC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlCisgICAgICAg
IE1FU1NBR0UoInVuYW1lIGZhaWxlZCBhc3N1bWluZyBubyBUTFMgc3VwcG9ydCAoZXJybm89JWQp
XG4iLCBlcnJubyk7CisgICAgICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7CisgICAgfSBl
bHNlIGlmICghc3RyY2FzZWNtcChidWYuc3lzbmFtZSwgImxpbnV4IikpIHsKKyAgICAgICAgLy8g
VGhlIGxpbnV4IGNhc2U6IHRoZSBmaXJzdCBrZXJuZWwgdG8gc3VwcG9ydCBUTFMgd2FzIDIuNi4w
CisgICAgICAgIGlmIChidWYucmVsZWFzZVswXSA8ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAn
LicpIC8vIDAueCBvciAxLngKKyAgICAgICAgICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7
CisgICAgICAgIGVsc2UgaWYgKGJ1Zi5yZWxlYXNlWzBdID09ICcyJyAmJiBidWYucmVsZWFzZVsx
XSA9PSAnLicKKyAgICAgICAgICAgICAgICAmJiBidWYucmVsZWFzZVsyXSA+PSAnMCcgJiYgYnVm
LnJlbGVhc2VbMl0gPCAnNicKKyAgICAgICAgICAgICAgICAmJiBidWYucmVsZWFzZVszXSA9PSAn
LicpIC8vIDIuMCAtIDIuNQorICAgICAgICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSB0cnVlOworICAg
IH0gZWxzZSAvLyBzb21lIG90aGVyIGtlcm5lbCwgd2UnbGwgYmUgb3B0aW1pc2l0aWMKKyAgICAg
ICAga2VybmVsU3VwcG9ydHNUbHMgPSB0cnVlOworICAgIC8vIFRPRE8oY3NpbHZlcnMpOiBWTE9H
KDEpIHRoZSB0bHMgc3RhdHVzIG9uY2Ugd2Ugc3VwcG9ydCBSQVdfVkxPRwogfQorI2VuZGlmIC8v
IEhBVkVfREVDTF9VTkFNRQorI2VuZGlmIC8vIEhBVkVfVExTCisKKy8vIF9fVEhST1cgaXMgZGVm
aW5lZCBpbiBnbGliYyBzeXN0ZW1zLiBJdCBtZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKKy8v
ICJUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uLiIgSXQncyBhbiBv
cHRpb25hbAorLy8gb3B0aW1pemF0aW9uIHRvb2wsIGJ1dCB3ZSBtYXkgbmVlZCB0byB1c2UgaXQg
dG8gbWF0Y2ggZ2xpYmMgcHJvdG90eXBlcy4KKyNpZm5kZWYgX19USFJPVyAvLyBJIGd1ZXNzIHdl
J3JlIG5vdCBvbiBhIGdsaWJjIHN5c3RlbQorI2RlZmluZSBfX1RIUk9XIC8vIF9fVEhST1cgaXMg
anVzdCBhbiBvcHRpbWl6YXRpb24sIHNvIG9rIHRvIG1ha2UgaXQgIiIKKyNlbmRpZgogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAvLyBTdGFjayB0cmFjZXMga2VwdCBmb3Igc2FtcGxlZCBhbGxvY2F0
aW9ucwotLy8gICBUaGUgZm9sbG93aW5nIHN0YXRlIGlzIHByb3RlY3RlZCBieSBwYWdlaGVhcF9s
b2NrXy4KKy8vICAgVGhlIGZvbGxvd2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFnZWhlYXBM
b2NrLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBzaXplL2RlcHRoIGFyZSBtYWRlIHRoZSBz
YW1lIHNpemUgYXMgYSBwb2ludGVyIHNvIHRoYXQgc29tZSBnZW5lcmljCiAvLyBjb2RlIGJlbG93
IGNhbiBjb252ZW5pZW50bHkgY2FzdCB0aGVtIGJhY2sgYW5kIGZvcnRoIHRvIHZvaWQqLgogc3Rh
dGljIGNvbnN0IGludCBrTWF4U3RhY2tEZXB0aCA9IDMxOwogc3RydWN0IFN0YWNrVHJhY2Ugewot
ICB1aW50cHRyX3Qgc2l6ZTsgICAgICAgICAgLy8gU2l6ZSBvZiBvYmplY3QKLSAgdWludHB0cl90
IGRlcHRoOyAgICAgICAgIC8vIE51bWJlciBvZiBQQyB2YWx1ZXMgc3RvcmVkIGluIGFycmF5IGJl
bG93Ci0gIHZvaWQqICAgICBzdGFja1trTWF4U3RhY2tEZXB0aF07CisgICAgdWludHB0cl90IHNp
emU7IC8vIFNpemUgb2Ygb2JqZWN0CisgICAgdWludHB0cl90IGRlcHRoOyAvLyBOdW1iZXIgb2Yg
UEMgdmFsdWVzIHN0b3JlZCBpbiBhcnJheSBiZWxvdworICAgIHZvaWQqIHN0YWNrW2tNYXhTdGFj
a0RlcHRoXTsKIH07CiBzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3RhY2tUcmFjZT4gc3RhY2t0
cmFjZV9hbGxvY2F0b3I7Ci1zdGF0aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CitzdGF0aWMgU3Bh
biBzYW1wbGVkT2JqZWN0czsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTWFwIGZyb20gcGFn
ZS1pZCB0byBwZXItcGFnZSBkYXRhCkBAIC0xMjI4LDkgKzEzODUsOSBAQCBzdGF0aWMgU3BhbiBz
YW1wbGVkX29iamVjdHM7CiAKIC8vIFNlbGVjdG9yIGNsYXNzIC0tIGdlbmVyYWwgc2VsZWN0b3Ig
dXNlcyAzLWxldmVsIG1hcAogdGVtcGxhdGUgPGludCBCSVRTPiBjbGFzcyBNYXBTZWxlY3RvciB7
Ci0gcHVibGljOgotICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPEJJVFMta1BhZ2VTaGlmdD4g
VHlwZTsKLSAgdHlwZWRlZiBQYWNrZWRDYWNoZTxCSVRTLCB1aW50NjRfdD4gQ2FjaGVUeXBlOwor
cHVibGljOgorICAgIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8QklUUy1rUGFnZVNoaWZ0PiBU
eXBlOworICAgIHR5cGVkZWYgUGFja2VkQ2FjaGU8QklUUywgdWludDY0X3Q+IENhY2hlVHlwZTsK
IH07CiAKICNpZiBkZWZpbmVkKFdURl9DSEFOR0VTKQpAQCAtMTI0NiwyNCArMTQwMywyNCBAQCBz
dGF0aWMgY29uc3Qgc2l6ZV90IGtCaXRzVW51c2VkT242NEJpdCA9CiAKIC8vIEEgdGhyZWUtbGV2
ZWwgbWFwIGZvciA2NC1iaXQgbWFjaGluZXMKIHRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9y
PDY0PiB7Ci0gcHVibGljOgotICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPDY0IC0ga1BhZ2VT
aGlmdCAtIGtCaXRzVW51c2VkT242NEJpdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNrZWRDYWNoZTw2
NCwgdWludDY0X3Q+IENhY2hlVHlwZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRDTWFsbG9jX1Bh
Z2VNYXAzPDY0IC0ga1BhZ2VTaGlmdCAtIGtCaXRzVW51c2VkT242NEJpdD4gVHlwZTsKKyAgICB0
eXBlZGVmIFBhY2tlZENhY2hlPDY0LCB1aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsKICNlbmRpZgog
CiAvLyBBIHR3by1sZXZlbCBtYXAgZm9yIDMyLWJpdCBtYWNoaW5lcwogdGVtcGxhdGUgPD4gY2xh
c3MgTWFwU2VsZWN0b3I8MzI+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1h
cDI8MzIgLSBrUGFnZVNoaWZ0PiBUeXBlOwotICB0eXBlZGVmIFBhY2tlZENhY2hlPDMyIC0ga1Bh
Z2VTaGlmdCwgdWludDE2X3Q+IENhY2hlVHlwZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRDTWFs
bG9jX1BhZ2VNYXAyPDMyIC0ga1BhZ2VTaGlmdD4gVHlwZTsKKyAgICB0eXBlZGVmIFBhY2tlZENh
Y2hlPDMyIC0ga1BhZ2VTaGlmdCwgdWludDE2X3Q+IENhY2hlVHlwZTsKIH07CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIC8vIFBhZ2UtbGV2ZWwgYWxsb2NhdG9yCiAvLyAgKiBFYWdlciBjb2FsZXNj
aW5nCiAvLwotLy8gSGVhcCBmb3IgcGFnZS1sZXZlbCBhbGxvY2F0aW9uLiAgV2UgYWxsb3cgYWxs
b2NhdGluZyBhbmQgZnJlZWluZyBhCisvLyBIZWFwIGZvciBwYWdlLWxldmVsIGFsbG9jYXRpb24u
IFdlIGFsbG93IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYQogLy8gY29udGlndW91cyBydW5zIG9m
IHBhZ2VzIChjYWxsZWQgYSAic3BhbiIpLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMjcy
LDEyICsxNDI5LDEyIEBAIHRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDMyPiB7CiAvLyB0
aGUgY2VudHJhbCBjYWNoZSBvciBhbnkgdGhyZWFkIGNhY2hlcy4gV2UgdXNlIGEgYmFja2dyb3Vu
ZCB0aHJlYWQgdG8KIC8vIHBlcmlvZGljYWxseSBzY2FuIHRoZSBmcmVlIGxpc3QgYW5kIHJlbGVh
c2UgYSBwZXJjZW50YWdlIG9mIGl0IGJhY2sgdG8gdGhlIE9TLgogCi0vLyBJZiBmcmVlX2NvbW1p
dHRlZF9wYWdlc18gZXhjZWVkcyBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQsIHRoZQor
Ly8gSWYgZnJlZUNvbW1pdHRlZFBhZ2VzIGV4Y2VlZHMga01pbmltdW1GcmVlQ29tbWl0dGVkUGFn
ZUNvdW50LCB0aGUKIC8vIGJhY2tncm91bmQgdGhyZWFkOgogLy8gICAgIC0gd2FrZXMgdXAKIC8v
ICAgICAtIHBhdXNlcyBmb3Iga1NjYXZlbmdlRGVsYXlJblNlY29uZHMKIC8vICAgICAtIHJldHVy
bnMgdG8gdGhlIE9TIGEgcGVyY2VudGFnZSBvZiB0aGUgbWVtb3J5IHRoYXQgcmVtYWluZWQgdW51
c2VkIGR1cmluZwotLy8gICAgICAgdGhhdCBwYXVzZSAoa1NjYXZlbmdlUGVyY2VudGFnZSAqIG1p
bl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXykKKy8vICAgICAgIHRo
YXQgcGF1c2UgKGtTY2F2ZW5nZVBlcmNlbnRhZ2UgKiBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5j
ZUxhc3RTY2F2ZW5nZSkKIC8vIFRoZSBnb2FsIG9mIHRoaXMgc3RyYXRlZ3kgaXMgdG8gcmVkdWNl
IG1lbW9yeSBwcmVzc3VyZSBpbiBhIHRpbWVseSBmYXNoaW9uCiAvLyB3aGlsZSBhdm9pZGluZyB0
aHJhc2hpbmcgdGhlIE9TIGFsbG9jYXRvci4KIApAQCAtMTI5MiwyMzIgKzE0NDksMjQxIEBAIHN0
YXRpYyBjb25zdCBmbG9hdCBrU2NhdmVuZ2VQZXJjZW50YWdlID0KIC8vIG51bWJlciBvZiBzcGFu
IGxpc3RzIHRvIGtlZXAgc3BhbnMgaW4gd2hlbiBtZW1vcnkgaXMgcmV0dXJuZWQuCiBzdGF0aWMg
Y29uc3QgaW50IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgPSAzMjsKIAotLy8gTnVtYmVyIG9mIGZy
ZWUgY29tbWl0dGVkIHBhZ2VzIHRoYXQgd2Ugd2FudCB0byBrZWVwIGFyb3VuZC4gIFRoZSBtaW5p
bXVtIG51bWJlciBvZiBwYWdlcyB1c2VkIHdoZW4gdGhlcmUKLS8vIGlzIDEgc3BhbiBpbiBlYWNo
IG9mIHRoZSBmaXJzdCBrTWluU3Bhbkxpc3RzV2l0aFNwYW5zIHNwYW5saXN0cy4gIEN1cnJlbnRs
eSA1MjggcGFnZXMuCisvLyBOdW1iZXIgb2YgZnJlZSBjb21taXR0ZWQgcGFnZXMgdGhhdCB3ZSB3
YW50IHRvIGtlZXAgYXJvdW5kLiBUaGUgbWluaW11bSBudW1iZXIgb2YgcGFnZXMgdXNlZCB3aGVu
IHRoZXJlCisvLyBpcyAxIHNwYW4gaW4gZWFjaCBvZiB0aGUgZmlyc3Qga01pblNwYW5MaXN0c1dp
dGhTcGFucyBzcGFubGlzdHMuIEN1cnJlbnRseSA1MjggcGFnZXMuCiBzdGF0aWMgY29uc3Qgc2l6
ZV90IGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudCA9IGtNaW5TcGFuTGlzdHNXaXRoU3Bh
bnMgKiAoKDEuMGYra01pblNwYW5MaXN0c1dpdGhTcGFucykgLyAyLjBmKTsKIAogI2VuZGlmCiAK
LXN0YXRpYyBTcGluTG9jayBwYWdlaGVhcF9sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7Citz
dGF0aWMgU3BpbkxvY2sgcGFnZWhlYXBMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CiAKLWNs
YXNzIFRDTWFsbG9jX1BhZ2VIZWFwIHsKLSBwdWJsaWM6Ci0gIHZvaWQgaW5pdCgpOworY2xhc3Mg
VENNYWxsb2NQYWdlSGVhcCB7CitwdWJsaWM6CisgICAgdm9pZCBpbml0KCk7CiAKLSAgLy8gQWxs
b2NhdGUgYSBydW4gb2YgIm4iIHBhZ2VzLiAgUmV0dXJucyB6ZXJvIGlmIG91dCBvZiBtZW1vcnku
Ci0gIFNwYW4qIE5ldyhMZW5ndGggbik7CisgICAgLy8gQWxsb2NhdGUgYSBydW4gb2YgIm4iIHBh
Z2VzLiBSZXR1cm5zIHplcm8gaWYgb3V0IG9mIG1lbW9yeS4KKyAgICBTcGFuKiBOZXcoTGVuZ3Ro
KTsKIAotICAvLyBEZWxldGUgdGhlIHNwYW4gIltwLCBwK24tMV0iLgotICAvLyBSRVFVSVJFUzog
c3BhbiB3YXMgcmV0dXJuZWQgYnkgZWFybGllciBjYWxsIHRvIE5ldygpIGFuZAotICAvLyAgICAg
ICAgICAgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgotICB2b2lkIERlbGV0ZShTcGFuKiBzcGFu
KTsKLQotICAvLyBNYXJrIGFuIGFsbG9jYXRlZCBzcGFuIGFzIGJlaW5nIHVzZWQgZm9yIHNtYWxs
IG9iamVjdHMgb2YgdGhlCi0gIC8vIHNwZWNpZmllZCBzaXplLWNsYXNzLgotICAvLyBSRVFVSVJF
Uzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIHRvIE5ldygpCi0gIC8vICAg
ICAgICAgICBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgotICB2b2lkIFJlZ2lzdGVyU2l6
ZUNsYXNzKFNwYW4qIHNwYW4sIHNpemVfdCBzYyk7Ci0KLSAgLy8gU3BsaXQgYW4gYWxsb2NhdGVk
IHNwYW4gaW50byB0d28gc3BhbnM6IG9uZSBvZiBsZW5ndGggIm4iIHBhZ2VzCi0gIC8vIGZvbGxv
d2VkIGJ5IGFub3RoZXIgc3BhbiBvZiBsZW5ndGggInNwYW4tPmxlbmd0aCAtIG4iIHBhZ2VzLgot
ICAvLyBNb2RpZmllcyAiKnNwYW4iIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBzcGFuIG9mIGxlbmd0
aCAibiIgcGFnZXMuCi0gIC8vIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgc3Bhbi4K
LSAgLy8KLSAgLy8gUkVRVUlSRVM6ICIwIDwgbiA8IHNwYW4tPmxlbmd0aCIKLSAgLy8gUkVRVUlS
RVM6ICFzcGFuLT5mcmVlCi0gIC8vIFJFUVVJUkVTOiBzcGFuLT5zaXplY2xhc3MgPT0gMAotICBT
cGFuKiBTcGxpdChTcGFuKiBzcGFuLCBMZW5ndGggbik7Ci0KLSAgLy8gUmV0dXJuIHRoZSBkZXNj
cmlwdG9yIGZvciB0aGUgc3BlY2lmaWVkIHBhZ2UuCi0gIGlubGluZSBTcGFuKiBHZXREZXNjcmlw
dG9yKFBhZ2VJRCBwKSBjb25zdCB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+
KHBhZ2VtYXBfLmdldChwKSk7Ci0gIH0KKyAgICAvLyBEZWxldGUgdGhlIHNwYW4gIltwLCBwK24t
MV0iLgorICAgIC8vIFJFUVVJUkVTOiBzcGFuIHdhcyByZXR1cm5lZCBieSBlYXJsaWVyIGNhbGwg
dG8gTmV3KCkgYW5kCisgICAgLy8gICAgICAgICAgIGhhcyBub3QgeWV0IGJlZW4gZGVsZXRlZC4K
KyAgICB2b2lkIERlbGV0ZShTcGFuKik7CisKKyAgICAvLyBNYXJrIGFuIGFsbG9jYXRlZCBzcGFu
IGFzIGJlaW5nIHVzZWQgZm9yIHNtYWxsIG9iamVjdHMgb2YgdGhlCisgICAgLy8gc3BlY2lmaWVk
IHNpemUtY2xhc3MuCisgICAgLy8gUkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5IGFuIGVh
cmxpZXIgY2FsbCB0byBOZXcoKQorICAgIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5ZXQgYmVl
biBkZWxldGVkLgorICAgIHZvaWQgUmVnaXN0ZXJTaXplQ2xhc3MoU3BhbiosIHNpemVfdCBzYyk7
CisKKyAgICAvLyBTcGxpdCBhbiBhbGxvY2F0ZWQgc3BhbiBpbnRvIHR3byBzcGFuczogb25lIG9m
IGxlbmd0aCAibiIgcGFnZXMKKyAgICAvLyBmb2xsb3dlZCBieSBhbm90aGVyIHNwYW4gb2YgbGVu
Z3RoICJzcGFuLT5sZW5ndGggLSBuIiBwYWdlcy4KKyAgICAvLyBNb2RpZmllcyAiKnNwYW4iIHRv
IHBvaW50IHRvIHRoZSBmaXJzdCBzcGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCisgICAgLy8gUmV0
dXJucyBhIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBzcGFuLgorICAgIC8vCisgICAgLy8gUkVRVUlS
RVM6ICIwIDwgbiA8IHNwYW4tPmxlbmd0aCIKKyAgICAvLyBSRVFVSVJFUzogIXNwYW4tPmZyZWUK
KyAgICAvLyBSRVFVSVJFUzogc3Bhbi0+c2l6ZWNsYXNzID09IDAKKyAgICBTcGFuKiBTcGxpdChT
cGFuKiwgTGVuZ3RoKTsKKworICAgIC8vIFJldHVybiB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIHNw
ZWNpZmllZCBwYWdlLgorICAgIGlubGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJRCBwKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHBhZ2Vt
YXAuZ2V0KHApKTsKKyAgICB9CiAKICNpZmRlZiBXVEZfQ0hBTkdFUwotICBpbmxpbmUgU3Bhbiog
R2V0RGVzY3JpcHRvckVuc3VyZVNhZmUoUGFnZUlEIHApCi0gIHsKLSAgICAgIHBhZ2VtYXBfLkVu
c3VyZShwLCAxKTsKLSAgICAgIHJldHVybiBHZXREZXNjcmlwdG9yKHApOwotICB9CisgICAgaW5s
aW5lIFNwYW4qIEdldERlc2NyaXB0b3JFbnN1cmVTYWZlKFBhZ2VJRCBwKQorICAgIHsKKyAgICAg
ICAgcGFnZW1hcC5FbnN1cmUocCwgMSk7CisgICAgICAgIHJldHVybiBHZXREZXNjcmlwdG9yKHAp
OworICAgIH0KICAgICAKLSAgc2l6ZV90IFJldHVybmVkQnl0ZXMoKSBjb25zdDsKKyAgICBzaXpl
X3QgUmV0dXJuZWRCeXRlcygpIGNvbnN0OwogI2VuZGlmCiAKLSAgLy8gRHVtcCBzdGF0ZSB0byBz
dGRlcnIKKyAgICAvLyBEdW1wIHN0YXRlIHRvIHN0ZGVycgogI2lmbmRlZiBXVEZfQ0hBTkdFUwot
ICB2b2lkIER1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KTsKKyAgICB2b2lkIER1bXAoVENNYWxs
b2NfUHJpbnRlciogb3V0KTsKICNlbmRpZgogCi0gIC8vIFJldHVybiBudW1iZXIgb2YgYnl0ZXMg
YWxsb2NhdGVkIGZyb20gc3lzdGVtCi0gIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRlcygpIGNv
bnN0IHsgcmV0dXJuIHN5c3RlbV9ieXRlc187IH0KKyAgICAvLyBSZXR1cm4gbnVtYmVyIG9mIGJ5
dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQorICAgIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRl
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3lzdGVtQnl0ZXM7CisgICAgfQogCi0g
IC8vIFJldHVybiBudW1iZXIgb2YgZnJlZSBieXRlcyBpbiBoZWFwCi0gIHVpbnQ2NF90IEZyZWVC
eXRlcygpIGNvbnN0IHsKLSAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmcmVlX3Bh
Z2VzXykgPDwga1BhZ2VTaGlmdCk7Ci0gIH0KKyAgICAvLyBSZXR1cm4gbnVtYmVyIG9mIGZyZWUg
Ynl0ZXMgaW4gaGVhcAorICAgIHVpbnQ2NF90IEZyZWVCeXRlcygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmcmVlUGFnZXMpIDw8IGtQYWdlU2hp
ZnQpOworICAgIH0KIAotICBib29sIENoZWNrKCk7Ci0gIHNpemVfdCBDaGVja0xpc3QoU3Bhbiog
bGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRl
ZCk7CisgICAgYm9vbCBDaGVjaygpOworICAgIHNpemVfdCBDaGVja0xpc3QoU3BhbiogbGlzdCwg
TGVuZ3RoIG1pblBhZ2VzLCBMZW5ndGggbWF4UGFnZXMsIGJvb2wgZGVjb21taXR0ZWQpOwogCi0g
IC8vIFJlbGVhc2UgYWxsIHBhZ2VzIG9uIHRoZSBmcmVlIGxpc3QgZm9yIHJldXNlIGJ5IHRoZSBP
UzoKLSAgdm9pZCBSZWxlYXNlRnJlZVBhZ2VzKCk7Ci0gIHZvaWQgUmVsZWFzZUZyZWVMaXN0KFNw
YW4qLCBTcGFuKik7Ci0KLSAgLy8gUmV0dXJuIDAgaWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiwg
b3IgZWxzZSB0aGUgY29ycmVjdCBzaXplY2xhc3MgZm9yIHAuCi0gIC8vIFJlYWRzIGFuZCB3cml0
ZXMgdG8gcGFnZW1hcF9jYWNoZV8gZG8gbm90IHJlcXVpcmUgbG9ja2luZy4KLSAgLy8gVGhlIGVu
dHJpZXMgYXJlIDY0IGJpdHMgb24gNjQtYml0IGhhcmR3YXJlIGFuZCAxNiBiaXRzIG9uCi0gIC8v
IDMyLWJpdCBoYXJkd2FyZSwgYW5kIHdlIGRvbid0IG1pbmQgcmFjaW5lc3MgYXMgbG9uZyBhcyBl
YWNoIHJlYWQgb2YKLSAgLy8gYW4gZW50cnkgeWllbGRzIGEgdmFsaWQgZW50cnksIG5vdCBhIHBh
cnRpYWxseSB1cGRhdGVkIGVudHJ5LgotICBzaXplX3QgR2V0U2l6ZUNsYXNzSWZDYWNoZWQoUGFn
ZUlEIHApIGNvbnN0IHsKLSAgICByZXR1cm4gcGFnZW1hcF9jYWNoZV8uR2V0T3JEZWZhdWx0KHAs
IDApOwotICB9Ci0gIHZvaWQgQ2FjaGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNpemVfdCBjbCkgY29u
c3QgeyBwYWdlbWFwX2NhY2hlXy5QdXQocCwgY2wpOyB9CisgICAgLy8gUmVsZWFzZSBhbGwgcGFn
ZXMgb24gdGhlIGZyZWUgbGlzdCBmb3IgcmV1c2UgYnkgdGhlIE9TOgorICAgIHZvaWQgUmVsZWFz
ZUZyZWVQYWdlcygpOworICAgIHZvaWQgUmVsZWFzZUZyZWVMaXN0KFNwYW4qLCBTcGFuKik7CisK
KyAgICAvLyBSZXR1cm4gMCBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLCBvciBlbHNlIHRoZSBj
b3JyZWN0IHNpemVjbGFzcyBmb3IgcC4KKyAgICAvLyBSZWFkcyBhbmQgd3JpdGVzIHRvIHBhZ2Vt
YXBjYWNoZSBkbyBub3QgcmVxdWlyZSBsb2NraW5nLgorICAgIC8vIFRoZSBlbnRyaWVzIGFyZSA2
NCBiaXRzIG9uIDY0LWJpdCBoYXJkd2FyZSBhbmQgMTYgYml0cyBvbgorICAgIC8vIDMyLWJpdCBo
YXJkd2FyZSwgYW5kIHdlIGRvbid0IG1pbmQgcmFjaW5lc3MgYXMgbG9uZyBhcyBlYWNoIHJlYWQg
b2YKKyAgICAvLyBhbiBlbnRyeSB5aWVsZHMgYSB2YWxpZCBlbnRyeSwgbm90IGEgcGFydGlhbGx5
IHVwZGF0ZWQgZW50cnkuCisgICAgc2l6ZV90IEdldFNpemVDbGFzc0lmQ2FjaGVkKFBhZ2VJRCBw
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhZ2VtYXBjYWNoZS5HZXRPckRlZmF1bHQo
cCwgMCk7CisgICAgfQorICAgIHZvaWQgQ2FjaGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNpemVfdCBj
bCkgY29uc3QKKyAgICB7CisgICAgICAgIHBhZ2VtYXBjYWNoZS5QdXQocCwgY2wpOworICAgIH0K
IAotIHByaXZhdGU6Ci0gIC8vIFBpY2sgdGhlIGFwcHJvcHJpYXRlIG1hcCBhbmQgY2FjaGUgdHlw
ZXMgYmFzZWQgb24gcG9pbnRlciBzaXplCi0gIHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpzaXplb2Yo
dWludHB0cl90KT46OlR5cGUgUGFnZU1hcDsKLSAgdHlwZWRlZiBNYXBTZWxlY3Rvcjw4KnNpemVv
Zih1aW50cHRyX3QpPjo6Q2FjaGVUeXBlIFBhZ2VNYXBDYWNoZTsKLSAgUGFnZU1hcCBwYWdlbWFw
XzsKLSAgbXV0YWJsZSBQYWdlTWFwQ2FjaGUgcGFnZW1hcF9jYWNoZV87Ci0KLSAgLy8gV2Ugc2Vn
cmVnYXRlIHNwYW5zIG9mIGEgZ2l2ZW4gc2l6ZSBpbnRvIHR3byBjaXJjdWxhciBsaW5rZWQKLSAg
Ly8gbGlzdHM6IG9uZSBmb3Igbm9ybWFsIHNwYW5zLCBhbmQgb25lIGZvciBzcGFucyB3aG9zZSBt
ZW1vcnkKLSAgLy8gaGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KLSAgc3RydWN0IFNw
YW5MaXN0IHsKLSAgICBTcGFuICAgICAgICBub3JtYWw7Ci0gICAgU3BhbiAgICAgICAgcmV0dXJu
ZWQ7Ci0gIH07Ci0KLSAgLy8gTGlzdCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBrTWF4UGFn
ZXMKLSAgU3Bhbkxpc3QgbGFyZ2VfOworcHJpdmF0ZToKKyAgICAvLyBQaWNrIHRoZSBhcHByb3By
aWF0ZSBtYXAgYW5kIGNhY2hlIHR5cGVzIGJhc2VkIG9uIHBvaW50ZXIgc2l6ZQorICAgIHR5cGVk
ZWYgTWFwU2VsZWN0b3I8OCpzaXplb2YodWludHB0cl90KT46OlR5cGUgUGFnZU1hcDsKKyAgICB0
eXBlZGVmIE1hcFNlbGVjdG9yPDgqc2l6ZW9mKHVpbnRwdHJfdCk+OjpDYWNoZVR5cGUgUGFnZU1h
cENhY2hlOworICAgIFBhZ2VNYXAgcGFnZW1hcDsKKyAgICBtdXRhYmxlIFBhZ2VNYXBDYWNoZSBw
YWdlbWFwY2FjaGU7CisKKyAgICAvLyBXZSBzZWdyZWdhdGUgc3BhbnMgb2YgYSBnaXZlbiBzaXpl
IGludG8gdHdvIGNpcmN1bGFyIGxpbmtlZAorICAgIC8vIGxpc3RzOiBvbmUgZm9yIG5vcm1hbCBz
cGFucywgYW5kIG9uZSBmb3Igc3BhbnMgd2hvc2UgbWVtb3J5CisgICAgLy8gaGFzIGJlZW4gcmV0
dXJuZWQgdG8gdGhlIHN5c3RlbS4KKyAgICBzdHJ1Y3QgU3Bhbkxpc3QgeworICAgICAgICBTcGFu
IG5vcm1hbDsKKyAgICAgICAgU3BhbiByZXR1cm5lZDsKKyAgICB9OworCisgICAgLy8gTGlzdCBv
ZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBrTWF4UGFnZXMKKyAgICBTcGFuTGlzdCBsYXJnZTsK
IAotICAvLyBBcnJheSBtYXBwaW5nIGZyb20gc3BhbiBsZW5ndGggdG8gYSBkb3VibHkgbGlua2Vk
IGxpc3Qgb2YgZnJlZSBzcGFucwotICBTcGFuTGlzdCBmcmVlX1trTWF4UGFnZXNdOworICAgIC8v
IEFycmF5IG1hcHBpbmcgZnJvbSBzcGFuIGxlbmd0aCB0byBhIGRvdWJseSBsaW5rZWQgbGlzdCBv
ZiBmcmVlIHNwYW5zCisgICAgU3Bhbkxpc3QgZnJlZVNwYW5MaXN0W2tNYXhQYWdlc107CiAKLSAg
Ly8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cwotICB1aW50cHRyX3QgZnJlZV9w
YWdlc187CisgICAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cworICAgIHVp
bnRwdHJfdCBmcmVlUGFnZXM7CiAKLSAgLy8gQnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCi0g
IHVpbnQ2NF90IHN5c3RlbV9ieXRlc187CisgICAgLy8gQnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lz
dGVtCisgICAgdWludDY0X3Qgc3lzdGVtQnl0ZXM7CiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJF
QURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUg
bGlzdHMgdGhhdCBhcmUgc3RpbGwgY29tbWl0dGVkLgotICBMZW5ndGggZnJlZV9jb21taXR0ZWRf
cGFnZXNfOworICAgIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlzdHMgdGhhdCBh
cmUgc3RpbGwgY29tbWl0dGVkLgorICAgIExlbmd0aCBmcmVlQ29tbWl0dGVkUGFnZXM7CisKKyAg
ICAvLyBNaW5pbXVtIG51bWJlciBvZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyBzaW5jZSBsYXN0IHNj
YXZlbmdlLiAoQ2FuIGJlIDAgaWYKKyAgICAvLyB3ZSd2ZSBjb21taXR0ZWQgbmV3IHBhZ2VzIHNp
bmNlIHRoZSBsYXN0IHNjYXZlbmdlLikKKyAgICBMZW5ndGggbWluRnJlZUNvbW1pdHRlZFBhZ2Vz
U2luY2VMYXN0U2NhdmVuZ2U7CisjZW5kaWYKIAotICAvLyBNaW5pbXVtIG51bWJlciBvZiBmcmVl
IGNvbW1pdHRlZCBwYWdlcyBzaW5jZSBsYXN0IHNjYXZlbmdlLiAoQ2FuIGJlIDAgaWYKLSAgLy8g
d2UndmUgY29tbWl0dGVkIG5ldyBwYWdlcyBzaW5jZSB0aGUgbGFzdCBzY2F2ZW5nZS4pCi0gIExl
bmd0aCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV87Ci0jZW5k
aWYKLQotICBib29sIEdyb3dIZWFwKExlbmd0aCBuKTsKLQotICAvLyBSRVFVSVJFUyAgIHNwYW4t
Pmxlbmd0aCA+PSBuCi0gIC8vIFJlbW92ZSBzcGFuIGZyb20gaXRzIGZyZWUgbGlzdCwgYW5kIG1v
dmUgYW55IGxlZnRvdmVyIHBhcnQgb2YKLSAgLy8gc3BhbiBpbnRvIGFwcHJvcHJpYXRlIGZyZWUg
bGlzdHMuICBBbHNvIHVwZGF0ZSAic3BhbiIgdG8gaGF2ZQotICAvLyBsZW5ndGggZXhhY3RseSAi
biIgYW5kIG1hcmsgaXQgYXMgbm9uLWZyZWUgc28gaXQgY2FuIGJlIHJldHVybmVkCi0gIC8vIHRv
IHRoZSBjbGllbnQuCi0gIC8vCi0gIC8vICJyZWxlYXNlZCIgaXMgdHJ1ZSBpZmYgInNwYW4iIHdh
cyBmb3VuZCBvbiBhICJyZXR1cm5lZCIgbGlzdC4KLSAgdm9pZCBDYXJ2ZShTcGFuKiBzcGFuLCBM
ZW5ndGggbiwgYm9vbCByZWxlYXNlZCk7Ci0KLSAgdm9pZCBSZWNvcmRTcGFuKFNwYW4qIHNwYW4p
IHsKLSAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQsIHNwYW4pOwotICAgIGlmIChzcGFuLT5s
ZW5ndGggPiAxKSB7Ci0gICAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBzcGFuLT5sZW5n
dGggLSAxLCBzcGFuKTsKKyAgICBib29sIEdyb3dIZWFwKExlbmd0aCk7CisKKyAgICAvLyBSRVFV
SVJFUyAgIHNwYW4tPmxlbmd0aCA+PSBuCisgICAgLy8gUmVtb3ZlIHNwYW4gZnJvbSBpdHMgZnJl
ZSBsaXN0LCBhbmQgbW92ZSBhbnkgbGVmdG92ZXIgcGFydCBvZgorICAgIC8vIHNwYW4gaW50byBh
cHByb3ByaWF0ZSBmcmVlIGxpc3RzLiBBbHNvIHVwZGF0ZSAic3BhbiIgdG8gaGF2ZQorICAgIC8v
IGxlbmd0aCBleGFjdGx5ICJuIiBhbmQgbWFyayBpdCBhcyBub24tZnJlZSBzbyBpdCBjYW4gYmUg
cmV0dXJuZWQKKyAgICAvLyB0byB0aGUgY2xpZW50LgorICAgIC8vCisgICAgLy8gInJlbGVhc2Vk
IiBpcyB0cnVlIGlmZiAic3BhbiIgd2FzIGZvdW5kIG9uIGEgInJldHVybmVkIiBsaXN0LgorICAg
IHZvaWQgQ2FydmUoU3BhbiosIExlbmd0aCwgYm9vbCByZWxlYXNlZCk7CisKKyAgICB2b2lkIFJl
Y29yZFNwYW4oU3Bhbiogc3BhbikKKyAgICB7CisgICAgICAgIHBhZ2VtYXAuc2V0KHNwYW4tPnN0
YXJ0LCBzcGFuKTsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA+IDEpCisgICAgICAgICAgICBw
YWdlbWFwLnNldChzcGFuLT5zdGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOwogICAgIH0K
LSAgfQogICAKLSAgICAvLyBBbGxvY2F0ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09IG4uICBJ
ZiBzdWNjZXNzZnVsLCByZXR1cm5zIGEKLSAgLy8gc3BhbiBvZiBleGFjdGx5IHRoZSBzcGVjaWZp
ZWQgbGVuZ3RoLiAgRWxzZSwgcmV0dXJucyBOVUxMLgotICBTcGFuKiBBbGxvY0xhcmdlKExlbmd0
aCBuKTsKKyAgICAvLyBBbGxvY2F0ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09IG4uIElmIHN1
Y2Nlc3NmdWwsIHJldHVybnMgYQorICAgIC8vIHNwYW4gb2YgZXhhY3RseSB0aGUgc3BlY2lmaWVk
IGxlbmd0aC4gRWxzZSwgcmV0dXJucyAwLgorICAgIFNwYW4qIEFsbG9jTGFyZ2UoTGVuZ3RoKTsK
IAogI2lmICFVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIC8vIElu
Y3JlbWVudGFsbHkgcmVsZWFzZSBzb21lIG1lbW9yeSB0byB0aGUgc3lzdGVtLgotICAvLyBJbmNy
ZW1lbnRhbFNjYXZlbmdlKG4pIGlzIGNhbGxlZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBmcmVlZC4K
LSAgdm9pZCBJbmNyZW1lbnRhbFNjYXZlbmdlKExlbmd0aCBuKTsKKyAgICAvLyBJbmNyZW1lbnRh
bGx5IHJlbGVhc2Ugc29tZSBtZW1vcnkgdG8gdGhlIHN5c3RlbS4KKyAgICAvLyBJbmNyZW1lbnRh
bFNjYXZlbmdlKG4pIGlzIGNhbGxlZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBmcmVlZC4KKyAgICB2
b2lkIEluY3JlbWVudGFsU2NhdmVuZ2UoTGVuZ3RoKTsKICNlbmRpZgogCi0gIC8vIE51bWJlciBv
ZiBwYWdlcyB0byBkZWFsbG9jYXRlIGJlZm9yZSBkb2luZyBtb3JlIHNjYXZlbmdpbmcKLSAgaW50
NjRfdCBzY2F2ZW5nZV9jb3VudGVyXzsKKyAgICAvLyBOdW1iZXIgb2YgcGFnZXMgdG8gZGVhbGxv
Y2F0ZSBiZWZvcmUgZG9pbmcgbW9yZSBzY2F2ZW5naW5nCisgICAgaW50NjRfdCBzY2F2ZW5nZUNv
dW50ZXI7CiAKLSAgLy8gSW5kZXggb2YgbGFzdCBmcmVlIGxpc3Qgd2Ugc2NhdmVuZ2VkCi0gIHNp
emVfdCBzY2F2ZW5nZV9pbmRleF87CisgICAgLy8gSW5kZXggb2YgbGFzdCBmcmVlIGxpc3Qgd2Ug
c2NhdmVuZ2VkCisgICAgc2l6ZV90IHNjYXZlbmdlSW5kZXg7CiAgIAogI2lmIGRlZmluZWQoV1RG
X0NIQU5HRVMpICYmIE9TKERBUldJTikKLSAgZnJpZW5kIGNsYXNzIEZhc3RNYWxsb2Nab25lOwor
ICAgIGZyaWVuZCBjbGFzcyBGYXN0TWFsbG9jWm9uZTsKICNlbmRpZgogCiAjaWYgVVNFX0JBQ0tH
Uk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICB2b2lkIGluaXRpYWxpemVTY2F2ZW5n
ZXIoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHNpZ25hbFNjYXZlbmdlcigpOwotICB2b2lkIHNj
YXZlbmdlKCk7Ci0gIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRTY2F2ZW5nZSgpIGNvbnN0Owor
ICAgIHZvaWQgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
aWduYWxTY2F2ZW5nZXIoKTsKKyAgICB2b2lkIHNjYXZlbmdlKCk7CisgICAgQUxXQVlTX0lOTElO
RSBib29sIHNob3VsZFNjYXZlbmdlKCkgY29uc3Q7CiAKICNpZiBIQVZFKERJU1BBVENIX0gpIHx8
IE9TKFdJTkRPV1MpCi0gIHZvaWQgcGVyaW9kaWNTY2F2ZW5nZSgpOwotICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNTY2F2ZW5nZXJTdXNwZW5kZWQoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHNjaGVk
dWxlU2NhdmVuZ2VyKCk7Ci0gIEFMV0FZU19JTkxJTkUgdm9pZCByZXNjaGVkdWxlU2NhdmVuZ2Vy
KCk7Ci0gIEFMV0FZU19JTkxJTkUgdm9pZCBzdXNwZW5kU2NhdmVuZ2VyKCk7CisgICAgdm9pZCBw
ZXJpb2RpY1NjYXZlbmdlKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzU2NhdmVuZ2VyU3Vz
cGVuZGVkKCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNjaGVkdWxlU2NhdmVuZ2VyKCk7Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc2NoZWR1bGVTY2F2ZW5nZXIoKTsKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc3VzcGVuZFNjYXZlbmdlcigpOwogI2VuZGlmCiAKICNpZiBIQVZFKERJU1BB
VENIX0gpCi0gIGRpc3BhdGNoX3F1ZXVlX3QgbV9zY2F2ZW5nZVF1ZXVlOwotICBkaXNwYXRjaF9z
b3VyY2VfdCBtX3NjYXZlbmdlVGltZXI7Ci0gIGJvb2wgbV9zY2F2ZW5naW5nU3VzcGVuZGVkOwor
ICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9zY2F2ZW5nZVF1ZXVlOworICAgIGRpc3BhdGNoX3NvdXJj
ZV90IG1fc2NhdmVuZ2VUaW1lcjsKKyAgICBib29sIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZDsKICNl
bGlmIE9TKFdJTkRPV1MpCi0gIHN0YXRpYyB2b2lkIENBTExCQUNLIHNjYXZlbmdlclRpbWVyRmly
ZWQodm9pZCosIEJPT0xFQU4pOwotICBIQU5ETEUgbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CisgICAg
c3RhdGljIHZvaWQgQ0FMTEJBQ0sgc2NhdmVuZ2VyVGltZXJGaXJlZCh2b2lkKiwgQk9PTEVBTik7
CisgICAgSEFORExFIG1fc2NhdmVuZ2VRdWV1ZVRpbWVyOwogI2Vsc2UgCi0gIHN0YXRpYyBOT19S
RVRVUk5fV0lUSF9WQUxVRSB2b2lkKiBydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCopOwotICBOT19S
RVRVUk4gdm9pZCBzY2F2ZW5nZXJUaHJlYWQoKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX1dJVEhf
VkFMVUUgdm9pZCogcnVuU2NhdmVuZ2VyVGhyZWFkKHZvaWQqKTsKKyAgICBOT19SRVRVUk4gdm9p
ZCBzY2F2ZW5nZXJUaHJlYWQoKTsKIAotICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBi
YWNrZ3JvdW5kIHRocmVhZCBpcyBhY3RpdmVseSBzY2F2ZW5naW5nIG1lbW9yeSBldmVyeSBrU2Nh
dmVuZ2VEZWxheUluU2Vjb25kcywgb3IKLSAgLy8gaXQncyBibG9ja2VkIHdhaXRpbmcgZm9yIG1v
cmUgcGFnZXMgdG8gYmUgZGVsZXRlZC4KLSAgYm9vbCBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlOwor
ICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGJhY2tncm91bmQgdGhyZWFkIGlzIGFj
dGl2ZWx5IHNjYXZlbmdpbmcgbWVtb3J5IGV2ZXJ5IGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzLCBv
cgorICAgIC8vIGl0J3MgYmxvY2tlZCB3YWl0aW5nIGZvciBtb3JlIHBhZ2VzIHRvIGJlIGRlbGV0
ZWQuCisgICAgYm9vbCBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlOwogCi0gIHB0aHJlYWRfbXV0ZXhf
dCBtX3NjYXZlbmdlTXV0ZXg7Ci0gIHB0aHJlYWRfY29uZF90IG1fc2NhdmVuZ2VDb25kaXRpb247
CisgICAgcHRocmVhZF9tdXRleF90IG1fc2NhdmVuZ2VNdXRleDsKKyAgICBwdGhyZWFkX2NvbmRf
dCBtX3NjYXZlbmdlQ29uZGl0aW9uOwogI2VuZGlmCiAKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9V
TkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQorI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RI
UkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIH07CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6Omlu
aXQoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjppbml0KCkKIHsKLSAgcGFnZW1hcF8uaW5pdChN
ZXRhRGF0YUFsbG9jKTsKLSAgcGFnZW1hcF9jYWNoZV8gPSBQYWdlTWFwQ2FjaGUoMCk7Ci0gIGZy
ZWVfcGFnZXNfID0gMDsKLSAgc3lzdGVtX2J5dGVzXyA9IDA7CisgICAgcGFnZW1hcC5pbml0KE1l
dGFEYXRhQWxsb2MpOworICAgIHBhZ2VtYXBjYWNoZSA9IFBhZ2VNYXBDYWNoZSgwKTsKKyAgICBm
cmVlUGFnZXMgPSAwOworICAgIHN5c3RlbUJ5dGVzID0gMDsKIAogI2lmIFVTRV9CQUNLR1JPVU5E
X1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgZnJlZV9jb21taXR0ZWRfcGFnZXNfID0gMDsK
LSAgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gMDsKLSNl
bmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotCi0gIHNj
YXZlbmdlX2NvdW50ZXJfID0gMDsKLSAgLy8gU3RhcnQgc2NhdmVuZ2luZyBhdCBrTWF4UGFnZXMg
bGlzdAotICBzY2F2ZW5nZV9pbmRleF8gPSBrTWF4UGFnZXMtMTsKLSAgQ09NUElMRV9BU1NFUlQo
a051bUNsYXNzZXMgPD0gKDEgPDwgUGFnZU1hcENhY2hlOjprVmFsdWViaXRzKSwgdmFsdWViaXRz
KTsKLSAgRExMX0luaXQoJmxhcmdlXy5ub3JtYWwpOwotICBETExfSW5pdCgmbGFyZ2VfLnJldHVy
bmVkKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4UGFnZXM7IGkrKykgewotICAgIERM
TF9Jbml0KCZmcmVlX1tpXS5ub3JtYWwpOwotICAgIERMTF9Jbml0KCZmcmVlX1tpXS5yZXR1cm5l
ZCk7Ci0gIH0KKyAgICBmcmVlQ29tbWl0dGVkUGFnZXMgPSAwOworICAgIG1pbkZyZWVDb21taXR0
ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gMDsKKyNlbmRpZiAvLyBVU0VfQkFDS0dST1VORF9U
SFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCisKKyAgICBzY2F2ZW5nZUNvdW50ZXIgPSAwOworICAg
IC8vIFN0YXJ0IHNjYXZlbmdpbmcgYXQga01heFBhZ2VzIGxpc3QKKyAgICBzY2F2ZW5nZUluZGV4
ID0ga01heFBhZ2VzLTE7CisgICAgQ09NUElMRV9BU1NFUlQoa051bUNsYXNzZXMgPD0gKDEgPDwg
UGFnZU1hcENhY2hlOjprVmFsdWViaXRzKSwgdmFsdWViaXRzKTsKKyAgICBETExJbml0KCZsYXJn
ZS5ub3JtYWwpOworICAgIERMTEluaXQoJmxhcmdlLnJldHVybmVkKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtNYXhQYWdlczsgaSsrKSB7CisgICAgICAgIERMTEluaXQoJmZyZWVTcGFu
TGlzdFtpXS5ub3JtYWwpOworICAgICAgICBETExJbml0KCZmcmVlU3Bhbkxpc3RbaV0ucmV0dXJu
ZWQpOworICAgIH0KIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1P
UlkKLSAgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOwotI2VuZGlmICAvLyBVU0VfQkFDS0dST1VORF9U
SFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCisgICAgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOworI2Vu
ZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIH0KIAogI2lm
IFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIAogI2lmIEhBVkUoRElT
UEFUQ0hfSCkKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigp
Cit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQogewotICAgIG1f
c2NhdmVuZ2VRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLkphdmFTY3Jp
cHRDb3JlLkZhc3RNYWxsb2NTYXZlbmdlciIsIE5VTEwpOworICAgIG1fc2NhdmVuZ2VRdWV1ZSA9
IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlLkZhc3RNYWxs
b2NTYXZlbmdlciIsIDApOwogICAgIG1fc2NhdmVuZ2VUaW1lciA9IGRpc3BhdGNoX3NvdXJjZV9j
cmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfVElNRVIsIDAsIDAsIG1fc2NhdmVuZ2VRdWV1ZSk7
CiAgICAgZGlzcGF0Y2hfdGltZV90IHN0YXJ0VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hf
VElNRV9OT1csIGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzICogTlNFQ19QRVJfU0VDKTsKICAgICBk
aXNwYXRjaF9zb3VyY2Vfc2V0X3RpbWVyKG1fc2NhdmVuZ2VUaW1lciwgc3RhcnRUaW1lLCBrU2Nh
dmVuZ2VEZWxheUluU2Vjb25kcyAqIE5TRUNfUEVSX1NFQywgMTAwMCAqIE5TRUNfUEVSX1VTRUMp
OwpAQCAtMTUyNSw2NyArMTY5MSw2NyBAQCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFs
aXplU2NhdmVuCiAgICAgbV9zY2F2ZW5naW5nU3VzcGVuZGVkID0gdHJ1ZTsKIH0KIAotQUxXQVlT
X0lOTElORSBib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRlZCgpCitB
TFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2NQYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNwZW5kZWQo
KQogewotICAgIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NFUlQocGFn
ZWhlYXBMb2NrLklzSGVsZCgpKTsKICAgICByZXR1cm4gbV9zY2F2ZW5naW5nU3VzcGVuZGVkOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVu
Z2VyKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2hlZHVsZVNjYXZl
bmdlcigpCiB7Ci0gICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VS
VChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogICAgIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZCA9IGZh
bHNlOwogICAgIGRpc3BhdGNoX3Jlc3VtZShtX3NjYXZlbmdlVGltZXIpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5nZXIoKQorQUxX
QVlTX0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5nZXIoKQog
ewogICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSBmb3IgbGliZGlzcGF0Y2guCiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCitBTFdB
WVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCiB7Ci0g
ICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExv
Y2suSXNIZWxkKCkpOwogICAgIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZCA9IHRydWU7CiAgICAgZGlz
cGF0Y2hfc3VzcGVuZChtX3NjYXZlbmdlVGltZXIpOwogfQogCiAjZWxpZiBPUyhXSU5ET1dTKQog
Ci12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaW1lckZpcmVkKHZvaWQqIGNvbnRl
eHQsIEJPT0xFQU4pCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNjYXZlbmdlclRpbWVyRmlyZWQo
dm9pZCogY29udGV4dCwgQk9PTEVBTikKIHsKLSAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY19QYWdl
SGVhcCo+KGNvbnRleHQpLT5wZXJpb2RpY1NjYXZlbmdlKCk7CisgICAgc3RhdGljX2Nhc3Q8VENN
YWxsb2NQYWdlSGVhcCo+KGNvbnRleHQpLT5wZXJpb2RpY1NjYXZlbmdlKCk7CiB9CiAKLXZvaWQg
VENNYWxsb2NfUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQordm9pZCBUQ01hbGxvY1Bh
Z2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKIHsKICAgICBtX3NjYXZlbmdlUXVldWVUaW1l
ciA9IDA7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6aXNTY2F2
ZW5nZXJTdXNwZW5kZWQoKQorQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jUGFnZUhlYXA6Omlz
U2NhdmVuZ2VyU3VzcGVuZGVkKCkKIHsKLSAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFwX2xvY2sp
KTsKKyAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFwTG9jaykpOwogICAgIHJldHVybiAhbV9zY2F2
ZW5nZVF1ZXVlVGltZXI7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVh
cDo6c2NoZWR1bGVTY2F2ZW5nZXIoKQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhl
YXA6OnNjaGVkdWxlU2NhdmVuZ2VyKCkKIHsKICAgICAvLyBXZSBuZWVkIHRvIHVzZSBXVF9FWEVD
VVRFT05MWU9OQ0UgaGVyZSBhbmQgcmVzY2hlZHVsZSB0aGUgdGltZXIsIGJlY2F1c2UKICAgICAv
LyBXaW5kb3dzIHdpbGwgZmlyZSB0aGUgdGltZXIgZXZlbnQgZXZlbiB3aGVuIHRoZSBmdW5jdGlv
biBpcyBhbHJlYWR5IHJ1bm5pbmcuCi0gICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9sb2NrKSk7
CisgICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcExvY2spKTsKICAgICBDcmVhdGVUaW1lclF1ZXVl
VGltZXIoJm1fc2NhdmVuZ2VRdWV1ZVRpbWVyLCAwLCBzY2F2ZW5nZXJUaW1lckZpcmVkLCB0aGlz
LCBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyAqIDEwMDAsIDAsIFdUX0VYRUNVVEVPTkxZT05DRSk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6cmVzY2hlZHVsZVNj
YXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6cmVzY2hlZHVs
ZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gV2UgbXVzdCBkZWxldGUgdGhlIHRpbWVyIGFuZCBjcmVh
dGUgaXQgYWdhaW4sIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZ2dlciBhIHRp
bWVyIG9uIFdpbmRvd3MuCiAgICAgc3VzcGVuZFNjYXZlbmdlcigpOwogICAgIHNjaGVkdWxlU2Nh
dmVuZ2VyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c3Vz
cGVuZFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c3Vz
cGVuZFNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9sb2NrKSk7Cisg
ICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcExvY2spKTsKICAgICBIQU5ETEUgc2NhdmVuZ2VRdWV1
ZVRpbWVyID0gbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CiAgICAgbV9zY2F2ZW5nZVF1ZXVlVGltZXIg
PSAwOwogICAgIERlbGV0ZVRpbWVyUXVldWVUaW1lcigwLCBzY2F2ZW5nZVF1ZXVlVGltZXIsIDAp
OwpAQCAtMTU5Myw3ICsxNzU5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VI
ZWFwOjpzdQogCiAjZWxzZQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2Nh
dmVuZ2VyKCkKK3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCiB7
CiAgICAgLy8gQ3JlYXRlIGEgbm9uLXJlY3Vyc2l2ZSBtdXRleC4KICNpZiAhZGVmaW5lZChQVEhS
RUFEX01VVEVYX05PUk1BTCkgfHwgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPT0gUFRIUkVBRF9NVVRF
WF9ERUZBVUxUCkBAIC0xNjE0LDE2ICsxNzgwLDE2IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6
OmluaXRpYWxpemVTY2F2ZW4KICAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCAwLCBydW5TY2F2
ZW5nZXJUaHJlYWQsIHRoaXMpOwogfQogCi12b2lkKiBUQ01hbGxvY19QYWdlSGVhcDo6cnVuU2Nh
dmVuZ2VyVGhyZWFkKHZvaWQqIGNvbnRleHQpCit2b2lkKiBUQ01hbGxvY1BhZ2VIZWFwOjpydW5T
Y2F2ZW5nZXJUaHJlYWQodm9pZCogY29udGV4dCkKIHsKLSAgICBzdGF0aWNfY2FzdDxUQ01hbGxv
Y19QYWdlSGVhcCo+KGNvbnRleHQpLT5zY2F2ZW5nZXJUaHJlYWQoKTsKKyAgICBzdGF0aWNfY2Fz
dDxUQ01hbGxvY1BhZ2VIZWFwKj4oY29udGV4dCktPnNjYXZlbmdlclRocmVhZCgpOwogI2lmIChD
T01QSUxFUihNU1ZDKSB8fCBDT01QSUxFUihTVU5DQykpCiAgICAgLy8gV2l0aG91dCB0aGlzLCBW
aXN1YWwgU3R1ZGlvIGFuZCBTdW4gU3R1ZGlvIHdpbGwgY29tcGxhaW4gdGhhdCB0aGlzIG1ldGhv
ZCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KICAgICByZXR1cm4gMDsKICNlbmRpZgogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNpZ25hbFNjYXZlbmdlcigpCitB
TFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2VyKCkKIHsK
ICAgICAvLyBtX3NjYXZlbmdlTXV0ZXggc2hvdWxkIGJlIGhlbGQgYmVmb3JlIGFjY2Vzc2luZyBt
X3NjYXZlbmdlVGhyZWFkQWN0aXZlLgogICAgIEFTU0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2so
bV9zY2F2ZW5nZU11dGV4KSk7CkBAIC0xNjMzLDIwMSArMTc5OSwyMDQgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzaQogCiAjZW5kaWYKIAotdm9pZCBUQ01hbGxvY19Q
YWdlSGVhcDo6c2NhdmVuZ2UoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZSgpCiB7
Ci0gICAgc2l6ZV90IHBhZ2VzVG9SZWxlYXNlID0gbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3Np
bmNlX2xhc3Rfc2NhdmVuZ2VfICoga1NjYXZlbmdlUGVyY2VudGFnZTsKLSAgICBzaXplX3QgdGFy
Z2V0UGFnZUNvdW50ID0gc3RkOjptYXg8c2l6ZV90PihrTWluaW11bUZyZWVDb21taXR0ZWRQYWdl
Q291bnQsIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtIHBhZ2VzVG9SZWxlYXNlKTsKKyAgICBzaXpl
X3QgcGFnZXNUb1JlbGVhc2UgPSBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5n
ZSAqIGtTY2F2ZW5nZVBlcmNlbnRhZ2U7CisgICAgc2l6ZV90IHRhcmdldFBhZ2VDb3VudCA9IHN0
ZDo6bWF4PHNpemVfdD4oa01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCBmcmVlQ29tbWl0
dGVkUGFnZXMgLSBwYWdlc1RvUmVsZWFzZSk7CiAKLSAgICBMZW5ndGggbGFzdEZyZWVDb21taXR0
ZWRQYWdlcyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKLSAgICB3aGlsZSAoZnJlZV9jb21taXR0
ZWRfcGFnZXNfID4gdGFyZ2V0UGFnZUNvdW50KSB7CisgICAgTGVuZ3RoIGxhc3RGcmVlQ29tbWl0
dGVkUGFnZXMgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CisgICAgd2hpbGUgKGZyZWVDb21taXR0ZWRQ
YWdlcyA+IHRhcmdldFBhZ2VDb3VudCkgewogICAgICAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSBrTWF4UGFnZXM7IGkgPiAwICYmIGZyZWVfY29tbWl0dGVkX3BhZ2Vz
XyA+PSB0YXJnZXRQYWdlQ291bnQ7IGktLSkgewotICAgICAgICAgICAgU3Bhbkxpc3QqIHNsaXN0
ID0gKHN0YXRpY19jYXN0PHNpemVfdD4oaSkgPT0ga01heFBhZ2VzKSA/ICZsYXJnZV8gOiAmZnJl
ZV9baV07Ci0gICAgICAgICAgICAvLyBJZiB0aGUgc3BhbiBzaXplIGlzIGJpZ2dlciB0aGFuIGtN
aW5TcGFuTGlzdHNXaXRoU3BhbnMgcGFnZXMgcmV0dXJuIGFsbCB0aGUgc3BhbnMgaW4gdGhlIGxp
c3QsIGVsc2UgcmV0dXJuIGFsbCBidXQgMSBzcGFuLiAgCisgICAgICAgIGZvciAoaW50IGkgPSBr
TWF4UGFnZXM7IGkgPiAwICYmIGZyZWVDb21taXR0ZWRQYWdlcyA+PSB0YXJnZXRQYWdlQ291bnQ7
IGktLSkgeworICAgICAgICAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRpY19jYXN0PHNpemVf
dD4oaSkgPT0ga01heFBhZ2VzKSA/ICZsYXJnZSA6ICZmcmVlU3Bhbkxpc3RbaV07CisgICAgICAg
ICAgICAvLyBJZiB0aGUgc3BhbiBzaXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlzdHNXaXRo
U3BhbnMgcGFnZXMgcmV0dXJuIGFsbCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2UgcmV0dXJu
IGFsbCBidXQgMSBzcGFuLiAKICAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IDUwJSBvZiBhIHNw
YW5saXN0IGF0IGEgdGltZSBzbyBzcGFucyBvZiBzaXplIDEgYXJlIG5vdCB0aGUgb25seSBvbmVz
IGxlZnQuCi0gICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gRExMX0xlbmd0aCgmc2xpc3QtPm5v
cm1hbCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gRExMTGVuZ3RoKCZzbGlzdC0+bm9y
bWFsKTsKICAgICAgICAgICAgIHNpemVfdCBudW1TcGFuc1RvUmV0dXJuID0gKGkgPiBrTWluU3Bh
bkxpc3RzV2l0aFNwYW5zKSA/IGxlbmd0aCA6IGxlbmd0aCAvIDI7Ci0gICAgICAgICAgICBmb3Ig
KGludCBqID0gMDsgc3RhdGljX2Nhc3Q8c2l6ZV90PihqKSA8IG51bVNwYW5zVG9SZXR1cm4gJiYg
IURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSAmJiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiB0
YXJnZXRQYWdlQ291bnQ7IGorKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IHN0YXRp
Y19jYXN0PHNpemVfdD4oaikgPCBudW1TcGFuc1RvUmV0dXJuICYmICFETExfSXNFbXB0eSgmc2xp
c3QtPm5vcm1hbCkgJiYgZnJlZUNvbW1pdHRlZFBhZ2VzID4gdGFyZ2V0UGFnZUNvdW50OyBqKysp
IHsKICAgICAgICAgICAgICAgICBTcGFuKiBzID0gc2xpc3QtPm5vcm1hbC5wcmV2OyAKLSAgICAg
ICAgICAgICAgICBETExfUmVtb3ZlKHMpOworICAgICAgICAgICAgICAgIERMTFJlbW92ZShzKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoIXMtPmRlY29tbWl0dGVkKTsKICAgICAgICAgICAgICAg
ICBpZiAoIXMtPmRlY29tbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIFRDTWFsbG9jX1N5
c3RlbVJlbGVhc2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocy0+c3RhcnQgPDwga1BhZ2VTaGlm
dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoZnJlZV9jb21taXR0ZWRfcGFnZXNfID49IHMtPmxlbmd0aCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtPSBzLT5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChmcmVlQ29tbWl0dGVkUGFnZXMgPj0gcy0+bGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZnJlZUNvbW1pdHRlZFBhZ2VzIC09IHMtPmxlbmd0aDsKICAgICAgICAg
ICAgICAgICAgICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBETExfUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKKyAgICAgICAg
ICAgICAgICBETExQcmVwZW5kKCZzbGlzdC0+cmV0dXJuZWQsIHMpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPT0gZnJlZV9j
b21taXR0ZWRfcGFnZXNfKQorICAgICAgICBpZiAobGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9PSBm
cmVlQ29tbWl0dGVkUGFnZXMpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGFzdEZyZWVD
b21taXR0ZWRQYWdlcyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKKyAgICAgICAgbGFzdEZyZWVD
b21taXR0ZWRQYWdlcyA9IGZyZWVDb21taXR0ZWRQYWdlczsKICAgICB9CiAKLSAgICBtaW5fZnJl
ZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9w
YWdlc187CisgICAgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVl
Q29tbWl0dGVkUGFnZXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVh
cDo6c2hvdWxkU2NhdmVuZ2UoKSBjb25zdCAKK0FMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY1Bh
Z2VIZWFwOjpzaG91bGRTY2F2ZW5nZSgpIGNvbnN0IAogewotICAgIHJldHVybiBmcmVlX2NvbW1p
dHRlZF9wYWdlc18gPiBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQ7IAorICAgIHJldHVy
biBmcmVlQ29tbWl0dGVkUGFnZXMgPiBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQ7IAog
fQogCiAjZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkK
IAotaW5saW5lIFNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFwOjpOZXcoTGVuZ3RoIG4pIHsKLSAgQVNT
RVJUKENoZWNrKCkpOwotICBBU1NFUlQobiA+IDApOwotCi0gIC8vIEZpbmQgZmlyc3Qgc2l6ZSA+
PSBuIHRoYXQgaGFzIGEgbm9uLWVtcHR5IGxpc3QKLSAgZm9yIChMZW5ndGggcyA9IG47IHMgPCBr
TWF4UGFnZXM7IHMrKykgewotICAgIFNwYW4qIGxsID0gTlVMTDsKLSAgICBib29sIHJlbGVhc2Vk
ID0gZmFsc2U7Ci0gICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10ubm9ybWFsKSkgewotICAg
ICAgLy8gRm91bmQgbm9ybWFsIHNwYW4KLSAgICAgIGxsID0gJmZyZWVfW3NdLm5vcm1hbDsKLSAg
ICB9IGVsc2UgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10ucmV0dXJuZWQpKSB7Ci0gICAgICAv
LyBGb3VuZCByZXR1cm5lZCBzcGFuOyByZWFsbG9jYXRlIGl0Ci0gICAgICBsbCA9ICZmcmVlX1tz
XS5yZXR1cm5lZDsKLSAgICAgIHJlbGVhc2VkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAg
Ly8gS2VlcCBsb29raW5nIGluIGxhcmdlciBjbGFzc2VzCi0gICAgICBjb250aW51ZTsKLSAgICB9
CitpbmxpbmUgU3BhbiogVENNYWxsb2NQYWdlSGVhcDo6TmV3KExlbmd0aCBuKQoreworICAgIEFT
U0VSVChDaGVjaygpKTsKKyAgICBBU1NFUlQobiA+IDApOworCisgICAgLy8gRmluZCBmaXJzdCBz
aXplID49IG4gdGhhdCBoYXMgYSBub24tZW1wdHkgbGlzdAorICAgIGZvciAoTGVuZ3RoIHMgPSBu
OyBzIDwga01heFBhZ2VzOyBzKyspIHsKKyAgICAgICAgU3BhbiogbGwgPSAwOworICAgICAgICBi
b29sIHJlbGVhc2VkID0gZmFsc2U7CisgICAgICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVTcGFu
TGlzdFtzXS5ub3JtYWwpKSB7CisgICAgICAgICAgICAvLyBGb3VuZCBub3JtYWwgc3BhbgorICAg
ICAgICAgICAgbGwgPSAmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbDsKKyAgICAgICAgfSBlbHNlIGlm
ICghRExMX0lzRW1wdHkoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCkpIHsKKyAgICAgICAgICAg
IC8vIEZvdW5kIHJldHVybmVkIHNwYW47IHJlYWxsb2NhdGUgaXQKKyAgICAgICAgICAgIGxsID0g
JmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZDsKKyAgICAgICAgICAgIHJlbGVhc2VkID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcgaW4gbGFyZ2VyIGNs
YXNzZXMKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgU3BhbiogcmVzdWx0ID0gbGwtPm5l
eHQ7Ci0gICAgQ2FydmUocmVzdWx0LCBuLCByZWxlYXNlZCk7CisgICAgICAgIFNwYW4qIHJlc3Vs
dCA9IGxsLT5uZXh0OworICAgICAgICBDYXJ2ZShyZXN1bHQsIG4sIHJlbGVhc2VkKTsKICNpZiBV
U0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgLy8gVGhlIG5ld2x5
IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3JtYWwgc3Bh
biBsaXN0IChhbHJlYWR5IGNvbW1pdHRlZCkuICBVcGRhdGUgdGhlCi0gICAgLy8gZnJlZSBjb21t
aXR0ZWQgcGFnZXMgY291bnQuCi0gICAgQVNTRVJUKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+PSBu
KTsKLSAgICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gLT0gbjsKLSAgICBpZiAoZnJlZV9jb21taXR0
ZWRfcGFnZXNfIDwgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2Vf
KSAKLSAgICAgIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9
IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKKyAgICAgICAgLy8gVGhlIG5ld2x5IGFsbG9jYXRlZCBt
ZW1vcnkgaXMgZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3JtYWwgc3BhbiBsaXN0IChhbHJl
YWR5IGNvbW1pdHRlZCkuIFVwZGF0ZSB0aGUKKyAgICAgICAgLy8gZnJlZSBjb21taXR0ZWQgcGFn
ZXMgY291bnQuCisgICAgICAgIEFTU0VSVChmcmVlQ29tbWl0dGVkUGFnZXMgPj0gbik7CisgICAg
ICAgIGZyZWVDb21taXR0ZWRQYWdlcyAtPSBuOworICAgICAgICBpZiAoZnJlZUNvbW1pdHRlZFBh
Z2VzIDwgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UpIAorICAgICAgICAg
ICAgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVk
UGFnZXM7CiAjZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1P
UlkKLSAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgZnJlZV9wYWdlc18gLT0gbjsKLSAgICByZXR1
cm4gcmVzdWx0OwotICB9CisgICAgICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICAgICAgZnJlZVBh
Z2VzIC09IG47CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCi0gIFNwYW4qIHJlc3Vs
dCA9IEFsbG9jTGFyZ2Uobik7Ci0gIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgQVNTRVJU
X1NQQU5fQ09NTUlUVEVEKHJlc3VsdCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICB9CisgICAg
U3BhbiogcmVzdWx0ID0gQWxsb2NMYXJnZShuKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAg
IEFTU0VSVF9TUEFOX0NPTU1JVFRFRChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KIAotICAvLyBHcm93IHRoZSBoZWFwIGFuZCB0cnkgYWdhaW4KLSAgaWYgKCFHcm93SGVh
cChuKSkgewotICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICAg
IC8vIEdyb3cgdGhlIGhlYXAgYW5kIHRyeSBhZ2FpbgorICAgIGlmICghR3Jvd0hlYXAobikpIHsK
KyAgICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAg
cmV0dXJuIE5ldyhuKTsKKyAgICByZXR1cm4gTmV3KG4pOwogfQogCi1TcGFuKiBUQ01hbGxvY19Q
YWdlSGVhcDo6QWxsb2NMYXJnZShMZW5ndGggbikgewotICAvLyBmaW5kIHRoZSBiZXN0IHNwYW4g
KGNsb3Nlc3QgdG8gbiBpbiBzaXplKS4KLSAgLy8gVGhlIGZvbGxvd2luZyBsb29wcyBpbXBsZW1l
bnRzIGFkZHJlc3Mtb3JkZXJlZCBiZXN0LWZpdC4KLSAgYm9vbCBmcm9tX3JlbGVhc2VkID0gZmFs
c2U7Ci0gIFNwYW4gKmJlc3QgPSBOVUxMOwotCi0gIC8vIFNlYXJjaCB0aHJvdWdoIG5vcm1hbCBs
aXN0Ci0gIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlXy5ub3JtYWwubmV4dDsKLSAgICAgICBzcGFu
ICE9ICZsYXJnZV8ubm9ybWFsOwotICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KSB7Ci0gICAgaWYg
KHNwYW4tPmxlbmd0aCA+PSBuKSB7Ci0gICAgICBpZiAoKGJlc3QgPT0gTlVMTCkKLSAgICAgICAg
ICB8fCAoc3Bhbi0+bGVuZ3RoIDwgYmVzdC0+bGVuZ3RoKQotICAgICAgICAgIHx8ICgoc3Bhbi0+
bGVuZ3RoID09IGJlc3QtPmxlbmd0aCkgJiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQpKSkg
ewotICAgICAgICBiZXN0ID0gc3BhbjsKLSAgICAgICAgZnJvbV9yZWxlYXNlZCA9IGZhbHNlOwot
ICAgICAgfQorU3BhbiogVENNYWxsb2NQYWdlSGVhcDo6QWxsb2NMYXJnZShMZW5ndGggbikKK3sK
KyAgICAvLyBmaW5kIHRoZSBiZXN0IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXplKS4KKyAgICAv
LyBUaGUgZm9sbG93aW5nIGxvb3BzIGltcGxlbWVudHMgYWRkcmVzcy1vcmRlcmVkIGJlc3QtZml0
LgorICAgIGJvb2wgZnJvbVJlbGVhc2VkID0gZmFsc2U7CisgICAgU3BhbiogYmVzdCA9IDA7CisK
KyAgICAvLyBTZWFyY2ggdGhyb3VnaCBub3JtYWwgbGlzdAorICAgIGZvciAoU3Bhbiogc3BhbiA9
IGxhcmdlLm5vcm1hbC5uZXh0OworICAgICAgICAgICAgc3BhbiAhPSAmbGFyZ2Uubm9ybWFsOwor
ICAgICAgICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0
aCA+PSBuKSB7CisgICAgICAgICAgICBpZiAoIWJlc3QKKyAgICAgICAgICAgICAgICB8fCAoc3Bh
bi0+bGVuZ3RoIDwgYmVzdC0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIHx8ICgoc3Bhbi0+bGVu
Z3RoID09IGJlc3QtPmxlbmd0aCkgJiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQpKSkgewor
ICAgICAgICAgICAgICAgIGJlc3QgPSBzcGFuOworICAgICAgICAgICAgICAgZnJvbVJlbGVhc2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAotICAvLyBT
ZWFyY2ggdGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAot
ICBmb3IgKFNwYW4qIHNwYW4gPSBsYXJnZV8ucmV0dXJuZWQubmV4dDsKLSAgICAgICBzcGFuICE9
ICZsYXJnZV8ucmV0dXJuZWQ7Ci0gICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKLSAgICBpZiAo
c3Bhbi0+bGVuZ3RoID49IG4pIHsKLSAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQotICAgICAgICAg
IHx8IChzcGFuLT5sZW5ndGggPCBiZXN0LT5sZW5ndGgpCi0gICAgICAgICAgfHwgKChzcGFuLT5s
ZW5ndGggPT0gYmVzdC0+bGVuZ3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7
Ci0gICAgICAgIGJlc3QgPSBzcGFuOwotICAgICAgICBmcm9tX3JlbGVhc2VkID0gdHJ1ZTsKLSAg
ICAgIH0KKyAgICAvLyBTZWFyY2ggdGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFz
IGEgYmV0dGVyIGZpdAorICAgIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlLnJldHVybmVkLm5leHQ7
CisgICAgICAgICAgICBzcGFuICE9ICZsYXJnZS5yZXR1cm5lZDsKKyAgICAgICAgICAgIHNwYW4g
PSBzcGFuLT5uZXh0KSB7CisgICAgICAgIGlmIChzcGFuLT5sZW5ndGggPj0gbikgeworICAgICAg
ICAgICAgaWYgKCFiZXN0CisgICAgICAgICAgICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8IGJlc3Qt
Pmxlbmd0aCkKKyAgICAgICAgICAgICAgICB8fCAoKHNwYW4tPmxlbmd0aCA9PSBiZXN0LT5sZW5n
dGgpICYmIChzcGFuLT5zdGFydCA8IGJlc3QtPnN0YXJ0KSkpIHsKKyAgICAgICAgICAgICAgICBi
ZXN0ID0gc3BhbjsKKyAgICAgICAgICAgICAgICBmcm9tUmVsZWFzZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgaWYgKGJlc3QgIT0gTlVMTCkgewot
ICAgIENhcnZlKGJlc3QsIG4sIGZyb21fcmVsZWFzZWQpOworICAgIGlmIChiZXN0KSB7CisgICAg
ICAgIENhcnZlKGJlc3QsIG4sIGZyb21SZWxlYXNlZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhS
RUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIC8vIFRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5
IGlzIGZyb20gYSBzcGFuIHRoYXQncyBpbiB0aGUgbm9ybWFsIHNwYW4gbGlzdCAoYWxyZWFkeSBj
b21taXR0ZWQpLiAgVXBkYXRlIHRoZQotICAgIC8vIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50
LgotICAgIEFTU0VSVChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPj0gbik7Ci0gICAgZnJlZV9jb21t
aXR0ZWRfcGFnZXNfIC09IG47Ci0gICAgaWYgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA8IG1pbl9m
cmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXykKLSAgICAgIG1pbl9mcmVl
X2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0dGVkX3Bh
Z2VzXzsKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9S
WQotICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICBmcmVlX3BhZ2VzXyAtPSBuOwotICAgIHJldHVy
biBiZXN0OwotICB9Ci0gIHJldHVybiBOVUxMOworICAgICAgICAvLyBUaGUgbmV3bHkgYWxsb2Nh
dGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFuIGxpc3Qg
KGFscmVhZHkgY29tbWl0dGVkKS4gVXBkYXRlIHRoZQorICAgICAgICAvLyBmcmVlIGNvbW1pdHRl
ZCBwYWdlcyBjb3VudC4KKyAgICAgICAgQVNTRVJUKGZyZWVDb21taXR0ZWRQYWdlcyA+PSBuKTsK
KyAgICAgICAgZnJlZUNvbW1pdHRlZFBhZ2VzIC09IG47CisgICAgICAgIGlmIChmcmVlQ29tbWl0
dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkKKyAgICAg
ICAgICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJlZUNvbW1p
dHRlZFBhZ2VzOworI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9N
RU1PUlkKKyAgICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAgICBmcmVlUGFnZXMgLT0gbjsK
KyAgICAgICAgcmV0dXJuIGJlc3Q7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1TcGFuKiBU
Q01hbGxvY19QYWdlSGVhcDo6U3BsaXQoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pIHsKLSAgQVNTRVJU
KDAgPCBuKTsKLSAgQVNTRVJUKG4gPCBzcGFuLT5sZW5ndGgpOwotICBBU1NFUlQoIXNwYW4tPmZy
ZWUpOwotICBBU1NFUlQoc3Bhbi0+c2l6ZWNsYXNzID09IDApOwotICBFdmVudChzcGFuLCAnVCcs
IG4pOwotCi0gIGNvbnN0IExlbmd0aCBleHRyYSA9IHNwYW4tPmxlbmd0aCAtIG47Ci0gIFNwYW4q
IGxlZnRvdmVyID0gTmV3U3BhbihzcGFuLT5zdGFydCArIG4sIGV4dHJhKTsKLSAgRXZlbnQobGVm
dG92ZXIsICdVJywgZXh0cmEpOwotICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKLSAgcGFnZW1hcF8u
c2V0KHNwYW4tPnN0YXJ0ICsgbiAtIDEsIHNwYW4pOyAvLyBVcGRhdGUgbWFwIGZyb20gcGFnZWlk
IHRvIHNwYW4KLSAgc3Bhbi0+bGVuZ3RoID0gbjsKLQotICByZXR1cm4gbGVmdG92ZXI7Ci19Ci0K
LWlubGluZSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpDYXJ2ZShTcGFuKiBzcGFuLCBMZW5ndGgg
biwgYm9vbCByZWxlYXNlZCkgewotICBBU1NFUlQobiA+IDApOwotICBETExfUmVtb3ZlKHNwYW4p
OwotICBzcGFuLT5mcmVlID0gMDsKLSAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKLQotICBpZiAocmVs
ZWFzZWQpIHsKLSAgICAvLyBJZiB0aGUgc3BhbiBjaG9zZW4gdG8gY2FydmUgZnJvbSBpcyBkZWNv
bW1pdGVkLCBjb21taXQgdGhlIGVudGlyZSBzcGFuIGF0IG9uY2UgdG8gYXZvaWQgY29tbWl0dGlu
ZyBzcGFucyAxIHBhZ2UgYXQgYSB0aW1lLgotICAgIEFTU0VSVChzcGFuLT5kZWNvbW1pdHRlZCk7
Ci0gICAgVENNYWxsb2NfU3lzdGVtQ29tbWl0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4t
PnN0YXJ0IDw8IGtQYWdlU2hpZnQpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNwYW4tPmxlbmd0aCA8
PCBrUGFnZVNoaWZ0KSk7Ci0gICAgc3Bhbi0+ZGVjb21taXR0ZWQgPSBmYWxzZTsKLSNpZiBVU0Vf
QkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRf
cGFnZXNfICs9IHNwYW4tPmxlbmd0aDsKLSNlbmRpZgotICB9Ci0gIAotICBjb25zdCBpbnQgZXh0
cmEgPSBzdGF0aWNfY2FzdDxpbnQ+KHNwYW4tPmxlbmd0aCAtIG4pOwotICBBU1NFUlQoZXh0cmEg
Pj0gMCk7Ci0gIGlmIChleHRyYSA+IDApIHsKK1NwYW4qIFRDTWFsbG9jUGFnZUhlYXA6OlNwbGl0
KFNwYW4qIHNwYW4sIExlbmd0aCBuKQoreworICAgIEFTU0VSVCgwIDwgbik7CisgICAgQVNTRVJU
KG4gPCBzcGFuLT5sZW5ndGgpOworICAgIEFTU0VSVCghc3Bhbi0+ZnJlZSk7CisgICAgQVNTRVJU
KCFzcGFuLT5zaXplY2xhc3MpOworICAgIEV2ZW50KHNwYW4sICdUJywgbik7CisKKyAgICBjb25z
dCBMZW5ndGggZXh0cmEgPSBzcGFuLT5sZW5ndGggLSBuOwogICAgIFNwYW4qIGxlZnRvdmVyID0g
TmV3U3BhbihzcGFuLT5zdGFydCArIG4sIGV4dHJhKTsKLSAgICBsZWZ0b3Zlci0+ZnJlZSA9IDE7
Ci0gICAgbGVmdG92ZXItPmRlY29tbWl0dGVkID0gZmFsc2U7Ci0gICAgRXZlbnQobGVmdG92ZXIs
ICdTJywgZXh0cmEpOworICAgIEV2ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKICAgICBSZWNv
cmRTcGFuKGxlZnRvdmVyKTsKKyAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBz
cGFuKTsgLy8gVXBkYXRlIG1hcCBmcm9tIHBhZ2VpZCB0byBzcGFuCisgICAgc3Bhbi0+bGVuZ3Ro
ID0gbjsKIAotICAgIC8vIFBsYWNlIGxlZnRvdmVyIHNwYW4gb24gYXBwcm9wcmlhdGUgZnJlZSBs
aXN0Ci0gICAgU3Bhbkxpc3QqIGxpc3RwYWlyID0gKHN0YXRpY19jYXN0PHNpemVfdD4oZXh0cmEp
IDwga01heFBhZ2VzKSA/ICZmcmVlX1tleHRyYV0gOiAmbGFyZ2VfOwotICAgIFNwYW4qIGRzdCA9
ICZsaXN0cGFpci0+bm9ybWFsOwotICAgIERMTF9QcmVwZW5kKGRzdCwgbGVmdG92ZXIpOworICAg
IHJldHVybiBsZWZ0b3ZlcjsKK30KIAotICAgIHNwYW4tPmxlbmd0aCA9IG47Ci0gICAgcGFnZW1h
cF8uc2V0KHNwYW4tPnN0YXJ0ICsgbiAtIDEsIHNwYW4pOwotICB9CitpbmxpbmUgdm9pZCBUQ01h
bGxvY1BhZ2VIZWFwOjpDYXJ2ZShTcGFuKiBzcGFuLCBMZW5ndGggbiwgYm9vbCByZWxlYXNlZCkK
K3sKKyAgICBBU1NFUlQobiA+IDApOworICAgIERMTFJlbW92ZShzcGFuKTsKKyAgICBzcGFuLT5m
cmVlID0gMDsKKyAgICBFdmVudChzcGFuLCAnQScsIG4pOworCisgICAgaWYgKHJlbGVhc2VkKSB7
CisgICAgICAgIC8vIElmIHRoZSBzcGFuIGNob3NlbiB0byBjYXJ2ZSBmcm9tIGlzIGRlY29tbWl0
ZWQsIGNvbW1pdCB0aGUgZW50aXJlIHNwYW4gYXQgb25jZSB0byBhdm9pZCBjb21taXR0aW5nIHNw
YW5zIDEgcGFnZSBhdCBhIHRpbWUuCisgICAgICAgIEFTU0VSVChzcGFuLT5kZWNvbW1pdHRlZCk7
CisgICAgICAgIFRDTWFsbG9jX1N5c3RlbUNvbW1pdChyZWludGVycHJldF9jYXN0PHZvaWQqPihz
cGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzcGFuLT5sZW5n
dGggPDwga1BhZ2VTaGlmdCkpOworICAgICAgICBzcGFuLT5kZWNvbW1pdHRlZCA9IGZhbHNlOwor
I2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKKyAgICAgICAgZnJl
ZUNvbW1pdHRlZFBhZ2VzICs9IHNwYW4tPmxlbmd0aDsKKyNlbmRpZgorICAgIH0KKyAgCisgICAg
Y29uc3QgaW50IGV4dHJhID0gc3RhdGljX2Nhc3Q8aW50PihzcGFuLT5sZW5ndGggLSBuKTsKKyAg
ICBBU1NFUlQoZXh0cmEgPj0gMCk7CisgICAgaWYgKGV4dHJhID4gMCkgeworICAgICAgICBTcGFu
KiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBuLCBleHRyYSk7CisgICAgICAgIGxl
ZnRvdmVyLT5mcmVlID0gMTsKKyAgICAgICAgbGVmdG92ZXItPmRlY29tbWl0dGVkID0gZmFsc2U7
CisgICAgICAgIEV2ZW50KGxlZnRvdmVyLCAnUycsIGV4dHJhKTsKKyAgICAgICAgUmVjb3JkU3Bh
bihsZWZ0b3Zlcik7CisKKyAgICAgICAgLy8gUGxhY2UgbGVmdG92ZXIgc3BhbiBvbiBhcHByb3By
aWF0ZSBmcmVlIGxpc3QKKyAgICAgICAgU3Bhbkxpc3QqIGxpc3RwYWlyID0gKHN0YXRpY19jYXN0
PHNpemVfdD4oZXh0cmEpIDwga01heFBhZ2VzKSA/ICZmcmVlU3Bhbkxpc3RbZXh0cmFdIDogJmxh
cmdlOworICAgICAgICBTcGFuKiBkc3QgPSAmbGlzdHBhaXItPm5vcm1hbDsKKyAgICAgICAgRExM
UHJlcGVuZChkc3QsIGxlZnRvdmVyKTsKKworICAgICAgICBzcGFuLT5sZW5ndGggPSBuOworICAg
ICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsKKyAgICB9CiB9CiAK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhTcGFuKiBk
ZXN0aW5hdGlvbiwgU3Bhbiogb3RoZXIpCkBAIC0xODQyLDQzMiArMjAxMSw0NTggQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCBtZXJnZURlY29tbWl0dAogICAgIH0KIH0KIAotaW5saW5lIHZv
aWQgVENNYWxsb2NfUGFnZUhlYXA6OkRlbGV0ZShTcGFuKiBzcGFuKSB7Ci0gIEFTU0VSVChDaGVj
aygpKTsKLSAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+IDAp
OwotICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCkgPT0gc3Bhbik7Ci0gIEFTU0VS
VChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7
Ci0gIHNwYW4tPnNpemVjbGFzcyA9IDA7CitpbmxpbmUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpE
ZWxldGUoU3Bhbiogc3BhbikKK3sKKyAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAgQVNTRVJUKCFz
cGFuLT5mcmVlKTsKKyAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKEdl
dERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQpID09IHNwYW4pOworICAgIEFTU0VSVChHZXREZXNjcmlw
dG9yKHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7CisgICAgc3Bhbi0+
c2l6ZWNsYXNzID0gMDsKICNpZm5kZWYgTk9fVENNQUxMT0NfU0FNUExFUwotICBzcGFuLT5zYW1w
bGUgPSAwOworICAgIHNwYW4tPnNhbXBsZSA9IDA7CiAjZW5kaWYKIAotICAvLyBDb2FsZXNjZSAt
LSB3ZSBndWFyYW50ZWUgdGhhdCAicCIgIT0gMCwgc28gbm8gYm91bmRzIGNoZWNraW5nCi0gIC8v
IG5lY2Vzc2FyeS4gIFdlIGRvIG5vdCBib3RoZXIgcmVzZXR0aW5nIHRoZSBzdGFsZSBwYWdlbWFw
Ci0gIC8vIGVudHJpZXMgZm9yIHRoZSBwaWVjZXMgd2UgYXJlIG1lcmdpbmcgdG9nZXRoZXIgYmVj
YXVzZSB3ZSBvbmx5Ci0gIC8vIGNhcmUgYWJvdXQgdGhlIHBhZ2VtYXAgZW50cmllcyBmb3IgdGhl
IGJvdW5kYXJpZXMuCisgICAgLy8gQ29hbGVzY2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQgInAiICE9
IDAsIHNvIG5vIGJvdW5kcyBjaGVja2luZworICAgIC8vIG5lY2Vzc2FyeS4gV2UgZG8gbm90IGJv
dGhlciByZXNldHRpbmcgdGhlIHN0YWxlIHBhZ2VtYXAKKyAgICAvLyBlbnRyaWVzIGZvciB0aGUg
cGllY2VzIHdlIGFyZSBtZXJnaW5nIHRvZ2V0aGVyIGJlY2F1c2Ugd2Ugb25seQorICAgIC8vIGNh
cmUgYWJvdXQgdGhlIHBhZ2VtYXAgZW50cmllcyBmb3IgdGhlIGJvdW5kYXJpZXMuCiAjaWYgVVNF
X0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAvLyBUcmFjayB0aGUgdG90
YWwgc2l6ZSBvZiB0aGUgbmVpZ2hib3JpbmcgZnJlZSBzcGFucyB0aGF0IGFyZSBjb21taXR0ZWQu
Ci0gIExlbmd0aCBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoID0gMDsKKyAgICAvLyBU
cmFjayB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmVpZ2hib3JpbmcgZnJlZSBzcGFucyB0aGF0IGFy
ZSBjb21taXR0ZWQuCisgICAgTGVuZ3RoIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGgg
PSAwOwogI2VuZGlmCi0gIGNvbnN0IFBhZ2VJRCBwID0gc3Bhbi0+c3RhcnQ7Ci0gIGNvbnN0IExl
bmd0aCBuID0gc3Bhbi0+bGVuZ3RoOwotICBTcGFuKiBwcmV2ID0gR2V0RGVzY3JpcHRvcihwLTEp
OwotICBpZiAocHJldiAhPSBOVUxMICYmIHByZXYtPmZyZWUpIHsKLSAgICAvLyBNZXJnZSBwcmVj
ZWRpbmcgc3BhbiBpbnRvIHRoaXMgc3BhbgotICAgIEFTU0VSVChwcmV2LT5zdGFydCArIHByZXYt
Pmxlbmd0aCA9PSBwKTsKLSAgICBjb25zdCBMZW5ndGggbGVuID0gcHJldi0+bGVuZ3RoOworICAg
IGNvbnN0IFBhZ2VJRCBwID0gc3Bhbi0+c3RhcnQ7CisgICAgY29uc3QgTGVuZ3RoIG4gPSBzcGFu
LT5sZW5ndGg7CisgICAgU3BhbiogcHJldiA9IEdldERlc2NyaXB0b3IocC0xKTsKKyAgICBpZiAo
cHJldiAmJiBwcmV2LT5mcmVlKSB7CisgICAgICAgIC8vIE1lcmdlIHByZWNlZGluZyBzcGFuIGlu
dG8gdGhpcyBzcGFuCisgICAgICAgIEFTU0VSVChwcmV2LT5zdGFydCArIHByZXYtPmxlbmd0aCA9
PSBwKTsKKyAgICAgICAgY29uc3QgTGVuZ3RoIGxlbiA9IHByZXYtPmxlbmd0aDsKICNpZiBVU0Vf
QkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgaWYgKCFwcmV2LT5kZWNv
bW1pdHRlZCkKLSAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47
CisgICAgICAgIGlmICghcHJldi0+ZGVjb21taXR0ZWQpCisgICAgICAgICAgICBuZWlnaGJvcmlu
Z0NvbW1pdHRlZFNwYW5zTGVuZ3RoICs9IGxlbjsKICNlbmRpZgotICAgIG1lcmdlRGVjb21taXR0
ZWRTdGF0ZXMoc3BhbiwgcHJldik7Ci0gICAgRExMX1JlbW92ZShwcmV2KTsKLSAgICBEZWxldGVT
cGFuKHByZXYpOwotICAgIHNwYW4tPnN0YXJ0IC09IGxlbjsKLSAgICBzcGFuLT5sZW5ndGggKz0g
bGVuOwotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCwgc3Bhbik7Ci0gICAgRXZlbnQoc3Bh
biwgJ0wnLCBsZW4pOwotICB9Ci0gIFNwYW4qIG5leHQgPSBHZXREZXNjcmlwdG9yKHArbik7Ci0g
IGlmIChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+ZnJlZSkgewotICAgIC8vIE1lcmdlIG5leHQgc3Bh
biBpbnRvIHRoaXMgc3BhbgotICAgIEFTU0VSVChuZXh0LT5zdGFydCA9PSBwK24pOwotICAgIGNv
bnN0IExlbmd0aCBsZW4gPSBuZXh0LT5sZW5ndGg7CisgICAgICAgIG1lcmdlRGVjb21taXR0ZWRT
dGF0ZXMoc3BhbiwgcHJldik7CisgICAgICAgIERMTFJlbW92ZShwcmV2KTsKKyAgICAgICAgRGVs
ZXRlU3BhbihwcmV2KTsKKyAgICAgICAgc3Bhbi0+c3RhcnQgLT0gbGVuOworICAgICAgICBzcGFu
LT5sZW5ndGggKz0gbGVuOworICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCwgc3Bhbik7
CisgICAgICAgIEV2ZW50KHNwYW4sICdMJywgbGVuKTsKKyAgICB9CisgICAgU3BhbiogbmV4dCA9
IEdldERlc2NyaXB0b3IocCtuKTsKKyAgICBpZiAobmV4dCAmJiBuZXh0LT5mcmVlKSB7CisgICAg
ICAgIC8vIE1lcmdlIG5leHQgc3BhbiBpbnRvIHRoaXMgc3BhbgorICAgICAgICBBU1NFUlQobmV4
dC0+c3RhcnQgPT0gcCtuKTsKKyAgICAgICAgY29uc3QgTGVuZ3RoIGxlbiA9IG5leHQtPmxlbmd0
aDsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgaWYg
KCFuZXh0LT5kZWNvbW1pdHRlZCkKLSAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xl
bmd0aCArPSBsZW47CisgICAgICAgIGlmICghbmV4dC0+ZGVjb21taXR0ZWQpCisgICAgICAgICAg
ICBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoICs9IGxlbjsKICNlbmRpZgotICAgIG1l
cmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgbmV4dCk7Ci0gICAgRExMX1JlbW92ZShuZXh0KTsK
LSAgICBEZWxldGVTcGFuKG5leHQpOwotICAgIHNwYW4tPmxlbmd0aCArPSBsZW47Ci0gICAgcGFn
ZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7Ci0gICAgRXZl
bnQoc3BhbiwgJ1InLCBsZW4pOwotICB9Ci0KLSAgRXZlbnQoc3BhbiwgJ0QnLCBzcGFuLT5sZW5n
dGgpOwotICBzcGFuLT5mcmVlID0gMTsKLSAgaWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7Ci0gICAg
aWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tz
cGFuLT5sZW5ndGhdLnJldHVybmVkLCBzcGFuKTsKLSAgICBlbHNlCi0gICAgICBETExfUHJlcGVu
ZCgmbGFyZ2VfLnJldHVybmVkLCBzcGFuKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoc3Bhbi0+bGVu
Z3RoIDwga01heFBhZ2VzKQotICAgICAgRExMX1ByZXBlbmQoJmZyZWVfW3NwYW4tPmxlbmd0aF0u
bm9ybWFsLCBzcGFuKTsKLSAgICBlbHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLm5vcm1h
bCwgc3Bhbik7Ci0gIH0KLSAgZnJlZV9wYWdlc18gKz0gbjsKKyAgICAgICAgbWVyZ2VEZWNvbW1p
dHRlZFN0YXRlcyhzcGFuLCBuZXh0KTsKKyAgICAgICAgRExMUmVtb3ZlKG5leHQpOworICAgICAg
ICBEZWxldGVTcGFuKG5leHQpOworICAgICAgICBzcGFuLT5sZW5ndGggKz0gbGVuOworICAgICAg
ICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOworICAg
ICAgICBFdmVudChzcGFuLCAnUicsIGxlbik7CisgICAgfQorCisgICAgRXZlbnQoc3BhbiwgJ0Qn
LCBzcGFuLT5sZW5ndGgpOworICAgIHNwYW4tPmZyZWUgPSAxOworICAgIGlmIChzcGFuLT5kZWNv
bW1pdHRlZCkgeworICAgICAgICBpZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKQorICAgICAg
ICAgICAgRExMUHJlcGVuZCgmZnJlZVNwYW5MaXN0W3NwYW4tPmxlbmd0aF0ucmV0dXJuZWQsIHNw
YW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBETExQcmVwZW5kKCZsYXJnZS5yZXR1cm5l
ZCwgc3Bhbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQ
YWdlcykKKyAgICAgICAgICAgIERMTFByZXBlbmQoJmZyZWVTcGFuTGlzdFtzcGFuLT5sZW5ndGhd
Lm5vcm1hbCwgc3Bhbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERMTFByZXBlbmQoJmxh
cmdlLm5vcm1hbCwgc3Bhbik7CisgICAgfQorICAgIGZyZWVQYWdlcyArPSBuOwogCiAjaWYgVVNF
X0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICBpZiAoc3Bhbi0+ZGVjb21t
aXR0ZWQpIHsKLSAgICAgIC8vIElmIHRoZSBtZXJnZWQgc3BhbiBpcyBkZWNvbW1pdHRlZCwgdGhh
dCBtZWFucyB3ZSBkZWNvbW1pdHRlZCBhbnkgbmVpZ2hib3Jpbmcgc3BhbnMgdGhhdCB3ZXJlCi0g
ICAgICAvLyBjb21taXR0ZWQuICBVcGRhdGUgdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50
LgotICAgICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IG5laWdoYm9yaW5nQ29tbWl0dGVkU3Bh
bnNMZW5ndGg7Ci0gICAgICBpZiAoZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVfY29t
bWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKQotICAgICAgICAgICAgbWluX2ZyZWVf
Y29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gZnJlZV9jb21taXR0ZWRfcGFn
ZXNfOwotICB9IGVsc2UgewotICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIHJlbWFpbnMgY29t
bWl0dGVkLCBhZGQgdGhlIGRlbGV0ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZyZWUgY29tbWl0dGVk
IHBhZ2VzIGNvdW50LgotICAgICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfICs9IG47Ci0gIH0KKyAg
ICBpZiAoc3Bhbi0+ZGVjb21taXR0ZWQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFu
IGlzIGRlY29tbWl0dGVkLCB0aGF0IG1lYW5zIHdlIGRlY29tbWl0dGVkIGFueSBuZWlnaGJvcmlu
ZyBzcGFucyB0aGF0IHdlcmUKKyAgICAgICAgLy8gY29tbWl0dGVkLiBVcGRhdGUgdGhlIGZyZWUg
Y29tbWl0dGVkIHBhZ2VzIGNvdW50LgorICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgLT0gbmVp
Z2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aDsKKyAgICAgICAgaWYgKGZyZWVDb21taXR0ZWRQ
YWdlcyA8IG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlKQorICAgICAgICAg
ICAgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVk
UGFnZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIHJlbWFp
bnMgY29tbWl0dGVkLCBhZGQgdGhlIGRlbGV0ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZyZWUgY29t
bWl0dGVkIHBhZ2VzIGNvdW50LgorICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgKz0gbjsKKyAg
ICB9CiAKLSAgLy8gTWFrZSBzdXJlIHRoZSBzY2F2ZW5nZSB0aHJlYWQgYmVjb21lcyBhY3RpdmUg
aWYgd2UgaGF2ZSBlbm91Z2ggZnJlZWQgcGFnZXMgdG8gcmVsZWFzZSBzb21lIGJhY2sgdG8gdGhl
IHN5c3RlbS4KLSAgc2lnbmFsU2NhdmVuZ2VyKCk7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2F2
ZW5nZSB0aHJlYWQgYmVjb21lcyBhY3RpdmUgaWYgd2UgaGF2ZSBlbm91Z2ggZnJlZWQgcGFnZXMg
dG8gcmVsZWFzZSBzb21lIGJhY2sgdG8gdGhlIHN5c3RlbS4KKyAgICBzaWduYWxTY2F2ZW5nZXIo
KTsKICNlbHNlCi0gIEluY3JlbWVudGFsU2NhdmVuZ2Uobik7CisgICAgSW5jcmVtZW50YWxTY2F2
ZW5nZShuKTsKICNlbmRpZgogCi0gIEFTU0VSVChDaGVjaygpKTsKKyAgICBBU1NFUlQoQ2hlY2so
KSk7CiB9CiAKICNpZiAhVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQot
dm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6SW5jcmVtZW50YWxTY2F2ZW5nZShMZW5ndGggbikgewot
ICAvLyBGYXN0IHBhdGg7IG5vdCB5ZXQgdGltZSB0byByZWxlYXNlIG1lbW9yeQotICBzY2F2ZW5n
ZV9jb3VudGVyXyAtPSBuOwotICBpZiAoc2NhdmVuZ2VfY291bnRlcl8gPj0gMCkgcmV0dXJuOyAg
Ly8gTm90IHlldCB0aW1lIHRvIHNjYXZlbmdlCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OkluY3Jl
bWVudGFsU2NhdmVuZ2UoTGVuZ3RoIG4pCit7CisgICAgLy8gRmFzdCBwYXRoOyBub3QgeWV0IHRp
bWUgdG8gcmVsZWFzZSBtZW1vcnkKKyAgICBzY2F2ZW5nZUNvdW50ZXIgLT0gbjsKKyAgICBpZiAo
c2NhdmVuZ2VDb3VudGVyID49IDApCisgICAgICAgIHJldHVybjsgLy8gTm90IHlldCB0aW1lIHRv
IHNjYXZlbmdlCiAKICNpZiBQTEFURk9STShJT1MpCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qga0Rl
ZmF1bHRSZWxlYXNlRGVsYXkgPSA2NDsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZhdWx0
UmVsZWFzZURlbGF5ID0gNjQ7CiAjZWxzZQotICAvLyBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJl
bGVhc2UsIHdhaXQgZm9yIHNvIG1hbnkgcGFnZXMgYmVmb3JlCi0gIC8vIHNjYXZlbmdpbmcgYWdh
aW4uICBXaXRoIDRLIHBhZ2VzLCB0aGlzIGNvbWVzIHRvIDE2TUIgb2YgbWVtb3J5LgotICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtEZWZhdWx0UmVsZWFzZURlbGF5ID0gMSA8PCA4OwotI2VuZGlmCi0K
LSAgLy8gRmluZCBpbmRleCBvZiBmcmVlIGxpc3QgdG8gc2NhdmVuZ2UKLSAgc2l6ZV90IGluZGV4
ID0gc2NhdmVuZ2VfaW5kZXhfICsgMTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4UGFn
ZXMrMTsgaSsrKSB7Ci0gICAgaWYgKGluZGV4ID4ga01heFBhZ2VzKSBpbmRleCA9IDA7Ci0gICAg
U3Bhbkxpc3QqIHNsaXN0ID0gKGluZGV4ID09IGtNYXhQYWdlcykgPyAmbGFyZ2VfIDogJmZyZWVf
W2luZGV4XTsKLSAgICBpZiAoIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSkgewotICAgICAg
Ly8gUmVsZWFzZSB0aGUgbGFzdCBzcGFuIG9uIHRoZSBub3JtYWwgcG9ydGlvbiBvZiB0aGlzIGxp
c3QKLSAgICAgIFNwYW4qIHMgPSBzbGlzdC0+bm9ybWFsLnByZXY7Ci0gICAgICBETExfUmVtb3Zl
KHMpOwotICAgICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAgICAgcy0+
ZGVjb21taXR0ZWQgPSB0cnVlOwotICAgICAgRExMX1ByZXBlbmQoJnNsaXN0LT5yZXR1cm5lZCwg
cyk7CisgICAgLy8gSWYgdGhlcmUgaXMgbm90aGluZyB0byByZWxlYXNlLCB3YWl0IGZvciBzbyBt
YW55IHBhZ2VzIGJlZm9yZQorICAgIC8vIHNjYXZlbmdpbmcgYWdhaW4uIFdpdGggNEsgcGFnZXMs
IHRoaXMgY29tZXMgdG8gMTZNQiBvZiBtZW1vcnkuCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBr
RGVmYXVsdFJlbGVhc2VEZWxheSA9IDEgPDwgODsKKyNlbmRpZgorCisgICAgLy8gRmluZCBpbmRl
eCBvZiBmcmVlIGxpc3QgdG8gc2NhdmVuZ2UKKyAgICBzaXplX3QgaW5kZXggPSBzY2F2ZW5nZUlu
ZGV4ICsgMTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdlcysxOyBpKyspIHsK
KyAgICAgICAgaWYgKGluZGV4ID4ga01heFBhZ2VzKQorICAgICAgICAgICAgaW5kZXggPSAwOwor
ICAgICAgICBTcGFuTGlzdCogc2xpc3QgPSAoaW5kZXggPT0ga01heFBhZ2VzKSA/ICZsYXJnZSA6
ICZmcmVlU3Bhbkxpc3RbaW5kZXhdOworICAgICAgICBpZiAoIURMTF9Jc0VtcHR5KCZzbGlzdC0+
bm9ybWFsKSkgeworICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBzcGFuIG9uIHRoZSBu
b3JtYWwgcG9ydGlvbiBvZiB0aGlzIGxpc3QKKyAgICAgICAgICAgIFNwYW4qIHMgPSBzbGlzdC0+
bm9ybWFsLnByZXY7CisgICAgICAgICAgICBETExSZW1vdmUocyk7CisgICAgICAgICAgICBUQ01h
bGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQ
YWdlU2hpZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOworICAgICAgICAgICAgcy0+ZGVj
b21taXR0ZWQgPSB0cnVlOworICAgICAgICAgICAgRExMUHJlcGVuZCgmc2xpc3QtPnJldHVybmVk
LCBzKTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgIHNjYXZlbmdlX2NvdW50ZXJfID0gc3Rk
OjptYXg8c2l6ZV90PigxNlVMLCBzdGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5
LCBrRGVmYXVsdFJlbGVhc2VEZWxheSAtIChmcmVlX3BhZ2VzXyAvIGtEZWZhdWx0UmVsZWFzZURl
bGF5KSkpOworICAgICAgICAgICAgc2NhdmVuZ2VDb3VudGVyID0gc3RkOjptYXg8c2l6ZV90Pigx
NlVMLCBzdGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVh
c2VEZWxheSAtIChmcmVlUGFnZXMgLyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKICNlbHNlCi0g
ICAgICBzY2F2ZW5nZV9jb3VudGVyXyA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3RkOjptaW48
c2l6ZV90PihrRGVmYXVsdFJlbGVhc2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkgLSAoZnJl
ZV9wYWdlc18gLyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKKyAgICAgICAgICAgIHNjYXZlbmdl
Q291bnRlciA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90PihrRGVmYXVs
dFJlbGVhc2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkgLSAoZnJlZVBhZ2VzIC8ga0RlZmF1
bHRSZWxlYXNlRGVsYXkpKSk7CiAjZW5kaWYKIAotICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdl
cyAmJiAhRExMX0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwpKQotICAgICAgICBzY2F2ZW5nZV9pbmRl
eF8gPSBpbmRleCAtIDE7Ci0gICAgICBlbHNlCi0gICAgICAgIHNjYXZlbmdlX2luZGV4XyA9IGlu
ZGV4OwotICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdlcyAm
JiAhRExMX0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwpKQorICAgICAgICAgICAgICAgIHNjYXZlbmdl
SW5kZXggPSBpbmRleCAtIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2Nh
dmVuZ2VJbmRleCA9IGluZGV4OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGluZGV4Kys7CiAgICAgfQotICAgIGluZGV4Kys7Ci0gIH0KIAotICAvLyBOb3RoaW5nIHRv
IHNjYXZlbmdlLCBkZWxheSBmb3IgYSB3aGlsZQotICBzY2F2ZW5nZV9jb3VudGVyXyA9IGtEZWZh
dWx0UmVsZWFzZURlbGF5OworICAgIC8vIE5vdGhpbmcgdG8gc2NhdmVuZ2UsIGRlbGF5IGZvciBh
IHdoaWxlCisgICAgc2NhdmVuZ2VDb3VudGVyID0ga0RlZmF1bHRSZWxlYXNlRGVsYXk7CiB9CiAj
ZW5kaWYKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3MoU3Bhbiog
c3Bhbiwgc2l6ZV90IHNjKSB7Ci0gIC8vIEFzc29jaWF0ZSBzcGFuIG9iamVjdCB3aXRoIGFsbCBp
bnRlcmlvciBwYWdlcyBhcyB3ZWxsCi0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFTU0VSVChH
ZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKLSAgQVNTRVJUKEdldERlc2NyaXB0
b3Ioc3Bhbi0+c3RhcnQrc3Bhbi0+bGVuZ3RoLTEpID09IHNwYW4pOwotICBFdmVudChzcGFuLCAn
QycsIHNjKTsKLSAgc3Bhbi0+c2l6ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihz
Yyk7Ci0gIGZvciAoTGVuZ3RoIGkgPSAxOyBpIDwgc3Bhbi0+bGVuZ3RoLTE7IGkrKykgewotICAg
IHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCtpLCBzcGFuKTsKLSAgfQordm9pZCBUQ01hbGxvY1Bh
Z2VIZWFwOjpSZWdpc3RlclNpemVDbGFzcyhTcGFuKiBzcGFuLCBzaXplX3Qgc2MpCit7CisgICAg
Ly8gQXNzb2NpYXRlIHNwYW4gb2JqZWN0IHdpdGggYWxsIGludGVyaW9yIHBhZ2VzIGFzIHdlbGwK
KyAgICBBU1NFUlQoIXNwYW4tPmZyZWUpOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4t
PnN0YXJ0KSA9PSBzcGFuKTsKKyAgICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCtz
cGFuLT5sZW5ndGgtMSkgPT0gc3Bhbik7CisgICAgRXZlbnQoc3BhbiwgJ0MnLCBzYyk7CisgICAg
c3Bhbi0+c2l6ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzYyk7CisgICAgZm9y
IChMZW5ndGggaSA9IDE7IGkgPCBzcGFuLT5sZW5ndGgtMTsgaSsrKQorICAgICAgICBwYWdlbWFw
LnNldChzcGFuLT5zdGFydCtpLCBzcGFuKTsKIH0KICAgICAKICNpZmRlZiBXVEZfQ0hBTkdFUwot
c2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpSZXR1cm5lZEJ5dGVzKCkgY29uc3Qgeworc2l6ZV90
IFRDTWFsbG9jUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMoKSBjb25zdAorewogICAgIHNpemVfdCBy
ZXN1bHQgPSAwOwogICAgIGZvciAodW5zaWduZWQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykg
ewotICAgICAgICBjb25zdCBpbnQgcl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5yZXR1
cm5lZCk7Ci0gICAgICAgIHVuc2lnbmVkIHJfcGFnZXMgPSBzICogcl9sZW5ndGg7Ci0gICAgICAg
IHJlc3VsdCArPSByX3BhZ2VzIDw8IGtQYWdlU2hpZnQ7CisgICAgICAgIGNvbnN0IGludCByTGVu
Z3RoID0gRExMTGVuZ3RoKCZmcmVlU3Bhbkxpc3Rbc10ucmV0dXJuZWQpOworICAgICAgICB1bnNp
Z25lZCByUGFnZXMgPSBzICogckxlbmd0aDsKKyAgICAgICAgcmVzdWx0ICs9IHJQYWdlcyA8PCBr
UGFnZVNoaWZ0OwogICAgIH0KICAgICAKLSAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZV8ucmV0dXJu
ZWQubmV4dDsgcyAhPSAmbGFyZ2VfLnJldHVybmVkOyBzID0gcy0+bmV4dCkKKyAgICBmb3IgKFNw
YW4qIHMgPSBsYXJnZS5yZXR1cm5lZC5uZXh0OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsgcyA9IHMt
Pm5leHQpCiAgICAgICAgIHJlc3VsdCArPSBzLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyBk
b3VibGUgUGFnZXNUb01CKHVpbnQ2NF90IHBhZ2VzKSB7CitzdGF0aWMgZG91YmxlIFBhZ2VzVG9N
Qih1aW50NjRfdCBwYWdlcykKK3sKICAgcmV0dXJuIChwYWdlcyA8PCBrUGFnZVNoaWZ0KSAvIDEw
NDg1NzYuMDsKIH0KIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6RHVtcChUQ01hbGxvY19Qcmlu
dGVyKiBvdXQpIHsKLSAgaW50IG5vbmVtcHR5X3NpemVzID0gMDsKLSAgZm9yIChpbnQgcyA9IDA7
IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLm5v
cm1hbCkgfHwgIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5yZXR1cm5lZCkpIHsKLSAgICAgIG5vbmVt
cHR5X3NpemVzKys7Ci0gICAgfQotICB9Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICBvdXQtPnByaW50ZigiUGFn
ZUhlYXA6ICVkIHNpemVzOyAlNi4xZiBNQiBmcmVlXG4iLAotICAgICAgICAgICAgICBub25lbXB0
eV9zaXplcywgUGFnZXNUb01CKGZyZWVfcGFnZXNfKSk7Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICB1aW50NjRf
dCB0b3RhbF9ub3JtYWwgPSAwOwotICB1aW50NjRfdCB0b3RhbF9yZXR1cm5lZCA9IDA7Ci0gIGZv
ciAoaW50IHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAgICBjb25zdCBpbnQgbl9sZW5n
dGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5ub3JtYWwpOwotICAgIGNvbnN0IGludCByX2xlbmd0
aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLnJldHVybmVkKTsKLSAgICBpZiAobl9sZW5ndGggKyBy
X2xlbmd0aCA+IDApIHsKLSAgICAgIHVpbnQ2NF90IG5fcGFnZXMgPSBzICogbl9sZW5ndGg7Ci0g
ICAgICB1aW50NjRfdCByX3BhZ2VzID0gcyAqIHJfbGVuZ3RoOwotICAgICAgdG90YWxfbm9ybWFs
ICs9IG5fcGFnZXM7Ci0gICAgICB0b3RhbF9yZXR1cm5lZCArPSByX3BhZ2VzOwotICAgICAgb3V0
LT5wcmludGYoIiU2dSBwYWdlcyAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0i
Ci0gICAgICAgICAgICAgICAgICAiOyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1CIGN1bVxu
IiwKLSAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAobl9sZW5ndGggKyBy
X2xlbmd0aCksCi0gICAgICAgICAgICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJfcGFnZXMp
LAotICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX25vcm1hbCArIHRvdGFsX3JldHVy
bmVkKSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihyX3BhZ2VzKSwKLSAgICAgICAgICAg
ICAgICAgIFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOwordm9pZCBUQ01hbGxvY1BhZ2VIZWFw
OjpEdW1wKFRDTWFsbG9jX1ByaW50ZXIqIG91dCkKK3sKKyAgICBpbnQgbm9uZW1wdHlTaXplcyA9
IDA7CisgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykKKyAgICAgICAgaWYg
KCFETExfSXNFbXB0eSgmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbCkgfHwgIURMTF9Jc0VtcHR5KCZm
cmVlU3Bhbkxpc3Rbc10ucmV0dXJuZWQpKQorICAgICAgICAgICAgbm9uZW1wdHlTaXplcysrOwor
ICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS1cbiIpOworICAgIG91dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQgc2l6ZXM7ICU2LjFm
IE1CIGZyZWVcbiIsCisgICAgICAgICAgICAgICAgbm9uZW1wdHlTaXplcywgUGFnZXNUb01CKGZy
ZWVQYWdlcykpOworICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgIHVpbnQ2NF90IHRvdGFsTm9ybWFsID0gMDsK
KyAgICB1aW50NjRfdCB0b3RhbFJldHVybmVkID0gMDsKKyAgICBmb3IgKGludCBzID0gMDsgcyA8
IGtNYXhQYWdlczsgcysrKSB7CisgICAgICAgIGNvbnN0IGludCBuTGVuZ3RoID0gRExMTGVuZ3Ro
KCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsKTsKKyAgICAgICAgY29uc3QgaW50IHJMZW5ndGggPSBE
TExMZW5ndGgoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCk7CisgICAgICAgIGlmIChuTGVuZ3Ro
ICsgckxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG5QYWdlcyA9IHMgKiBuTGVu
Z3RoOworICAgICAgICAgICAgdWludDY0X3QgclBhZ2VzID0gcyAqIHJMZW5ndGg7CisgICAgICAg
ICAgICB0b3RhbE5vcm1hbCArPSBuUGFnZXM7CisgICAgICAgICAgICB0b3RhbFJldHVybmVkICs9
IHJQYWdlczsKKyAgICAgICAgICAgIG91dC0+cHJpbnRmKCIlNnUgcGFnZXMgKiAlNnUgc3BhbnMg
fiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtIgorICAgICAgICAgICAgICAgICAgICAgICAgIjsgdW5t
YXBwZWQ6ICU2LjFmIE1COyAlNi4xZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBzLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5MZW5ndGggKyByTGVuZ3RoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihuUGFnZXMgKyByUGFnZXMpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsTm9ybWFsICsgdG90YWxSZXR1cm5lZCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBQYWdlc1RvTUIoclBhZ2VzKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbFJldHVybmVkKSk7CisgICAgICAgIH0KICAgICB9Ci0g
IH0KIAotICB1aW50NjRfdCBuX3BhZ2VzID0gMDsKLSAgdWludDY0X3Qgcl9wYWdlcyA9IDA7Ci0g
IGludCBuX3NwYW5zID0gMDsKLSAgaW50IHJfc3BhbnMgPSAwOwotICBvdXQtPnByaW50ZigiTm9y
bWFsIGxhcmdlIHNwYW5zOlxuIik7Ci0gIGZvciAoU3BhbiogcyA9IGxhcmdlXy5ub3JtYWwubmV4
dDsgcyAhPSAmbGFyZ2VfLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnByaW50Zigi
ICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAgICAgIHMt
Pmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkpOwotICAgIG5fcGFnZXMgKz0gcy0+bGVuZ3Ro
OwotICAgIG5fc3BhbnMrKzsKLSAgfQotICBvdXQtPnByaW50ZigiVW5tYXBwZWQgbGFyZ2Ugc3Bh
bnM6XG4iKTsKLSAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLnJldHVybmVkLm5leHQ7IHMgIT0gJmxh
cmdlXy5yZXR1cm5lZDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIg
UFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwg
UGFnZXNUb01CKHMtPmxlbmd0aCkpOwotICAgIHJfcGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIHJf
c3BhbnMrKzsKLSAgfQotICB0b3RhbF9ub3JtYWwgKz0gbl9wYWdlczsKLSAgdG90YWxfcmV0dXJu
ZWQgKz0gcl9wYWdlczsKLSAgb3V0LT5wcmludGYoIj4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+
ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0iCi0gICAgICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4x
ZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAotICAgICAgICAgICAgICAobl9zcGFucyArIHJfc3BhbnMp
LAotICAgICAgICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJfcGFnZXMpLAotICAgICAgICAg
ICAgICBQYWdlc1RvTUIodG90YWxfbm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAotICAgICAgICAg
ICAgICBQYWdlc1RvTUIocl9wYWdlcyksCi0gICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9y
ZXR1cm5lZCkpOworICAgIHVpbnQ2NF90IG5QYWdlcyA9IDA7CisgICAgdWludDY0X3QgclBhZ2Vz
ID0gMDsKKyAgICBpbnQgblNwYW5zID0gMDsKKyAgICBpbnQgclNwYW5zID0gMDsKKyAgICBvdXQt
PnByaW50ZigiTm9ybWFsIGxhcmdlIHNwYW5zOlxuIik7CisgICAgZm9yIChTcGFuKiBzID0gbGFy
Z2Uubm9ybWFsLm5leHQ7IHMgIT0gJmxhcmdlLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsKKyAgICAg
ICAgb3V0LT5wcmludGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxuIiwKKyAg
ICAgICAgICAgICAgICAgICAgcy0+bGVuZ3RoLCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7CisgICAg
ICAgIG5QYWdlcyArPSBzLT5sZW5ndGg7CisgICAgICAgIG5TcGFucysrOworICAgIH0KKyAgICBv
dXQtPnByaW50ZigiVW5tYXBwZWQgbGFyZ2Ugc3BhbnM6XG4iKTsKKyAgICBmb3IgKFNwYW4qIHMg
PSBsYXJnZS5yZXR1cm5lZC5uZXh0OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsgcyA9IHMtPm5leHQp
IHsKKyAgICAgICAgb3V0LT5wcmludGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBN
QlxuIiwKKyAgICAgICAgICAgICAgICAgICAgcy0+bGVuZ3RoLCBQYWdlc1RvTUIocy0+bGVuZ3Ro
KSk7CisgICAgICAgIHJQYWdlcyArPSBzLT5sZW5ndGg7CisgICAgICAgIHJTcGFucysrOworICAg
IH0KKyAgICB0b3RhbE5vcm1hbCArPSBuUGFnZXM7CisgICAgdG90YWxSZXR1cm5lZCArPSByUGFn
ZXM7CisgICAgb3V0LT5wcmludGYoIj4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+ICU2LjFmIE1C
OyAlNi4xZiBNQiBjdW0iCisgICAgICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAl
Ni4xZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAgKG5TcGFucyArIHJTcGFucyksCisgICAg
ICAgICAgICAgICAgUGFnZXNUb01CKG5QYWdlcyArIHJQYWdlcyksCisgICAgICAgICAgICAgICAg
UGFnZXNUb01CKHRvdGFsTm9ybWFsICsgdG90YWxSZXR1cm5lZCksCisgICAgICAgICAgICAgICAg
UGFnZXNUb01CKHJQYWdlcyksCisgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsUmV0dXJu
ZWQpKTsKIH0KICNlbmRpZgogCi1ib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpHcm93SGVhcChMZW5n
dGggbikgewotICBBU1NFUlQoa01heFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxvYyk7Ci0gIGlmIChu
ID4ga01heFZhbGlkUGFnZXMpIHJldHVybiBmYWxzZTsKLSAgTGVuZ3RoIGFzayA9IChuPmtNaW5T
eXN0ZW1BbGxvYykgPyBuIDogc3RhdGljX2Nhc3Q8TGVuZ3RoPihrTWluU3lzdGVtQWxsb2MpOwot
ICBzaXplX3QgYWN0dWFsX3NpemU7Ci0gIHZvaWQqIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9j
KGFzayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Ci0gIGlmIChwdHIg
PT0gTlVMTCkgewotICAgIGlmIChuIDwgYXNrKSB7Ci0gICAgICAvLyBUcnkgZ3Jvd2luZyBqdXN0
ICJuIiBwYWdlcwotICAgICAgYXNrID0gbjsKLSAgICAgIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFs
bG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Citib29sIFRD
TWFsbG9jUGFnZUhlYXA6Okdyb3dIZWFwKExlbmd0aCBuKQoreworICAgIEFTU0VSVChrTWF4UGFn
ZXMgPj0ga01pblN5c3RlbUFsbG9jKTsKKyAgICBpZiAobiA+IGtNYXhWYWxpZFBhZ2VzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgTGVuZ3RoIGFzayA9IChuPmtNaW5TeXN0ZW1BbGxvYykg
PyBuIDogc3RhdGljX2Nhc3Q8TGVuZ3RoPihrTWluU3lzdGVtQWxsb2MpOworICAgIHNpemVfdCBh
Y3R1YWxTaXplOworICAgIHZvaWQqIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFzayA8PCBr
UGFnZVNoaWZ0LCAmYWN0dWFsU2l6ZSwga1BhZ2VTaXplKTsKKyAgICBpZiAoIXB0cikgeworICAg
ICAgICBpZiAobiA8IGFzaykgeworICAgICAgICAgICAgLy8gVHJ5IGdyb3dpbmcganVzdCAibiIg
cGFnZXMKKyAgICAgICAgICAgIGFzayA9IG47CisgICAgICAgICAgICBwdHIgPSBUQ01hbGxvY19T
eXN0ZW1BbGxvYyhhc2sgPDwga1BhZ2VTaGlmdCwgJmFjdHVhbFNpemUsIGtQYWdlU2l6ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGFzayA9IGFj
dHVhbF9zaXplID4+IGtQYWdlU2hpZnQ7CisgICAgYXNrID0gYWN0dWFsU2l6ZSA+PiBrUGFnZVNo
aWZ0OwogCi0gIHVpbnQ2NF90IG9sZF9zeXN0ZW1fYnl0ZXMgPSBzeXN0ZW1fYnl0ZXNfOwotICBz
eXN0ZW1fYnl0ZXNfICs9IChhc2sgPDwga1BhZ2VTaGlmdCk7Ci0gIGNvbnN0IFBhZ2VJRCBwID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgPj4ga1BhZ2VTaGlmdDsKLSAgQVNTRVJU
KHAgPiAwKTsKKyAgICB1aW50NjRfdCBvbGRTeXN0ZW1CeXRlcyA9IHN5c3RlbUJ5dGVzOworICAg
IHN5c3RlbUJ5dGVzICs9IChhc2sgPDwga1BhZ2VTaGlmdCk7CisgICAgY29uc3QgUGFnZUlEIHAg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIEFT
U0VSVChwID4gMCk7CiAKLSAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGEgbG90IG9mIHBhZ2VzIGFs
bG9jYXRlZCwganVzdCBwcmUgYWxsb2NhdGUgYSBidW5jaCBvZgotICAvLyBtZW1vcnkgZm9yIHRo
ZSBwYWdlIG1hcC4gVGhpcyBwcmV2ZW50cyBmcmFnbWVudGF0aW9uIGJ5IHBhZ2VtYXAgbWV0YWRh
dGEKLSAgLy8gd2hlbiBhIHByb2dyYW0ga2VlcHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJn
ZSBibG9ja3MuCi0KLSAgaWYgKG9sZF9zeXN0ZW1fYnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRp
b25UaHJlc2hvbGQKLSAgICAgICYmIHN5c3RlbV9ieXRlc18gPj0ga1BhZ2VNYXBCaWdBbGxvY2F0
aW9uVGhyZXNob2xkKSB7Ci0gICAgcGFnZW1hcF8uUHJlYWxsb2NhdGVNb3JlTWVtb3J5KCk7Ci0g
IH0KKyAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgYSBsb3Qgb2YgcGFnZXMgYWxsb2NhdGVkLCBq
dXN0IHByZSBhbGxvY2F0ZSBhIGJ1bmNoIG9mCisgICAgLy8gbWVtb3J5IGZvciB0aGUgcGFnZSBt
YXAuIFRoaXMgcHJldmVudHMgZnJhZ21lbnRhdGlvbiBieSBwYWdlbWFwIG1ldGFkYXRhCisgICAg
Ly8gd2hlbiBhIHByb2dyYW0ga2VlcHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJnZSBibG9j
a3MuCisKKyAgICBpZiAob2xkU3lzdGVtQnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJl
c2hvbGQKKyAgICAgICAgJiYgc3lzdGVtQnl0ZXMgPj0ga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhy
ZXNob2xkKQorICAgICAgICBwYWdlbWFwLlByZWFsbG9jYXRlTW9yZU1lbW9yeSgpOworCisgICAg
Ly8gTWFrZSBzdXJlIHBhZ2VtYXAgaGFzIGVudHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3IHBhZ2Vz
LgorICAgIC8vIFBsdXMgZW5zdXJlIG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciBzbyBjb2FsZXNj
aW5nIGNvZGUKKyAgICAvLyBkb2VzIG5vdCBuZWVkIGJvdW5kcy1jaGVja2luZy4KKyAgICBpZiAo
cGFnZW1hcC5FbnN1cmUocC0xLCBhc2srMikpIHsKKyAgICAgICAgLy8gUHJldGVuZCB0aGUgbmV3
IGFyZWEgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIERlbGV0ZSgpIGl0IHRvCisgICAgICAgIC8vIGNh
dXNlIGFueSBuZWNlc3NhcnkgY29hbGVzY2luZyB0byBvY2N1ci4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gV2UgZG8gbm90IGFkanVzdCBmcmVlUGFnZXMgaGVyZSBzaW5jZSBEZWxldGUoKSB3aWxs
IGRvIGl0IGZvciB1cy4KKyAgICAgICAgU3Bhbiogc3BhbiA9IE5ld1NwYW4ocCwgYXNrKTsKKyAg
ICAgICAgUmVjb3JkU3BhbihzcGFuKTsKKyAgICAgICAgRGVsZXRlKHNwYW4pOworICAgICAgICBB
U1NFUlQoQ2hlY2soKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAvLyBNYWtl
IHN1cmUgcGFnZW1hcF8gaGFzIGVudHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3IHBhZ2VzLgotICAv
LyBQbHVzIGVuc3VyZSBvbmUgYmVmb3JlIGFuZCBvbmUgYWZ0ZXIgc28gY29hbGVzY2luZyBjb2Rl
Ci0gIC8vIGRvZXMgbm90IG5lZWQgYm91bmRzLWNoZWNraW5nLgotICBpZiAocGFnZW1hcF8uRW5z
dXJlKHAtMSwgYXNrKzIpKSB7Ci0gICAgLy8gUHJldGVuZCB0aGUgbmV3IGFyZWEgaXMgYWxsb2Nh
dGVkIGFuZCB0aGVuIERlbGV0ZSgpIGl0IHRvCi0gICAgLy8gY2F1c2UgYW55IG5lY2Vzc2FyeSBj
b2FsZXNjaW5nIHRvIG9jY3VyLgotICAgIC8vCi0gICAgLy8gV2UgZG8gbm90IGFkanVzdCBmcmVl
X3BhZ2VzXyBoZXJlIHNpbmNlIERlbGV0ZSgpIHdpbGwgZG8gaXQgZm9yIHVzLgotICAgIFNwYW4q
IHNwYW4gPSBOZXdTcGFuKHAsIGFzayk7Ci0gICAgUmVjb3JkU3BhbihzcGFuKTsKLSAgICBEZWxl
dGUoc3Bhbik7Ci0gICAgQVNTRVJUKENoZWNrKCkpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVs
c2UgewotICAgIC8vIFdlIGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2l0aGluICJwYWdlbWFw
XyIKKyAgICAvLyBXZSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHdpdGhpbiAicGFnZW1hcCIK
ICAgICAvLyBUT0RPOiBPbmNlIHdlIGNhbiByZXR1cm4gbWVtb3J5IHRvIHRoZSBzeXN0ZW0sIHJl
dHVybiB0aGUgbmV3IHNwYW4KICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KIH0KIAotYm9vbCBUQ01h
bGxvY19QYWdlSGVhcDo6Q2hlY2soKSB7Citib29sIFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrKCkK
K3sKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIHNpemVf
dCB0b3RhbEZyZWVDb21taXR0ZWQgPSAwOworICAgIHNpemVfdCB0b3RhbEZyZWVDb21taXR0ZWQg
PSAwOwogI2VuZGlmCi0gIEFTU0VSVChmcmVlX1swXS5ub3JtYWwubmV4dCA9PSAmZnJlZV9bMF0u
bm9ybWFsKTsKLSAgQVNTRVJUKGZyZWVfWzBdLnJldHVybmVkLm5leHQgPT0gJmZyZWVfWzBdLnJl
dHVybmVkKTsKKyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLm5vcm1hbC5uZXh0ID09ICZmcmVl
U3Bhbkxpc3RbMF0ubm9ybWFsKTsKKyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLnJldHVybmVk
Lm5leHQgPT0gJmZyZWVTcGFuTGlzdFswXS5yZXR1cm5lZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRf
VEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICB0b3RhbEZyZWVDb21taXR0ZWQgPSBDaGVja0xp
c3QoJmxhcmdlXy5ub3JtYWwsIGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOworICAgIHRv
dGFsRnJlZUNvbW1pdHRlZCA9IENoZWNrTGlzdCgmbGFyZ2Uubm9ybWFsLCBrTWF4UGFnZXMsIDEw
MDAwMDAwMDAsIGZhbHNlKTsKICNlbHNlCi0gIENoZWNrTGlzdCgmbGFyZ2VfLm5vcm1hbCwga01h
eFBhZ2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7CisgICAgQ2hlY2tMaXN0KCZsYXJnZS5ub3JtYWws
IGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOwogI2VuZGlmCi0gICAgQ2hlY2tMaXN0KCZs
YXJnZV8ucmV0dXJuZWQsIGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgdHJ1ZSk7Ci0gIGZvciAoTGVu
Z3RoIHMgPSAxOyBzIDwga01heFBhZ2VzOyBzKyspIHsKKyAgICBDaGVja0xpc3QoJmxhcmdlLnJl
dHVybmVkLCBrTWF4UGFnZXMsIDEwMDAwMDAwMDAsIHRydWUpOworICAgIGZvciAoTGVuZ3RoIHMg
PSAxOyBzIDwga01heFBhZ2VzOyBzKyspIHsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCi0gICAgdG90YWxGcmVlQ29tbWl0dGVkICs9IENoZWNrTGlzdCgmZnJl
ZV9bc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CisgICAgICAgIHRvdGFsRnJlZUNvbW1pdHRlZCAr
PSBDaGVja0xpc3QoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKICNlbHNl
Ci0gICAgQ2hlY2tMaXN0KCZmcmVlX1tzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKKyAgICAgICAg
Q2hlY2tMaXN0KCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CiAjZW5kaWYK
LSAgICBDaGVja0xpc3QoJmZyZWVfW3NdLnJldHVybmVkLCBzLCBzLCB0cnVlKTsKLSAgfQorICAg
ICAgICBDaGVja0xpc3QoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCwgcywgcywgdHJ1ZSk7Cisg
ICAgfQogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgQVNT
RVJUKHRvdGFsRnJlZUNvbW1pdHRlZCA9PSBmcmVlX2NvbW1pdHRlZF9wYWdlc18pOworICAgIEFT
U0VSVCh0b3RhbEZyZWVDb21taXR0ZWQgPT0gZnJlZUNvbW1pdHRlZFBhZ2VzKTsKICNlbmRpZgot
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIEFTU0VSVF9ESVNBQkxF
RAotc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiosIExlbmd0aCwgTGVu
Z3RoLCBib29sKSB7Ci0gIHJldHVybiAwOworc2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNr
TGlzdChTcGFuKiwgTGVuZ3RoLCBMZW5ndGgsIGJvb2wpCit7CisgICAgcmV0dXJuIDA7CiB9CiAj
ZWxzZQotc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVu
Z3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCkgewotICBz
aXplX3QgZnJlZUNvdW50ID0gMDsKLSAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBs
aXN0OyBzID0gcy0+bmV4dCkgewotICAgIENIRUNLX0NPTkRJVElPTihzLT5mcmVlKTsKLSAgICBD
SEVDS19DT05ESVRJT04ocy0+bGVuZ3RoID49IG1pbl9wYWdlcyk7Ci0gICAgQ0hFQ0tfQ09ORElU
SU9OKHMtPmxlbmd0aCA8PSBtYXhfcGFnZXMpOwotICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNj
cmlwdG9yKHMtPnN0YXJ0KSA9PSBzKTsKLSAgICBDSEVDS19DT05ESVRJT04oR2V0RGVzY3JpcHRv
cihzLT5zdGFydCtzLT5sZW5ndGgtMSkgPT0gcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmRl
Y29tbWl0dGVkID09IGRlY29tbWl0dGVkKTsKLSAgICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOwot
ICB9Ci0gIHJldHVybiBmcmVlQ291bnQ7CitzaXplX3QgVENNYWxsb2NQYWdlSGVhcDo6Q2hlY2tM
aXN0KFNwYW4qIGxpc3QsIExlbmd0aCBtaW5QYWdlcywgTGVuZ3RoIG1heFBhZ2VzLCBib29sIGRl
Y29tbWl0dGVkKQoreworICAgIHNpemVfdCBmcmVlQ291bnQgPSAwOworICAgIGZvciAoU3Bhbiog
cyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlzdDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgQ0hFQ0tf
Q09ORElUSU9OKHMtPmZyZWUpOworICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoID49
IG1pblBhZ2VzKTsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0aCA8PSBtYXhQYWdl
cyk7CisgICAgICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0KSA9PSBz
KTsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQrcy0+bGVu
Z3RoLTEpID09IHMpOworICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+ZGVjb21taXR0ZWQgPT0g
ZGVjb21taXR0ZWQpOworICAgICAgICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOworICAgIH0KKyAg
ICByZXR1cm4gZnJlZUNvdW50OwogfQogI2VuZGlmCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6
OlJlbGVhc2VGcmVlTGlzdChTcGFuKiBsaXN0LCBTcGFuKiByZXR1cm5lZCkgewotICAvLyBXYWxr
IGJhY2t3YXJkcyB0aHJvdWdoIGxpc3Qgc28gdGhhdCB3aGVuIHdlIHB1c2ggdGhlc2UKLSAgLy8g
c3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgordm9p
ZCBUQ01hbGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QoU3BhbiogbGlzdCwgU3BhbiogcmV0
dXJuZWQpCit7CisgICAgLy8gV2FsayBiYWNrd2FyZHMgdGhyb3VnaCBsaXN0IHNvIHRoYXQgd2hl
biB3ZSBwdXNoIHRoZXNlCisgICAgLy8gc3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlzdCwgd2Ug
cHJlc2VydmUgdGhlIG9yZGVyLgogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5H
RV9NRU1PUlkKLSAgc2l6ZV90IGZyZWVQYWdlUmVkdWN0aW9uID0gMDsKKyAgICBzaXplX3QgZnJl
ZVBhZ2VSZWR1Y3Rpb24gPSAwOwogI2VuZGlmCiAKLSAgd2hpbGUgKCFETExfSXNFbXB0eShsaXN0
KSkgewotICAgIFNwYW4qIHMgPSBsaXN0LT5wcmV2OworICAgIHdoaWxlICghRExMX0lzRW1wdHko
bGlzdCkpIHsKKyAgICAgICAgU3BhbiogcyA9IGxpc3QtPnByZXY7CiAKLSAgICBETExfUmVtb3Zl
KHMpOwotICAgIHMtPmRlY29tbWl0dGVkID0gdHJ1ZTsKLSAgICBETExfUHJlcGVuZChyZXR1cm5l
ZCwgcyk7Ci0gICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHNpemVfdD4ocy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAgICAgRExM
UmVtb3ZlKHMpOworICAgICAgICBzLT5kZWNvbW1pdHRlZCA9IHRydWU7CisgICAgICAgIERMTFBy
ZXBlbmQocmV0dXJuZWQsIHMpOworICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHMtPmxlbmd0aCA8PCBrUGFn
ZVNoaWZ0KSk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQot
ICAgIGZyZWVQYWdlUmVkdWN0aW9uICs9IHMtPmxlbmd0aDsKKyAgICAgICAgZnJlZVBhZ2VSZWR1
Y3Rpb24gKz0gcy0+bGVuZ3RoOwogI2VuZGlmCi0gIH0KKyAgICB9CiAKICNpZiBVU0VfQkFDS0dS
T1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNf
IC09IGZyZWVQYWdlUmVkdWN0aW9uOwotICAgIGlmIChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPCBt
aW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pIAotICAgICAgICBt
aW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1p
dHRlZF9wYWdlc187CisgICAgZnJlZUNvbW1pdHRlZFBhZ2VzIC09IGZyZWVQYWdlUmVkdWN0aW9u
OworICAgIGlmIChmcmVlQ29tbWl0dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5j
ZUxhc3RTY2F2ZW5nZSkgCisgICAgICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNj
YXZlbmdlID0gZnJlZUNvbW1pdHRlZFBhZ2VzOwogI2VuZGlmCiB9CiAKLXZvaWQgVENNYWxsb2Nf
UGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMoKSB7Ci0gIGZvciAoTGVuZ3RoIHMgPSAwOyBzIDwg
a01heFBhZ2VzOyBzKyspIHsKLSAgICBSZWxlYXNlRnJlZUxpc3QoJmZyZWVfW3NdLm5vcm1hbCwg
JmZyZWVfW3NdLnJldHVybmVkKTsKLSAgfQotICBSZWxlYXNlRnJlZUxpc3QoJmxhcmdlXy5ub3Jt
YWwsICZsYXJnZV8ucmV0dXJuZWQpOwotICBBU1NFUlQoQ2hlY2soKSk7Cit2b2lkIFRDTWFsbG9j
UGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMoKQoreworICAgIGZvciAoTGVuZ3RoIHMgPSAwOyBz
IDwga01heFBhZ2VzOyBzKyspCisgICAgICAgIFJlbGVhc2VGcmVlTGlzdCgmZnJlZVNwYW5MaXN0
W3NdLm5vcm1hbCwgJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCk7CisgICAgUmVsZWFzZUZyZWVM
aXN0KCZsYXJnZS5ub3JtYWwsICZsYXJnZS5yZXR1cm5lZCk7CisgICAgQVNTRVJUKENoZWNrKCkp
OwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZyZWUgbGlzdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNz
IFRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0IHsKLSBwcml2YXRlOgotICB2b2lkKiAgICBs
aXN0XzsgICAgICAgLy8gTGlua2VkIGxpc3Qgb2Ygbm9kZXMKLSAgdWludDE2X3QgbGVuZ3RoXzsg
ICAgIC8vIEN1cnJlbnQgbGVuZ3RoCi0gIHVpbnQxNl90IGxvd2F0ZXJfOyAgICAvLyBMb3cgd2F0
ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKK2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlz
dCB7Citwcml2YXRlOgorICAgIHZvaWQqIGxpc3Q7IC8vIExpbmtlZCBsaXN0IG9mIG5vZGVzCisg
ICAgdWludDE2X3QgY3VycmVudExlbmd0aDsgLy8gQ3VycmVudCBsZW5ndGgKKyAgICB1aW50MTZf
dCBsb3dhdGVyOyAvLyBMb3cgd2F0ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKIAotIHB1YmxpYzoK
LSAgdm9pZCBJbml0KCkgewotICAgIGxpc3RfID0gTlVMTDsKLSAgICBsZW5ndGhfID0gMDsKLSAg
ICBsb3dhdGVyXyA9IDA7Ci0gIH0KK3B1YmxpYzoKKyAgICB2b2lkIEluaXQoKQorICAgIHsKKyAg
ICAgICAgbGlzdCA9IDA7CisgICAgICAgIGN1cnJlbnRMZW5ndGggPSAwOworICAgICAgICBsb3dh
dGVyID0gMDsKKyAgICB9CiAKLSAgLy8gUmV0dXJuIGN1cnJlbnQgbGVuZ3RoIG9mIGxpc3QKLSAg
aW50IGxlbmd0aCgpIGNvbnN0IHsKLSAgICByZXR1cm4gbGVuZ3RoXzsKLSAgfQorICAgIC8vIFJl
dHVybiBjdXJyZW50IGxlbmd0aCBvZiBsaXN0CisgICAgaW50IGxlbmd0aCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gY3VycmVudExlbmd0aDsKKyAgICB9CiAKLSAgLy8gSXMgbGlzdCBl
bXB0eT8KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbGlzdF8gPT0gTlVMTDsK
LSAgfQorICAgIC8vIElzIGxpc3QgZW1wdHk/CisgICAgYm9vbCBlbXB0eSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gIWxpc3Q7CisgICAgfQogCi0gIC8vIExvdy13YXRlciBtYXJrIG1h
bmFnZW1lbnQKLSAgaW50IGxvd3dhdGVybWFyaygpIGNvbnN0IHsgcmV0dXJuIGxvd2F0ZXJfOyB9
Ci0gIHZvaWQgY2xlYXJfbG93d2F0ZXJtYXJrKCkgeyBsb3dhdGVyXyA9IGxlbmd0aF87IH0KLQot
ICBBTFdBWVNfSU5MSU5FIHZvaWQgUHVzaCh2b2lkKiBwdHIpIHsKLSAgICBTTExfUHVzaCgmbGlz
dF8sIHB0cik7Ci0gICAgbGVuZ3RoXysrOwotICB9CisgICAgLy8gTG93LXdhdGVyIG1hcmsgbWFu
YWdlbWVudAorICAgIGludCBsb3d3YXRlcm1hcmsoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvd2F0ZXI7CisgICAgfQorICAgIHZvaWQgY2xlYXJMb3d3YXRlcm1hcmsoKQorICAgIHsK
KyAgICAgICAgbG93YXRlciA9IGN1cnJlbnRMZW5ndGg7CisgICAgfQogCi0gIHZvaWQgUHVzaFJh
bmdlKGludCBOLCB2b2lkICpzdGFydCwgdm9pZCAqZW5kKSB7Ci0gICAgU0xMX1B1c2hSYW5nZSgm
bGlzdF8sIHN0YXJ0LCBlbmQpOwotICAgIGxlbmd0aF8gPSBsZW5ndGhfICsgc3RhdGljX2Nhc3Q8
dWludDE2X3Q+KE4pOwotICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIFB1c2godm9pZCogcHRy
KQorICAgIHsKKyAgICAgICAgU0xMUHVzaCgmbGlzdCwgcHRyKTsKKyAgICAgICAgY3VycmVudExl
bmd0aCsrOworICAgIH0KIAotICB2b2lkIFBvcFJhbmdlKGludCBOLCB2b2lkICoqc3RhcnQsIHZv
aWQgKiplbmQpIHsKLSAgICBTTExfUG9wUmFuZ2UoJmxpc3RfLCBOLCBzdGFydCwgZW5kKTsKLSAg
ICBBU1NFUlQobGVuZ3RoXyA+PSBOKTsKLSAgICBsZW5ndGhfID0gbGVuZ3RoXyAtIHN0YXRpY19j
YXN0PHVpbnQxNl90PihOKTsKLSAgICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dhdGVyXyA9
IGxlbmd0aF87Ci0gIH0KKyAgICB2b2lkIFB1c2hSYW5nZShpbnQgTiwgdm9pZCAqc3RhcnQsIHZv
aWQgKmVuZCkKKyAgICB7CisgICAgICAgIFNMTFB1c2hSYW5nZSgmbGlzdCwgc3RhcnQsIGVuZCk7
CisgICAgICAgIGN1cnJlbnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoICsgc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KE4pOworICAgIH0KIAotICBBTFdBWVNfSU5MSU5FIHZvaWQqIFBvcCgpIHsKLSAgICBB
U1NFUlQobGlzdF8gIT0gTlVMTCk7Ci0gICAgbGVuZ3RoXy0tOwotICAgIGlmIChsZW5ndGhfIDwg
bG93YXRlcl8pIGxvd2F0ZXJfID0gbGVuZ3RoXzsKLSAgICByZXR1cm4gU0xMX1BvcCgmbGlzdF8p
OwotICB9CisgICAgdm9pZCBQb3BSYW5nZShpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5k
KQorICAgIHsKKyAgICAgICAgU0xMUG9wUmFuZ2UoJmxpc3QsIE4sIHN0YXJ0LCBlbmQpOworICAg
ICAgICBBU1NFUlQoY3VycmVudExlbmd0aCA+PSBOKTsKKyAgICAgICAgY3VycmVudExlbmd0aCA9
IGN1cnJlbnRMZW5ndGggLSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTik7CisgICAgICAgIGlmIChj
dXJyZW50TGVuZ3RoIDwgbG93YXRlcikKKyAgICAgICAgICAgIGxvd2F0ZXIgPSBjdXJyZW50TGVu
Z3RoOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCogUG9wKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChsaXN0KTsKKyAgICAgICAgY3VycmVudExlbmd0aC0tOworICAgICAgICBpZiAo
Y3VycmVudExlbmd0aCA8IGxvd2F0ZXIpCisgICAgICAgICAgICBsb3dhdGVyID0gY3VycmVudExl
bmd0aDsKKyAgICAgICAgcmV0dXJuIFNMTFBvcCgmbGlzdCk7CisgICAgfQogCiAjaWZkZWYgV1RG
X0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgotICB2b2lk
IGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRl
cikKLSAgewotICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlzdF87IG5leHRPYmplY3Q7
IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCi0gICAgICAgICAgZmluZGVyLnZpc2l0KG5leHRPYmpl
Y3QpOwotICB9CisgICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAg
IHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYg
cmVhZGVyKQorICAgIHsKKyAgICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlzdDsgbmV4
dE9iamVjdDsgbmV4dE9iamVjdCA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KG5leHRPYmplY3QpKSkKKyAgICAgICAgICAgIGZpbmRlci52aXNp
dChuZXh0T2JqZWN0KTsKKyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTIyNzUsMjA0ICsyNDcwLDgy
IEBAIGNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0IHsKIC8vIERhdGEga2VwdCBw
ZXIgdGhyZWFkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGUgewot
IHByaXZhdGU6Ci0gIHR5cGVkZWYgVENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3QgRnJlZUxp
c3Q7CitjbGFzcyBUQ01hbGxvY1RocmVhZENhY2hlIHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBU
Q01hbGxvY1RocmVhZENhY2hlRnJlZUxpc3QgRnJlZUxpc3Q7CiAjaWYgT1MoV0lORE9XUykKLSAg
dHlwZWRlZiBEV09SRCBUaHJlYWRJZGVudGlmaWVyOworICAgIHR5cGVkZWYgRFdPUkQgVGhyZWFk
SWRlbnRpZmllcjsKICNlbHNlCi0gIHR5cGVkZWYgcHRocmVhZF90IFRocmVhZElkZW50aWZpZXI7
CisgICAgdHlwZWRlZiBwdGhyZWFkX3QgVGhyZWFkSWRlbnRpZmllcjsKICNlbmRpZgogCi0gIHNp
emVfdCAgICAgICAgc2l6ZV87ICAgICAgICAgICAgICAgICAgLy8gQ29tYmluZWQgc2l6ZSBvZiBk
YXRhCi0gIFRocmVhZElkZW50aWZpZXIgdGlkXzsgICAgICAgICAgICAgICAgLy8gV2hpY2ggdGhy
ZWFkIG93bnMgaXQKLSAgYm9vbCAgICAgICAgICBpbl9zZXRzcGVjaWZpY187ICAgICAgICAgICAv
LyBDYWxsZWQgcHRocmVhZF9zZXRzcGVjaWZpYz8KLSAgRnJlZUxpc3QgICAgICBsaXN0X1trTnVt
Q2xhc3Nlc107ICAgICAvLyBBcnJheSBpbmRleGVkIGJ5IHNpemUtY2xhc3MKLQotICAvLyBXZSBz
YW1wbGUgYWxsb2NhdGlvbnMsIGJpYXNlZCBieSB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgot
ICB1aW50MzJfdCAgICAgIHJuZF87ICAgICAgICAgICAgICAgICAgIC8vIENoZWFwIHJhbmRvbSBu
dW1iZXIgZ2VuZXJhdG9yCi0gIHNpemVfdCAgICAgICAgYnl0ZXNfdW50aWxfc2FtcGxlXzsgICAg
Ly8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQKKyAgICBzaXplX3Qgc2l6ZTsgLy8gQ29tYmlu
ZWQgc2l6ZSBvZiBkYXRhCisgICAgVGhyZWFkSWRlbnRpZmllciB0aWQ7IC8vIFdoaWNoIHRocmVh
ZCBvd25zIGl0CisgICAgYm9vbCBpblNldHNwZWNpZmljOyAvLyBDYWxsZWQgcHRocmVhZF9zZXRz
cGVjaWZpYz8KKyAgICBGcmVlTGlzdCBsaXN0W2tOdW1DbGFzc2VzXTsgLy8gQXJyYXkgaW5kZXhl
ZCBieSBzaXplLWNsYXNzCiAKLSAgLy8gQWxsb2NhdGUgYSBuZXcgaGVhcC4gUkVRVUlSRVM6IHBh
Z2VoZWFwX2xvY2sgaXMgaGVsZC4KLSAgc3RhdGljIGlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNo
ZSogTmV3SGVhcChUaHJlYWRJZGVudGlmaWVyIHRpZCk7Ci0KLSAgLy8gVXNlIG9ubHkgYXMgcHRo
cmVhZCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBmdW5jdGlvbi4KLSAgc3RhdGljIHZvaWQg
RGVzdHJveVRocmVhZENhY2hlKHZvaWQqIHB0cik7Ci0gcHVibGljOgotICAvLyBBbGwgVGhyZWFk
Q2FjaGUgb2JqZWN0cyBhcmUga2VwdCBpbiBhIGxpbmtlZCBsaXN0IChmb3Igc3RhdHMgY29sbGVj
dGlvbikKLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIG5leHRfOwotICBUQ01hbGxvY19UaHJlYWRD
YWNoZSogcHJldl87Ci0KLSAgdm9pZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkKTsKLSAgdm9p
ZCBDbGVhbnVwKCk7Ci0KLSAgLy8gQWNjZXNzb3JzIChtb3N0bHkganVzdCBmb3IgcHJpbnRpbmcg
c3RhdHMpCi0gIGludCBmcmVlbGlzdF9sZW5ndGgoc2l6ZV90IGNsKSBjb25zdCB7IHJldHVybiBs
aXN0X1tjbF0ubGVuZ3RoKCk7IH0KLQotICAvLyBUb3RhbCBieXRlIHNpemUgaW4gY2FjaGUKLSAg
c2l6ZV90IFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQotCi0gIEFMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdGUoc2l6ZV90IHNpemUpOwotICB2b2lkIERlYWxsb2NhdGUodm9pZCogcHRy
LCBzaXplX3Qgc2l6ZV9jbGFzcyk7Ci0KLSAgQUxXQVlTX0lOTElORSB2b2lkIEZldGNoRnJvbUNl
bnRyYWxDYWNoZShzaXplX3QgY2wsIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSk7Ci0gIHZvaWQgUmVs
ZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgaW50IE4pOwotICB2b2lkIFNjYXZlbmdlKCk7
Ci0gIHZvaWQgUHJpbnQoKSBjb25zdDsKLQotICAvLyBSZWNvcmQgYWxsb2NhdGlvbiBvZiAiayIg
Ynl0ZXMuICBSZXR1cm4gdHJ1ZSBpZmYgYWxsb2NhdGlvbgotICAvLyBzaG91bGQgYmUgc2FtcGxl
ZAotICBib29sIFNhbXBsZUFsbG9jYXRpb24oc2l6ZV90IGspOwotCi0gIC8vIFBpY2sgbmV4dCBz
YW1wbGluZyBwb2ludAotICB2b2lkIFBpY2tOZXh0U2FtcGxlKHNpemVfdCBrKTsKLQotICBzdGF0
aWMgdm9pZCAgICAgICAgICAgICAgICAgIEluaXRNb2R1bGUoKTsKLSAgc3RhdGljIHZvaWQgICAg
ICAgICAgICAgICAgICBJbml0VFNEKCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSog
R2V0VGhyZWFkSGVhcCgpOwotICBzdGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIEdldENhY2hl
KCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogR2V0Q2FjaGVJZlByZXNlbnQoKTsK
LSAgc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hlKiBDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCk7
Ci0gIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgRGVsZXRlQ2FjaGUoVENNYWxsb2NfVGhy
ZWFkQ2FjaGUqIGhlYXApOwotICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEJlY29tZUlk
bGUoKTsKLSAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBSZWNvbXB1dGVUaHJlYWRDYWNo
ZVNpemUoKTsKLQotI2lmZGVmIFdURl9DSEFOR0VTCi0gIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIs
IGNsYXNzIFJlYWRlcj4KLSAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRl
ciwgY29uc3QgUmVhZGVyJiByZWFkZXIpCi0gIHsKLSAgICAgIGZvciAodW5zaWduZWQgc2l6ZUNs
YXNzID0gMDsgc2l6ZUNsYXNzIDwga051bUNsYXNzZXM7IHNpemVDbGFzcysrKQotICAgICAgICAg
IGxpc3RfW3NpemVDbGFzc10uZW51bWVyYXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFkZXIpOwot
ICB9Ci0jZW5kaWYKLX07CisgICAgLy8gV2Ugc2FtcGxlIGFsbG9jYXRpb25zLCBiaWFzZWQgYnkg
dGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24KKyAgICB1aW50MzJfdCBybmQ7IC8vIENoZWFwIHJh
bmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgc2l6ZV90IGJ5dGVzVW50aWxTYW1wbGU7IC8vIEJ5
dGVzIHVudGlsIHdlIHNhbXBsZSBuZXh0CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBrZXB0IHBl
ciBzaXplLWNsYXNzIGluIGNlbnRyYWwgY2FjaGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEFsbG9j
YXRlIGEgbmV3IGhlYXAuIFJFUVVJUkVTOiBwYWdlaGVhcExvY2sgaXMgaGVsZC4KKyAgICBzdGF0
aWMgaW5saW5lIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIE5ld0hlYXAoVGhyZWFkSWRlbnRpZmllciB0
aWQpOwogCi1jbGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0IHsKLSBwdWJsaWM6Ci0gIHZv
aWQgSW5pdChzaXplX3QgY2wpOworICAgIC8vIFVzZSBvbmx5IGFzIHB0aHJlYWQgdGhyZWFkLXNw
ZWNpZmljIGRlc3RydWN0b3IgZnVuY3Rpb24uCisgICAgc3RhdGljIHZvaWQgRGVzdHJveVRocmVh
ZENhY2hlKHZvaWQqIHB0cik7CitwdWJsaWM6CisgICAgLy8gQWxsIFRocmVhZENhY2hlIG9iamVj
dHMgYXJlIGtlcHQgaW4gYSBsaW5rZWQgbGlzdCAoZm9yIHN0YXRzIGNvbGxlY3Rpb24pCisgICAg
VENNYWxsb2NUaHJlYWRDYWNoZSogbmV4dDsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBwcmV2
OwogCi0gIC8vIFRoZXNlIG1ldGhvZHMgYWxsIGRvIGludGVybmFsIGxvY2tpbmcuCisgICAgdm9p
ZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkKTsKKyAgICB2b2lkIENsZWFudXAoKTsKIAotICAv
LyBJbnNlcnQgdGhlIHNwZWNpZmllZCByYW5nZSBpbnRvIHRoZSBjZW50cmFsIGZyZWVsaXN0LiAg
TiBpcyB0aGUgbnVtYmVyIG9mCi0gIC8vIGVsZW1lbnRzIGluIHRoZSByYW5nZS4KLSAgdm9pZCBJ
bnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgTik7CisgICAgLy8gQWNjZXNz
b3JzIChtb3N0bHkganVzdCBmb3IgcHJpbnRpbmcgc3RhdHMpCisgICAgaW50IGZyZWVsaXN0bGVu
Z3RoKHNpemVfdCBjbCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsaXN0W2NsXS5sZW5n
dGgoKTsKKyAgICB9CiAKLSAgLy8gUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRjaGVk
IGVsZW1lbnRzIGludG8gTi4KLSAgdm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQg
KiplbmQsIGludCAqTik7CisgICAgLy8gVG90YWwgYnl0ZSBzaXplIGluIGNhY2hlCisgICAgc2l6
ZV90IFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQogCi0g
IC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCi0gIHNpemVf
dCBsZW5ndGgoKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICAgIHJldHVybiBj
b3VudGVyXzsKLSAgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdGUoc2l6ZV90KTsK
KyAgICB2b2lkIERlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3Qgc2l6ZWNsYXNzKTsKIAotICAv
LyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJlZSBvYmplY3RzIGluIHRoZSB0cmFuc2ZlciBjYWNo
ZS4KLSAgaW50IHRjX2xlbmd0aCgpIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0g
ICAgcmV0dXJuIHVzZWRfc2xvdHNfICogbnVtX29iamVjdHNfdG9fbW92ZVtzaXplX2NsYXNzX107
Ci0gIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKHNpemVf
dCBjbCwgc2l6ZV90IGFsbG9jYXRpb25TaXplKTsKKyAgICB2b2lkIFJlbGVhc2VUb0NlbnRyYWxD
YWNoZShzaXplX3QgY2wsIGludCk7CisgICAgdm9pZCBTY2F2ZW5nZSgpOworICAgIHZvaWQgUHJp
bnQoKSBjb25zdDsKKworICAgIC8vIFJlY29yZCBhbGxvY2F0aW9uIG9mICJrIiBieXRlcy4gUmV0
dXJuIHRydWUgaWZmIGFsbG9jYXRpb24KKyAgICAvLyBzaG91bGQgYmUgc2FtcGxlZAorICAgIGJv
b2wgU2FtcGxlQWxsb2NhdGlvbihzaXplX3Qgayk7CisKKyAgICAvLyBQaWNrIG5leHQgc2FtcGxp
bmcgcG9pbnQKKyAgICB2b2lkIFBpY2tOZXh0U2FtcGxlKHNpemVfdCBrKTsKKworICAgIHN0YXRp
YyB2b2lkIEluaXRNb2R1bGUoKTsKKyAgICBzdGF0aWMgdm9pZCBJbml0VFNEKCk7CisgICAgc3Rh
dGljIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIEdldFRocmVhZEhlYXAoKTsKKyAgICBzdGF0aWMgVENN
YWxsb2NUaHJlYWRDYWNoZSogR2V0Q2FjaGUoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRD
YWNoZSogR2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNo
ZSogQ3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpOworICAgIHN0YXRpYyB2b2lkIERlbGV0ZUNhY2hl
KFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGhlYXApOworICAgIHN0YXRpYyB2b2lkIEJlY29tZUlkbGUo
KTsKKyAgICBzdGF0aWMgdm9pZCBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKIAogI2lmZGVm
IFdURl9DSEFOR0VTCi0gIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KLSAg
dm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiBy
ZWFkZXIsIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkK
LSAgewotICAgIGZvciAoU3Bhbiogc3BhbiA9ICZlbXB0eV87IHNwYW4gJiYgc3BhbiAhPSAmZW1w
dHlfOyBzcGFuID0gKHNwYW4tPm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkKLSAgICAg
IEFTU0VSVCghc3Bhbi0+b2JqZWN0cyk7Ci0KLSAgICBBU1NFUlQoIW5vbmVtcHR5Xy5vYmplY3Rz
KTsKLSAgICBzdGF0aWMgY29uc3QgcHRyZGlmZl90IG5vbmVtcHR5T2Zmc2V0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oJm5vbmVtcHR5XykgLSByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPih0aGlzKTsKLQotICAgIFNwYW4qIHJlbW90ZU5vbmVtcHR5ID0gcmVpbnRlcnByZXRf
Y2FzdDxTcGFuKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2VudHJhbEZyZWVMaXN0
KSArIG5vbmVtcHR5T2Zmc2V0KTsKLSAgICBTcGFuKiByZW1vdGVTcGFuID0gbm9uZW1wdHlfLm5l
eHQ7Ci0KLSAgICBmb3IgKFNwYW4qIHNwYW4gPSByZWFkZXIocmVtb3RlU3Bhbik7IHNwYW4gJiYg
cmVtb3RlU3BhbiAhPSByZW1vdGVOb25lbXB0eTsgcmVtb3RlU3BhbiA9IHNwYW4tPm5leHQsIHNw
YW4gPSAoc3Bhbi0+bmV4dCA/IHJlYWRlcihzcGFuLT5uZXh0KSA6IDApKSB7Ci0gICAgICBmb3Ig
KHZvaWQqIG5leHRPYmplY3QgPSBzcGFuLT5vYmplY3RzOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0
ID0gcmVhZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4o
bmV4dE9iamVjdCkpKQotICAgICAgICBmaW5kZXIudmlzaXQobmV4dE9iamVjdCk7CisgICAgdGVt
cGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZvaWQgZW51bWVyYXRlRnJl
ZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBrTnVtQ2xhc3Nl
czsgc2l6ZUNsYXNzKyspCisgICAgICAgICAgICBsaXN0W3NpemVDbGFzc10uZW51bWVyYXRlRnJl
ZU9iamVjdHMoZmluZGVyLCByZWFkZXIpOwogICAgIH0KLSAgfQogI2VuZGlmCi0KLSBwcml2YXRl
OgotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBSZW1vdmUgb2JqZWN0IGZyb20g
Y2FjaGUgYW5kIHJldHVybi4KLSAgLy8gUmV0dXJuIE5VTEwgaWYgbm8gZnJlZSBlbnRyaWVzIGlu
IGNhY2hlLgotICB2b2lkKiBGZXRjaEZyb21TcGFucygpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2Nr
XyBpcyBoZWxkCi0gIC8vIFJlbW92ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLiAgRmV0
Y2hlcwotICAvLyBmcm9tIHBhZ2VoZWFwIGlmIGNhY2hlIGlzIGVtcHR5LiAgT25seSByZXR1cm5z
Ci0gIC8vIE5VTEwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgotICB2b2lkKiBGZXRjaEZyb21TcGFu
c1NhZmUoKTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBSZWxlYXNlIGEg
bGlua2VkIGxpc3Qgb2Ygb2JqZWN0cyB0byBzcGFucy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHJl
bGVhc2UgbG9ja18uCi0gIHZvaWQgUmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0YXJ0KTsKLQot
ICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBSZWxlYXNlIGFuIG9iamVjdCB0byBz
cGFucy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19JTkxJ
TkUgdm9pZCBSZWxlYXNlVG9TcGFucyh2b2lkKiBvYmplY3QpOwotCi0gIC8vIFJFUVVJUkVTOiBs
b2NrXyBpcyBoZWxkCi0gIC8vIFBvcHVsYXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhlIHBh
Z2UgaGVhcC4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19J
TkxJTkUgdm9pZCBQb3B1bGF0ZSgpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQuCi0g
IC8vIFRyaWVzIHRvIG1ha2Ugcm9vbSBmb3IgYSBUQ0VudHJ5LiAgSWYgdGhlIGNhY2hlIGlzIGZ1
bGwgaXQgd2lsbCB0cnkgdG8KLSAgLy8gZXhwYW5kIGl0IGF0IHRoZSBjb3N0IG9mIHNvbWUgb3Ro
ZXIgY2FjaGUgc2l6ZS4gIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcwotICAvLyBubyBzcGFjZS4K
LSAgYm9vbCBNYWtlQ2FjaGVTcGFjZSgpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBmb3IgbG9j
a2VkX3NpemVfY2xhc3MgaXMgaGVsZC4KLSAgLy8gUGlja3MgYSAicmFuZG9tIiBzaXplIGNsYXNz
IHRvIHN0ZWFsIFRDRW50cnkgc2xvdCBmcm9tLiAgSW4gcmVhbGl0eSBpdAotICAvLyBqdXN0IGl0
ZXJhdGVzIG92ZXIgdGhlIHNpemVjbGFzc2VzIGJ1dCBkb2VzIHNvIHdpdGhvdXQgdGFraW5nIGEg
bG9jay4KLSAgLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCi0gIC8vIE1heSB0ZW1wb3Jhcmls
eSBsb2NrIGEgInJhbmRvbSIgc2l6ZSBjbGFzcy4KLSAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplX3QgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9y
Y2UpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyAqbm90KiBoZWxkLgotICAvLyBUcmllcyB0
byBzaHJpbmsgdGhlIENhY2hlLiAgSWYgZm9yY2UgaXMgdHJ1ZSBpdCB3aWxsIHJlbGFzZSBvYmpl
Y3RzIHRvCi0gIC8vIHNwYW5zIGlmIGl0IGFsbG93cyBpdCB0byBzaHJpbmsgdGhlIGNhY2hlLiAg
UmV0dXJuIGZhbHNlIGlmIGl0IGZhaWxlZCB0bwotICAvLyBzaHJpbmsgdGhlIGNhY2hlLiAgRGVj
cmVtZW50cyBjYWNoZV9zaXplXyBvbiBzdWNjZWVzcy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHRh
a2UgbG9ja18uICBJZiBpdCB0YWtlcyBsb2NrXywgdGhlIGxvY2tlZF9zaXplX2NsYXNzCi0gIC8v
IGxvY2sgaXMgcmVsZWFzZWQgdG8gdGhlIHRocmVhZCBmcm9tIGhvbGRpbmcgdHdvIHNpemUgY2xh
c3MgbG9ja3MKLSAgLy8gY29uY3VycmVudGx5IHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBkZWFkbG9j
ay4KLSAgYm9vbCBTaHJpbmtDYWNoZShpbnQgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2Up
OwotCi0gIC8vIFRoaXMgbG9jayBwcm90ZWN0cyBhbGwgdGhlIGRhdGEgbWVtYmVycy4gIGNhY2hl
ZF9lbnRyaWVzIGFuZCBjYWNoZV9zaXplXwotICAvLyBtYXkgYmUgbG9va2VkIGF0IHdpdGhvdXQg
aG9sZGluZyB0aGUgbG9jay4KLSAgU3BpbkxvY2sgbG9ja187Ci0KLSAgLy8gV2Uga2VlcCBsaW5r
ZWQgbGlzdHMgb2YgZW1wdHkgYW5kIG5vbi1lbXB0eSBzcGFucy4KLSAgc2l6ZV90ICAgc2l6ZV9j
bGFzc187ICAgICAvLyBNeSBzaXplIGNsYXNzCi0gIFNwYW4gICAgIGVtcHR5XzsgICAgICAgICAg
Ly8gRHVtbXkgaGVhZGVyIGZvciBsaXN0IG9mIGVtcHR5IHNwYW5zCi0gIFNwYW4gICAgIG5vbmVt
cHR5XzsgICAgICAgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0IG9mIG5vbi1lbXB0eSBzcGFucwot
ICBzaXplX3QgICBjb3VudGVyXzsgICAgICAgIC8vIE51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4g
Y2FjaGUgZW50cnkKLQotICAvLyBIZXJlIHdlIHJlc2VydmUgc3BhY2UgZm9yIFRDRW50cnkgY2Fj
aGUgc2xvdHMuICBTaW5jZSBvbmUgc2l6ZSBjbGFzcyBjYW4KLSAgLy8gZW5kIHVwIGdldHRpbmcg
YWxsIHRoZSBUQ0VudHJpZXMgcXVvdGEgaW4gdGhlIHN5c3RlbSB3ZSBqdXN0IHByZWFsbG9jYXRl
Ci0gIC8vIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGVudHJpZXMgaGVyZS4KLSAgVENFbnRyeSB0Y19z
bG90c19ba051bVRyYW5zZmVyRW50cmllc107Ci0KLSAgLy8gTnVtYmVyIG9mIGN1cnJlbnRseSB1
c2VkIGNhY2hlZCBlbnRyaWVzIGluIHRjX3Nsb3RzXy4gIFRoaXMgdmFyaWFibGUgaXMKLSAgLy8g
dXBkYXRlZCB1bmRlciBhIGxvY2sgYnV0IGNhbiBiZSByZWFkIHdpdGhvdXQgb25lLgotICBpbnQz
Ml90IHVzZWRfc2xvdHNfOwotICAvLyBUaGUgY3VycmVudCBudW1iZXIgb2Ygc2xvdHMgZm9yIHRo
aXMgc2l6ZSBjbGFzcy4gIFRoaXMgaXMgYW4KLSAgLy8gYWRhcHRpdmUgdmFsdWUgdGhhdCBpcyBp
bmNyZWFzZWQgaWYgdGhlcmUgaXMgbG90cyBvZiB0cmFmZmljCi0gIC8vIG9uIGEgZ2l2ZW4gc2l6
ZSBjbGFzcy4KLSAgaW50MzJfdCBjYWNoZV9zaXplXzsKLX07Ci0KLS8vIFBhZCBlYWNoIENlbnRy
YWxDYWNoZSBvYmplY3QgdG8gbXVsdGlwbGUgb2YgNjQgYnl0ZXMKLWNsYXNzIFRDTWFsbG9jX0Nl
bnRyYWxfRnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7
Ci0gcHJpdmF0ZToKLSAgY2hhciBwYWRfWyg2NCAtIChzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9G
cmVlTGlzdCkgJSA2NCkpICUgNjRdOwogfTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDgxLDIyICsy
NTU0LDIyIEBAIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgOgogCiAvLyBD
ZW50cmFsIGNhY2hlIC0tIGEgY29sbGVjdGlvbiBvZiBmcmVlLWxpc3RzLCBvbmUgcGVyIHNpemUt
Y2xhc3MuCiAvLyBXZSBoYXZlIGEgc2VwYXJhdGUgbG9jayBwZXIgZnJlZS1saXN0IHRvIHJlZHVj
ZSBjb250ZW50aW9uLgotc3RhdGljIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgY2Vu
dHJhbF9jYWNoZVtrTnVtQ2xhc3Nlc107CitzdGF0aWMgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQ
YWRkZWQgY2VudHJhbENhY2hlW2tOdW1DbGFzc2VzXTsKIAogLy8gUGFnZS1sZXZlbCBhbGxvY2F0
b3IKLXN0YXRpYyBBbGxvY0FsaWdubWVudEludGVnZXIgcGFnZWhlYXBfbWVtb3J5WyhzaXplb2Yo
VENNYWxsb2NfUGFnZUhlYXApICsgc2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdlcikgLSAxKSAv
IHNpemVvZihBbGxvY0FsaWdubWVudEludGVnZXIpXTsKK3N0YXRpYyBBbGxvY0FsaWdubWVudElu
dGVnZXIgcGFnZWhlYXBNZW1vcnlbKHNpemVvZihUQ01hbGxvY1BhZ2VIZWFwKSArIHNpemVvZihB
bGxvY0FsaWdubWVudEludGVnZXIpIC0gMSkgLyBzaXplb2YoQWxsb2NBbGlnbm1lbnRJbnRlZ2Vy
KV07CiBzdGF0aWMgYm9vbCBwaGluaXRlZCA9IGZhbHNlOwogCiAvLyBBdm9pZCBleHRyYSBsZXZl
bCBvZiBpbmRpcmVjdGlvbiBieSBtYWtpbmcgInBhZ2VoZWFwIiBiZSBqdXN0IGFuIGFsaWFzCi0v
LyBvZiBwYWdlaGVhcF9tZW1vcnkuCisvLyBvZiBwYWdlaGVhcE1lbW9yeS4KIHR5cGVkZWYgdW5p
b24gewogICAgIHZvaWQqIG1fbWVtb3J5OwotICAgIFRDTWFsbG9jX1BhZ2VIZWFwKiBtX3BhZ2VI
ZWFwOworICAgIFRDTWFsbG9jUGFnZUhlYXAqIG1fcGFnZUhlYXA7CiB9IFBhZ2VIZWFwVW5pb247
CiAKLXN0YXRpYyBpbmxpbmUgVENNYWxsb2NfUGFnZUhlYXAqIGdldFBhZ2VIZWFwKCkKK3N0YXRp
YyBpbmxpbmUgVENNYWxsb2NQYWdlSGVhcCogZ2V0UGFnZUhlYXAoKQogewotICAgIFBhZ2VIZWFw
VW5pb24gdSA9IHsgJnBhZ2VoZWFwX21lbW9yeVswXSB9OworICAgIFBhZ2VIZWFwVW5pb24gdSA9
IHsgJnBhZ2VoZWFwTWVtb3J5WzBdIH07CiAgICAgcmV0dXJuIHUubV9wYWdlSGVhcDsKIH0KIApA
QCAtMjUwNiw5ICsyNTc5LDkgQEAgc3RhdGljIGlubGluZSBUQ01hbGxvY19QYWdlSGVhcCogZ2V0
UGFnZQogCiAjaWYgSEFWRShESVNQQVRDSF9IKSB8fCBPUyhXSU5ET1dTKQogCi12b2lkIFRDTWFs
bG9jX1BhZ2VIZWFwOjpwZXJpb2RpY1NjYXZlbmdlKCkKK3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6
cGVyaW9kaWNTY2F2ZW5nZSgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKICAgICBwYWdlaGVhcC0+
c2NhdmVuZ2UoKTsKIAogICAgIGlmIChzaG91bGRTY2F2ZW5nZSgpKSB7CkBAIC0yNTE5LDM2ICsy
NTkyLDM2IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVuZ2UKICAgICBz
dXNwZW5kU2NhdmVuZ2VyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdl
SGVhcDo6c2lnbmFsU2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VI
ZWFwOjpzaWduYWxTY2F2ZW5nZXIoKQogewotICAgIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVs
ZCgpKTsKKyAgICBBU1NFUlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsKICAgICBpZiAoaXNTY2F2
ZW5nZXJTdXNwZW5kZWQoKSAmJiBzaG91bGRTY2F2ZW5nZSgpKQogICAgICAgICBzY2hlZHVsZVNj
YXZlbmdlcigpOwogfQogCiAjZWxzZQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5n
ZXJUaHJlYWQoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoKQogewog
I2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQotICBwdGhyZWFkX3NldG5hbWVfbnAoIkphdmFT
Y3JpcHRDb3JlOiBGYXN0TWFsbG9jIHNjYXZlbmdlciIpOworICAgIHB0aHJlYWRfc2V0bmFtZV9u
cCgiSmF2YVNjcmlwdENvcmU6IEZhc3RNYWxsb2Mgc2NhdmVuZ2VyIik7CiAjZW5kaWYKIAotICB3
aGlsZSAoMSkgewotICAgICAgaWYgKCFzaG91bGRTY2F2ZW5nZSgpKSB7Ci0gICAgICAgICAgcHRo
cmVhZF9tdXRleF9sb2NrKCZtX3NjYXZlbmdlTXV0ZXgpOwotICAgICAgICAgIG1fc2NhdmVuZ2VU
aHJlYWRBY3RpdmUgPSBmYWxzZTsKLSAgICAgICAgICAvLyBCbG9jayB1bnRpbCB0aGVyZSBhcmUg
ZW5vdWdoIGZyZWUgY29tbWl0dGVkIHBhZ2VzIHRvIHJlbGVhc2UgYmFjayB0byB0aGUgc3lzdGVt
LgotICAgICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZtX3NjYXZlbmdlQ29uZGl0aW9uLCAmbV9z
Y2F2ZW5nZU11dGV4KTsKLSAgICAgICAgICBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbV9zY2F2ZW5nZU11dGV4KTsKLSAgICAg
IH0KLSAgICAgIHNsZWVwKGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzKTsKLSAgICAgIHsKLSAgICAg
ICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICAgICAgICBwYWdlaGVh
cC0+c2NhdmVuZ2UoKTsKLSAgICAgIH0KLSAgfQorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlm
ICghc2hvdWxkU2NhdmVuZ2UoKSkgeworICAgICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZt
X3NjYXZlbmdlTXV0ZXgpOworICAgICAgICAgICAgbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSA9IGZh
bHNlOworICAgICAgICAgICAgLy8gQmxvY2sgdW50aWwgdGhlcmUgYXJlIGVub3VnaCBmcmVlIGNv
bW1pdHRlZCBwYWdlcyB0byByZWxlYXNlIGJhY2sgdG8gdGhlIHN5c3RlbS4KKyAgICAgICAgICAg
IHB0aHJlYWRfY29uZF93YWl0KCZtX3NjYXZlbmdlQ29uZGl0aW9uLCAmbV9zY2F2ZW5nZU11dGV4
KTsKKyAgICAgICAgICAgIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmUgPSB0cnVlOworICAgICAgICAg
ICAgcHRocmVhZF9tdXRleF91bmxvY2soJm1fc2NhdmVuZ2VNdXRleCk7CisgICAgICAgIH0KKyAg
ICAgICAgc2xlZXAoa1NjYXZlbmdlRGVsYXlJblNlY29uZHMpOworICAgICAgICB7CisgICAgICAg
ICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICAgICAgcGFnZWhl
YXAtPnNjYXZlbmdlKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKICNlbmRpZgpAQCAtMjU1OCwx
OSArMjYzMSwxOSBAQCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoCiAv
LyBJZiBUTFMgaXMgYXZhaWxhYmxlLCB3ZSBhbHNvIHN0b3JlIGEgY29weQogLy8gb2YgdGhlIHBl
ci10aHJlYWQgb2JqZWN0IGluIGEgX190aHJlYWQgdmFyaWFibGUKIC8vIHNpbmNlIF9fdGhyZWFk
IHZhcmlhYmxlcyBhcmUgZmFzdGVyIHRvIHJlYWQKLS8vIHRoYW4gcHRocmVhZF9nZXRzcGVjaWZp
YygpLiAgV2Ugc3RpbGwgbmVlZAorLy8gdGhhbiBwdGhyZWFkX2dldHNwZWNpZmljKCkuIFdlIHN0
aWxsIG5lZWQKIC8vIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBiZWNhdXNlIF9fdGhyZWFkCiAvLyB2
YXJpYWJsZXMgcHJvdmlkZSBubyB3YXkgdG8gcnVuIGNsZWFudXAKIC8vIGNvZGUgd2hlbiBhIHRo
cmVhZCBpcyBkZXN0cm95ZWQuCiAjaWZkZWYgSEFWRV9UTFMKLXN0YXRpYyBfX3RocmVhZCBUQ01h
bGxvY19UaHJlYWRDYWNoZSAqdGhyZWFkbG9jYWxfaGVhcDsKK3N0YXRpYyBfX3RocmVhZCBUQ01h
bGxvY1RocmVhZENhY2hlICp0aHJlYWRsb2NhbEhlYXA7CiAjZW5kaWYKLS8vIFRocmVhZC1zcGVj
aWZpYyBrZXkuICBJbml0aWFsaXphdGlvbiBoZXJlIGlzIHNvbWV3aGF0IHRyaWNreQorLy8gVGhy
ZWFkLXNwZWNpZmljIGtleS4gSW5pdGlhbGl6YXRpb24gaGVyZSBpcyBzb21ld2hhdCB0cmlja3kK
IC8vIGJlY2F1c2Ugc29tZSBMaW51eCBzdGFydHVwIGNvZGUgaW52b2tlcyBtYWxsb2MoKSBiZWZv
cmUgaXQKIC8vIGlzIGluIGEgZ29vZCBlbm91Z2ggc3RhdGUgdG8gaGFuZGxlIHB0aHJlYWRfa2V5
Y3JlYXRlKCkuCi0vLyBUaGVyZWZvcmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZF9p
bml0ZWQgaXMgc2V0IHRvIHRydWUuCisvLyBUaGVyZWZvcmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5
IGFmdGVyIHRzZEluaXRlZCBpcyBzZXQgdG8gdHJ1ZS4KIC8vIFVudGlsIHRoZW4sIHdlIHVzZSBh
IHNsb3cgcGF0aCB0byBnZXQgdGhlIGhlYXAgb2JqZWN0Lgotc3RhdGljIGJvb2wgdHNkX2luaXRl
ZCA9IGZhbHNlOworc3RhdGljIGJvb2wgdHNkSW5pdGVkID0gZmFsc2U7CiAjaWYgVVNFKFBUSFJF
QURfR0VUU1BFQ0lGSUNfRElSRUNUKQogc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgaGVhcF9r
ZXkgPSBfX1BUS19GUkFNRVdPUktfSkFWQVNDUklQVENPUkVfS0VZMDsKICNlbHNlCkBAIC0yNTgw
LDcgKzI2NTMsNyBAQCBzdGF0aWMgcHRocmVhZF9rZXlfdCBoZWFwX2tleTsKIERXT1JEIHRsc0lu
ZGV4ID0gVExTX09VVF9PRl9JTkRFWEVTOwogI2VuZGlmCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0VGhyZWFkSGVhcChUQ01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCkKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0VGhyZWFkSGVhcChUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFw
KQogewogI2lmIFVTRShQVEhSRUFEX0dFVFNQRUNJRklDX0RJUkVDVCkKICAgICAvLyBDYW4ndCBo
YXZlIHR3byBsaWJyYXJpZXMgYm90aCBkb2luZyB0aGlzIGluIHRoZSBzYW1lIHByb2Nlc3MsCkBA
IC0yNTk5LDExOSArMjY3MiwxMjUgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUaHJl
YWRIZWFwKAogfQogCiAvLyBBbGxvY2F0b3IgZm9yIHRocmVhZCBoZWFwcwotc3RhdGljIFBhZ2VI
ZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiB0aHJlYWRoZWFwX2FsbG9jYXRvcjsK
K3N0YXRpYyBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY1RocmVhZENhY2hlPiB0aHJlYWRoZWFw
QWxsb2NhdG9yOwogCi0vLyBMaW5rZWQgbGlzdCBvZiBoZWFwIG9iamVjdHMuICBQcm90ZWN0ZWQg
YnkgcGFnZWhlYXBfbG9jay4KLXN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkX2hl
YXBzID0gTlVMTDsKKy8vIExpbmtlZCBsaXN0IG9mIGhlYXAgb2JqZWN0cy4gUHJvdGVjdGVkIGJ5
IHBhZ2VoZWFwTG9jay4KK3N0YXRpYyBUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRIZWFwcyA9
IDA7CiBzdGF0aWMgaW50IHRocmVhZF9oZWFwX2NvdW50ID0gMDsKIAotLy8gT3ZlcmFsbCB0aHJl
YWQgY2FjaGUgc2l6ZS4gIFByb3RlY3RlZCBieSBwYWdlaGVhcF9sb2NrLgotc3RhdGljIHNpemVf
dCBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplID0ga0RlZmF1bHRPdmVyYWxsVGhyZWFkQ2FjaGVT
aXplOworLy8gT3ZlcmFsbCB0aHJlYWQgY2FjaGUgc2l6ZS4gUHJvdGVjdGVkIGJ5IHBhZ2VoZWFw
TG9jay4KK3N0YXRpYyBzaXplX3Qgb3ZlcmFsbFRocmVhZENhY2hlc2l6ZSA9IGtEZWZhdWx0T3Zl
cmFsbFRocmVhZENhY2hlU2l6ZTsKIAotLy8gR2xvYmFsIHBlci10aHJlYWQgY2FjaGUgc2l6ZS4g
IFdyaXRlcyBhcmUgcHJvdGVjdGVkIGJ5Ci0vLyBwYWdlaGVhcF9sb2NrLiAgUmVhZHMgYXJlIGRv
bmUgd2l0aG91dCBhbnkgbG9ja2luZywgd2hpY2ggc2hvdWxkIGJlCisvLyBHbG9iYWwgcGVyLXRo
cmVhZCBjYWNoZSBzaXplLiBXcml0ZXMgYXJlIHByb3RlY3RlZCBieQorLy8gcGFnZWhlYXBMb2Nr
LiBSZWFkcyBhcmUgZG9uZSB3aXRob3V0IGFueSBsb2NraW5nLCB3aGljaCBzaG91bGQgYmUKIC8v
IGZpbmUgYXMgbG9uZyBhcyBzaXplX3QgY2FuIGJlIHdyaXR0ZW4gYXRvbWljYWxseSBhbmQgd2Ug
ZG9uJ3QgcGxhY2UKIC8vIGludmFyaWFudHMgYmV0d2VlbiB0aGlzIHZhcmlhYmxlIGFuZCBvdGhl
ciBwaWVjZXMgb2Ygc3RhdGUuCi1zdGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBlcl90aHJlYWRfY2Fj
aGVfc2l6ZSA9IGtNYXhUaHJlYWRDYWNoZVNpemU7CitzdGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBl
clRocmVhZENhY2hlU2l6ZSA9IGtNYXhUaHJlYWRDYWNoZVNpemU7CiAKIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ly8gQ2VudHJhbCBjYWNoZSBpbXBsZW1lbnRhdGlvbgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgVENN
YWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5pdChzaXplX3QgY2wpIHsKLSAgbG9ja18uSW5pdCgp
OwotICBzaXplX2NsYXNzXyA9IGNsOwotICBETExfSW5pdCgmZW1wdHlfKTsKLSAgRExMX0luaXQo
Jm5vbmVtcHR5Xyk7Ci0gIGNvdW50ZXJfID0gMDsKLQotICBjYWNoZV9zaXplXyA9IDE7Ci0gIHVz
ZWRfc2xvdHNfID0gMDsKLSAgQVNTRVJUKGNhY2hlX3NpemVfIDw9IGtOdW1UcmFuc2ZlckVudHJp
ZXMpOwotfQotCi12b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbGVhc2VMaXN0VG9T
cGFucyh2b2lkKiBzdGFydCkgewotICB3aGlsZSAoc3RhcnQpIHsKLSAgICB2b2lkICpuZXh0ID0g
U0xMX05leHQoc3RhcnQpOwotICAgIFJlbGVhc2VUb1NwYW5zKHN0YXJ0KTsKLSAgICBzdGFydCA9
IG5leHQ7Ci0gIH0KK3ZvaWQgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkluaXQoc2l6ZV90IGNs
KQoreworICAgIGxvY2suSW5pdCgpOworICAgIHNpemVDbGFzcyA9IGNsOworICAgIERMTEluaXQo
JmVtcHR5KTsKKyAgICBETExJbml0KCZub25lbXB0eSk7CisgICAgY291bnRlciA9IDA7CisKKyAg
ICBjYWNoZVNpemUgPSAxOworICAgIHVzZWRTbG90cyA9IDA7CisgICAgQVNTRVJUKGNhY2hlU2l6
ZSA8PSBrTnVtVHJhbnNmZXJFbnRyaWVzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCkgewotICBj
b25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYmplY3QpID4+IGtQ
YWdlU2hpZnQ7Ci0gIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKLSAg
QVNTRVJUKHNwYW4gIT0gTlVMTCk7Ci0gIEFTU0VSVChzcGFuLT5yZWZjb3VudCA+IDApOwotCi0g
IC8vIElmIHNwYW4gaXMgZW1wdHksIG1vdmUgaXQgdG8gbm9uLWVtcHR5IGxpc3QKLSAgaWYgKHNw
YW4tPm9iamVjdHMgPT0gTlVMTCkgewotICAgIERMTF9SZW1vdmUoc3Bhbik7Ci0gICAgRExMX1By
ZXBlbmQoJm5vbmVtcHR5Xywgc3Bhbik7Ci0gICAgRXZlbnQoc3BhbiwgJ04nLCAwKTsKLSAgfQor
dm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQqIHN0
YXJ0KQoreworICAgIHdoaWxlIChzdGFydCkgeworICAgICAgICB2b2lkKiBuZXh0ID0gU0xMX05l
eHQoc3RhcnQpOworICAgICAgICBSZWxlYXNlVG9TcGFucyhzdGFydCk7CisgICAgICAgIHN0YXJ0
ID0gbmV4dDsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY0NlbnRyYWxG
cmVlTGlzdDo6UmVsZWFzZVRvU3BhbnModm9pZCogb2JqZWN0KQoreworICAgIGNvbnN0IFBhZ2VJ
RCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9iamVjdCkgPj4ga1BhZ2VTaGlmdDsK
KyAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3IocCk7CisgICAgQVNTRVJU
KHNwYW4pOworICAgIEFTU0VSVChzcGFuLT5yZWZjb3VudCA+IDApOwogCi0gIC8vIFRoZSBmb2xs
b3dpbmcgY2hlY2sgaXMgZXhwZW5zaXZlLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Ci0g
IGlmIChmYWxzZSkgewotICAgIC8vIENoZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9jY3VyIGlu
IGxpc3QKLSAgICB1bnNpZ25lZCBnb3QgPSAwOwotICAgIGZvciAodm9pZCogcCA9IHNwYW4tPm9i
amVjdHM7IHAgIT0gTlVMTDsgcCA9ICooKHZvaWQqKikgcCkpIHsKLSAgICAgIEFTU0VSVChwICE9
IG9iamVjdCk7Ci0gICAgICBnb3QrKzsKKyAgICAvLyBJZiBzcGFuIGlzIGVtcHR5LCBtb3ZlIGl0
IHRvIG5vbi1lbXB0eSBsaXN0CisgICAgaWYgKCFzcGFuLT5vYmplY3RzKSB7CisgICAgICAgIERM
TFJlbW92ZShzcGFuKTsKKyAgICAgICAgRExMUHJlcGVuZCgmbm9uZW1wdHksIHNwYW4pOworICAg
ICAgICBFdmVudChzcGFuLCAnTicsIDApOwogICAgIH0KLSAgICBBU1NFUlQoZ290ICsgc3Bhbi0+
cmVmY291bnQgPT0KLSAgICAgICAgICAgKHNwYW4tPmxlbmd0aDw8a1BhZ2VTaGlmdCkvQnl0ZVNp
emVGb3JDbGFzcyhzcGFuLT5zaXplY2xhc3MpKTsKLSAgfQogCi0gIGNvdW50ZXJfKys7Ci0gIHNw
YW4tPnJlZmNvdW50LS07Ci0gIGlmIChzcGFuLT5yZWZjb3VudCA9PSAwKSB7Ci0gICAgRXZlbnQo
c3BhbiwgJyMnLCAwKTsKLSAgICBjb3VudGVyXyAtPSAoc3Bhbi0+bGVuZ3RoPDxrUGFnZVNoaWZ0
KSAvIEJ5dGVTaXplRm9yQ2xhc3Moc3Bhbi0+c2l6ZWNsYXNzKTsKLSAgICBETExfUmVtb3ZlKHNw
YW4pOworICAgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgZXhwZW5zaXZlLCBzbyBpdCBpcyBk
aXNhYmxlZCBieSBkZWZhdWx0CisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIC8vIENoZWNrIHRo
YXQgb2JqZWN0IGRvZXMgbm90IG9jY3VyIGluIGxpc3QKKyAgICAgICAgdW5zaWduZWQgZ290ID0g
MDsKKyAgICAgICAgZm9yICh2b2lkKiBwID0gc3Bhbi0+b2JqZWN0czsgcDsgcCA9ICooKHZvaWQq
KikgcCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChwICE9IG9iamVjdCk7CisgICAgICAgICAgICBn
b3QrKzsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZ290ICsgc3Bhbi0+cmVmY291bnQgPT0K
KyAgICAgICAgICAgICAgICAoc3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVG
b3JDbGFzcyhzcGFuLT5zaXplY2xhc3MpKTsKKyAgICB9CiAKLSAgICAvLyBSZWxlYXNlIGNlbnRy
YWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBwYWdlaGVhcAotICAgIGxvY2tfLlVubG9j
aygpOwotICAgIHsKLSAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAg
ICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKKyAgICBjb3VudGVyKys7CisgICAgc3Bhbi0+cmVm
Y291bnQtLTsKKyAgICBpZiAoIXNwYW4tPnJlZmNvdW50KSB7CisgICAgICAgIEV2ZW50KHNwYW4s
ICcjJywgMCk7CisgICAgICAgIGNvdW50ZXIgLT0gKHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0
KSAvIEJ5dGVTaXplRm9yQ2xhc3Moc3Bhbi0+c2l6ZWNsYXNzKTsKKyAgICAgICAgRExMUmVtb3Zl
KHNwYW4pOworCisgICAgICAgIC8vIFJlbGVhc2UgY2VudHJhbCBsaXN0IGxvY2sgd2hpbGUgb3Bl
cmF0aW5nIG9uIHBhZ2VoZWFwCisgICAgICAgIGxvY2suVW5sb2NrKCk7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgICAgICBw
YWdlaGVhcC0+RGVsZXRlKHNwYW4pOworICAgICAgICB9CisgICAgICAgIGxvY2suTG9jaygpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkp
ID0gc3Bhbi0+b2JqZWN0czsKKyAgICAgICAgc3Bhbi0+b2JqZWN0cyA9IG9iamVjdDsKICAgICB9
Ci0gICAgbG9ja18uTG9jaygpOwotICB9IGVsc2UgewotICAgICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KG9iamVjdCkpID0gc3Bhbi0+b2JqZWN0czsKLSAgICBzcGFuLT5vYmplY3RzID0gb2Jq
ZWN0OwotICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19DZW50cmFsX0ZyZWVM
aXN0OjpFdmljdFJhbmRvbVNpemVDbGFzcygKLSAgICBzaXplX3QgbG9ja2VkX3NpemVfY2xhc3Ms
IGJvb2wgZm9yY2UpIHsKLSAgc3RhdGljIGludCByYWNlX2NvdW50ZXIgPSAwOwotICBpbnQgdCA9
IHJhY2VfY291bnRlcisrOyAgLy8gVXBkYXRlZCB3aXRob3V0IGEgbG9jaywgYnV0IHdobyBjYXJl
cy4KLSAgaWYgKHQgPj0gc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKLSAgICB3aGls
ZSAodCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSkgewotICAgICAgdCAtPSBrTnVt
Q2xhc3NlczsKK0FMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RXZp
Y3RSYW5kb21TaXplQ2xhc3Moc2l6ZV90IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSkKK3sK
KyAgICBzdGF0aWMgaW50IHJhY2VDb3VudGVyID0gMDsKKyAgICBpbnQgdCA9IHJhY2VDb3VudGVy
Kys7IC8vIFVwZGF0ZWQgd2l0aG91dCBhIGxvY2ssIGJ1dCB3aG8gY2FyZXMuCisgICAgaWYgKHQg
Pj0gc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKKyAgICAgICAgd2hpbGUgKHQgPj0g
c3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpCisgICAgICAgICAgICB0IC09IGtOdW1DbGFz
c2VzOworICAgICAgICByYWNlQ291bnRlciA9IHQ7CisgICAgfQorICAgIEFTU0VSVCh0ID49IDAp
OworICAgIEFTU0VSVCh0IDwgc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOworICAgIGlm
ICh0ID09IHN0YXRpY19jYXN0PGludD4obG9ja2VkU2l6ZUNsYXNzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBjZW50cmFsQ2FjaGVbdF0uU2hyaW5rQ2FjaGUoc3RhdGljX2Nh
c3Q8aW50Pihsb2NrZWRTaXplQ2xhc3MpLCBmb3JjZSk7Cit9CisKK2Jvb2wgVENNYWxsb2NDZW50
cmFsRnJlZUxpc3Q6Ok1ha2VDYWNoZVNwYWNlKCkKK3sKKyAgICAvLyBJcyB0aGVyZSByb29tIGlu
IHRoZSBjYWNoZT8KKyAgICBpZiAodXNlZFNsb3RzIDwgY2FjaGVTaXplKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAvLyBDaGVjayBpZiB3ZSBjYW4gZXhwYW5kIHRoaXMgY2FjaGU/CisgICAg
aWYgKGNhY2hlU2l6ZSA9PSBrTnVtVHJhbnNmZXJFbnRyaWVzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gT2ssIHdlJ2xsIHRyeSB0byBncmFiIGFuIGVudHJ5IGZyb20gc29tZSBvdGhl
ciBzaXplIGNsYXNzLgorICAgIGlmIChFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIGZh
bHNlKQorICAgICAgICB8fCBFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIHRydWUpKSB7
CisgICAgICAgIC8vIFN1Y2NlZWRlZCBpbiBldmljdGluZywgd2UncmUgZ29pbmcgdG8gbWFrZSBv
dXIgY2FjaGUgbGFyZ2VyLgorICAgICAgICBjYWNoZVNpemUrKzsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIHJhY2VfY291bnRlciA9IHQ7Ci0gIH0KLSAgQVNTRVJUKHQgPj0gMCk7
Ci0gIEFTU0VSVCh0IDwgc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOwotICBpZiAodCA9
PSBzdGF0aWNfY2FzdDxpbnQ+KGxvY2tlZF9zaXplX2NsYXNzKSkgcmV0dXJuIGZhbHNlOwotICBy
ZXR1cm4gY2VudHJhbF9jYWNoZVt0XS5TaHJpbmtDYWNoZShzdGF0aWNfY2FzdDxpbnQ+KGxvY2tl
ZF9zaXplX2NsYXNzKSwgZm9yY2UpOwotfQotCi1ib29sIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3Q6Ok1ha2VDYWNoZVNwYWNlKCkgewotICAvLyBJcyB0aGVyZSByb29tIGluIHRoZSBjYWNoZT8K
LSAgaWYgKHVzZWRfc2xvdHNfIDwgY2FjaGVfc2l6ZV8pIHJldHVybiB0cnVlOwotICAvLyBDaGVj
ayBpZiB3ZSBjYW4gZXhwYW5kIHRoaXMgY2FjaGU/Ci0gIGlmIChjYWNoZV9zaXplXyA9PSBrTnVt
VHJhbnNmZXJFbnRyaWVzKSByZXR1cm4gZmFsc2U7Ci0gIC8vIE9rLCB3ZSdsbCB0cnkgdG8gZ3Jh
YiBhbiBlbnRyeSBmcm9tIHNvbWUgb3RoZXIgc2l6ZSBjbGFzcy4KLSAgaWYgKEV2aWN0UmFuZG9t
U2l6ZUNsYXNzKHNpemVfY2xhc3NfLCBmYWxzZSkgfHwKLSAgICAgIEV2aWN0UmFuZG9tU2l6ZUNs
YXNzKHNpemVfY2xhc3NfLCB0cnVlKSkgewotICAgIC8vIFN1Y2NlZWRlZCBpbiBldmljdGluZywg
d2UncmUgZ29pbmcgdG8gbWFrZSBvdXIgY2FjaGUgbGFyZ2VyLgotICAgIGNhY2hlX3NpemVfKys7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogCkBAIC0yNzI2LDY0OSArMjgwNSw2ODIgQEAgY2xhc3MgTG9ja0ludmVydGVyIHsK
IH07CiB9CiAKLWJvb2wgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50
IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNlKSB7Ci0gIC8vIFN0YXJ0IHdpdGggYSBxdWlj
ayBjaGVjayB3aXRob3V0IHRha2luZyBhIGxvY2suCi0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSBy
ZXR1cm4gZmFsc2U7Ci0gIC8vIFdlIGRvbid0IGV2aWN0IGZyb20gYSBmdWxsIGNhY2hlIHVubGVz
cyB3ZSBhcmUgJ2ZvcmNpbmcnLgotICBpZiAoZm9yY2UgPT0gZmFsc2UgJiYgdXNlZF9zbG90c18g
PT0gY2FjaGVfc2l6ZV8pIHJldHVybiBmYWxzZTsKLQotICAvLyBHcmFiIGxvY2ssIGJ1dCBmaXJz
dCByZWxlYXNlIHRoZSBvdGhlciBsb2NrIGhlbGQgYnkgdGhpcyB0aHJlYWQuICBXZSB1c2UKLSAg
Ly8gdGhlIGxvY2sgaW52ZXJ0ZXIgdG8gZW5zdXJlIHRoYXQgd2UgbmV2ZXIgaG9sZCB0d28gc2l6
ZSBjbGFzcyBsb2NrcwotICAvLyBjb25jdXJyZW50bHkuICBUaGF0IGNhbiBjcmVhdGUgYSBkZWFk
bG9jayBiZWNhdXNlIHRoZXJlIGlzIG5vIHdlbGwKLSAgLy8gZGVmaW5lZCBuZXN0aW5nIG9yZGVy
LgotICBMb2NrSW52ZXJ0ZXIgbGkoJmNlbnRyYWxfY2FjaGVbbG9ja2VkX3NpemVfY2xhc3NdLmxv
Y2tfLCAmbG9ja18pOwotICBBU1NFUlQodXNlZF9zbG90c18gPD0gY2FjaGVfc2l6ZV8pOwotICBB
U1NFUlQoMCA8PSBjYWNoZV9zaXplXyk7Ci0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSByZXR1cm4g
ZmFsc2U7Ci0gIGlmICh1c2VkX3Nsb3RzXyA9PSBjYWNoZV9zaXplXykgewotICAgIGlmIChmb3Jj
ZSA9PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwotICAgIC8vIFJlbGVhc2VMaXN0VG9TcGFucyByZWxl
YXNlcyB0aGUgbG9jaywgc28gd2UgaGF2ZSB0byBtYWtlIGFsbCB0aGUKLSAgICAvLyB1cGRhdGVz
IHRvIHRoZSBjZW50cmFsIGxpc3QgYmVmb3JlIGNhbGxpbmcgaXQuCi0gICAgY2FjaGVfc2l6ZV8t
LTsKLSAgICB1c2VkX3Nsb3RzXy0tOwotICAgIFJlbGVhc2VMaXN0VG9TcGFucyh0Y19zbG90c19b
dXNlZF9zbG90c19dLmhlYWQpOworYm9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6U2hyaW5r
Q2FjaGUoaW50IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSkKK3sKKyAgICAvLyBTdGFydCB3
aXRoIGEgcXVpY2sgY2hlY2sgd2l0aG91dCB0YWtpbmcgYSBsb2NrLgorICAgIGlmICghY2FjaGVT
aXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gV2UgZG9uJ3QgZXZpY3QgZnJvbSBh
IGZ1bGwgY2FjaGUgdW5sZXNzIHdlIGFyZSAnZm9yY2luZycuCisgICAgaWYgKCFmb3JjZSAmJiB1
c2VkU2xvdHMgPT0gY2FjaGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBH
cmFiIGxvY2ssIGJ1dCBmaXJzdCByZWxlYXNlIHRoZSBvdGhlciBsb2NrIGhlbGQgYnkgdGhpcyB0
aHJlYWQuIFdlIHVzZQorICAgIC8vIHRoZSBsb2NrIGludmVydGVyIHRvIGVuc3VyZSB0aGF0IHdl
IG5ldmVyIGhvbGQgdHdvIHNpemUgY2xhc3MgbG9ja3MKKyAgICAvLyBjb25jdXJyZW50bHkuIFRo
YXQgY2FuIGNyZWF0ZSBhIGRlYWRsb2NrIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2VsbAorICAgIC8v
IGRlZmluZWQgbmVzdGluZyBvcmRlci4KKyAgICBMb2NrSW52ZXJ0ZXIgbGkoJmNlbnRyYWxDYWNo
ZVtsb2NrZWRTaXplQ2xhc3NdLmxvY2ssICZsb2NrKTsKKyAgICBBU1NFUlQodXNlZFNsb3RzIDw9
IGNhY2hlU2l6ZSk7CisgICAgQVNTRVJUKDAgPD0gY2FjaGVTaXplKTsKKyAgICBpZiAoIWNhY2hl
U2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh1c2VkU2xvdHMgPT0gY2FjaGVT
aXplKSB7CisgICAgICAgIGlmICghZm9yY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIC8vIFJlbGVhc2VMaXN0VG9TcGFucyByZWxlYXNlcyB0aGUgbG9jaywgc28gd2UgaGF2
ZSB0byBtYWtlIGFsbCB0aGUKKyAgICAgICAgLy8gdXBkYXRlcyB0byB0aGUgY2VudHJhbCBsaXN0
IGJlZm9yZSBjYWxsaW5nIGl0LgorICAgICAgICBjYWNoZVNpemUtLTsKKyAgICAgICAgdXNlZFNs
b3RzLS07CisgICAgICAgIFJlbGVhc2VMaXN0VG9TcGFucyh0Y1Nsb3RzW3VzZWRTbG90c10uaGVh
ZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYWNoZVNpemUtLTsKICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotICBjYWNoZV9zaXplXy0tOwotICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwg
dm9pZCAqZW5kLCBpbnQgTikgewotICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gIGlmIChO
ID09IG51bV9vYmplY3RzX3RvX21vdmVbc2l6ZV9jbGFzc19dICYmCi0gICAgTWFrZUNhY2hlU3Bh
Y2UoKSkgewotICAgIGludCBzbG90ID0gdXNlZF9zbG90c18rKzsKLSAgICBBU1NFUlQoc2xvdCA+
PTApOwotICAgIEFTU0VSVChzbG90IDwga051bVRyYW5zZmVyRW50cmllcyk7Ci0gICAgVENFbnRy
eSAqZW50cnkgPSAmdGNfc2xvdHNfW3Nsb3RdOwotICAgIGVudHJ5LT5oZWFkID0gc3RhcnQ7Ci0g
ICAgZW50cnktPnRhaWwgPSBlbmQ7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJlbGVhc2VMaXN0VG9T
cGFucyhzdGFydCk7Cit2b2lkIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2
b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgTikKK3sKKyAgICBTcGluTG9ja0hvbGRlciBoKCZs
b2NrKTsKKyAgICBpZiAoTiA9PSBudW1PYmplY3RzVG9Nb3ZlW3NpemVDbGFzc10KKyAgICAgICAg
JiYgTWFrZUNhY2hlU3BhY2UoKSkgeworICAgICAgICBpbnQgc2xvdCA9IHVzZWRTbG90cysrOwor
ICAgICAgICBBU1NFUlQoc2xvdCA+PTApOworICAgICAgICBBU1NFUlQoc2xvdCA8IGtOdW1UcmFu
c2ZlckVudHJpZXMpOworICAgICAgICBUQ0VudHJ5KiBlbnRyeSA9ICZ0Y1Nsb3RzW3Nsb3RdOwor
ICAgICAgICBlbnRyeS0+aGVhZCA9IHN0YXJ0OworICAgICAgICBlbnRyeS0+dGFpbCA9IGVuZDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWxlYXNlTGlzdFRvU3BhbnMoc3RhcnQpOwog
fQogCi12b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKHZvaWQgKipz
dGFydCwgdm9pZCAqKmVuZCwgaW50ICpOKSB7Ci0gIGludCBudW0gPSAqTjsKLSAgQVNTRVJUKG51
bSA+IDApOwotCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tfKTsKLSAgaWYgKG51bSA9PSBudW1f
b2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NfXSAmJiB1c2VkX3Nsb3RzXyA+IDApIHsKLSAgICBp
bnQgc2xvdCA9IC0tdXNlZF9zbG90c187Ci0gICAgQVNTRVJUKHNsb3QgPj0gMCk7Ci0gICAgVENF
bnRyeSAqZW50cnkgPSAmdGNfc2xvdHNfW3Nsb3RdOwotICAgICpzdGFydCA9IGVudHJ5LT5oZWFk
OwotICAgICplbmQgPSBlbnRyeS0+dGFpbDsKLSAgICByZXR1cm47Ci0gIH0KK3ZvaWQgVENNYWxs
b2NDZW50cmFsRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCwg
aW50ICpOKQoreworICAgIGludCBudW0gPSAqTjsKKyAgICBBU1NFUlQobnVtID4gMCk7CiAKLSAg
Ly8gVE9ETzogUHJlZmV0Y2ggbXVsdGlwbGUgVENFbnRyaWVzPwotICB2b2lkICp0YWlsID0gRmV0
Y2hGcm9tU3BhbnNTYWZlKCk7Ci0gIGlmICghdGFpbCkgewotICAgIC8vIFdlIGFyZSBjb21wbGV0
ZWx5IG91dCBvZiBtZW1vcnkuCi0gICAgKnN0YXJ0ID0gKmVuZCA9IE5VTEw7Ci0gICAgKk4gPSAw
OwotICAgIHJldHVybjsKLSAgfQorICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAgIGlm
IChudW0gPT0gbnVtT2JqZWN0c1RvTW92ZVtzaXplQ2xhc3NdICYmIHVzZWRTbG90cyA+IDApIHsK
KyAgICAgICAgaW50IHNsb3QgPSAtLXVzZWRTbG90czsKKyAgICAgICAgQVNTRVJUKHNsb3QgPj0g
MCk7CisgICAgICAgIFRDRW50cnkqIGVudHJ5ID0gJnRjU2xvdHNbc2xvdF07CisgICAgICAgICpz
dGFydCA9IGVudHJ5LT5oZWFkOworICAgICAgICAqZW5kID0gZW50cnktPnRhaWw7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgU0xMX1NldE5leHQodGFpbCwgTlVMTCk7Ci0gIHZvaWQgKmhl
YWQgPSB0YWlsOwotICBpbnQgY291bnQgPSAxOwotICB3aGlsZSAoY291bnQgPCBudW0pIHsKLSAg
ICB2b2lkICp0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgICBpZiAoIXQpIGJyZWFrOwotICAgIFNM
TF9QdXNoKCZoZWFkLCB0KTsKLSAgICBjb3VudCsrOwotICB9Ci0gICpzdGFydCA9IGhlYWQ7Ci0g
ICplbmQgPSB0YWlsOwotICAqTiA9IGNvdW50OwotfQorICAgIC8vIFRPRE86IFByZWZldGNoIG11
bHRpcGxlIFRDRW50cmllcz8KKyAgICB2b2lkKiB0YWlsID0gRmV0Y2hGcm9tU3BhbnNTYWZlKCk7
CisgICAgaWYgKCF0YWlsKSB7CisgICAgICAgIC8vIFdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBt
ZW1vcnkuCisgICAgICAgICpzdGFydCA9ICplbmQgPSAwOworICAgICAgICAqTiA9IDA7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBTTExTZXROZXh0KHRhaWwsIDApOworICAgIHZvaWQq
IGhlYWQgPSB0YWlsOworICAgIGludCBjb3VudCA9IDE7CisgICAgd2hpbGUgKGNvdW50IDwgbnVt
KSB7CisgICAgICAgIHZvaWQqIHQgPSBGZXRjaEZyb21TcGFucygpOworICAgICAgICBpZiAoIXQp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU0xMUHVzaCgmaGVhZCwgdCk7CisgICAgICAg
IGNvdW50Kys7CisgICAgfQorICAgICpzdGFydCA9IGhlYWQ7CisgICAgKmVuZCA9IHRhaWw7Cisg
ICAgKk4gPSBjb3VudDsKK30KIAotdm9pZCogVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0
Y2hGcm9tU3BhbnNTYWZlKCkgewotICB2b2lkICp0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgaWYg
KCF0KSB7Ci0gICAgUG9wdWxhdGUoKTsKLSAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgfQot
ICByZXR1cm4gdDsKK3ZvaWQqIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFu
c1NhZmUoKQoreworICAgIHZvaWQqIHQgPSBGZXRjaEZyb21TcGFucygpOworICAgIGlmICghdCkg
eworICAgICAgICBQb3B1bGF0ZSgpOworICAgICAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKKyAg
ICB9CisgICAgcmV0dXJuIHQ7CiB9CiAKLXZvaWQqIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6
OkZldGNoRnJvbVNwYW5zKCkgewotICBpZiAoRExMX0lzRW1wdHkoJm5vbmVtcHR5XykpIHJldHVy
biBOVUxMOwotICBTcGFuKiBzcGFuID0gbm9uZW1wdHlfLm5leHQ7Cit2b2lkKiBUQ01hbGxvY0Nl
bnRyYWxGcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMoKQoreworICAgIGlmIChETExfSXNFbXB0eSgm
bm9uZW1wdHkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBTcGFuKiBzcGFuID0gbm9uZW1wdHku
bmV4dDsKIAotICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyAhPSBOVUxMKTsKLSAgQVNTRVJUX1NQQU5f
Q09NTUlUVEVEKHNwYW4pOwotICBzcGFuLT5yZWZjb3VudCsrOwotICB2b2lkKiByZXN1bHQgPSBz
cGFuLT5vYmplY3RzOwotICBzcGFuLT5vYmplY3RzID0gKihyZWludGVycHJldF9jYXN0PHZvaWQq
Kj4ocmVzdWx0KSk7Ci0gIGlmIChzcGFuLT5vYmplY3RzID09IE5VTEwpIHsKLSAgICAvLyBNb3Zl
IHRvIGVtcHR5IGxpc3QKLSAgICBETExfUmVtb3ZlKHNwYW4pOwotICAgIERMTF9QcmVwZW5kKCZl
bXB0eV8sIHNwYW4pOwotICAgIEV2ZW50KHNwYW4sICdFJywgMCk7Ci0gIH0KLSAgY291bnRlcl8t
LTsKLSAgcmV0dXJuIHJlc3VsdDsKKyAgICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyk7CisgICAgQVNT
RVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pOworICAgIHNwYW4tPnJlZmNvdW50Kys7CisgICAgdm9p
ZCogcmVzdWx0ID0gc3Bhbi0+b2JqZWN0czsKKyAgICBzcGFuLT5vYmplY3RzID0gKihyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4ocmVzdWx0KSk7CisgICAgaWYgKCFzcGFuLT5vYmplY3RzKSB7Cisg
ICAgICAgIC8vIE1vdmUgdG8gZW1wdHkgbGlzdAorICAgICAgICBETExSZW1vdmUoc3Bhbik7Cisg
ICAgICAgIERMTFByZXBlbmQoJmVtcHR5LCBzcGFuKTsKKyAgICAgICAgRXZlbnQoc3BhbiwgJ0Un
LCAwKTsKKyAgICB9CisgICAgY291bnRlci0tOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8v
IEZldGNoIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gYW5kIGFkZCB0byB0aGUgY2VudHJhbCBjYWNo
ZSBmcmVlbGlzdC4KLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0
OjpQb3B1bGF0ZSgpIHsKLSAgLy8gUmVsZWFzZSBjZW50cmFsIGxpc3QgbG9jayB3aGlsZSBvcGVy
YXRpbmcgb24gcGFnZWhlYXAKLSAgbG9ja18uVW5sb2NrKCk7Ci0gIGNvbnN0IHNpemVfdCBucGFn
ZXMgPSBjbGFzc190b19wYWdlc1tzaXplX2NsYXNzX107Ci0KLSAgU3Bhbiogc3BhbjsKLSAgewot
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIHNwYW4gPSBwYWdlaGVh
cC0+TmV3KG5wYWdlcyk7Ci0gICAgaWYgKHNwYW4pIHBhZ2VoZWFwLT5SZWdpc3RlclNpemVDbGFz
cyhzcGFuLCBzaXplX2NsYXNzXyk7Ci0gIH0KLSAgaWYgKHNwYW4gPT0gTlVMTCkgeworQUxXQVlT
X0lOTElORSB2b2lkIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpQb3B1bGF0ZSgpCit7CisgICAg
Ly8gUmVsZWFzZSBjZW50cmFsIGxpc3QgbG9jayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAK
KyAgICBsb2NrLlVubG9jaygpOworICAgIGNvbnN0IHNpemVfdCBucGFnZXMgPSBjbGFzc190b19w
YWdlc1tzaXplQ2xhc3NdOworCisgICAgU3Bhbiogc3BhbjsKKyAgICB7CisgICAgICAgIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIHNwYW4gPSBwYWdlaGVhcC0+TmV3
KG5wYWdlcyk7CisgICAgICAgIGlmIChzcGFuKQorICAgICAgICAgICAgcGFnZWhlYXAtPlJlZ2lz
dGVyU2l6ZUNsYXNzKHNwYW4sIHNpemVDbGFzcyk7CisgICAgfQorICAgIGlmICghc3Bhbikgewog
I2lmIEhBVkUoRVJSTk9fSCkKLSAgICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZDogJWRcbiIs
IGVycm5vKTsKKyAgICAgICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnJu
byk7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkOiAl
ZFxuIiwgOjpHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFp
bGVkOiAlZFxuIiwgOjpHZXRMYXN0RXJyb3IoKSk7CiAjZWxzZQotICAgIE1FU1NBR0UoImFsbG9j
YXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWlsZWRcbiIp
OwogI2VuZGlmCi0gICAgbG9ja18uTG9jaygpOwotICAgIHJldHVybjsKLSAgfQotICBBU1NFUlRf
U1BBTl9DT01NSVRURUQoc3Bhbik7Ci0gIEFTU0VSVChzcGFuLT5sZW5ndGggPT0gbnBhZ2VzKTsK
LSAgLy8gQ2FjaGUgc2l6ZWNsYXNzIGluZm8gZWFnZXJseS4gIExvY2tpbmcgaXMgbm90IG5lY2Vz
c2FyeS4KLSAgLy8gKEluc3RlYWQgb2YgYmVpbmcgZWFnZXIsIHdlIGNvdWxkIGp1c3QgcmVwbGFj
ZSBhbnkgc3RhbGUgaW5mbwotICAvLyBhYm91dCB0aGlzIHNwYW4sIGJ1dCB0aGF0IHNlZW1zIHRv
IGJlIG5vIGJldHRlciBpbiBwcmFjdGljZS4pCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBh
Z2VzOyBpKyspIHsKLSAgICBwYWdlaGVhcC0+Q2FjaGVTaXplQ2xhc3Moc3Bhbi0+c3RhcnQgKyBp
LCBzaXplX2NsYXNzXyk7Ci0gIH0KLQotICAvLyBTcGxpdCB0aGUgYmxvY2sgaW50byBwaWVjZXMg
YW5kIGFkZCB0byB0aGUgZnJlZS1saXN0Ci0gIC8vIFRPRE86IGNvbG9yaW5nIG9mIG9iamVjdHMg
dG8gYXZvaWQgY2FjaGUgY29uZmxpY3RzPwotICB2b2lkKiogdGFpbCA9ICZzcGFuLT5vYmplY3Rz
OwotICBjaGFyKiBwdHIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzcGFuLT5zdGFydCA8PCBr
UGFnZVNoaWZ0KTsKLSAgY2hhciogbGltaXQgPSBwdHIgKyAobnBhZ2VzIDw8IGtQYWdlU2hpZnQp
OwotICBjb25zdCBzaXplX3Qgc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZV9jbGFzc18pOwot
ICBpbnQgbnVtID0gMDsKLSAgY2hhciogbnB0cjsKLSAgd2hpbGUgKChucHRyID0gcHRyICsgc2l6
ZSkgPD0gbGltaXQpIHsKLSAgICAqdGFpbCA9IHB0cjsKLSAgICB0YWlsID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8dm9pZCoqPihwdHIpOwotICAgIHB0ciA9IG5wdHI7Ci0gICAgbnVtKys7Ci0gIH0K
LSAgQVNTRVJUKHB0ciA8PSBsaW1pdCk7Ci0gICp0YWlsID0gTlVMTDsKLSAgc3Bhbi0+cmVmY291
bnQgPSAwOyAvLyBObyBzdWItb2JqZWN0IGluIHVzZSB5ZXQKLQotICAvLyBBZGQgc3BhbiB0byBs
aXN0IG9mIG5vbi1lbXB0eSBzcGFucwotICBsb2NrXy5Mb2NrKCk7Ci0gIERMTF9QcmVwZW5kKCZu
b25lbXB0eV8sIHNwYW4pOwotICBjb3VudGVyXyArPSBudW07CisgICAgICAgIGxvY2suTG9jaygp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFu
KTsKKyAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID09IG5wYWdlcyk7CisgICAgLy8gQ2FjaGUgc2l6
ZWNsYXNzIGluZm8gZWFnZXJseS4gTG9ja2luZyBpcyBub3QgbmVjZXNzYXJ5LgorICAgIC8vIChJ
bnN0ZWFkIG9mIGJlaW5nIGVhZ2VyLCB3ZSBjb3VsZCBqdXN0IHJlcGxhY2UgYW55IHN0YWxlIGlu
Zm8KKyAgICAvLyBhYm91dCB0aGlzIHNwYW4sIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIG5vIGJldHRl
ciBpbiBwcmFjdGljZS4pCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucGFnZXM7IGkrKykK
KyAgICAgICAgcGFnZWhlYXAtPkNhY2hlU2l6ZUNsYXNzKHNwYW4tPnN0YXJ0ICsgaSwgc2l6ZUNs
YXNzKTsKKworICAgIC8vIFNwbGl0IHRoZSBibG9jayBpbnRvIHBpZWNlcyBhbmQgYWRkIHRvIHRo
ZSBmcmVlLWxpc3QKKyAgICAvLyBUT0RPOiBjb2xvcmluZyBvZiBvYmplY3RzIHRvIGF2b2lkIGNh
Y2hlIGNvbmZsaWN0cz8KKyAgICB2b2lkKiogdGFpbCA9ICZzcGFuLT5vYmplY3RzOworICAgIGNo
YXIqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hp
ZnQpOworICAgIGNoYXIqIGxpbWl0ID0gcHRyICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0KTsKKyAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZUNsYXNzKTsKKyAgICBp
bnQgbnVtID0gMDsKKyAgICBjaGFyKiBucHRyOworICAgIHdoaWxlICgobnB0ciA9IHB0ciArIHNp
emUpIDw9IGxpbWl0KSB7CisgICAgICAgICp0YWlsID0gcHRyOworICAgICAgICB0YWlsID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8dm9pZCoqPihwdHIpOworICAgICAgICAgcHRyID0gbnB0cjsKKyAg
ICAgICAgbnVtKys7CisgICAgfQorICAgIEFTU0VSVChwdHIgPD0gbGltaXQpOworICAgICp0YWls
ID0gMDsKKyAgICBzcGFuLT5yZWZjb3VudCA9IDA7IC8vIE5vIHN1Yi1vYmplY3QgaW4gdXNlIHll
dAorCisgICAgLy8gQWRkIHNwYW4gdG8gbGlzdCBvZiBub24tZW1wdHkgc3BhbnMKKyAgICBsb2Nr
LkxvY2soKTsKKyAgICBETExQcmVwZW5kKCZub25lbXB0eSwgc3Bhbik7CisgICAgY291bnRlciAr
PSBudW07CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVENNYWxsb2NfVGhyZWFkQ2FjaGUgaW1wbGVt
ZW50YXRpb24KKy8vIFRDTWFsbG9jVGhyZWFkQ2FjaGUgaW1wbGVtZW50YXRpb24KIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1pbmxpbmUgYm9vbCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlv
bihzaXplX3QgaykgewotICBpZiAoYnl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsKLSAgICBQaWNr
TmV4dFNhbXBsZShrKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBieXRlc191
bnRpbF9zYW1wbGVfIC09IGs7CitpbmxpbmUgYm9vbCBUQ01hbGxvY1RocmVhZENhY2hlOjpTYW1w
bGVBbGxvY2F0aW9uKHNpemVfdCBrKQoreworICAgIGlmIChieXRlc1VudGlsU2FtcGxlIDwgaykg
eworICAgICAgICBQaWNrTmV4dFNhbXBsZShrKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGJ5dGVzVW50aWxTYW1wbGUgLT0gazsKICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KIH0K
IAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdChUaHJlYWRJZGVudGlmaWVyIHRpZCkg
ewotICBzaXplXyA9IDA7Ci0gIG5leHRfID0gTlVMTDsKLSAgcHJldl8gPSBOVUxMOwotICB0aWRf
ICA9IHRpZDsKLSAgaW5fc2V0c3BlY2lmaWNfID0gZmFsc2U7Ci0gIGZvciAoc2l6ZV90IGNsID0g
MDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgIGxpc3RfW2NsXS5Jbml0KCk7Ci0gIH0K
LQotICAvLyBJbml0aWFsaXplIFJORyAtLSBydW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29k
IHZhbHVlcwotICBieXRlc191bnRpbF9zYW1wbGVfID0gMDsKLSAgcm5kXyA9IHN0YXRpY19jYXN0
PHVpbnQzMl90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcykpOwotICBmb3IgKGlu
dCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0gICAgUGlja05leHRTYW1wbGUoc3RhdGljX2Nhc3Q8
c2l6ZV90PihGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyICogMikpOwotICB9Ci19Ci0K
LXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkNsZWFudXAoKSB7Ci0gIC8vIFB1dCB1bnVzZWQg
bWVtb3J5IGJhY2sgaW50byBjZW50cmFsIGNhY2hlCi0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wg
PCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgIGlmIChsaXN0X1tjbF0ubGVuZ3RoKCkgPiAwKSB7
Ci0gICAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIGxpc3RfW2NsXS5sZW5ndGgoKSk7Cit2
b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQpCit7Cisg
ICAgc2l6ZSA9IDA7CisgICAgbmV4dCA9IDA7CisgICAgcHJldiA9IDA7CisgICAgdGlkICA9IHRp
ZDsKKyAgICBpblNldHNwZWNpZmljID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgY2wgPSAwOyBj
bCA8IGtOdW1DbGFzc2VzOyArK2NsKQorICAgICAgICBsaXN0W2NsXS5Jbml0KCk7CisKKyAgICAv
LyBJbml0aWFsaXplIFJORyAtLSBydW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29kIHZhbHVl
cworICAgIGJ5dGVzVW50aWxTYW1wbGUgPSAwOworICAgIHJuZCA9IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcykpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIFBpY2tOZXh0U2FtcGxlKHN0YXRpY19jYXN0PHNp
emVfdD4oRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlciAqIDIpKTsKK30KKwordm9pZCBU
Q01hbGxvY1RocmVhZENhY2hlOjpDbGVhbnVwKCkKK3sKKyAgICAvLyBQdXQgdW51c2VkIG1lbW9y
eSBiYWNrIGludG8gY2VudHJhbCBjYWNoZQorICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBr
TnVtQ2xhc3NlczsgKytjbCkKKyAgICAgICAgaWYgKGxpc3RbY2xdLmxlbmd0aCgpID4gMCkKKyAg
ICAgICAgICAgIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShjbCwgbGlzdFtjbF0ubGVuZ3RoKCkpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkFsbG9jYXRlKHNp
emVfdCBzaXplKQoreworICAgIEFTU0VSVChzaXplIDw9IGtNYXhTaXplKTsKKyAgICBjb25zdCBz
aXplX3QgY2wgPSBTaXplQ2xhc3Moc2l6ZSk7CisgICAgRnJlZUxpc3QqIHBMaXN0ID0gJmxpc3Rb
Y2xdOworICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwor
ICAgIGlmIChwTGlzdC0+ZW1wdHkoKSkgeworICAgICAgICBGZXRjaEZyb21DZW50cmFsQ2FjaGUo
Y2wsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgaWYgKHBMaXN0LT5lbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICB9CisgICAgc2l6ZSAtPSBhbGxvY2F0aW9uU2l6ZTsK
KyAgICByZXR1cm4gcExpc3QtPlBvcCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIFRDTWFs
bG9jX1RocmVhZENhY2hlOjpBbGxvY2F0ZShzaXplX3Qgc2l6ZSkgewotICBBU1NFUlQoc2l6ZSA8
PSBrTWF4U2l6ZSk7Ci0gIGNvbnN0IHNpemVfdCBjbCA9IFNpemVDbGFzcyhzaXplKTsKLSAgRnJl
ZUxpc3QqIGxpc3QgPSAmbGlzdF9bY2xdOwotICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBCeXRl
U2l6ZUZvckNsYXNzKGNsKTsKLSAgaWYgKGxpc3QtPmVtcHR5KCkpIHsKLSAgICBGZXRjaEZyb21D
ZW50cmFsQ2FjaGUoY2wsIGFsbG9jYXRpb25TaXplKTsKLSAgICBpZiAobGlzdC0+ZW1wdHkoKSkg
cmV0dXJuIE5VTEw7Ci0gIH0KLSAgc2l6ZV8gLT0gYWxsb2NhdGlvblNpemU7Ci0gIHJldHVybiBs
aXN0LT5Qb3AoKTsKLX0KLQotaW5saW5lIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxs
b2NhdGUodm9pZCogcHRyLCBzaXplX3QgY2wpIHsKLSAgc2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFz
cyhjbCk7Ci0gIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgbGlzdC0+UHVzaChwdHIp
OwotICAvLyBJZiBlbm91Z2ggZGF0YSBpcyBmcmVlLCBwdXQgYmFjayBpbnRvIGNlbnRyYWwgY2Fj
aGUKLSAgaWYgKGxpc3QtPmxlbmd0aCgpID4ga01heEZyZWVMaXN0TGVuZ3RoKSB7Ci0gICAgUmVs
ZWFzZVRvQ2VudHJhbENhY2hlKGNsLCBudW1fb2JqZWN0c190b19tb3ZlW2NsXSk7Ci0gIH0KLSAg
aWYgKHNpemVfID49IHBlcl90aHJlYWRfY2FjaGVfc2l6ZSkgU2NhdmVuZ2UoKTsKK2lubGluZSB2
b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3QgY2wp
Cit7CisgICAgc2l6ZSArPSBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKKyAgICBGcmVlTGlzdCogcExp
c3QgPSAmbGlzdFtjbF07CisgICAgcExpc3QtPlB1c2gocHRyKTsKKyAgICAvLyBJZiBlbm91Z2gg
ZGF0YSBpcyBmcmVlLCBwdXQgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKKyAgICBpZiAocExpc3Qt
Pmxlbmd0aCgpID4ga01heEZyZWVMaXN0TGVuZ3RoKQorICAgICAgICBSZWxlYXNlVG9DZW50cmFs
Q2FjaGUoY2wsIG51bU9iamVjdHNUb01vdmVbY2xdKTsKKyAgICBpZiAoc2l6ZSA+PSBwZXJUaHJl
YWRDYWNoZVNpemUpCisgICAgICAgIFNjYXZlbmdlKCk7CiB9CiAKIC8vIFJlbW92ZSBzb21lIG9i
amVjdHMgb2YgY2xhc3MgImNsIiBmcm9tIGNlbnRyYWwgY2FjaGUgYW5kIGFkZCB0byB0aHJlYWQg
aGVhcAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpGZXRjaEZyb21D
ZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBzaXplX3QgYWxsb2NhdGlvblNpemUpIHsKLSAgaW50IGZl
dGNoX2NvdW50ID0gbnVtX29iamVjdHNfdG9fbW92ZVtjbF07Ci0gIHZvaWQgKnN0YXJ0LCAqZW5k
OwotICBjZW50cmFsX2NhY2hlW2NsXS5SZW1vdmVSYW5nZSgmc3RhcnQsICZlbmQsICZmZXRjaF9j
b3VudCk7Ci0gIGxpc3RfW2NsXS5QdXNoUmFuZ2UoZmV0Y2hfY291bnQsIHN0YXJ0LCBlbmQpOwot
ICBzaXplXyArPSBhbGxvY2F0aW9uU2l6ZSAqIGZldGNoX2NvdW50OworQUxXQVlTX0lOTElORSB2
b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2ws
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSkKK3sKKyAgICBpbnQgZmV0Y2hDb3VudCA9IG51bU9iamVj
dHNUb01vdmVbY2xdOworICAgIHZvaWQqIHN0YXJ0OworICAgIHZvaWQqIGVuZDsKKyAgICBjZW50
cmFsQ2FjaGVbY2xdLlJlbW92ZVJhbmdlKCZzdGFydCwgJmVuZCwgJmZldGNoQ291bnQpOworICAg
IGxpc3RbY2xdLlB1c2hSYW5nZShmZXRjaENvdW50LCBzdGFydCwgZW5kKTsKKyAgICBzaXplICs9
IGFsbG9jYXRpb25TaXplICogZmV0Y2hDb3VudDsKIH0KIAogLy8gUmVtb3ZlIHNvbWUgb2JqZWN0
cyBvZiBjbGFzcyAiY2wiIGZyb20gdGhyZWFkIGhlYXAgYW5kIGFkZCB0byBjZW50cmFsIGNhY2hl
Ci1pbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hl
KHNpemVfdCBjbCwgaW50IE4pIHsKLSAgQVNTRVJUKE4gPiAwKTsKLSAgRnJlZUxpc3QqIHNyYyA9
ICZsaXN0X1tjbF07Ci0gIGlmIChOID4gc3JjLT5sZW5ndGgoKSkgTiA9IHNyYy0+bGVuZ3RoKCk7
Ci0gIHNpemVfIC09IE4qQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0KLSAgLy8gV2UgcmV0dXJuIHBy
ZXBhY2thZ2VkIGNoYWlucyBvZiB0aGUgY29ycmVjdCBzaXplIHRvIHRoZSBjZW50cmFsIGNhY2hl
LgotICAvLyBUT0RPOiBVc2UgdGhlIHNhbWUgZm9ybWF0IGludGVybmFsbHkgaW4gdGhlIHRocmVh
ZCBjYWNoZXM/Ci0gIGludCBiYXRjaF9zaXplID0gbnVtX29iamVjdHNfdG9fbW92ZVtjbF07Ci0g
IHdoaWxlIChOID4gYmF0Y2hfc2l6ZSkgewotICAgIHZvaWQgKnRhaWwsICpoZWFkOwotICAgIHNy
Yy0+UG9wUmFuZ2UoYmF0Y2hfc2l6ZSwgJmhlYWQsICZ0YWlsKTsKLSAgICBjZW50cmFsX2NhY2hl
W2NsXS5JbnNlcnRSYW5nZShoZWFkLCB0YWlsLCBiYXRjaF9zaXplKTsKLSAgICBOIC09IGJhdGNo
X3NpemU7Ci0gIH0KLSAgdm9pZCAqdGFpbCwgKmhlYWQ7Ci0gIHNyYy0+UG9wUmFuZ2UoTiwgJmhl
YWQsICZ0YWlsKTsKLSAgY2VudHJhbF9jYWNoZVtjbF0uSW5zZXJ0UmFuZ2UoaGVhZCwgdGFpbCwg
Tik7CitpbmxpbmUgdm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2Fj
aGUoc2l6ZV90IGNsLCBpbnQgTikKK3sKKyAgICBBU1NFUlQoTiA+IDApOworICAgIEZyZWVMaXN0
KiBzcmMgPSAmbGlzdFtjbF07CisgICAgaWYgKE4gPiBzcmMtPmxlbmd0aCgpKQorICAgICAgICBO
ID0gc3JjLT5sZW5ndGgoKTsKKyAgICBzaXplIC09IE4qQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisK
KyAgICAvLyBXZSByZXR1cm4gcHJlcGFja2FnZWQgY2hhaW5zIG9mIHRoZSBjb3JyZWN0IHNpemUg
dG8gdGhlIGNlbnRyYWwgY2FjaGUuCisgICAgLy8gVE9ETzogVXNlIHRoZSBzYW1lIGZvcm1hdCBp
bnRlcm5hbGx5IGluIHRoZSB0aHJlYWQgY2FjaGVzPworICAgIGludCBiYXRjaFNpemUgPSBudW1P
YmplY3RzVG9Nb3ZlW2NsXTsKKyAgICB3aGlsZSAoTiA+IGJhdGNoU2l6ZSkgeworICAgICAgICB2
b2lkKiB0YWlsOworICAgICAgICB2b2lkKiBoZWFkOworICAgICAgICBzcmMtPlBvcFJhbmdlKGJh
dGNoU2l6ZSwgJmhlYWQsICZ0YWlsKTsKKyAgICAgICAgY2VudHJhbENhY2hlW2NsXS5JbnNlcnRS
YW5nZShoZWFkLCB0YWlsLCBiYXRjaFNpemUpOworICAgICAgICBOIC09IGJhdGNoU2l6ZTsKKyAg
ICB9CisgICAgdm9pZCogdGFpbDsKKyAgICB2b2lkKiBoZWFkOworICAgIHNyYy0+UG9wUmFuZ2Uo
TiwgJmhlYWQsICZ0YWlsKTsKKyAgICBjZW50cmFsQ2FjaGVbY2xdLkluc2VydFJhbmdlKGhlYWQs
IHRhaWwsIE4pOwogfQogCiAvLyBSZWxlYXNlIGlkbGUgbWVtb3J5IHRvIHRoZSBjZW50cmFsIGNh
Y2hlCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2NhdmVuZ2UoKSB7Ci0gIC8v
IElmIHRoZSBsb3ctd2F0ZXIgbWFyayBmb3IgdGhlIGZyZWUgbGlzdCBpcyBMLCBpdCBtZWFucyB3
ZSB3b3VsZAotICAvLyBub3QgaGF2ZSBoYWQgdG8gYWxsb2NhdGUgYW55dGhpbmcgZnJvbSB0aGUg
Y2VudHJhbCBjYWNoZSBldmVuIGlmCi0gIC8vIHdlIGhhZCByZWR1Y2VkIHRoZSBmcmVlIGxpc3Qg
c2l6ZSBieSBMLiAgV2UgYWltIHRvIGdldCBjbG9zZXIgdG8KLSAgLy8gdGhhdCBzaXR1YXRpb24g
YnkgZHJvcHBpbmcgTC8yIG5vZGVzIGZyb20gdGhlIGZyZWUgbGlzdC4gIFRoaXMKLSAgLy8gbWF5
IG5vdCByZWxlYXNlIG11Y2ggbWVtb3J5LCBidXQgaWYgc28gd2Ugd2lsbCBjYWxsIHNjYXZlbmdl
IGFnYWluCi0gIC8vIHByZXR0eSBzb29uIGFuZCB0aGUgbG93LXdhdGVyIG1hcmtzIHdpbGwgYmUg
aGlnaCBvbiB0aGF0IGNhbGwuCi0gIC8vaW50NjQgc3RhcnQgPSBDeWNsZUNsb2NrOjpOb3coKTsK
LQotICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7IGNsKyspIHsKLSAgICBG
cmVlTGlzdCogbGlzdCA9ICZsaXN0X1tjbF07Ci0gICAgY29uc3QgaW50IGxvd21hcmsgPSBsaXN0
LT5sb3d3YXRlcm1hcmsoKTsKLSAgICBpZiAobG93bWFyayA+IDApIHsKLSAgICAgIGNvbnN0IGlu
dCBkcm9wID0gKGxvd21hcmsgPiAxKSA/IGxvd21hcmsvMiA6IDE7Ci0gICAgICBSZWxlYXNlVG9D
ZW50cmFsQ2FjaGUoY2wsIGRyb3ApOwotICAgIH0KLSAgICBsaXN0LT5jbGVhcl9sb3d3YXRlcm1h
cmsoKTsKLSAgfQotCi0gIC8vaW50NjQgZmluaXNoID0gQ3ljbGVDbG9jazo6Tm93KCk7Ci0gIC8v
Q3ljbGVUaW1lciBjdDsKLSAgLy9NRVNTQUdFKCJHQzogJS4wZiBuc1xuIiwgY3QuQ3ljbGVzVG9V
c2VjKGZpbmlzaC1zdGFydCkqMTAwMC4wKTsKLX0KLQotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6UGlja05leHRTYW1wbGUoc2l6ZV90IGspIHsKLSAgLy8gTWFrZSBuZXh0ICJyYW5kb20iIG51
bWJlcgotICAvLyB4XjMyK3heMjIreF4yK3heMSsxIGlzIGEgcHJpbWl0aXZlIHBvbHlub21pYWwg
Zm9yIHJhbmRvbSBudW1iZXJzCi0gIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrUG9seSA9ICgxIDw8
IDIyKSB8ICgxIDw8IDIpIHwgKDEgPDwgMSkgfCAoMSA8PCAwKTsKLSAgdWludDMyX3QgciA9IHJu
ZF87Ci0gIHJuZF8gPSAociA8PCAxKSBeICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocikgPj4gMzEp
ICYga1BvbHkpOwotCi0gIC8vIE5leHQgcG9pbnQgaXMgInJuZF8gJSAoc2FtcGxlX3BlcmlvZCki
LiAgSS5lLiwgYXZlcmFnZQotICAvLyBpbmNyZW1lbnQgaXMgInNhbXBsZV9wZXJpb2QvMiIuCi0g
IGNvbnN0IGludCBmbGFnX3ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihGTEFHU190Y21hbGxvY19z
YW1wbGVfcGFyYW1ldGVyKTsKLSAgc3RhdGljIGludCBsYXN0X2ZsYWdfdmFsdWUgPSAtMTsKLQot
ICBpZiAoZmxhZ192YWx1ZSAhPSBsYXN0X2ZsYWdfdmFsdWUpIHsKLSAgICBTcGluTG9ja0hvbGRl
ciBoKCZzYW1wbGVfcGVyaW9kX2xvY2spOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkg
PCAoc3RhdGljX2Nhc3Q8aW50PihzaXplb2YocHJpbWVzX2xpc3QpL3NpemVvZihwcmltZXNfbGlz
dFswXSkpIC0gMSk7IGkrKykgewotICAgICAgaWYgKHByaW1lc19saXN0W2ldID49IGZsYWdfdmFs
dWUpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9CitpbmxpbmUgdm9pZCBUQ01hbGxvY1RocmVh
ZENhY2hlOjpTY2F2ZW5nZSgpCit7CisgICAgLy8gSWYgdGhlIGxvdy13YXRlciBtYXJrIGZvciB0
aGUgZnJlZSBsaXN0IGlzIEwsIGl0IG1lYW5zIHdlIHdvdWxkCisgICAgLy8gbm90IGhhdmUgaGFk
IHRvIGFsbG9jYXRlIGFueXRoaW5nIGZyb20gdGhlIGNlbnRyYWwgY2FjaGUgZXZlbiBpZgorICAg
IC8vIHdlIGhhZCByZWR1Y2VkIHRoZSBmcmVlIGxpc3Qgc2l6ZSBieSBMLiBXZSBhaW0gdG8gZ2V0
IGNsb3NlciB0bworICAgIC8vIHRoYXQgc2l0dWF0aW9uIGJ5IGRyb3BwaW5nIEwvMiBub2RlcyBm
cm9tIHRoZSBmcmVlIGxpc3QuIFRoaXMKKyAgICAvLyBtYXkgbm90IHJlbGVhc2UgbXVjaCBtZW1v
cnksIGJ1dCBpZiBzbyB3ZSB3aWxsIGNhbGwgc2NhdmVuZ2UgYWdhaW4KKyAgICAvLyBwcmV0dHkg
c29vbiBhbmQgdGhlIGxvdy13YXRlciBtYXJrcyB3aWxsIGJlIGhpZ2ggb24gdGhhdCBjYWxsLgor
CisgICAgLy8gaW50NjQgc3RhcnQgPSBDeWNsZUNsb2NrOjpOb3coKTsKKworICAgIGZvciAoc2l6
ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgY2wrKykgeworICAgICAgICBGcmVlTGlzdCog
cExpc3QgPSAmbGlzdFtjbF07CisgICAgICAgIGNvbnN0IGludCBsb3dtYXJrID0gcExpc3QtPmxv
d3dhdGVybWFyaygpOworICAgICAgICBpZiAobG93bWFyayA+IDApIHsKKyAgICAgICAgICAgIGNv
bnN0IGludCBkcm9wID0gKGxvd21hcmsgPiAxKSA/IGxvd21hcmsgLyAyIDogMTsKKyAgICAgICAg
ICAgIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShjbCwgZHJvcCk7CisgICAgICAgIH0KKyAgICAgICAg
cExpc3QtPmNsZWFyTG93d2F0ZXJtYXJrKCk7CiAgICAgfQotICAgIHNhbXBsZV9wZXJpb2QgPSBw
cmltZXNfbGlzdFtpXTsKLSAgICBsYXN0X2ZsYWdfdmFsdWUgPSBmbGFnX3ZhbHVlOwotICB9Ci0K
LSAgYnl0ZXNfdW50aWxfc2FtcGxlXyArPSBybmRfICUgc2FtcGxlX3BlcmlvZDsKLQotICBpZiAo
ayA+IChzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSA+PiAyKSkgewotICAgIC8vIElmIHRoZSB1c2Vy
IGhhcyBhc2tlZCBmb3IgYSBodWdlIGFsbG9jYXRpb24gdGhlbiBpdCBpcyBwb3NzaWJsZQotICAg
IC8vIGZvciB0aGUgY29kZSBiZWxvdyB0byBsb29wIGluZmluaXRlbHkuICBKdXN0IHJldHVybiAo
bm90ZSB0aGF0Ci0gICAgLy8gdGhpcyB0aHJvd3Mgb2ZmIHRoZSBzYW1wbGluZyBhY2N1cmFjeSBz
b21ld2hhdCwgYnV0IGEgdXNlciB3aG8KLSAgICAvLyBpcyBhbGxvY2F0aW5nIG1vcmUgdGhhbiAx
RyBvZiBtZW1vcnkgYXQgYSB0aW1lIGNhbiBsaXZlIHdpdGggYQotICAgIC8vIG1pbm9yIGluYWNj
dXJhY3kgaW4gcHJvZmlsaW5nIG9mIHNtYWxsIGFsbG9jYXRpb25zLCBhbmQgYWxzbwotICAgIC8v
IHdvdWxkIHJhdGhlciBub3Qgd2FpdCBmb3IgdGhlIGxvb3AgYmVsb3cgdG8gdGVybWluYXRlKS4K
LSAgICByZXR1cm47Ci0gIH0KLQotICB3aGlsZSAoYnl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsK
LSAgICAvLyBJbmNyZWFzZSBieXRlc191bnRpbF9zYW1wbGVfIGJ5IGVub3VnaCBhdmVyYWdlIHNh
bXBsaW5nIHBlcmlvZHMKLSAgICAvLyAoc2FtcGxlX3BlcmlvZCA+PiAxKSB0byBhbGxvdyB1cyB0
byBzYW1wbGUgcGFzdCB0aGUgY3VycmVudAotICAgIC8vIGFsbG9jYXRpb24uCi0gICAgYnl0ZXNf
dW50aWxfc2FtcGxlXyArPSAoc2FtcGxlX3BlcmlvZCA+PiAxKTsKLSAgfQogCi0gIGJ5dGVzX3Vu
dGlsX3NhbXBsZV8gLT0gazsKLX0KKyAgICAvLyBpbnQ2NCBmaW5pc2ggPSBDeWNsZUNsb2NrOjpO
b3coKTsKKyAgICAvLyBDeWNsZVRpbWVyIGN0OworICAgIC8vIE1FU1NBR0UoIkdDOiAlLjBmIG5z
XG4iLCBjdC5DeWNsZXNUb1VzZWMoZmluaXNoLXN0YXJ0KSoxMDAwLjApOworfQorCit2b2lkIFRD
TWFsbG9jVGhyZWFkQ2FjaGU6OlBpY2tOZXh0U2FtcGxlKHNpemVfdCBrKQoreworICAgIC8vIE1h
a2UgbmV4dCAicmFuZG9tIiBudW1iZXIKKyAgICAvLyB4XjMyK3heMjIreF4yK3heMSsxIGlzIGEg
cHJpbWl0aXZlIHBvbHlub21pYWwgZm9yIHJhbmRvbSBudW1iZXJzCisgICAgc3RhdGljIGNvbnN0
IHVpbnQzMl90IGtQb2x5ID0gKDEgPDwgMjIpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8
IDApOworICAgIHVpbnQzMl90IHIgPSBybmQ7CisgICAgcm5kID0gKHIgPDwgMSkgXiAoKHN0YXRp
Y19jYXN0PGludDMyX3Q+KHIpID4+IDMxKSAmIGtQb2x5KTsKKworICAgIC8vIE5leHQgcG9pbnQg
aXMgInJuZCAlIChzYW1wbGVfcGVyaW9kKSIuIEkuZS4sIGF2ZXJhZ2UKKyAgICAvLyBpbmNyZW1l
bnQgaXMgInNhbXBsZV9wZXJpb2QvMiIuCisgICAgY29uc3QgaW50IGZsYWdWYWx1ZSA9IHN0YXRp
Y19jYXN0PGludD4oRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlcik7CisgICAgc3RhdGlj
IGludCBsYXN0RmxhZ1ZhbHVlID0gLTE7CisKKyAgICBpZiAoZmxhZ1ZhbHVlICE9IGxhc3RGbGFn
VmFsdWUpIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmc2FtcGxlX3BlcmlvZF9sb2NrKTsK
KyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YocHJpbWVzTGlzdCkgLyBzaXplb2YocHJpbWVzTGlzdFswXSkpIC0gMSk7IGkrKykK
KyAgICAgICAgICAgIGlmIChwcmltZXNMaXN0W2ldID49IGZsYWdWYWx1ZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgc2FtcGxlX3BlcmlvZCA9IHByaW1lc0xpc3RbaV07CisgICAg
ICAgIGxhc3RGbGFnVmFsdWUgPSBmbGFnVmFsdWU7CisgICAgfQorCisgICAgYnl0ZXNVbnRpbFNh
bXBsZSArPSBybmQgJSBzYW1wbGVfcGVyaW9kOworCisgICAgaWYgKGsgPiAoc3RhdGljX2Nhc3Q8
c2l6ZV90PigtMSkgPj4gMikpCisgICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBhc2tlZCBmb3Ig
YSBodWdlIGFsbG9jYXRpb24gdGhlbiBpdCBpcyBwb3NzaWJsZQorICAgICAgICAvLyBmb3IgdGhl
IGNvZGUgYmVsb3cgdG8gbG9vcCBpbmZpbml0ZWx5LiBKdXN0IHJldHVybiAobm90ZSB0aGF0Cisg
ICAgICAgIC8vIHRoaXMgdGhyb3dzIG9mZiB0aGUgc2FtcGxpbmcgYWNjdXJhY3kgc29tZXdoYXQs
IGJ1dCBhIHVzZXIgd2hvCisgICAgICAgIC8vIGlzIGFsbG9jYXRpbmcgbW9yZSB0aGFuIDFHIG9m
IG1lbW9yeSBhdCBhIHRpbWUgY2FuIGxpdmUgd2l0aCBhCisgICAgICAgIC8vIG1pbm9yIGluYWNj
dXJhY3kgaW4gcHJvZmlsaW5nIG9mIHNtYWxsIGFsbG9jYXRpb25zLCBhbmQgYWxzbworICAgICAg
ICAvLyB3b3VsZCByYXRoZXIgbm90IHdhaXQgZm9yIHRoZSBsb29wIGJlbG93IHRvIHRlcm1pbmF0
ZSkuCisgICAgICAgIHJldHVybjsKIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1v
ZHVsZSgpIHsKLSAgLy8gVGhlcmUgaXMgYSBzbGlnaHQgcG90ZW50aWFsIHJhY2UgaGVyZSBiZWNh
dXNlIG9mIGRvdWJsZS1jaGVja2VkCi0gIC8vIGxvY2tpbmcgaWRpb20uICBIb3dldmVyLCBhcyBs
b25nIGFzIHRoZSBwcm9ncmFtIGRvZXMgYSBzbWFsbAotICAvLyBhbGxvY2F0aW9uIGJlZm9yZSBz
d2l0Y2hpbmcgdG8gbXVsdGktdGhyZWFkZWQgbW9kZSwgd2Ugd2lsbCBiZQotICAvLyBmaW5lLiAg
V2UgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgZG9pbmcgc3VjaCBhIHNtYWxsIGFsbG9jYXRpb24K
LSAgLy8gYnkgZG9pbmcgb25lIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgbW9kdWxlX2VudGVy
X2V4aXRfaG9vawotICAvLyBvYmplY3QgZGVjbGFyZWQgYmVsb3cuCi0gIFNwaW5Mb2NrSG9sZGVy
IGgoJnBhZ2VoZWFwX2xvY2spOwotICBpZiAoIXBoaW5pdGVkKSB7CisgICAgd2hpbGUgKGJ5dGVz
VW50aWxTYW1wbGUgPCBrKQorICAgICAgICAvLyBJbmNyZWFzZSBieXRlc1VudGlsU2FtcGxlIGJ5
IGVub3VnaCBhdmVyYWdlIHNhbXBsaW5nIHBlcmlvZHMKKyAgICAgICAgLy8gKHNhbXBsZV9wZXJp
b2QgPj4gMSkgdG8gYWxsb3cgdXMgdG8gc2FtcGxlIHBhc3QgdGhlIGN1cnJlbnQKKyAgICAgICAg
Ly8gYWxsb2NhdGlvbi4KKyAgICAgICAgYnl0ZXNVbnRpbFNhbXBsZSArPSAoc2FtcGxlX3Blcmlv
ZCA+PiAxKTsKKworICAgIGJ5dGVzVW50aWxTYW1wbGUgLT0gazsKK30KKwordm9pZCBUQ01hbGxv
Y1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCkKK3sKKyAgICAvLyBUaGVyZSBpcyBhIHNsaWdodCBw
b3RlbnRpYWwgcmFjZSBoZXJlIGJlY2F1c2Ugb2YgZG91YmxlLWNoZWNrZWQKKyAgICAvLyBsb2Nr
aW5nIGlkaW9tLiBIb3dldmVyLCBhcyBsb25nIGFzIHRoZSBwcm9ncmFtIGRvZXMgYSBzbWFsbAor
ICAgIC8vIGFsbG9jYXRpb24gYmVmb3JlIHN3aXRjaGluZyB0byBtdWx0aS10aHJlYWRlZCBtb2Rl
LCB3ZSB3aWxsIGJlCisgICAgLy8gZmluZS4gV2UgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgZG9p
bmcgc3VjaCBhIHNtYWxsIGFsbG9jYXRpb24KKyAgICAvLyBieSBkb2luZyBvbmUgaW4gdGhlIGNv
bnN0cnVjdG9yIG9mIHRoZSBtb2R1bGVfZW50ZXJfZXhpdF9ob29rCisgICAgLy8gb2JqZWN0IGRl
Y2xhcmVkIGJlbG93LgorICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAg
aWYgKCFwaGluaXRlZCkgewogI2lmZGVmIFdURl9DSEFOR0VTCi0gICAgSW5pdFRTRCgpOworICAg
ICAgICBJbml0VFNEKCk7CiAjZW5kaWYKLSAgICBJbml0U2l6ZUNsYXNzZXMoKTsKLSAgICB0aHJl
YWRoZWFwX2FsbG9jYXRvci5Jbml0KCk7Ci0gICAgc3Bhbl9hbGxvY2F0b3IuSW5pdCgpOwotICAg
IHNwYW5fYWxsb2NhdG9yLk5ldygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCi0gICAgc3Bh
bl9hbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKLSAgICBzdGFja3Ry
YWNlX2FsbG9jYXRvci5Jbml0KCk7Ci0gICAgRExMX0luaXQoJnNhbXBsZWRfb2JqZWN0cyk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtQ2xhc3NlczsgKytpKSB7Ci0gICAgICBjZW50
cmFsX2NhY2hlW2ldLkluaXQoaSk7Ci0gICAgfQotICAgIHBhZ2VoZWFwLT5pbml0KCk7Ci0gICAg
cGhpbml0ZWQgPSAxOworICAgICAgICBJbml0U2l6ZUNsYXNzZXMoKTsKKyAgICAgICAgdGhyZWFk
aGVhcEFsbG9jYXRvci5Jbml0KCk7CisgICAgICAgIHNwYW5BbGxvY2F0b3IuSW5pdCgpOworICAg
ICAgICBzcGFuQWxsb2NhdG9yLk5ldygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCisgICAg
ICAgIHNwYW5BbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKKyAgICAg
ICAgc3RhY2t0cmFjZV9hbGxvY2F0b3IuSW5pdCgpOworICAgICAgICBETExJbml0KCZzYW1wbGVk
T2JqZWN0cyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga051bUNsYXNzZXM7ICsr
aSkKKyAgICAgICAgICAgIGNlbnRyYWxDYWNoZVtpXS5Jbml0KGkpOworICAgICAgICBwYWdlaGVh
cC0+aW5pdCgpOworICAgICAgICBwaGluaXRlZCA9IDE7CiAjaWYgZGVmaW5lZChXVEZfQ0hBTkdF
UykgJiYgT1MoREFSV0lOKQotICAgIEZhc3RNYWxsb2Nab25lOjppbml0KCk7CisgICAgICAgIEZh
c3RNYWxsb2Nab25lOjppbml0KCk7CiAjZW5kaWYKLSAgfQorICAgIH0KIH0KIAotaW5saW5lIFRD
TWFsbG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6TmV3SGVhcChUaHJlYWRJ
ZGVudGlmaWVyIHRpZCkgewotICAvLyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0byB0aGUg
bGlua2VkIGxpc3QKLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUgKmhlYXAgPSB0aHJlYWRoZWFwX2Fs
bG9jYXRvci5OZXcoKTsKLSAgaGVhcC0+SW5pdCh0aWQpOwotICBoZWFwLT5uZXh0XyA9IHRocmVh
ZF9oZWFwczsKLSAgaGVhcC0+cHJldl8gPSBOVUxMOwotICBpZiAodGhyZWFkX2hlYXBzICE9IE5V
TEwpIHRocmVhZF9oZWFwcy0+cHJldl8gPSBoZWFwOwotICB0aHJlYWRfaGVhcHMgPSBoZWFwOwot
ICB0aHJlYWRfaGVhcF9jb3VudCsrOwotICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKLSAg
cmV0dXJuIGhlYXA7CitpbmxpbmUgVENNYWxsb2NUaHJlYWRDYWNoZSogVENNYWxsb2NUaHJlYWRD
YWNoZTo6TmV3SGVhcChUaHJlYWRJZGVudGlmaWVyIHRpZCkKK3sKKyAgICAvLyBDcmVhdGUgdGhl
IGhlYXAgYW5kIGFkZCBpdCB0byB0aGUgbGlua2VkIGxpc3QKKyAgICBUQ01hbGxvY1RocmVhZENh
Y2hlKiBoZWFwID0gdGhyZWFkaGVhcEFsbG9jYXRvci5OZXcoKTsKKyAgICBoZWFwLT5Jbml0KHRp
ZCk7CisgICAgaGVhcC0+bmV4dCA9IHRocmVhZEhlYXBzOworICAgIGhlYXAtPnByZXYgPSAwOwor
ICAgIGlmICh0aHJlYWRIZWFwcykKKyAgICAgICAgdGhyZWFkSGVhcHMtPnByZXYgPSBoZWFwOwor
ICAgIHRocmVhZEhlYXBzID0gaGVhcDsKKyAgICB0aHJlYWRfaGVhcF9jb3VudCsrOworICAgIFJl
Y29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOworICAgIHJldHVybiBoZWFwOwogfQogCi1pbmxpbmUg
VENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRUaHJlYWRIZWFw
KCkgeworaW5saW5lIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6Okdl
dFRocmVhZEhlYXAoKQorewogI2lmZGVmIEhBVkVfVExTCiAgICAgLy8gX190aHJlYWQgaXMgZmFz
dGVyLCBidXQgb25seSB3aGVuIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQKLSAgaWYgKEtlcm5lbFN1
cHBvcnRzVExTKCkpCi0gICAgcmV0dXJuIHRocmVhZGxvY2FsX2hlYXA7CisgICAgaWYgKEtlcm5l
bFN1cHBvcnRzVExTKCkpCisgICAgICAgIHJldHVybiB0aHJlYWRsb2NhbEhlYXA7CiAjZWxpZiBP
UyhXSU5ET1dTKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+
KFRsc0dldFZhbHVlKHRsc0luZGV4KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRDTWFsbG9j
VGhyZWFkQ2FjaGUqPihUbHNHZXRWYWx1ZSh0bHNJbmRleCkpOwogI2Vsc2UKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VENNYWxsb2NfVGhyZWFkQ2FjaGUqPihwdGhyZWFkX2dldHNwZWNpZmljKGhl
YXBfa2V5KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRDTWFsbG9jVGhyZWFkQ2FjaGUqPihw
dGhyZWFkX2dldHNwZWNpZmljKGhlYXBfa2V5KSk7CiAjZW5kaWYKIH0KIAotaW5saW5lIFRDTWFs
bG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKSB7Ci0gIFRD
TWFsbG9jX1RocmVhZENhY2hlKiBwdHIgPSBOVUxMOwotICBpZiAoIXRzZF9pbml0ZWQpIHsKLSAg
ICBJbml0TW9kdWxlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgcHRyID0gR2V0VGhyZWFkSGVhcCgpOwot
ICB9Ci0gIGlmIChwdHIgPT0gTlVMTCkgcHRyID0gQ3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpOwot
ICByZXR1cm4gcHRyOworaW5saW5lIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFk
Q2FjaGU6OkdldENhY2hlKCkKK3sKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBwdHIgPSAwOwor
ICAgIGlmICghdHNkSW5pdGVkKQorICAgICAgICBJbml0TW9kdWxlKCk7CisgICAgZWxzZQorICAg
ICAgICBwdHIgPSBHZXRUaHJlYWRIZWFwKCk7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHB0ciA9
IENyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gcHRyOwogfQogCi0vLyBJbiBk
ZWxldGlvbiBwYXRocywgd2UgZG8gbm90IHRyeSB0byBjcmVhdGUgYSB0aHJlYWQtY2FjaGUuICBU
aGlzIGlzCisvLyBJbiBkZWxldGlvbiBwYXRocywgd2UgZG8gbm90IHRyeSB0byBjcmVhdGUgYSB0
aHJlYWQtY2FjaGUuIFRoaXMgaXMKIC8vIGJlY2F1c2Ugd2UgbWF5IGJlIGluIHRoZSB0aHJlYWQg
ZGVzdHJ1Y3Rpb24gY29kZSBhbmQgbWF5IGhhdmUKIC8vIGFscmVhZHkgY2xlYW5lZCB1cCB0aGUg
Y2FjaGUgZm9yIHRoaXMgdGhyZWFkLgotaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKSB7Ci0gIGlmICghdHNkX2luaXRl
ZCkgcmV0dXJuIE5VTEw7Ci0gIHZvaWQqIGNvbnN0IHAgPSBHZXRUaHJlYWRIZWFwKCk7Ci0gIHJl
dHVybiByZWludGVycHJldF9jYXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocCk7CitpbmxpbmUg
VENNYWxsb2NUaHJlYWRDYWNoZSogVENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNl
bnQoKQoreworICAgIGlmICghdHNkSW5pdGVkKQorICAgICAgICByZXR1cm4gMDsKKyAgICB2b2lk
KiBjb25zdCBwID0gR2V0VGhyZWFkSGVhcCgpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFRDTWFsbG9jVGhyZWFkQ2FjaGUqPihwKTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6SW5pdFRTRCgpIHsKLSAgQVNTRVJUKCF0c2RfaW5pdGVkKTsKK3ZvaWQgVENNYWxsb2NUaHJl
YWRDYWNoZTo6SW5pdFRTRCgpCit7CisgICAgQVNTRVJUKCF0c2RJbml0ZWQpOwogI2lmIFVTRShQ
VEhSRUFEX0dFVFNQRUNJRklDX0RJUkVDVCkKLSAgcHRocmVhZF9rZXlfaW5pdF9ucChoZWFwX2tl
eSwgRGVzdHJveVRocmVhZENhY2hlKTsKKyAgICBwdGhyZWFkX2tleV9pbml0X25wKGhlYXBfa2V5
LCBEZXN0cm95VGhyZWFkQ2FjaGUpOwogI2Vsc2UKLSAgcHRocmVhZF9rZXlfY3JlYXRlKCZoZWFw
X2tleSwgRGVzdHJveVRocmVhZENhY2hlKTsKKyAgICBwdGhyZWFkX2tleV9jcmVhdGUoJmhlYXBf
a2V5LCBEZXN0cm95VGhyZWFkQ2FjaGUpOwogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykKLSAgdGxz
SW5kZXggPSBUbHNBbGxvYygpOworICAgIHRsc0luZGV4ID0gVGxzQWxsb2MoKTsKICNlbmRpZgot
ICB0c2RfaW5pdGVkID0gdHJ1ZTsKKyAgICB0c2RJbml0ZWQgPSB0cnVlOwogICAgIAogI2lmICFP
UyhXSU5ET1dTKQotICAvLyBXZSBtYXkgaGF2ZSB1c2VkIGEgZmFrZSBwdGhyZWFkX3QgZm9yIHRo
ZSBtYWluIHRocmVhZC4gIEZpeCBpdC4KLSAgcHRocmVhZF90IHplcm87Ci0gIG1lbXNldCgmemVy
bywgMCwgc2l6ZW9mKHplcm8pKTsKKyAgICAvLyBXZSBtYXkgaGF2ZSB1c2VkIGEgZmFrZSBwdGhy
ZWFkX3QgZm9yIHRoZSBtYWluIHRocmVhZC4gRml4IGl0LgorICAgIHB0aHJlYWRfdCB6ZXJvOwor
ICAgIG1lbXNldCgmemVybywgMCwgc2l6ZW9mKHplcm8pKTsKICNlbmRpZgogI2lmbmRlZiBXVEZf
Q0hBTkdFUwotICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9j
a0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogI2Vsc2UKLSAgQVNTRVJUKHBhZ2VoZWFwX2xvY2su
SXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogI2VuZGlmCi0g
IGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7IGggIT0gTlVMTDsg
aCA9IGgtPm5leHRfKSB7CisgICAgZm9yIChUQ01hbGxvY1RocmVhZENhY2hlKiBoID0gdGhyZWFk
SGVhcHM7IGg7IGggPSBoLT5uZXh0KQogI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKGgtPnRpZF8g
PT0gMCkgewotICAgICAgaC0+dGlkXyA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotICAgIH0KKyAg
ICAgICAgaWYgKCFoLT50aWQpCisgICAgICAgICAgICBoLT50aWQgPSBHZXRDdXJyZW50VGhyZWFk
SWQoKTsKICNlbHNlCi0gICAgaWYgKHB0aHJlYWRfZXF1YWwoaC0+dGlkXywgemVybykpIHsKLSAg
ICAgIGgtPnRpZF8gPSBwdGhyZWFkX3NlbGYoKTsKLSAgICB9CisgICAgICAgIGlmIChwdGhyZWFk
X2VxdWFsKGgtPnRpZCwgemVybykpCisgICAgICAgICAgICBoLT50aWQgPSBwdGhyZWFkX3NlbGYo
KTsKICNlbmRpZgotICB9CiB9CiAKLVRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpIHsKLSAgLy8gSW5pdGlhbGl6ZSBwZXIt
dGhyZWFkIGRhdGEgaWYgbmVjZXNzYXJ5Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0g
TlVMTDsKLSAgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworVENNYWxs
b2NUaHJlYWRDYWNoZSogVENNYWxsb2NUaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2Fy
eSgpCit7CisgICAgLy8gSW5pdGlhbGl6ZSBwZXItdGhyZWFkIGRhdGEgaWYgbmVjZXNzYXJ5Cisg
ICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IDA7CisgICAgeworICAgICAgICBTcGluTG9j
a0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogCiAjaWYgT1MoV0lORE9XUykKLSAgICBEV09SRCBt
ZTsKLSAgICBpZiAoIXRzZF9pbml0ZWQpIHsKLSAgICAgIG1lID0gMDsKLSAgICB9IGVsc2Ugewot
ICAgICAgbWUgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKLSAgICB9CisgICAgICAgIERXT1JEIG1l
OworICAgICAgICBpZiAoIXRzZEluaXRlZCkKKyAgICAgICAgICAgIG1lID0gMDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbWUgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICNlbHNlCi0gICAg
Ly8gRWFybHkgb24gaW4gZ2xpYmMncyBsaWZlLCB3ZSBjYW5ub3QgZXZlbiBjYWxsIHB0aHJlYWRf
c2VsZigpCi0gICAgcHRocmVhZF90IG1lOwotICAgIGlmICghdHNkX2luaXRlZCkgewotICAgICAg
bWVtc2V0KCZtZSwgMCwgc2l6ZW9mKG1lKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lID0gcHRo
cmVhZF9zZWxmKCk7Ci0gICAgfQorICAgICAgICAvLyBFYXJseSBvbiBpbiBnbGliYydzIGxpZmUs
IHdlIGNhbm5vdCBldmVuIGNhbGwgcHRocmVhZF9zZWxmKCkKKyAgICAgICAgcHRocmVhZF90IG1l
OworICAgICAgICBpZiAoIXRzZEluaXRlZCkKKyAgICAgICAgICAgIG1lbXNldCgmbWUsIDAsIHNp
emVvZihtZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZSA9IHB0aHJlYWRfc2VsZigp
OwogI2VuZGlmCiAKLSAgICAvLyBUaGlzIG1heSBiZSBhIHJlY3Vyc2l2ZSBtYWxsb2MgY2FsbCBm
cm9tIHB0aHJlYWRfc2V0c3BlY2lmaWMoKQotICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIGhlYXAg
Zm9yIHRoaXMgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZAotICAgIC8vIGFuZCBhZGRl
ZCB0byB0aGUgbGlua2VkIGxpc3QuICBTbyB3ZSBzZWFyY2ggZm9yIHRoYXQgZmlyc3QuCi0gICAg
Zm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAhPSBOVUxMOyBo
ID0gaC0+bmV4dF8pIHsKKyAgICAgICAgLy8gVGhpcyBtYXkgYmUgYSByZWN1cnNpdmUgbWFsbG9j
IGNhbGwgZnJvbSBwdGhyZWFkX3NldHNwZWNpZmljKCkKKyAgICAgICAgLy8gSW4gdGhhdCBjYXNl
LCB0aGUgaGVhcCBmb3IgdGhpcyB0aHJlYWQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkCisgICAg
ICAgIC8vIGFuZCBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QuIFNvIHdlIHNlYXJjaCBmb3IgdGhh
dCBmaXJzdC4KKyAgICAgICAgZm9yIChUQ01hbGxvY1RocmVhZENhY2hlKiBoID0gdGhyZWFkSGVh
cHM7IGg7IGggPSBoLT5uZXh0KSB7CiAjaWYgT1MoV0lORE9XUykKLSAgICAgIGlmIChoLT50aWRf
ID09IG1lKSB7CisgICAgICAgICAgICBpZiAoaC0+dGlkID09IG1lKSB7CiAjZWxzZQotICAgICAg
aWYgKHB0aHJlYWRfZXF1YWwoaC0+dGlkXywgbWUpKSB7CisgICAgICAgICAgICBpZiAocHRocmVh
ZF9lcXVhbChoLT50aWQsIG1lKSkgewogI2VuZGlmCi0gICAgICAgIGhlYXAgPSBoOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICB9CisgICAgICAgICAgICAgICAgaGVhcCA9IGg7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmICho
ZWFwID09IE5VTEwpIGhlYXAgPSBOZXdIZWFwKG1lKTsKLSAgfQorICAgICAgICBpZiAoIWhlYXAp
CisgICAgICAgICAgICBoZWFwID0gTmV3SGVhcChtZSk7CisgICAgfQogCi0gIC8vIFdlIGNhbGwg
cHRocmVhZF9zZXRzcGVjaWZpYygpIG91dHNpZGUgdGhlIGxvY2sgYmVjYXVzZSBpdCBtYXkKLSAg
Ly8gY2FsbCBtYWxsb2MoKSByZWN1cnNpdmVseS4gIFRoZSByZWN1cnNpdmUgY2FsbCB3aWxsIG5l
dmVyIGdldAotICAvLyBoZXJlIGFnYWluIGJlY2F1c2UgaXQgd2lsbCBmaW5kIHRoZSBhbHJlYWR5
IGFsbG9jYXRlZCBoZWFwIGluIHRoZQotICAvLyBsaW5rZWQgbGlzdCBvZiBoZWFwcy4KLSAgaWYg
KCFoZWFwLT5pbl9zZXRzcGVjaWZpY18gJiYgdHNkX2luaXRlZCkgewotICAgIGhlYXAtPmluX3Nl
dHNwZWNpZmljXyA9IHRydWU7Ci0gICAgc2V0VGhyZWFkSGVhcChoZWFwKTsKLSAgfQotICByZXR1
cm4gaGVhcDsKKyAgICAvLyBXZSBjYWxsIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBvdXRzaWRlIHRo
ZSBsb2NrIGJlY2F1c2UgaXQgbWF5CisgICAgLy8gY2FsbCBtYWxsb2MoKSByZWN1cnNpdmVseS4g
VGhlIHJlY3Vyc2l2ZSBjYWxsIHdpbGwgbmV2ZXIgZ2V0CisgICAgLy8gaGVyZSBhZ2FpbiBiZWNh
dXNlIGl0IHdpbGwgZmluZCB0aGUgYWxyZWFkeSBhbGxvY2F0ZWQgaGVhcCBpbiB0aGUKKyAgICAv
LyBsaW5rZWQgbGlzdCBvZiBoZWFwcy4KKyAgICBpZiAoIWhlYXAtPmluU2V0c3BlY2lmaWMgJiYg
dHNkSW5pdGVkKSB7CisgICAgICAgIGhlYXAtPmluU2V0c3BlY2lmaWMgPSB0cnVlOworICAgICAg
ICBzZXRUaHJlYWRIZWFwKGhlYXApOworICAgIH0KKyAgICByZXR1cm4gaGVhcDsKIH0KIAotdm9p
ZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6QmVjb21lSWRsZSgpIHsKLSAgaWYgKCF0c2RfaW5pdGVk
KSByZXR1cm47ICAgICAgICAgICAgICAvLyBObyBjYWNoZXMgeWV0Ci0gIFRDTWFsbG9jX1RocmVh
ZENhY2hlKiBoZWFwID0gR2V0VGhyZWFkSGVhcCgpOwotICBpZiAoaGVhcCA9PSBOVUxMKSByZXR1
cm47ICAgICAgICAgICAgIC8vIE5vIHRocmVhZCBjYWNoZSB0byByZW1vdmUKLSAgaWYgKGhlYXAt
PmluX3NldHNwZWNpZmljXykgcmV0dXJuOyAgICAvLyBEbyBub3QgZGlzdHVyYiB0aGUgYWN0aXZl
IGNhbGxlcgordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpCZWNvbWVJZGxlKCkKK3sKKyAgICBp
ZiAoIXRzZEluaXRlZCkKKyAgICAgICAgcmV0dXJuOyAvLyBObyBjYWNoZXMgeWV0CisgICAgVENN
YWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IEdldFRocmVhZEhlYXAoKTsKKyAgICBpZiAoIWhlYXAp
CisgICAgICAgIHJldHVybjsgLy8gTm8gdGhyZWFkIGNhY2hlIHRvIHJlbW92ZQorICAgIGlmICho
ZWFwLT5pblNldHNwZWNpZmljKQorICAgICAgICByZXR1cm47IC8vIERvIG5vdCBkaXN0dXJiIHRo
ZSBhY3RpdmUgY2FsbGVyCiAKLSAgaGVhcC0+aW5fc2V0c3BlY2lmaWNfID0gdHJ1ZTsKLSAgc2V0
VGhyZWFkSGVhcChOVUxMKTsKKyAgICBoZWFwLT5pblNldHNwZWNpZmljID0gdHJ1ZTsKKyAgICBz
ZXRUaHJlYWRIZWFwKDApOwogI2lmZGVmIEhBVkVfVExTCi0gIC8vIEFsc28gdXBkYXRlIHRoZSBj
b3B5IGluIF9fdGhyZWFkCi0gIHRocmVhZGxvY2FsX2hlYXAgPSBOVUxMOworICAgIC8vIEFsc28g
dXBkYXRlIHRoZSBjb3B5IGluIF9fdGhyZWFkCisgICAgdGhyZWFkbG9jYWxIZWFwID0gMDsKICNl
bmRpZgotICBoZWFwLT5pbl9zZXRzcGVjaWZpY18gPSBmYWxzZTsKLSAgaWYgKEdldFRocmVhZEhl
YXAoKSA9PSBoZWFwKSB7Ci0gICAgLy8gU29tZWhvdyBoZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEg
cmVjdXJzaXZlIGNhbGwgdG8gbWFsbG9jCi0gICAgLy8gZnJvbSBwdGhyZWFkX3NldHNwZWNpZmlj
LiAgV2UgZ2l2ZSB1cCBpbiB0aGlzIGNhc2UuCi0gICAgcmV0dXJuOwotICB9CisgICAgaGVhcC0+
aW5TZXRzcGVjaWZpYyA9IGZhbHNlOworICAgIGlmIChHZXRUaHJlYWRIZWFwKCkgPT0gaGVhcCkK
KyAgICAgICAgLy8gU29tZWhvdyBoZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEgcmVjdXJzaXZlIGNh
bGwgdG8gbWFsbG9jCisgICAgICAgIC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gV2UgZ2l2
ZSB1cCBpbiB0aGlzIGNhc2UuCisgICAgICAgIHJldHVybjsKIAotICAvLyBXZSBjYW4gbm93IGdl
dCByaWQgb2YgdGhlIGhlYXAKLSAgRGVsZXRlQ2FjaGUoaGVhcCk7CisgICAgLy8gV2UgY2FuIG5v
dyBnZXQgcmlkIG9mIHRoZSBoZWFwCisgICAgRGVsZXRlQ2FjaGUoaGVhcCk7CiB9CiAKLXZvaWQg
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlc3Ryb3lUaHJlYWRDYWNoZSh2b2lkKiBwdHIpIHsKLSAg
Ly8gTm90ZSB0aGF0ICJwdHIiIGNhbm5vdCBiZSBOVUxMIHNpbmNlIHB0aHJlYWQgcHJvbWlzZXMg
bm90Ci0gIC8vIHRvIGludm9rZSB0aGUgZGVzdHJ1Y3RvciBvbiBOVUxMIHZhbHVlcywgYnV0IGZv
ciBzYWZldHksCi0gIC8vIHdlIGNoZWNrIGFueXdheS4KLSAgaWYgKHB0ciA9PSBOVUxMKSByZXR1
cm47Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkRlc3Ryb3lUaHJlYWRDYWNoZSh2b2lkKiBw
dHIpCit7CisgICAgLy8gTm90ZSB0aGF0ICJwdHIiIGNhbm5vdCBiZSAwIHNpbmNlIHB0aHJlYWQg
cHJvbWlzZXMgbm90CisgICAgLy8gdG8gaW52b2tlIHRoZSBkZXN0cnVjdG9yIG9uIDAgdmFsdWVz
LCBidXQgZm9yIHNhZmV0eSwKKyAgICAvLyB3ZSBjaGVjayBhbnl3YXkuCisgICAgaWYgKCFwdHIp
CisgICAgICAgIHJldHVybjsKICNpZmRlZiBIQVZFX1RMUwotICAvLyBQcmV2ZW50IGZhc3QgcGF0
aCBvZiBHZXRUaHJlYWRIZWFwKCkgZnJvbSByZXR1cm5pbmcgaGVhcC4KLSAgdGhyZWFkbG9jYWxf
aGVhcCA9IE5VTEw7CisgICAgLy8gUHJldmVudCBmYXN0IHBhdGggb2YgR2V0VGhyZWFkSGVhcCgp
IGZyb20gcmV0dXJuaW5nIGhlYXAuCisgICAgdGhyZWFkbG9jYWxIZWFwID0gMDsKICNlbmRpZgot
ICBEZWxldGVDYWNoZShyZWludGVycHJldF9jYXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocHRy
KSk7CisgICAgRGVsZXRlQ2FjaGUocmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY1RocmVhZENhY2hl
Kj4ocHRyKSk7CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlbGV0ZUNhY2hlKFRD
TWFsbG9jX1RocmVhZENhY2hlKiBoZWFwKSB7Ci0gIC8vIFJlbW92ZSBhbGwgbWVtb3J5IGZyb20g
aGVhcAotICBoZWFwLT5DbGVhbnVwKCk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkRlbGV0
ZUNhY2hlKFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGhlYXApCit7CisgICAgLy8gUmVtb3ZlIGFsbCBt
ZW1vcnkgZnJvbSBoZWFwCisgICAgaGVhcC0+Q2xlYW51cCgpOwogCi0gIC8vIFJlbW92ZSBmcm9t
IGxpbmtlZCBsaXN0Ci0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBpZiAo
aGVhcC0+bmV4dF8gIT0gTlVMTCkgaGVhcC0+bmV4dF8tPnByZXZfID0gaGVhcC0+cHJldl87Ci0g
IGlmIChoZWFwLT5wcmV2XyAhPSBOVUxMKSBoZWFwLT5wcmV2Xy0+bmV4dF8gPSBoZWFwLT5uZXh0
XzsKLSAgaWYgKHRocmVhZF9oZWFwcyA9PSBoZWFwKSB0aHJlYWRfaGVhcHMgPSBoZWFwLT5uZXh0
XzsKLSAgdGhyZWFkX2hlYXBfY291bnQtLTsKLSAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7
CisgICAgLy8gUmVtb3ZlIGZyb20gbGlua2VkIGxpc3QKKyAgICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcExvY2spOworICAgIGlmIChoZWFwLT5uZXh0KQorICAgICAgICBoZWFwLT5uZXh0LT5w
cmV2ID0gaGVhcC0+cHJldjsKKyAgICBpZiAoaGVhcC0+cHJldikKKyAgICAgICAgaGVhcC0+cHJl
di0+bmV4dCA9IGhlYXAtPm5leHQ7CisgICAgaWYgKHRocmVhZEhlYXBzID09IGhlYXApCisgICAg
ICAgIHRocmVhZEhlYXBzID0gaGVhcC0+bmV4dDsKKyAgICB0aHJlYWRfaGVhcF9jb3VudC0tOwor
ICAgIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOwogCi0gIHRocmVhZGhlYXBfYWxsb2NhdG9y
LkRlbGV0ZShoZWFwKTsKKyAgICB0aHJlYWRoZWFwQWxsb2NhdG9yLkRlbGV0ZShoZWFwKTsKIH0K
IAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCkg
ewotICAvLyBEaXZpZGUgYXZhaWxhYmxlIHNwYWNlIGFjcm9zcyB0aHJlYWRzCi0gIGludCBuID0g
dGhyZWFkX2hlYXBfY291bnQgPiAwID8gdGhyZWFkX2hlYXBfY291bnQgOiAxOwotICBzaXplX3Qg
c3BhY2UgPSBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplIC8gbjsKK3ZvaWQgVENNYWxsb2NUaHJl
YWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCkKK3sKKyAgICAvLyBEaXZpZGUgYXZh
aWxhYmxlIHNwYWNlIGFjcm9zcyB0aHJlYWRzCisgICAgaW50IG4gPSB0aHJlYWRfaGVhcF9jb3Vu
dCA+IDAgPyB0aHJlYWRfaGVhcF9jb3VudCA6IDE7CisgICAgc2l6ZV90IHNwYWNlID0gb3ZlcmFs
bFRocmVhZENhY2hlc2l6ZSAvIG47CiAKLSAgLy8gTGltaXQgdG8gYWxsb3dlZCByYW5nZQotICBp
ZiAoc3BhY2UgPCBrTWluVGhyZWFkQ2FjaGVTaXplKSBzcGFjZSA9IGtNaW5UaHJlYWRDYWNoZVNp
emU7Ci0gIGlmIChzcGFjZSA+IGtNYXhUaHJlYWRDYWNoZVNpemUpIHNwYWNlID0ga01heFRocmVh
ZENhY2hlU2l6ZTsKKyAgICAvLyBMaW1pdCB0byBhbGxvd2VkIHJhbmdlCisgICAgaWYgKHNwYWNl
IDwga01pblRocmVhZENhY2hlU2l6ZSkKKyAgICAgICAgc3BhY2UgPSBrTWluVGhyZWFkQ2FjaGVT
aXplOworICAgIGlmIChzcGFjZSA+IGtNYXhUaHJlYWRDYWNoZVNpemUpCisgICAgICAgIHNwYWNl
ID0ga01heFRocmVhZENhY2hlU2l6ZTsKIAotICBwZXJfdGhyZWFkX2NhY2hlX3NpemUgPSBzcGFj
ZTsKKyAgICBwZXJUaHJlYWRDYWNoZVNpemUgPSBzcGFjZTsKIH0KIAotdm9pZCBUQ01hbGxvY19U
aHJlYWRDYWNoZTo6UHJpbnQoKSBjb25zdCB7Ci0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBr
TnVtQ2xhc3NlczsgKytjbCkgewotICAgIE1FU1NBR0UoIiAgICAgICU1IiBQUkl1UyAiIDogJTRk
IGxlbjsgJTRkIGxvXG4iLAordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpQcmludCgpIGNvbnN0
Cit7CisgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Cisg
ICAgICAgIE1FU1NBR0UoIiAgICAgICU1IiBQUkl1UyAiIDogJTRkIGxlbjsgJTRkIGxvXG4iLAog
ICAgICAgICAgICAgQnl0ZVNpemVGb3JDbGFzcyhjbCksCi0gICAgICAgICAgICBsaXN0X1tjbF0u
bGVuZ3RoKCksCi0gICAgICAgICAgICBsaXN0X1tjbF0ubG93d2F0ZXJtYXJrKCkpOwotICB9Cisg
ICAgICAgICAgICBsaXN0W2NsXS5sZW5ndGgoKSwKKyAgICAgICAgICAgIGxpc3RbY2xdLmxvd3dh
dGVybWFyaygpKTsKKyAgICB9CiB9CiAKIC8vIEV4dHJhY3QgaW50ZXJlc3Rpbmcgc3RhdHMKIHN0
cnVjdCBUQ01hbGxvY1N0YXRzIHsKLSAgdWludDY0X3Qgc3lzdGVtX2J5dGVzOyAgICAgICAgLy8g
Qnl0ZXMgYWxsb2NlZCBmcm9tIHN5c3RlbQotICB1aW50NjRfdCB0aHJlYWRfYnl0ZXM7ICAgICAg
ICAvLyBCeXRlcyBpbiB0aHJlYWQgY2FjaGVzCi0gIHVpbnQ2NF90IGNlbnRyYWxfYnl0ZXM7ICAg
ICAgIC8vIEJ5dGVzIGluIGNlbnRyYWwgY2FjaGUKLSAgdWludDY0X3QgdHJhbnNmZXJfYnl0ZXM7
ICAgICAgLy8gQnl0ZXMgaW4gY2VudHJhbCB0cmFuc2ZlciBjYWNoZQotICB1aW50NjRfdCBwYWdl
aGVhcF9ieXRlczsgICAgICAvLyBCeXRlcyBpbiBwYWdlIGhlYXAKLSAgdWludDY0X3QgbWV0YWRh
dGFfYnl0ZXM7ICAgICAgLy8gQnl0ZXMgYWxsb2NlZCBmb3IgbWV0YWRhdGEKKyAgICB1aW50NjRf
dCBzeXN0ZW1CeXRlczsgLy8gQnl0ZXMgYWxsb2NlZCBmcm9tIHN5c3RlbQorICAgIHVpbnQ2NF90
IHRocmVhZEJ5dGVzOyAvLyBCeXRlcyBpbiB0aHJlYWQgY2FjaGVzCisgICAgdWludDY0X3QgY2Vu
dHJhbEJ5dGVzOyAvLyBCeXRlcyBpbiBjZW50cmFsIGNhY2hlCisgICAgdWludDY0X3QgdHJhbnNm
ZXJCeXRlczsgLy8gQnl0ZXMgaW4gY2VudHJhbCB0cmFuc2ZlciBjYWNoZQorICAgIHVpbnQ2NF90
IHBhZ2VoZWFwQnl0ZXM7IC8vIEJ5dGVzIGluIHBhZ2UgaGVhcAorICAgIHVpbnQ2NF90IG1ldGFk
YXRhQnl0ZXM7IC8vIEJ5dGVzIGFsbG9jZWQgZm9yIG1ldGFkYXRhCiB9OwogCiAjaWZuZGVmIFdU
Rl9DSEFOR0VTCi0vLyBHZXQgc3RhdHMgaW50byAiciIuICBBbHNvIGdldCBwZXItc2l6ZS1jbGFz
cyBjb3VudHMgaWYgY2xhc3NfY291bnQgIT0gTlVMTAotc3RhdGljIHZvaWQgRXh0cmFjdFN0YXRz
KFRDTWFsbG9jU3RhdHMqIHIsIHVpbnQ2NF90KiBjbGFzc19jb3VudCkgewotICByLT5jZW50cmFs
X2J5dGVzID0gMDsKLSAgci0+dHJhbnNmZXJfYnl0ZXMgPSAwOwotICBmb3IgKGludCBjbCA9IDA7
IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJh
bF9jYWNoZVtjbF0ubGVuZ3RoKCk7Ci0gICAgY29uc3QgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxf
Y2FjaGVbY2xdLnRjX2xlbmd0aCgpOwotICAgIHItPmNlbnRyYWxfYnl0ZXMgKz0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIGxlbmd0aDsKLSAgICByLT50cmFu
c2Zlcl9ieXRlcyArPQotICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xh
c3MoY2wpKSAqIHRjX2xlbmd0aDsKLSAgICBpZiAoY2xhc3NfY291bnQpIGNsYXNzX2NvdW50W2Ns
XSA9IGxlbmd0aCArIHRjX2xlbmd0aDsKLSAgfQotCi0gIC8vIEFkZCBzdGF0cyBmcm9tIHBlci10
aHJlYWQgaGVhcHMKLSAgci0+dGhyZWFkX2J5dGVzID0gMDsKLSAgeyAvLyBzY29wZQotICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIGZvciAoVENNYWxsb2NfVGhyZWFk
Q2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7Ci0gICAg
ICByLT50aHJlYWRfYnl0ZXMgKz0gaC0+U2l6ZSgpOwotICAgICAgaWYgKGNsYXNzX2NvdW50KSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewot
ICAgICAgICAgIGNsYXNzX2NvdW50W2NsXSArPSBoLT5mcmVlbGlzdF9sZW5ndGgoY2wpOworLy8g
R2V0IHN0YXRzIGludG8gInIiLiBBbHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMgaWYgY2xh
c3NDb3VudCAhPSAwCitzdGF0aWMgdm9pZCBFeHRyYWN0U3RhdHMoVENNYWxsb2NTdGF0cyogciwg
dWludDY0X3QqIGNsYXNzQ291bnQpCit7CisgICAgci0+Y2VudHJhbEJ5dGVzID0gMDsKKyAgICBy
LT50cmFuc2ZlckJ5dGVzID0gMDsKKyAgICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNz
ZXM7ICsrY2wpIHsKKyAgICAgICAgY29uc3QgaW50IGxlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0u
bGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IGludCB0Y0xlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0u
dGNMZW5ndGgoKTsKKyAgICAgICAgci0+Y2VudHJhbEJ5dGVzICs9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihCeXRlU2l6ZUZvckNsYXNzKGNsKSkgKiBsZW5ndGg7CisgICAgICAgIHItPnRyYW5zZmVy
Qnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRj
TGVuZ3RoOworICAgICAgICBpZiAoY2xhc3NDb3VudCkKKyAgICAgICAgICAgIGNsYXNzQ291bnRb
Y2xdID0gbGVuZ3RoICsgdGNMZW5ndGg7CisgICAgfQorCisgICAgLy8gQWRkIHN0YXRzIGZyb20g
cGVyLXRocmVhZCBoZWFwcworICAgIHItPnRocmVhZEJ5dGVzID0gMDsKKyAgICB7IC8vIHNjb3Bl
CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIGZvciAo
VENNYWxsb2NUaHJlYWRDYWNoZSogaCA9IHRocmVhZEhlYXBzOyBoOyBoID0gaC0+bmV4dCkgewor
ICAgICAgICAgICAgci0+dGhyZWFkQnl0ZXMgKz0gaC0+U2l6ZSgpOworICAgICAgICAgICAgaWYg
KGNsYXNzQ291bnQpCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtO
dW1DbGFzc2VzOyArK2NsKQorICAgICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSArPSBo
LT5mcmVlbGlzdGxlbmd0aChjbCk7CiAgICAgICAgIH0KLSAgICAgIH0KICAgICB9Ci0gIH0KIAot
ICB7IC8vc2NvcGUKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBy
LT5zeXN0ZW1fYnl0ZXMgPSBwYWdlaGVhcC0+U3lzdGVtQnl0ZXMoKTsKLSAgICByLT5tZXRhZGF0
YV9ieXRlcyA9IG1ldGFkYXRhX3N5c3RlbV9ieXRlczsKLSAgICByLT5wYWdlaGVhcF9ieXRlcyA9
IHBhZ2VoZWFwLT5GcmVlQnl0ZXMoKTsKLSAgfQorICAgIHsgLy8gc2NvcGUKKyAgICAgICAgU3Bp
bkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgci0+c3lzdGVtQnl0ZXMgPSBw
YWdlaGVhcC0+U3lzdGVtQnl0ZXMoKTsKKyAgICAgICAgci0+bWV0YWRhdGFCeXRlcyA9IG1ldGFk
YXRhU3lzdGVtQnl0ZXM7CisgICAgICAgIHItPnBhZ2VoZWFwQnl0ZXMgPSBwYWdlaGVhcC0+RnJl
ZUJ5dGVzKCk7CisgICAgfQogfQogI2VuZGlmCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKIC8vIFdS
SVRFIHN0YXRzIHRvICJvdXQiCiBzdGF0aWMgdm9pZCBEdW1wU3RhdHMoVENNYWxsb2NfUHJpbnRl
ciogb3V0LCBpbnQgbGV2ZWwpIHsKLSAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgdWludDY0X3Qg
Y2xhc3NfY291bnRba051bUNsYXNzZXNdOwotICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAobGV2ZWwg
Pj0gMiA/IGNsYXNzX2NvdW50IDogTlVMTCkpOworICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Cisg
ICAgdWludDY0X3QgY2xhc3NDb3VudFtrTnVtQ2xhc3Nlc107CisgICAgRXh0cmFjdFN0YXRzKCZz
dGF0cywgKGxldmVsID49IDIgPyBjbGFzc0NvdW50IDogMCkpOworCisgICAgaWYgKGxldmVsID49
IDIpIHsKKyAgICAgICAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAw
OworICAgICAgICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAg
ICAgICAgICAgIGlmIChjbGFzc0NvdW50W2NsXSA+IDApIHsKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBjbGFzc0J5dGVzID0gY2xhc3NDb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsK
KyAgICAgICAgICAgICAgICBjdW11bGF0aXZlICs9IGNsYXNzQnl0ZXM7CisgICAgICAgICAgICAg
ICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBbICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCisgICAg
ICAgICAgICAgICAgICAgICIlOCIgUFJJdTY0ICIgb2JqczsgJTUuMWYgTUI7ICU1LjFmIGN1bSBN
QlxuIiwKKyAgICAgICAgICAgICAgICAgICAgY2wsIEJ5dGVTaXplRm9yQ2xhc3MoY2wpLAorICAg
ICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSwKKyAgICAgICAgICAgICAgICAgICAgY2xh
c3NCeXRlcyAvIDEwNDg1NzYuMCwKKyAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGl2ZSAvIDEw
NDg1NzYuMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICBpZiAobGV2ZWwgPj0gMikg
ewotICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIpOwotICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOwotICAgIGZvciAo
aW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgaWYgKGNsYXNzX2Nv
dW50W2NsXSA+IDApIHsKLSAgICAgICAgdWludDY0X3QgY2xhc3NfYnl0ZXMgPSBjbGFzc19jb3Vu
dFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLSAgICAgICAgY3VtdWxhdGl2ZSArPSBjbGFz
c19ieXRlczsKLSAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBbICU4IiBQUkl1UyAiIGJ5
dGVzIF0gOiAiCi0gICAgICAgICAgICAgICAgIiU4IiBQUkl1NjQgIiBvYmpzOyAlNS4xZiBNQjsg
JTUuMWYgY3VtIE1CXG4iLAotICAgICAgICAgICAgICAgIGNsLCBCeXRlU2l6ZUZvckNsYXNzKGNs
KSwKLSAgICAgICAgICAgICAgICBjbGFzc19jb3VudFtjbF0sCi0gICAgICAgICAgICAgICAgY2xh
c3NfYnl0ZXMgLyAxMDQ4NTc2LjAsCi0gICAgICAgICAgICAgICAgY3VtdWxhdGl2ZSAvIDEwNDg1
NzYuMCk7Ci0gICAgICB9CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7
CisgICAgICAgIHBhZ2VoZWFwLT5EdW1wKG91dCk7CiAgICAgfQogCi0gICAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKLSAgfQotCi0g
IGNvbnN0IHVpbnQ2NF90IGJ5dGVzX2luX3VzZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzOworICAgIGNvbnN0IHVp
bnQ2NF90IGJ5dGVzSW5Vc2UgPSBzdGF0cy5zeXN0ZW1CeXRlcworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLSBzdGF0cy5jZW50cmFsQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLSBzdGF0cy50cmFuc2ZlckJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0gc3RhdHMudGhyZWFkQnl0ZXM7CiAKLSAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgIG91dC0+cHJpbnRm
KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAg
ICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBIZWFwIHNpemVcbiIKICAgICAgICAg
ICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBpbiB1c2UgYnkgYXBwbGljYXRpb25c
biIKICAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHBh
Z2UgaGVhcFxuIgpAQCAtMzM3OSwxNSArMzQ5MSwxNSBAQCBzdGF0aWMgdm9pZCBEdW1wU3RhdHMo
VENNYWxsb2NfUHJpbnRlcioKICAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBU
aHJlYWQgaGVhcHMgaW4gdXNlXG4iCiAgICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0
ICIgTWV0YWRhdGEgYWxsb2NhdGVkXG4iCiAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCi0gICAgICAgICAgICAgIHN0YXRz
LnN5c3RlbV9ieXRlcywKLSAgICAgICAgICAgICAgYnl0ZXNfaW5fdXNlLAotICAgICAgICAgICAg
ICBzdGF0cy5wYWdlaGVhcF9ieXRlcywKLSAgICAgICAgICAgICAgc3RhdHMuY2VudHJhbF9ieXRl
cywKLSAgICAgICAgICAgICAgc3RhdHMudHJhbnNmZXJfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0
YXRzLnRocmVhZF9ieXRlcywKLSAgICAgICAgICAgICAgdWludDY0X3Qoc3Bhbl9hbGxvY2F0b3Iu
aW51c2UoKSksCi0gICAgICAgICAgICAgIHVpbnQ2NF90KHRocmVhZGhlYXBfYWxsb2NhdG9yLmlu
dXNlKCkpLAotICAgICAgICAgICAgICBzdGF0cy5tZXRhZGF0YV9ieXRlcyk7CisgICAgICAgICAg
ICAgIHN0YXRzLnN5c3RlbUJ5dGVzLAorICAgICAgICAgICAgICBieXRlc0luVXNlLAorICAgICAg
ICAgICAgICBzdGF0cy5wYWdlaGVhcEJ5dGVzLAorICAgICAgICAgICAgICBzdGF0cy5jZW50cmFs
Qnl0ZXMsCisgICAgICAgICAgICAgIHN0YXRzLnRyYW5zZmVyQnl0ZXMsCisgICAgICAgICAgICAg
IHN0YXRzLnRocmVhZEJ5dGVzLAorICAgICAgICAgICAgICB1aW50NjRfdChzcGFuQWxsb2NhdG9y
LmludXNlKCkpLAorICAgICAgICAgICAgICB1aW50NjRfdCh0aHJlYWRoZWFwQWxsb2NhdG9yLmlu
dXNlKCkpLAorICAgICAgICAgICAgICBzdGF0cy5tZXRhZGF0YUJ5dGVzKTsKIH0KIAogc3RhdGlj
IHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKQEAgLTM0MDAsNDUgKzM1MTIsNDMgQEAgc3Rh
dGljIHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKIH0KIAogc3RhdGljIHZvaWQqKiBEdW1w
U3RhY2tUcmFjZXMoKSB7Ci0gIC8vIENvdW50IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQKLSAgaW50
IG5lZWRlZF9zbG90cyA9IDA7Ci0gIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9s
b2NrKTsKLSAgICBmb3IgKFNwYW4qIHMgPSBzYW1wbGVkX29iamVjdHMubmV4dDsgcyAhPSAmc2Ft
cGxlZF9vYmplY3RzOyBzID0gcy0+bmV4dCkgewotICAgICAgU3RhY2tUcmFjZSogc3RhY2sgPSBy
ZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKLSAgICAgIG5lZWRlZF9z
bG90cyArPSAzICsgc3RhY2stPmRlcHRoOworICAgIC8vIENvdW50IGhvdyBtdWNoIHNwYWNlIHdl
IG5lZWQKKyAgICBpbnQgbmVlZGVkU2xvdHMgPSAwOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tI
b2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgZm9yIChTcGFuKiBzID0gc2FtcGxlZE9i
amVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZE9iamVjdHM7IHMgPSBzLT5uZXh0KSB7CisgICAgICAg
ICAgICBTdGFja1RyYWNlKiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMt
Pm9iamVjdHMpOworICAgICAgICAgICAgbmVlZGVkU2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0aDsK
KyAgICAgICAgfQorICAgICAgICBuZWVkZWRTbG90cyArPSAxMDA7IC8vIFNsb3AgaW4gY2FzZSBz
YW1wbGUgZ3Jvd3MKKyAgICAgICAgbmVlZGVkU2xvdHMgKz0gbmVlZGVkU2xvdHMgLyA4OyAvLyBB
biBleHRyYSAxMi41JSBzbG9wCiAgICAgfQotICAgIG5lZWRlZF9zbG90cyArPSAxMDA7ICAgICAg
ICAgICAgLy8gU2xvcCBpbiBjYXNlIHNhbXBsZSBncm93cwotICAgIG5lZWRlZF9zbG90cyArPSBu
ZWVkZWRfc2xvdHMvODsgLy8gQW4gZXh0cmEgMTIuNSUgc2xvcAotICB9CiAKLSAgdm9pZCoqIHJl
c3VsdCA9IG5ldyB2b2lkKltuZWVkZWRfc2xvdHNdOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsK
LSAgICBNRVNTQUdFKCJ0Y21hbGxvYzogY291bGQgbm90IGFsbG9jYXRlICVkIHNsb3RzIGZvciBz
dGFjayB0cmFjZXNcbiIsCi0gICAgICAgICAgICBuZWVkZWRfc2xvdHMpOwotICAgIHJldHVybiBO
VUxMOwotICB9CisgICAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lkKltuZWVkZWRTbG90c107Cisg
ICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgTUVTU0FHRSgidGNtYWxsb2M6IGNvdWxkIG5vdCBh
bGxvY2F0ZSAlZCBzbG90cyBmb3Igc3RhY2sgdHJhY2VzXG4iLAorICAgICAgICAgICAgbmVlZGVk
U2xvdHMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBfbG9jayk7Ci0gIGludCB1c2VkX3Nsb3RzID0gMDsKLSAgZm9yIChTcGFuKiBzID0g
c2FtcGxlZF9vYmplY3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRfb2JqZWN0czsgcyA9IHMtPm5leHQp
IHsKLSAgICBBU1NFUlQodXNlZF9zbG90cyA8IG5lZWRlZF9zbG90cyk7ICAvLyBOZWVkIHRvIGxl
YXZlIHJvb20gZm9yIHRlcm1pbmF0b3IKLSAgICBTdGFja1RyYWNlKiBzdGFjayA9IHJlaW50ZXJw
cmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOwotICAgIGlmICh1c2VkX3Nsb3RzICsg
MyArIHN0YWNrLT5kZXB0aCA+PSBuZWVkZWRfc2xvdHMpIHsKLSAgICAgIC8vIE5vIG1vcmUgcm9v
bQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMF0gPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKLSAgICByZXN1
bHRbdXNlZF9zbG90cysxXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5zaXplKTsK
LSAgICByZXN1bHRbdXNlZF9zbG90cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNr
LT5kZXB0aCk7Ci0gICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzdGFjay0+ZGVwdGg7IGQrKykgewot
ICAgICAgcmVzdWx0W3VzZWRfc2xvdHMrMytkXSA9IHN0YWNrLT5zdGFja1tkXTsKKyAgICBTcGlu
TG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIGludCB1c2VkU2xvdHMgPSAwOworICAg
IGZvciAoU3BhbiogcyA9IHNhbXBsZWRPYmplY3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRPYmplY3Rz
OyBzID0gcy0+bmV4dCkgeworICAgICAgICBBU1NFUlQodXNlZFNsb3RzIDwgbmVlZGVkU2xvdHMp
OyAvLyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0b3IKKyAgICAgICAgU3RhY2tUcmFj
ZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKKyAg
ICAgICAgaWYgKHVzZWRTbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0gbmVlZGVkU2xvdHMpCisg
ICAgICAgICAgICAvLyBObyBtb3JlIHJvb20KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IHJlc3VsdFt1c2VkU2xvdHMrMF0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDEpKTsKKyAgICAgICAgcmVzdWx0W3VzZWRTbG90cysxXSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5zaXplKTsKKyAgICAgICAgcmVzdWx0W3VzZWRTbG90cysy
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5kZXB0aCk7CisgICAgICAgIGZvciAo
aW50IGQgPSAwOyBkIDwgc3RhY2stPmRlcHRoOyBkKyspCisgICAgICAgICAgICByZXN1bHRbdXNl
ZFNsb3RzKzMrZF0gPSBzdGFjay0+c3RhY2tbZF07CisgICAgICAgIHVzZWRTbG90cyArPSAzICsg
c3RhY2stPmRlcHRoOwogICAgIH0KLSAgICB1c2VkX3Nsb3RzICs9IDMgKyBzdGFjay0+ZGVwdGg7
Ci0gIH0KLSAgcmVzdWx0W3VzZWRfc2xvdHNdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90PigwKSk7Ci0gIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0W3Vz
ZWRTbG90c10gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDApKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCiAKQEAgLTM0NDYsMTAzICszNTU2
LDExMCBAQCBzdGF0aWMgdm9pZCoqIER1bXBTdGFja1RyYWNlcygpIHsKIAogLy8gVENNYWxsb2Mn
cyBzdXBwb3J0IGZvciBleHRyYSBtYWxsb2MgaW50ZXJmYWNlcwogY2xhc3MgVENNYWxsb2NJbXBs
ZW1lbnRhdGlvbiA6IHB1YmxpYyBNYWxsb2NFeHRlbnNpb24gewotIHB1YmxpYzoKLSAgdmlydHVh
bCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgpIHsKLSAgICBB
U1NFUlQoYnVmZmVyX2xlbmd0aCA+IDApOwotICAgIFRDTWFsbG9jX1ByaW50ZXIgcHJpbnRlcihi
dWZmZXIsIGJ1ZmZlcl9sZW5ndGgpOwotCi0gICAgLy8gUHJpbnQgbGV2ZWwgb25lIHN0YXRzIHVu
bGVzcyBsb3RzIG9mIHNwYWNlIGlzIGF2YWlsYWJsZQotICAgIGlmIChidWZmZXJfbGVuZ3RoIDwg
MTAwMDApIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIER1bXBTdGF0cygmcHJpbnRlciwgMik7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIEdl
dFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlckxlbmd0aCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChidWZmZXJMZW5ndGggPiAwKTsKKyAgICAgICAgVENNYWxsb2NfUHJpbnRlciBwcmludGVy
KGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKworICAgICAgICAvLyBQcmludCBsZXZlbCBvbmUgc3Rh
dHMgdW5sZXNzIGxvdHMgb2Ygc3BhY2UgaXMgYXZhaWxhYmxlCisgICAgICAgIGlmIChidWZmZXJM
ZW5ndGggPCAxMDAwMCkKKyAgICAgICAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMik7CiAgICAgfQotICB9
CiAKLSAgdmlydHVhbCB2b2lkKiogUmVhZFN0YWNrVHJhY2VzKCkgewotICAgIHJldHVybiBEdW1w
U3RhY2tUcmFjZXMoKTsKLSAgfQorICAgIHZpcnR1YWwgdm9pZCoqIFJlYWRTdGFja1RyYWNlcygp
CisgICAgeworICAgICAgICByZXR1cm4gRHVtcFN0YWNrVHJhY2VzKCk7CisgICAgfQogCi0gIHZp
cnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiB2
YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5VTEwpOworICAgIHZpcnR1YWwgYm9vbCBHZXRO
dW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChuYW1lKTsKIAotICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuY3Vy
cmVudF9hbGxvY2F0ZWRfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRzIHN0YXRz
OwotICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0
cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCi0gICAg
ICAgICAgICAgICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMu
cGFnZWhlYXBfYnl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3Ry
Y21wKG5hbWUsICJnZW5lcmljLmhlYXBfc2l6ZSIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3Rh
dHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1
ZSA9IHN0YXRzLnN5c3RlbV9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmIChzdHJjbXAobmFtZSwgInRjbWFsbG9jLnNsYWNrX2J5dGVzIikgPT0gMCkgewotICAgICAg
Ly8gV2UgYXNzdW1lIHRoYXQgYnl0ZXMgaW4gdGhlIHBhZ2UgaGVhcCBhcmUgbm90IGZyYWdtZW50
ZWQgdG9vCi0gICAgICAvLyBiYWRseSwgYW5kIGFyZSB0aGVyZWZvcmUgYXZhaWxhYmxlIGZvciBh
bGxvY2F0aW9uLgotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAg
ICAqdmFsdWUgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2Nh
Y2hlX2J5dGVzIikgPT0gMCkgewotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9j
ayk7Ci0gICAgICAqdmFsdWUgPSBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVu
dF90b3RhbF90aHJlYWRfY2FjaGVfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRz
IHN0YXRzOwotICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUg
PSBzdGF0cy50aHJlYWRfYnl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAg
IGlmICghc3RyY21wKG5hbWUsICJnZW5lcmljLmN1cnJlbnRfYWxsb2NhdGVkX2J5dGVzIikpIHsK
KyAgICAgICAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CisgICAgICAgICAgICBFeHRyYWN0U3Rh
dHMoJnN0YXRzLCAwKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbUJ5dGVzCisg
ICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkQnl0ZXMKKyAgICAgICAgICAgICAgICAg
ICAgLSBzdGF0cy5jZW50cmFsQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5wYWdl
aGVhcEJ5dGVzOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQorICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiZ2VuZXJpYy5oZWFw
c2l6ZSIpKSB7CisgICAgICAgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgICAgICAg
RXh0cmFjdFN0YXRzKCZzdGF0cywgMCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0
ZW1CeXRlczsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFzdHJjbXAobmFtZSwgInRjbWFsbG9jLnNsYWNrX2J5dGVzIikpIHsKKyAgICAgICAgICAg
IC8vIFdlIGFzc3VtZSB0aGF0IGJ5dGVzIGluIHRoZSBwYWdlIGhlYXAgYXJlIG5vdCBmcmFnbWVu
dGVkIHRvbworICAgICAgICAgICAgLy8gYmFkbHksIGFuZCBhcmUgdGhlcmVmb3JlIGF2YWlsYWJs
ZSBmb3IgYWxsb2NhdGlvbi4KKyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxsKCZwYWdlaGVh
cExvY2spOworICAgICAgICAgICAgKnZhbHVlID0gcGFnZWhlYXAtPkZyZWVCeXRlcygpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN0cmNtcChu
YW1lLCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpKSB7CisgICAgICAg
ICAgICBTcGluTG9ja0hvbGRlciBsbCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgICAgICp2YWx1
ZSA9IG92ZXJhbGxUaHJlYWRDYWNoZXNpemU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQogCi0gIHZpcnR1YWwgYm9vbCBTZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciog
bmFtZSwgc2l6ZV90IHZhbHVlKSB7Ci0gICAgQVNTRVJUKG5hbWUgIT0gTlVMTCk7CisgICAgICAg
IGlmICghc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5jdXJyZW50X3RvdGFsX3RocmVhZF9jYWNoZV9i
eXRlcyIpKSB7CisgICAgICAgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgICAgICAg
RXh0cmFjdFN0YXRzKCZzdGF0cywgMCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0cy50aHJl
YWRCeXRlczsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBpZiAo
c3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0g
MCkgewotICAgICAgLy8gQ2xpcCB0aGUgdmFsdWUgdG8gYSByZWFzb25hYmxlIHJhbmdlCi0gICAg
ICBpZiAodmFsdWUgPCBrTWluVGhyZWFkQ2FjaGVTaXplKSB2YWx1ZSA9IGtNaW5UaHJlYWRDYWNo
ZVNpemU7Ci0gICAgICBpZiAodmFsdWUgPiAoMTw8MzApKSB2YWx1ZSA9ICgxPDwzMCk7ICAgICAv
LyBMaW1pdCB0byAxR0IKLQotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7
Ci0gICAgICBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2
YWx1ZSk7Ci0gICAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVT
aXplKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIHJldHVybiBmYWxzZTsKLSAgfQorICAgIHZpcnR1YWwgYm9vbCBTZXROdW1lcmljUHJv
cGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG5hbWUpOwogCi0gIHZpcnR1YWwgdm9pZCBNYXJrVGhyZWFkSWRsZSgpIHsKLSAgICBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6QmVjb21lSWRsZSgpOwotICB9CisgICAgICAgIGlmICghc3RyY21w
KG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikpIHsKKyAgICAg
ICAgICAgIC8vIENsaXAgdGhlIHZhbHVlIHRvIGEgcmVhc29uYWJsZSByYW5nZQorICAgICAgICAg
ICAgaWYgKHZhbHVlIDwga01pblRocmVhZENhY2hlU2l6ZSkKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IGtNaW5UaHJlYWRDYWNoZVNpemU7CisgICAgICAgICAgICBpZiAodmFsdWUgPiAoMSA8PCAz
MCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSAoMSA8PCAzMCk7IC8vIExpbWl0IHRvIDFHQgor
CisgICAgICAgICAgICBTcGluTG9ja0hvbGRlciBsbCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAg
ICAgIG92ZXJhbGxUaHJlYWRDYWNoZXNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlKTsK
KyAgICAgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6
ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICB2aXJ0dWFsIHZv
aWQgUmVsZWFzZUZyZWVNZW1vcnkoKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBf
bG9jayk7Ci0gICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKLSAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIE1hcmtUaHJlYWRJZGxlKCkK
KyAgICB7CisgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgUmVsZWFzZUZyZWVNZW1vcnkoKQorICAgIHsKKyAgICAgICAg
U3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgcGFnZWhlYXAtPlJlbGVh
c2VGcmVlUGFnZXMoKTsKKyAgICB9CiB9OwogI2VuZGlmCiAKIC8vIFRoZSBjb25zdHJ1Y3RvciBh
bGxvY2F0ZXMgYW4gb2JqZWN0IHRvIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uCiAvLyBydW5z
IGJlZm9yZSBtYWluKCksIGFuZCB0aGVyZWZvcmUgd2UgZG8gbm90IGhhdmUgYSBjaGFuY2UgdG8g
YmVjb21lCi0vLyBtdWx0aS10aHJlYWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uICBXZSBhbHNv
IGNyZWF0ZSB0aGUgVFNEIGtleQotLy8gaGVyZS4gIFByZXN1bWFibHkgYnkgdGhlIHRpbWUgdGhp
cyBjb25zdHJ1Y3RvciBydW5zLCBnbGliYyBpcyBpbgorLy8gbXVsdGktdGhyZWFkZWQgYmVmb3Jl
IGluaXRpYWxpemF0aW9uLiBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQorLy8gaGVyZS4gUHJl
c3VtYWJseSBieSB0aGUgdGltZSB0aGlzIGNvbnN0cnVjdG9yIHJ1bnMsIGdsaWJjIGlzIGluCiAv
LyBnb29kIGVub3VnaCBzaGFwZSB0byBoYW5kbGUgcHRocmVhZF9rZXlfY3JlYXRlKCkuCiAvLwog
Ly8gVGhlIGNvbnN0cnVjdG9yIGFsc28gdGFrZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHRlbGwgU1RM
IHRvIHVzZQotLy8gdGNtYWxsb2MuICBXZSB3YW50IHRvIGRvIHRoaXMgZWFybHksIGJlZm9yZSBj
b25zdHJ1Y3QgdGltZSwgc28KKy8vIHRjbWFsbG9jLiBXZSB3YW50IHRvIGRvIHRoaXMgZWFybHks
IGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KIC8vIGFsbCB1c2VyIFNUTCBhbGxvY2F0aW9ucyBn
byB0aHJvdWdoIHRjbWFsbG9jICh3aGljaCB3b3JrcyByZWFsbHkKIC8vIHdlbGwgZm9yIFNUTCku
CiAvLwpAQCAtMzU2MSw3ICszNjc4LDcgQEAgY2xhc3MgVENNYWxsb2NHdWFyZCB7CiAjZW5kaWYK
ICNlbmRpZgogICAgIGZyZWUobWFsbG9jKDEpKTsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6
SW5pdFRTRCgpOworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRUU0QoKTsKICAgICBmcmVl
KG1hbGxvYygxKSk7CiAjaWZuZGVmIFdURl9DSEFOR0VTCiAgICAgTWFsbG9jRXh0ZW5zaW9uOjpS
ZWdpc3RlcihuZXcgVENNYWxsb2NJbXBsZW1lbnRhdGlvbik7CkBAIC0zNTcxLDcgKzM2ODgsNyBA
QCBjbGFzcyBUQ01hbGxvY0d1YXJkIHsKICNpZm5kZWYgV1RGX0NIQU5HRVMKICAgflRDTWFsbG9j
R3VhcmQoKSB7CiAgICAgY29uc3QgY2hhciogZW52ID0gZ2V0ZW52KCJNQUxMT0NTVEFUUyIpOwot
ICAgIGlmIChlbnYgIT0gTlVMTCkgeworICAgIGlmIChlbnYpIHsKICAgICAgIGludCBsZXZlbCA9
IGF0b2koZW52KTsKICAgICAgIGlmIChsZXZlbCA8IDEpIGxldmVsID0gMTsKICAgICAgIFByaW50
U3RhdHMobGV2ZWwpOwpAQCAtMzU5NCwzMyArMzcxMSwzMiBAQCBzdGF0aWMgVENNYWxsb2NHdWFy
ZCBtb2R1bGVfZW50ZXJfZXhpdF9oCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKIAotc3RhdGljIFNw
YW4qIERvU2FtcGxlZEFsbG9jYXRpb24oc2l6ZV90IHNpemUpIHsKLQotICAvLyBHcmFiIHRoZSBz
dGFjayB0cmFjZSBvdXRzaWRlIHRoZSBoZWFwIGxvY2sKLSAgU3RhY2tUcmFjZSB0bXA7Ci0gIHRt
cC5kZXB0aCA9IEdldFN0YWNrVHJhY2UodG1wLnN0YWNrLCBrTWF4U3RhY2tEZXB0aCwgMSk7Ci0g
IHRtcC5zaXplID0gc2l6ZTsKLQotICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsK
LSAgLy8gQWxsb2NhdGUgc3BhbgotICBTcGFuICpzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyhz
aXplID09IDAgPyAxIDogc2l6ZSkpOwotICBpZiAoc3BhbiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJu
IE5VTEw7Ci0gIH0KK3N0YXRpYyBTcGFuKiBEb1NhbXBsZWRBbGxvY2F0aW9uKHNpemVfdCBzaXpl
KQorewogCi0gIC8vIEFsbG9jYXRlIHN0YWNrIHRyYWNlCi0gIFN0YWNrVHJhY2UgKnN0YWNrID0g
c3RhY2t0cmFjZV9hbGxvY2F0b3IuTmV3KCk7Ci0gIGlmIChzdGFjayA9PSBOVUxMKSB7Ci0gICAg
Ly8gU2FtcGxpbmcgZmFpbGVkIGJlY2F1c2Ugb2YgbGFjayBvZiBtZW1vcnkKLSAgICByZXR1cm4g
c3BhbjsKLSAgfQorICAgIC8vIEdyYWIgdGhlIHN0YWNrIHRyYWNlIG91dHNpZGUgdGhlIGhlYXAg
bG9jaworICAgIFN0YWNrVHJhY2UgdG1wOworICAgIHRtcC5kZXB0aCA9IEdldFN0YWNrVHJhY2Uo
dG1wLnN0YWNrLCBrTWF4U3RhY2tEZXB0aCwgMSk7CisgICAgdG1wLnNpemUgPSBzaXplOworCisg
ICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAvLyBBbGxvY2F0ZSBzcGFu
CisgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoIXNpemUgPyAxIDogc2l6ZSkp
OworICAgIGlmICghc3BhbikKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgKnN0YWNrID0gdG1wOwot
ICBzcGFuLT5zYW1wbGUgPSAxOwotICBzcGFuLT5vYmplY3RzID0gc3RhY2s7Ci0gIERMTF9QcmVw
ZW5kKCZzYW1wbGVkX29iamVjdHMsIHNwYW4pOworICAgIC8vIEFsbG9jYXRlIHN0YWNrIHRyYWNl
CisgICAgU3RhY2tUcmFjZSogc3RhY2sgPSBzdGFja3RyYWNlX2FsbG9jYXRvci5OZXcoKTsKKyAg
ICBpZiAoIXN0YWNrKQorICAgICAgICAvLyBTYW1wbGluZyBmYWlsZWQgYmVjYXVzZSBvZiBsYWNr
IG9mIG1lbW9yeQorICAgICAgICByZXR1cm4gc3BhbjsKKworICAgICpzdGFjayA9IHRtcDsKKyAg
ICBzcGFuLT5zYW1wbGUgPSAxOworICAgIHNwYW4tPm9iamVjdHMgPSBzdGFjazsKKyAgICBETExQ
cmVwZW5kKCZzYW1wbGVkT2JqZWN0cywgc3Bhbik7CiAKLSAgcmV0dXJuIHNwYW47CisgICAgcmV0
dXJuIHNwYW47CiB9CiAjZW5kaWYKIApAQCAtMzYzNyw3ICszNzUzLDggQEAgc3RhdGljIGlubGlu
ZSB2b2lkKiBDaGVja2VkTWFsbG9jUmVzdWx0KAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQqIFNwYW5Ub01hbGxvY1Jlc3VsdChTcGFuICpzcGFuKSB7CitzdGF0aWMg
aW5saW5lIHZvaWQqIFNwYW5Ub01hbGxvY1Jlc3VsdChTcGFuKiBzcGFuKQorewogICBBU1NFUlRf
U1BBTl9DT01NSVRURUQoc3Bhbik7CiAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhzcGFuLT5z
dGFydCwgMCk7CiAgIHJldHVybgpAQCAtMzY0Nyw0NyArMzc2NCw0NSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQqIFNwYW5Ub01hbGxvY1Jlc3VsdChTCiAjaWZkZWYgV1RGX0NIQU5HRVMKIHRlbXBsYXRl
IDxib29sIGNyYXNoT25GYWlsdXJlPgogI2VuZGlmCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lk
KiBkb19tYWxsb2Moc2l6ZV90IHNpemUpIHsKLSAgdm9pZCogcmV0ID0gTlVMTDsKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIHZvaWQqIGRvTWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHZvaWQqIHJl
dCA9IDA7CiAKICNpZmRlZiBXVEZfQ0hBTkdFUwogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4oKSk7
CiAjZW5kaWYKIAotICAvLyBUaGUgZm9sbG93aW5nIGNhbGwgZm9yY2VzIG1vZHVsZSBpbml0aWFs
aXphdGlvbgotICBUQ01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jX1RocmVhZENh
Y2hlOjpHZXRDYWNoZSgpOworICAgIC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBmb3JjZXMgbW9kdWxl
IGluaXRpYWxpemF0aW9uCisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9j
VGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gIGlmICgoRkxB
R1NfdGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlciA+IDApICYmIGhlYXAtPlNhbXBsZUFsbG9jYXRp
b24oc2l6ZSkpIHsKLSAgICBTcGFuKiBzcGFuID0gRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplKTsK
LSAgICBpZiAoc3BhbiAhPSBOVUxMKSB7Ci0gICAgICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQo
c3Bhbik7Ci0gICAgfQotICB9IGVsc2UKLSNlbmRpZgotICBpZiAoc2l6ZSA+IGtNYXhTaXplKSB7
Ci0gICAgLy8gVXNlIHBhZ2UtbGV2ZWwgYWxsb2NhdG9yCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBfbG9jayk7Ci0gICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6
ZSkpOwotICAgIGlmIChzcGFuICE9IE5VTEwpIHsKLSAgICAgIHJldCA9IFNwYW5Ub01hbGxvY1Jl
c3VsdChzcGFuKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVGhlIGNvbW1vbiBjYXNlLCBh
bmQgYWxzbyB0aGUgc2ltcGxlc3QuICBUaGlzIGp1c3QgcG9wcyB0aGUKLSAgICAvLyBzaXplLWFw
cHJvcHJpYXRlIGZyZWVsaXN0LCBhZmVyIHJlcGxlbmlzaGluZyBpdCBpZiBpdCdzIGVtcHR5Lgot
ICAgIHJldCA9IENoZWNrZWRNYWxsb2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoc2l6ZSkpOwotICB9
Ci0gIGlmICghcmV0KSB7CisgICAgaWYgKChGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVy
ID4gMCkgJiYgaGVhcC0+U2FtcGxlQWxsb2NhdGlvbihzaXplKSkgeworICAgICAgICBTcGFuKiBz
cGFuID0gRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplKTsKKyAgICAgICAgaWYgKHNwYW4pCisgICAg
ICAgICAgICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7CisgICAgfSBlbHNlCisjZW5k
aWYKKyAgICBpZiAoc2l6ZSA+IGtNYXhTaXplKSB7CisgICAgICAgIC8vIFVzZSBwYWdlLWxldmVs
IGFsbG9jYXRvcgorICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAg
ICAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyhzaXplKSk7CisgICAgICAgIGlm
IChzcGFuKQorICAgICAgICAgICAgcmV0ID0gU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAg
IH0gZWxzZQorICAgICAgICAvLyBUaGUgY29tbW9uIGNhc2UsIGFuZCBhbHNvIHRoZSBzaW1wbGVz
dC4gVGhpcyBqdXN0IHBvcHMgdGhlCisgICAgICAgIC8vIHNpemUtYXBwcm9wcmlhdGUgZnJlZWxp
c3QsIGFmZXIgcmVwbGVuaXNoaW5nIGl0IGlmIGl0J3MgZW1wdHkuCisgICAgICAgIHJldCA9IENo
ZWNrZWRNYWxsb2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoc2l6ZSkpOworICAgIGlmICghcmV0KQog
I2lmZGVmIFdURl9DSEFOR0VTCi0gICAgaWYgKGNyYXNoT25GYWlsdXJlKSAvLyBUaGlzIGJyYW5j
aCBzaG91bGQgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIuCi0gICAgICAgIENSQVNI
KCk7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkgLy8gVGhpcyBicmFuY2ggc2hvdWxkIGJl
IG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyLgorICAgICAgICAgICAgQ1JBU0goKTsKICNl
bHNlCi0gICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIGVycm5vID0gRU5PTUVNOwogI2VuZGlm
Ci0gIH0KLSAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIGRvX2ZyZWUodm9pZCogcHRyKSB7CitzdGF0aWMgQUxXQVlTX0lOTElORSB2
b2lkIGRvRnJlZSh2b2lkKiBwdHIpCit7CiAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuOwogICBB
U1NFUlQocGFnZWhlYXAgIT0gTlVMTCk7ICAvLyBTaG91bGQgbm90IGNhbGwgZnJlZSgpIGJlZm9y
ZSBtYWxsb2MoKQogICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihwdHIpID4+IGtQYWdlU2hpZnQ7CkBAIC0zNzAzLDIxICszODE4LDIxIEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9fZnJlZSh2b2lkKgogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVT
CiAgICAgQVNTRVJUKCFwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKS0+c2FtcGxlKTsKICNlbmRp
ZgotICAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6
OkdldENhY2hlSWZQcmVzZW50KCk7CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IFRD
TWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCk7CiAgICAgaWYgKGhlYXAgIT0g
TlVMTCkgewogICAgICAgaGVhcC0+RGVhbGxvY2F0ZShwdHIsIGNsKTsKICAgICB9IGVsc2Ugewog
ICAgICAgLy8gRGVsZXRlIGRpcmVjdGx5IGludG8gY2VudHJhbCBjYWNoZQotICAgICAgU0xMX1Nl
dE5leHQocHRyLCBOVUxMKTsKLSAgICAgIGNlbnRyYWxfY2FjaGVbY2xdLkluc2VydFJhbmdlKHB0
ciwgcHRyLCAxKTsKKyAgICAgIFNMTFNldE5leHQocHRyLCAwKTsKKyAgICAgIGNlbnRyYWxDYWNo
ZVtjbF0uSW5zZXJ0UmFuZ2UocHRyLCBwdHIsIDEpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcExvY2spOwogICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRy
KSAlIGtQYWdlU2l6ZSA9PSAwKTsKICAgICBBU1NFUlQoc3BhbiAhPSBOVUxMICYmIHNwYW4tPnN0
YXJ0ID09IHApOwogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCiAgICAgaWYgKHNwYW4tPnNh
bXBsZSkgewotICAgICAgRExMX1JlbW92ZShzcGFuKTsKKyAgICAgIERMTFJlbW92ZShzcGFuKTsK
ICAgICAgIHN0YWNrdHJhY2VfYWxsb2NhdG9yLkRlbGV0ZShyZWludGVycHJldF9jYXN0PFN0YWNr
VHJhY2UqPihzcGFuLT5vYmplY3RzKSk7CiAgICAgICBzcGFuLT5vYmplY3RzID0gTlVMTDsKICAg
ICB9CkBAIC0zNzMxLDEwOCArMzg0NiwxMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBk
b19mcmVlKHZvaWQqCiAvLwogLy8gTm90ZTogdGhpcyBjb2RlIGNhbiBiZSBzbG93LCBhbmQgY2Fu
IHNpZ25pZmljYW50bHkgZnJhZ21lbnQgbWVtb3J5LgogLy8gVGhlIGV4cGVjdGF0aW9uIGlzIHRo
YXQgbWVtYWxpZ24vcG9zaXhfbWVtYWxpZ24vdmFsbG9jL3B2YWxsb2Mgd2lsbAotLy8gbm90IGJl
IGludm9rZWQgdmVyeSBvZnRlbi4gIFRoaXMgcmVxdWlyZW1lbnQgc2ltcGxpZmllcyBvdXIKKy8v
IG5vdCBiZSBpbnZva2VkIHZlcnkgb2Z0ZW4uIFRoaXMgcmVxdWlyZW1lbnQgc2ltcGxpZmllcyBv
dXIKIC8vIGltcGxlbWVudGF0aW9uIGFuZCBhbGxvd3MgdXMgdG8gdHVuZSBmb3IgZXhwZWN0ZWQg
YWxsb2NhdGlvbgogLy8gcGF0dGVybnMuCi1zdGF0aWMgdm9pZCogZG9fbWVtYWxpZ24oc2l6ZV90
IGFsaWduLCBzaXplX3Qgc2l6ZSkgewotICBBU1NFUlQoKGFsaWduICYgKGFsaWduIC0gMSkpID09
IDApOwotICBBU1NFUlQoYWxpZ24gPiAwKTsKLSAgaWYgKHBhZ2VoZWFwID09IE5VTEwpIFRDTWFs
bG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCk7Ci0KLSAgLy8gQWxsb2NhdGUgYXQgbGVhc3Qg
b25lIGJ5dGUgdG8gYXZvaWQgYm91bmRhcnkgY29uZGl0aW9ucyBiZWxvdwotICBpZiAoc2l6ZSA9
PSAwKSBzaXplID0gMTsKLQotICBpZiAoc2l6ZSA8PSBrTWF4U2l6ZSAmJiBhbGlnbiA8IGtQYWdl
U2l6ZSkgewotICAgIC8vIFNlYXJjaCB0aHJvdWdoIGFjY2VwdGFibGUgc2l6ZSBjbGFzc2VzIGxv
b2tpbmcgZm9yIG9uZSB3aXRoCi0gICAgLy8gZW5vdWdoIGFsaWdubWVudC4gIFRoaXMgZGVwZW5k
cyBvbiB0aGUgZmFjdCB0aGF0Ci0gICAgLy8gSW5pdFNpemVDbGFzc2VzKCkgY3VycmVudGx5IHBy
b2R1Y2VzIHNldmVyYWwgc2l6ZSBjbGFzc2VzIHRoYXQKLSAgICAvLyBhcmUgYWxpZ25lZCBhdCBw
b3dlcnMgb2YgdHdvLiAgV2Ugd2lsbCB3YXN0ZSB0aW1lIGFuZCBzcGFjZSBpZgotICAgIC8vIHdl
IG1pc3MgaW4gdGhlIHNpemUgY2xhc3MgYXJyYXksIGJ1dCB0aGF0IGlzIGRlZW1lZCBhY2NlcHRh
YmxlCi0gICAgLy8gc2luY2UgbWVtYWxpZ24oKSBzaG91bGQgYmUgdXNlZCByYXJlbHkuCi0gICAg
c2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOwotICAgIHdoaWxlIChjbCA8IGtOdW1DbGFzc2Vz
ICYmICgoY2xhc3NfdG9fc2l6ZVtjbF0gJiAoYWxpZ24gLSAxKSkgIT0gMCkpIHsKLSAgICAgIGNs
Kys7Ci0gICAgfQotICAgIGlmIChjbCA8IGtOdW1DbGFzc2VzKSB7Ci0gICAgICBUQ01hbGxvY19U
aHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOwotICAg
ICAgcmV0dXJuIENoZWNrZWRNYWxsb2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoY2xhc3NfdG9fc2l6
ZVtjbF0pKTsKK3N0YXRpYyB2b2lkKiBkb01lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNp
emUpCit7CisgICAgQVNTRVJUKCEoYWxpZ24gJiAoYWxpZ24gLSAxKSkpOworICAgIEFTU0VSVChh
bGlnbiA+IDApOworICAgIGlmICghcGFnZWhlYXApCisgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkluaXRNb2R1bGUoKTsKKworICAgIC8vIEFsbG9jYXRlIGF0IGxlYXN0IG9uZSBieXRlIHRv
IGF2b2lkIGJvdW5kYXJ5IGNvbmRpdGlvbnMgYmVsb3cKKyAgICBpZiAoIXNpemUpCisgICAgICAg
IHNpemUgPSAxOworCisgICAgaWYgKHNpemUgPD0ga01heFNpemUgJiYgYWxpZ24gPCBrUGFnZVNp
emUpIHsKKyAgICAgICAgLy8gU2VhcmNoIHRocm91Z2ggYWNjZXB0YWJsZSBzaXplIGNsYXNzZXMg
bG9va2luZyBmb3Igb25lIHdpdGgKKyAgICAgICAgLy8gZW5vdWdoIGFsaWdubWVudC4gVGhpcyBk
ZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgLy8gSW5pdFNpemVDbGFzc2VzKCkgY3Vy
cmVudGx5IHByb2R1Y2VzIHNldmVyYWwgc2l6ZSBjbGFzc2VzIHRoYXQKKyAgICAgICAgLy8gYXJl
IGFsaWduZWQgYXQgcG93ZXJzIG9mIHR3by4gV2Ugd2lsbCB3YXN0ZSB0aW1lIGFuZCBzcGFjZSBp
ZgorICAgICAgICAvLyB3ZSBtaXNzIGluIHRoZSBzaXplIGNsYXNzIGFycmF5LCBidXQgdGhhdCBp
cyBkZWVtZWQgYWNjZXB0YWJsZQorICAgICAgICAvLyBzaW5jZSBtZW1hbGlnbigpIHNob3VsZCBi
ZSB1c2VkIHJhcmVseS4KKyAgICAgICAgc2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOworICAg
ICAgICB3aGlsZSAoY2wgPCBrTnVtQ2xhc3NlcyAmJiAoY2xhc3NUb3NpemVbY2xdICYgKGFsaWdu
IC0gMSkpKQorICAgICAgICBjbCsrOworICAgICAgICBpZiAoY2wgPCBrTnVtQ2xhc3Nlcykgewor
ICAgICAgICAgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkdldENhY2hlKCk7CisgICAgICAgICAgICByZXR1cm4gQ2hlY2tlZE1hbGxvY1Jlc3VsdCho
ZWFwLT5BbGxvY2F0ZShjbGFzc1Rvc2l6ZVtjbF0pKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQog
Ci0gIC8vIFdlIHdpbGwgYWxsb2NhdGUgZGlyZWN0bHkgZnJvbSB0aGUgcGFnZSBoZWFwCi0gIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworICAgIC8vIFdlIHdpbGwgYWxsb2NhdGUg
ZGlyZWN0bHkgZnJvbSB0aGUgcGFnZSBoZWFwCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhl
YXBMb2NrKTsKIAotICBpZiAoYWxpZ24gPD0ga1BhZ2VTaXplKSB7Ci0gICAgLy8gQW55IHBhZ2Ut
bGV2ZWwgYWxsb2NhdGlvbiB3aWxsIGJlIGZpbmUKLSAgICAvLyBUT0RPOiBXZSBjb3VsZCBwdXQg
dGhlIHJlc3Qgb2YgdGhpcyBwYWdlIGluIHRoZSBhcHByb3ByaWF0ZQotICAgIC8vIFRPRE86IGNh
Y2hlIGJ1dCBpdCBkb2VzIG5vdCBzZWVtIHdvcnRoIGl0LgotICAgIFNwYW4qIHNwYW4gPSBwYWdl
aGVhcC0+TmV3KHBhZ2VzKHNpemUpKTsKLSAgICByZXR1cm4gc3BhbiA9PSBOVUxMID8gTlVMTCA6
IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKLSAgfQorICAgIGlmIChhbGlnbiA8PSBrUGFnZVNp
emUpIHsKKyAgICAgICAgLy8gQW55IHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiB3aWxsIGJlIGZpbmUK
KyAgICAgICAgLy8gVE9ETzogV2UgY291bGQgcHV0IHRoZSByZXN0IG9mIHRoaXMgcGFnZSBpbiB0
aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gVE9ETzogY2FjaGUgYnV0IGl0IGRvZXMgbm90IHNl
ZW0gd29ydGggaXQuCisgICAgICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNp
emUpKTsKKyAgICAgICAgcmV0dXJuICFzcGFuID8gMCA6IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFu
KTsKKyAgICB9CiAKLSAgLy8gQWxsb2NhdGUgZXh0cmEgcGFnZXMgYW5kIGNhcnZlIG9mZiBhbiBh
bGlnbmVkIHBvcnRpb24KLSAgY29uc3QgTGVuZ3RoIGFsbG9jID0gcGFnZXMoc2l6ZSArIGFsaWdu
KTsKLSAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcoYWxsb2MpOwotICBpZiAoc3BhbiA9PSBO
VUxMKSByZXR1cm4gTlVMTDsKLQotICAvLyBTa2lwIHN0YXJ0aW5nIHBvcnRpb24gc28gdGhhdCB3
ZSBlbmQgdXAgYWxpZ25lZAotICBMZW5ndGggc2tpcCA9IDA7Ci0gIHdoaWxlICgoKChzcGFuLT5z
dGFydCtza2lwKSA8PCBrUGFnZVNoaWZ0KSAmIChhbGlnbiAtIDEpKSAhPSAwKSB7Ci0gICAgc2tp
cCsrOwotICB9Ci0gIEFTU0VSVChza2lwIDwgYWxsb2MpOwotICBpZiAoc2tpcCA+IDApIHsKLSAg
ICBTcGFuKiByZXN0ID0gcGFnZWhlYXAtPlNwbGl0KHNwYW4sIHNraXApOwotICAgIHBhZ2VoZWFw
LT5EZWxldGUoc3Bhbik7Ci0gICAgc3BhbiA9IHJlc3Q7Ci0gIH0KKyAgICAvLyBBbGxvY2F0ZSBl
eHRyYSBwYWdlcyBhbmQgY2FydmUgb2ZmIGFuIGFsaWduZWQgcG9ydGlvbgorICAgIGNvbnN0IExl
bmd0aCBhbGxvYyA9IHBhZ2VzKHNpemUgKyBhbGlnbik7CisgICAgU3Bhbiogc3BhbiA9IHBhZ2Vo
ZWFwLT5OZXcoYWxsb2MpOworICAgIGlmICghc3BhbikKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAg
Ly8gU2tpcCB0cmFpbGluZyBwb3J0aW9uIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gcmV0dXJuCi0g
IGNvbnN0IExlbmd0aCBuZWVkZWQgPSBwYWdlcyhzaXplKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0
aCA+PSBuZWVkZWQpOwotICBpZiAoc3Bhbi0+bGVuZ3RoID4gbmVlZGVkKSB7Ci0gICAgU3Bhbiog
dHJhaWxlciA9IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBuZWVkZWQpOwotICAgIHBhZ2VoZWFwLT5E
ZWxldGUodHJhaWxlcik7Ci0gIH0KLSAgcmV0dXJuIFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsK
KyAgICAvLyBTa2lwIHN0YXJ0aW5nIHBvcnRpb24gc28gdGhhdCB3ZSBlbmQgdXAgYWxpZ25lZAor
ICAgIExlbmd0aCBza2lwID0gMDsKKyAgICB3aGlsZSAoKChzcGFuLT5zdGFydCtza2lwKSA8PCBr
UGFnZVNoaWZ0KSAmIChhbGlnbiAtIDEpKQorICAgICAgICBza2lwKys7CisgICAgQVNTRVJUKHNr
aXAgPCBhbGxvYyk7CisgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgIFNwYW4qIHJlc3QgPSBw
YWdlaGVhcC0+U3BsaXQoc3Bhbiwgc2tpcCk7CisgICAgICAgIHBhZ2VoZWFwLT5EZWxldGUoc3Bh
bik7CisgICAgICAgIHNwYW4gPSByZXN0OworICAgIH0KKworICAgIC8vIFNraXAgdHJhaWxpbmcg
cG9ydGlvbiB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHJldHVybgorICAgIGNvbnN0IExlbmd0aCBu
ZWVkZWQgPSBwYWdlcyhzaXplKTsKKyAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID49IG5lZWRlZCk7
CisgICAgaWYgKHNwYW4tPmxlbmd0aCA+IG5lZWRlZCkgeworICAgICAgICBTcGFuKiB0cmFpbGVy
ID0gcGFnZWhlYXAtPlNwbGl0KHNwYW4sIG5lZWRlZCk7CisgICAgICAgIHBhZ2VoZWFwLT5EZWxl
dGUodHJhaWxlcik7CisgICAgfQorICAgIHJldHVybiBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7
CiB9CiAjZW5kaWYKIAogLy8gSGVscGVycyBmb3IgdXNlIGJ5IGV4cG9ydGVkIHJvdXRpbmVzIGJl
bG93OgogCiAjaWZuZGVmIFdURl9DSEFOR0VTCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9fbWFsbG9j
X3N0YXRzKCkgewotICBQcmludFN0YXRzKDEpOworc3RhdGljIGlubGluZSB2b2lkIGRvTWFsbG9j
U3RhdHMoKQoreworICAgIFByaW50U3RhdHMoMSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGlu
ZSBpbnQgZG9fbWFsbG9wdChpbnQsIGludCkgewotICByZXR1cm4gMTsgICAgIC8vIEluZGljYXRl
cyBlcnJvcgorc3RhdGljIGlubGluZSBpbnQgZG9NYWxsb3B0KGludCwgaW50KQoreworICAgIHJl
dHVybiAxOyAvLyBJbmRpY2F0ZXMgZXJyb3IKIH0KIAotI2lmZGVmIEhBVkVfU1RSVUNUX01BTExJ
TkZPICAvLyBtYWxsaW5mbyBpc24ndCBkZWZpbmVkIG9uIGZyZWVic2QsIGZvciBpbnN0YW5jZQot
c3RhdGljIGlubGluZSBzdHJ1Y3QgbWFsbGluZm8gZG9fbWFsbGluZm8oKSB7Ci0gIFRDTWFsbG9j
U3RhdHMgc3RhdHM7Ci0gIEV4dHJhY3RTdGF0cygmc3RhdHMsIE5VTEwpOwotCi0gIC8vIEp1c3Qg
c29tZSBvZiB0aGUgZmllbGRzIGFyZSBmaWxsZWQgaW4uCi0gIHN0cnVjdCBtYWxsaW5mbyBpbmZv
OwotICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0KLSAgLy8gVW5mb3J0dW5hdGVs
eSwgdGhlIHN0cnVjdCBjb250YWlucyAiaW50IiBmaWVsZCwgc28gc29tZSBvZiB0aGUKLSAgLy8g
c2l6ZSB2YWx1ZXMgd2lsbCBiZSB0cnVuY2F0ZWQuCi0gIGluZm8uYXJlbmEgICAgID0gc3RhdGlj
X2Nhc3Q8aW50PihzdGF0cy5zeXN0ZW1fYnl0ZXMpOwotICBpbmZvLmZzbWJsa3MgICA9IHN0YXRp
Y19jYXN0PGludD4oc3RhdHMudGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsgc3RhdHMudHJhbnNmZXJfYnl0ZXMpOwotICBpbmZvLmZvcmRibGtzICA9
IHN0YXRpY19jYXN0PGludD4oc3RhdHMucGFnZWhlYXBfYnl0ZXMpOwotICBpbmZvLnVvcmRibGtz
ICA9IHN0YXRpY19jYXN0PGludD4oc3RhdHMuc3lzdGVtX2J5dGVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRocmVhZF9ieXRlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5jZW50cmFsX2J5dGVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzKTsKKyNpZmRl
ZiBIQVZFX1NUUlVDVF9NQUxMSU5GTyAvLyBtYWxsaW5mbyBpc24ndCBkZWZpbmVkIG9uIGZyZWVi
c2QsIGZvciBpbnN0YW5jZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFsbGluZm8gZG9NYWxsaW5m
bygpCit7CisgICAgVENNYWxsb2NTdGF0cyBzdGF0czsKKyAgICBFeHRyYWN0U3RhdHMoJnN0YXRz
LCAwKTsKKworICAgIC8vIEp1c3Qgc29tZSBvZiB0aGUgZmllbGRzIGFyZSBmaWxsZWQgaW4uCisg
ICAgc3RydWN0IG1hbGxpbmZvIGluZm87CisgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5m
bykpOwogCi0gIHJldHVybiBpbmZvOworICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZSBzdHJ1Y3Qg
Y29udGFpbnMgImludCIgZmllbGQsIHNvIHNvbWUgb2YgdGhlCisgICAgLy8gc2l6ZSB2YWx1ZXMg
d2lsbCBiZSB0cnVuY2F0ZWQuCisgICAgaW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+
KHN0YXRzLnN5c3RlbUJ5dGVzKTsKKyAgICBpbmZvLmZzbWJsa3MgICA9IHN0YXRpY19jYXN0PGlu
dD4oc3RhdHMudGhyZWFkQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgc3RhdHMuY2VudHJhbEJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArIHN0YXRzLnRyYW5zZmVyQnl0ZXMpOworICAgIGluZm8uZm9yZGJsa3MgID0gc3RhdGljX2Nh
c3Q8aW50PihzdGF0cy5wYWdlaGVhcEJ5dGVzKTsKKyAgICBpbmZvLnVvcmRibGtzICA9IHN0YXRp
Y19jYXN0PGludD4oc3RhdHMuc3lzdGVtQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0gc3RhdHMudGhyZWFkQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0gc3RhdHMuY2VudHJhbEJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVyQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBCeXRlcyk7CisKKyAgICByZXR1cm4gaW5mbzsK
IH0KICNlbmRpZgogCkBAIC0zODQ4LDcgKzM5NjgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBt
YWxsaW5mbyBkb19tYWxsaW5mCiAjaWZuZGVmIFdURl9DSEFOR0VTCiBleHRlcm4gIkMiIAogI2Vs
c2UKLSNkZWZpbmUgZG9fbWFsbG9jIGRvX21hbGxvYzxjcmFzaE9uRmFpbHVyZT4KKyNkZWZpbmUg
ZG9NYWxsb2MgZG9NYWxsb2M8Y3Jhc2hPbkZhaWx1cmU+CiAKIHRlbXBsYXRlIDxib29sIGNyYXNo
T25GYWlsdXJlPgogQUxXQVlTX0lOTElORSB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKQEAgLTM4NzAs
MTkgKzM5OTAsMTkgQEAgdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CiAjaWYgRU5BQkxFKFdU
Rl9NQUxMT0NfVkFMSURBVElPTikKICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSAtIEludGVybmFsOjpWYWxpZGF0aW9uQnVmZmVyU2l6ZSA8PSBzaXplKSAgLy8gSWYg
b3ZlcmZsb3cgd291bGQgb2NjdXIuLi4KICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdm9pZCogcmVz
dWx0ID0gZG9fbWFsbG9jKHNpemUgKyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOwor
ICAgIHZvaWQqIHJlc3VsdCA9IGRvTWFsbG9jKHNpemUgKyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1
ZmZlclNpemUpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIElu
dGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6
VmFsaWRhdGlvbkhlYWRlcio+KHJlc3VsdCk7Ci0gICAgaGVhZGVyLT5tX3NpemUgPSBzaXplOwor
ICAgIGhlYWRlci0+bXNpemUgPSBzaXplOwogICAgIGhlYWRlci0+bV90eXBlID0gSW50ZXJuYWw6
OkFsbG9jVHlwZU1hbGxvYzsKICAgICBoZWFkZXItPm1fcHJlZml4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEludGVybmFsOjpWYWxpZGF0aW9uUHJlZml4KTsKICAgICByZXN1bHQgPSBoZWFkZXIg
KyAxOwogICAgICpJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgocmVzdWx0KSA9
IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OwogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1
bHQpOwogI2Vsc2UKLSAgICB2b2lkKiByZXN1bHQgPSBkb19tYWxsb2Moc2l6ZSk7CisgICAgdm9p
ZCogcmVzdWx0ID0gZG9NYWxsb2Moc2l6ZSk7CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdF
UwpAQCAtMzkwNSwxMCArNDAyNSwxMCBAQCB2b2lkIGZyZWUodm9pZCogcHRyKSB7CiAKICAgICBm
YXN0TWFsbG9jVmFsaWRhdGUocHRyKTsKICAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlciog
aGVhZGVyID0gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKHB0cik7Ci0gICAg
bWVtc2V0KHB0ciwgMHhDQywgaGVhZGVyLT5tX3NpemUpOwotICAgIGRvX2ZyZWUoaGVhZGVyKTsK
KyAgICBtZW1zZXQocHRyLCAweENDLCBoZWFkZXItPm1zaXplKTsKKyAgICBkb0ZyZWUoaGVhZGVy
KTsKICNlbHNlCi0gICAgZG9fZnJlZShwdHIpOworICAgIGRvRnJlZShwdHIpOwogI2VuZGlmCiB9
CiAKQEAgLTM5MTgsMTggKzQwMzgsMTggQEAgZXh0ZXJuICJDIgogdGVtcGxhdGUgPGJvb2wgY3Jh
c2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5FIHZvaWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7
CiAKLXZvaWQqIGZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCit2b2lkKiBm
YXN0Q2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbXNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0
ID0gY2FsbG9jPHRydWU+KG4sIGVsZW1fc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gY2FsbG9j
PHRydWU+KG4sIGVsZW1zaXplKTsKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQog
ICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbiwgc2l6
ZV90IGVsZW1fc2l6ZSkKK1RyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90
IG4sIHNpemVfdCBlbGVtc2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSBjYWxsb2M8ZmFsc2U+
KG4sIGVsZW1fc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jPGZhbHNlPihuLCBlbGVt
c2l6ZSk7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9j
VmFsaWRhdGUocmVzdWx0KTsKICNlbmRpZgpAQCAtMzkzOSwxMiArNDA1OSwxMyBAQCBUcnlNYWxs
b2NSZXR1cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNpemVfCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9u
RmFpbHVyZT4KIEFMV0FZU19JTkxJTkUKICNlbmRpZgotdm9pZCogY2FsbG9jKHNpemVfdCBuLCBz
aXplX3QgZWxlbV9zaXplKSB7Ci0gIHNpemVfdCB0b3RhbEJ5dGVzID0gbiAqIGVsZW1fc2l6ZTsK
K3ZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1zaXplKQoreworICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gbiAqIGVsZW1zaXplOwogICAgIAotICAvLyBQcm90ZWN0IGFnYWluc3Qgb3Zl
cmZsb3cKLSAgaWYgKG4gPiAxICYmIGVsZW1fc2l6ZSAmJiAodG90YWxCeXRlcyAvIGVsZW1fc2l6
ZSkgIT0gbikKLSAgICByZXR1cm4gMDsKKyAgICAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZsb3cK
KyAgICBpZiAobiA+IDEgJiYgZWxlbXNpemUgJiYgKHRvdGFsQnl0ZXMgLyBlbGVtc2l6ZSkgIT0g
bikKKyAgICAgICAgcmV0dXJuIDA7CiAKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9O
KQogICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvYzxjcmFzaE9uRmFpbHVyZT4odG90YWxCeXRlcyk7
CkBAIC0zOTU0LDE2ICs0MDc1LDE1IEBAIHZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVs
ZW1fc2l6ZSkKICAgICBtZW1zZXQocmVzdWx0LCAwLCB0b3RhbEJ5dGVzKTsKICAgICBmYXN0TWFs
bG9jVmFsaWRhdGUocmVzdWx0KTsKICNlbHNlCi0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9j
KHRvdGFsQnl0ZXMpOwotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgeworICAgIHZvaWQqIHJlc3Vs
dCA9IGRvTWFsbG9jKHRvdGFsQnl0ZXMpOworICAgIGlmIChyZXN1bHQpCiAgICAgICAgIG1lbXNl
dChyZXN1bHQsIDAsIHRvdGFsQnl0ZXMpOwotICAgIH0KICNlbmRpZgogCiAjaWZuZGVmIFdURl9D
SEFOR0VTCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCB0b3RhbEJ5dGVzKTsK
KyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgdG90YWxCeXRlcyk7CiAjZW5k
aWYKLSAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBTaW5jZSBj
ZnJlZSBpc24ndCB1c2VkIGFueXdoZXJlLCB3ZSBkb24ndCBjb21waWxlIGl0IGluLgpAQCAtMzk3
NSw3ICs0MDk1LDcgQEAgdm9pZCBjZnJlZSh2b2lkKiBwdHIpIHsKICNpZm5kZWYgV1RGX0NIQU5H
RVMKICAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHB0cik7CiAjZW5kaWYKLSAgZG9f
ZnJlZShwdHIpOworICAgIGRvRnJlZShwdHIpOwogfQogI2VuZGlmCiAKQEAgLTM5ODUsMjQgKzQx
MDUsMjQgQEAgZXh0ZXJuICJDIgogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdB
WVNfSU5MSU5FIHZvaWQqIHJlYWxsb2Modm9pZCosIHNpemVfdCk7CiAKLXZvaWQqIGZhc3RSZWFs
bG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3ZvaWQqIGZhc3RSZWFsbG9jKHZv
aWQqIG9sZHB0ciwgc2l6ZV90IG5ld1NpemUpCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFM
SURBVElPTikKLSAgICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkX3B0cik7CisgICAgZmFzdE1hbGxv
Y1ZhbGlkYXRlKG9sZHB0cik7CiAjZW5kaWYKLSAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPHRy
dWU+KG9sZF9wdHIsIG5ld19zaXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPHRydWU+
KG9sZHB0ciwgbmV3U2l6ZSk7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAg
ICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQqIG9sZF9wdHIs
IHNpemVfdCBuZXdfc2l6ZSkKK1RyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RSZWFsbG9jKHZv
aWQqIG9sZHB0ciwgc2l6ZV90IG5ld1NpemUpCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFM
SURBVElPTikKLSAgICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkX3B0cik7CisgICAgZmFzdE1hbGxv
Y1ZhbGlkYXRlKG9sZHB0cik7CiAjZW5kaWYKLSAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPGZh
bHNlPihvbGRfcHRyLCBuZXdfc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzxmYWxz
ZT4ob2xkcHRyLCBuZXdTaXplKTsKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQog
ICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2VuZGlmCkBAIC00MDEyLDI0OCArNDEz
MiwyNTIgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdFJlYWxsb2Modm9pZAogdGVtcGxh
dGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5FCiAjZW5kaWYKLXZvaWQqIHJl
YWxsb2Modm9pZCogb2xkX3B0ciwgc2l6ZV90IG5ld19zaXplKSB7Ci0gIGlmIChvbGRfcHRyID09
IE5VTEwpIHsKK3ZvaWQqIHJlYWxsb2Modm9pZCogb2xkcHRyLCBzaXplX3QgbmV3U2l6ZSkKK3sK
KyAgICBpZiAoIW9sZHB0cikgewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0g
ICAgdm9pZCogcmVzdWx0ID0gbWFsbG9jPGNyYXNoT25GYWlsdXJlPihuZXdfc2l6ZSk7CisgICAg
ICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvYzxjcmFzaE9uRmFpbHVyZT4obmV3U2l6ZSk7CiAjZWxz
ZQotICAgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyhuZXdfc2l6ZSk7CisgICAgICAgIHZvaWQq
IHJlc3VsdCA9IGRvTWFsbG9jKG5ld1NpemUpOwogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICAgIE1h
bGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBuZXdfc2l6ZSk7CisgICAgICAgIE1hbGxv
Y0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBuZXdTaXplKTsKICNlbmRpZgogI2VuZGlmCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICBpZiAobmV3X3NpemUgPT0gMCkgeworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBpZiAoIW5ld1NpemUpIHsKICNpZm5kZWYgV1RGX0NI
QU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZF9wdHIpOworICAgICAg
ICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZHB0cik7CiAjZW5kaWYKLSAgICBmcmVl
KG9sZF9wdHIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgICAgICAgIGZyZWUob2xkcHRyKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURB
VElPTikKLSAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVy
bmFsOjpWYWxpZGF0aW9uQnVmZmVyU2l6ZSA8PSBuZXdfc2l6ZSkgIC8vIElmIG92ZXJmbG93IHdv
dWxkIG9jY3VyLi4uCisgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkg
LSBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUgPD0gbmV3U2l6ZSkgLy8gSWYgb3ZlcmZs
b3cgd291bGQgb2NjdXIuLi4KICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSW50ZXJuYWw6OlZhbGlk
YXRpb25IZWFkZXIqIGhlYWRlciA9IEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRl
cihvbGRfcHRyKTsKLSAgICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkX3B0cik7Ci0gICAgb2xkX3B0
ciA9IGhlYWRlcjsKLSAgICBoZWFkZXItPm1fc2l6ZSA9IG5ld19zaXplOwotICAgIG5ld19zaXpl
ICs9IEludGVybmFsOjpWYWxpZGF0aW9uQnVmZmVyU2l6ZTsKLSNlbmRpZgotCi0gIC8vIEdldCB0
aGUgc2l6ZSBvZiB0aGUgb2xkIGVudHJ5Ci0gIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KG9sZF9wdHIpID4+IGtQYWdlU2hpZnQ7Ci0gIHNpemVfdCBjbCA9IHBh
Z2VoZWFwLT5HZXRTaXplQ2xhc3NJZkNhY2hlZChwKTsKLSAgU3BhbiAqc3BhbiA9IE5VTEw7Ci0g
IHNpemVfdCBvbGRfc2l6ZTsKLSAgaWYgKGNsID09IDApIHsKLSAgICBzcGFuID0gcGFnZWhlYXAt
PkdldERlc2NyaXB0b3IocCk7Ci0gICAgY2wgPSBzcGFuLT5zaXplY2xhc3M7Ci0gICAgcGFnZWhl
YXAtPkNhY2hlU2l6ZUNsYXNzKHAsIGNsKTsKLSAgfQotICBpZiAoY2wgIT0gMCkgewotICAgIG9s
ZF9zaXplID0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gIH0gZWxzZSB7Ci0gICAgQVNTRVJUKHNw
YW4gIT0gTlVMTCk7Ci0gICAgb2xkX3NpemUgPSBzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsK
LSAgfQotCi0gIC8vIFJlYWxsb2NhdGUgaWYgdGhlIG5ldyBzaXplIGlzIGxhcmdlciB0aGFuIHRo
ZSBvbGQgc2l6ZSwKLSAgLy8gb3IgaWYgdGhlIG5ldyBzaXplIGlzIHNpZ25pZmljYW50bHkgc21h
bGxlciB0aGFuIHRoZSBvbGQgc2l6ZS4KLSAgaWYgKChuZXdfc2l6ZSA+IG9sZF9zaXplKSB8fCAo
QWxsb2NhdGlvblNpemUobmV3X3NpemUpIDwgb2xkX3NpemUpKSB7Ci0gICAgLy8gTmVlZCB0byBy
ZWFsbG9jYXRlCi0gICAgdm9pZCogbmV3X3B0ciA9IGRvX21hbGxvYyhuZXdfc2l6ZSk7Ci0gICAg
aWYgKG5ld19wdHIgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIElu
dGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBoZWFkZXIgPSBJbnRlcm5hbDo6ZmFzdE1hbGxvY1Zh
bGlkYXRpb25IZWFkZXIob2xkcHRyKTsKKyAgICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkcHRyKTsK
KyAgICBvbGRwdHIgPSBoZWFkZXI7CisgICAgaGVhZGVyLT5tc2l6ZSA9IG5ld1NpemU7CisgICAg
bmV3U2l6ZSArPSBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemU7CisjZW5kaWYKKworICAg
IC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2xkIGVudHJ5CisgICAgY29uc3QgUGFnZUlEIHAgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ob2xkcHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIHNp
emVfdCBjbCA9IHBhZ2VoZWFwLT5HZXRTaXplQ2xhc3NJZkNhY2hlZChwKTsKKyAgICBTcGFuKiBz
cGFuID0gMDsKKyAgICBzaXplX3Qgb2xkc2l6ZTsKKyAgICBpZiAoIWNsKSB7CisgICAgICAgIHNw
YW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKKyAgICAgICAgY2wgPSBzcGFuLT5zaXpl
Y2xhc3M7CisgICAgICAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7CisgICAgfQor
ICAgIGlmIChjbCkKKyAgICAgICAgb2xkc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworICAg
IGVsc2UgeworICAgICAgICBBU1NFUlQoc3Bhbik7CisgICAgICAgIG9sZHNpemUgPSBzcGFuLT5s
ZW5ndGggPDwga1BhZ2VTaGlmdDsKKyAgICB9CisKKyAgICAvLyBSZWFsbG9jYXRlIGlmIHRoZSBu
ZXcgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb2xkIHNpemUsCisgICAgLy8gb3IgaWYgdGhlIG5l
dyBzaXplIGlzIHNpZ25pZmljYW50bHkgc21hbGxlciB0aGFuIHRoZSBvbGQgc2l6ZS4KKyAgICBp
ZiAoKG5ld1NpemUgPiBvbGRzaXplKSB8fCAoQWxsb2NhdGlvblNpemUobmV3U2l6ZSkgPCBvbGRz
aXplKSkgeworICAgICAgICAvLyBOZWVkIHRvIHJlYWxsb2NhdGUKKyAgICAgICAgdm9pZCogbmV3
cHRyID0gZG9NYWxsb2MobmV3U2l6ZSk7CisgICAgICAgIGlmICghbmV3cHRyKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gICAgTWFsbG9jSG9vazo6SW52b2tl
TmV3SG9vayhuZXdfcHRyLCBuZXdfc2l6ZSk7CisgICAgICAgIE1hbGxvY0hvb2s6Okludm9rZU5l
d0hvb2sobmV3cHRyLCBuZXdTaXplKTsKICNlbmRpZgotICAgIG1lbWNweShuZXdfcHRyLCBvbGRf
cHRyLCAoKG9sZF9zaXplIDwgbmV3X3NpemUpID8gb2xkX3NpemUgOiBuZXdfc2l6ZSkpOworICAg
ICAgICBtZW1jcHkobmV3cHRyLCBvbGRwdHIsICgob2xkc2l6ZSA8IG5ld1NpemUpID8gb2xkc2l6
ZSA6IG5ld1NpemUpKTsKICNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZv
a2VEZWxldGVIb29rKG9sZF9wdHIpOworICAgICAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVI
b29rKG9sZHB0cik7CiAjZW5kaWYKLSAgICAvLyBXZSBjb3VsZCB1c2UgYSB2YXJpYW50IG9mIGRv
X2ZyZWUoKSB0aGF0IGxldmVyYWdlcyB0aGUgZmFjdAotICAgIC8vIHRoYXQgd2UgYWxyZWFkeSBr
bm93IHRoZSBzaXplY2xhc3Mgb2Ygb2xkX3B0ci4gIFRoZSBiZW5lZml0Ci0gICAgLy8gd291bGQg
YmUgc21hbGwsIHNvIGRvbid0IGJvdGhlci4KLSAgICBkb19mcmVlKG9sZF9wdHIpOworICAgICAg
ICAvLyBXZSBjb3VsZCB1c2UgYSB2YXJpYW50IG9mIGRvRnJlZSgpIHRoYXQgbGV2ZXJhZ2VzIHRo
ZSBmYWN0CisgICAgICAgIC8vIHRoYXQgd2UgYWxyZWFkeSBrbm93IHRoZSBzaXplY2xhc3Mgb2Yg
b2xkcHRyLiBUaGUgYmVuZWZpdAorICAgICAgICAvLyB3b3VsZCBiZSBzbWFsbCwgc28gZG9uJ3Qg
Ym90aGVyLgorICAgICAgICBkb0ZyZWUob2xkcHRyKTsKICNpZiBFTkFCTEUoV1RGX01BTExPQ19W
QUxJREFUSU9OKQotICAgIG5ld19wdHIgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlv
bkhlYWRlcio+KG5ld19wdHIpICsgMTsKLSAgICAqSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0
aW9uU3VmZml4KG5ld19wdHIpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CisgICAgICAg
IG5ld3B0ciA9IHN0YXRpY19jYXN0PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4obmV3cHRy
KSArIDE7CisgICAgICAgICpJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgobmV3
cHRyKSA9IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OwogI2VuZGlmCi0gICAgcmV0dXJuIG5l
d19wdHI7Ci0gIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBuZXdwdHI7CisgICAgfQogI2lmIEVO
QUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgb2xkX3B0ciA9IHN0YXRpY19jYXN0PElu
dGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4ob2xkX3B0cikgKyAxOyAvLyBTZXQgb2xkX3B0ciBi
YWNrIHRvIHRoZSB1c2VyIHBvaW50ZXIuCi0gICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRh
dGlvblN1ZmZpeChvbGRfcHRyKSA9IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OworICAgIG9s
ZHB0ciA9IHN0YXRpY19jYXN0PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4ob2xkcHRyKSAr
IDE7IC8vIFNldCBvbGRwdHIgYmFjayB0byB0aGUgdXNlciBwb2ludGVyLgorICAgICpJbnRlcm5h
bDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgob2xkcHRyKSA9IEludGVybmFsOjpWYWxpZGF0
aW9uU3VmZml4OwogI2VuZGlmCi0gICAgcmV0dXJuIG9sZF9wdHI7Ci0gIH0KKyAgICByZXR1cm4g
b2xkcHRyOwogfQogCiAjaWZkZWYgV1RGX0NIQU5HRVMKLSN1bmRlZiBkb19tYWxsb2MKKyN1bmRl
ZiBkb01hbGxvYwogI2Vsc2UKIAogc3RhdGljIFNwaW5Mb2NrIHNldF9uZXdfaGFuZGxlcl9sb2Nr
ID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCogY3BwX2FsbG9j
KHNpemVfdCBzaXplLCBib29sIG5vdGhyb3cpIHsKLSAgZm9yICg7OykgewotICAgIHZvaWQqIHAg
PSBkb19tYWxsb2Moc2l6ZSk7CisgICAgZm9yICg7OykgeworICAgICAgICB2b2lkKiBwID0gZG9N
YWxsb2Moc2l6ZSk7CiAjaWZkZWYgUFJFQU5TSU5FVwotICAgIHJldHVybiBwOwotI2Vsc2UKLSAg
ICBpZiAocCA9PSBOVUxMKSB7ICAvLyBhbGxvY2F0aW9uIGZhaWxlZAotICAgICAgLy8gR2V0IHRo
ZSBjdXJyZW50IG5ldyBoYW5kbGVyLiAgTkI6IHRoaXMgZnVuY3Rpb24gaXMgbm90Ci0gICAgICAv
LyB0aHJlYWQtc2FmZS4gIFdlIG1ha2UgYSBmZWVibGUgc3RhYiBhdCBtYWtpbmcgaXQgc28gaGVy
ZSwgYnV0Ci0gICAgICAvLyB0aGlzIGxvY2sgb25seSBwcm90ZWN0cyBhZ2FpbnN0IHRjbWFsbG9j
IGludGVyZmVyaW5nIHdpdGgKLSAgICAgIC8vIGl0c2VsZiwgbm90IHdpdGggb3RoZXIgbGlicmFy
aWVzIGNhbGxpbmcgc2V0X25ld19oYW5kbGVyLgotICAgICAgc3RkOjpuZXdfaGFuZGxlciBuaDsK
LSAgICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmc2V0X25ld19oYW5kbGVyX2xvY2sp
OwotICAgICAgICBuaCA9IHN0ZDo6c2V0X25ld19oYW5kbGVyKDApOwotICAgICAgICAodm9pZCkg
c3RkOjpzZXRfbmV3X2hhbmRsZXIobmgpOwotICAgICAgfQotICAgICAgLy8gSWYgbm8gbmV3X2hh
bmRsZXIgaXMgZXN0YWJsaXNoZWQsIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4KLSAgICAgIGlmICgh
bmgpIHsKLSAgICAgICAgaWYgKG5vdGhyb3cpIHJldHVybiAwOwotICAgICAgICB0aHJvdyBzdGQ6
OmJhZF9hbGxvYygpOwotICAgICAgfQotICAgICAgLy8gT3RoZXJ3aXNlLCB0cnkgdGhlIG5ld19o
YW5kbGVyLiAgSWYgaXQgcmV0dXJucywgcmV0cnkgdGhlCi0gICAgICAvLyBhbGxvY2F0aW9uLiAg
SWYgaXQgdGhyb3dzIHN0ZDo6YmFkX2FsbG9jLCBmYWlsIHRoZSBhbGxvY2F0aW9uLgotICAgICAg
Ly8gaWYgaXQgdGhyb3dzIHNvbWV0aGluZyBlbHNlLCBkb24ndCBpbnRlcmZlcmUuCi0gICAgICB0
cnkgewotICAgICAgICAoKm5oKSgpOwotICAgICAgfSBjYXRjaCAoY29uc3Qgc3RkOjpiYWRfYWxs
b2MmKSB7Ci0gICAgICAgIGlmICghbm90aHJvdykgdGhyb3c7CiAgICAgICAgIHJldHVybiBwOwot
ICAgICAgfQotICAgIH0gZWxzZSB7ICAvLyBhbGxvY2F0aW9uIHN1Y2Nlc3MKLSAgICAgIHJldHVy
biBwOwotICAgIH0KKyNlbHNlCisgICAgICAgIGlmICghcCkgeyAvLyBhbGxvY2F0aW9uIGZhaWxl
ZAorICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IG5ldyBoYW5kbGVyLiBOQjogdGhpcyBm
dW5jdGlvbiBpcyBub3QKKyAgICAgICAgICAgIC8vIHRocmVhZC1zYWZlLiBXZSBtYWtlIGEgZmVl
YmxlIHN0YWIgYXQgbWFraW5nIGl0IHNvIGhlcmUsIGJ1dAorICAgICAgICAgICAgLy8gdGhpcyBs
b2NrIG9ubHkgcHJvdGVjdHMgYWdhaW5zdCB0Y21hbGxvYyBpbnRlcmZlcmluZyB3aXRoCisgICAg
ICAgICAgICAvLyBpdHNlbGYsIG5vdCB3aXRoIG90aGVyIGxpYnJhcmllcyBjYWxsaW5nIHNldF9u
ZXdfaGFuZGxlci4KKyAgICAgICAgICAgIHN0ZDo6bmV3X2hhbmRsZXIgbmg7CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmc2V0X25ld19oYW5kbGVyX2xv
Y2spOworICAgICAgICAgICAgICAgIG5oID0gc3RkOjpzZXRfbmV3X2hhbmRsZXIoMCk7CisgICAg
ICAgICAgICAgICAgKHZvaWQpIHN0ZDo6c2V0X25ld19oYW5kbGVyKG5oKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIElmIG5vIG5ld19oYW5kbGVyIGlzIGVzdGFibGlzaGVkLCB0aGUg
YWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAgICAgICBpZiAoIW5oKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vdGhyb3cpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgICAgIHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBPdGhlcndpc2UsIHRyeSB0aGUgbmV3X2hhbmRsZXIuIElmIGl0IHJldHVybnMsIHJldHJ5
IHRoZQorICAgICAgICAgICAgLy8gYWxsb2NhdGlvbi4gSWYgaXQgdGhyb3dzIHN0ZDo6YmFkX2Fs
bG9jLCBmYWlsIHRoZSBhbGxvY2F0aW9uLgorICAgICAgICAgICAgLy8gaWYgaXQgdGhyb3dzIHNv
bWV0aGluZyBlbHNlLCBkb24ndCBpbnRlcmZlcmUuCisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICgqbmgpKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaChjb25z
dCBzdGQ6OmJhZF9hbGxvYyYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFu
b3Rocm93KQorICAgICAgICAgICAgICAgICAgICB0aHJvdzsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIC8vIGFsbG9jYXRpb24gc3VjY2Vz
cworICAgICAgICAgICAgcmV0dXJuIHA7CiAjZW5kaWYKLSAgfQorICAgIH0KIH0KIAogI2lmIEVO
QUJMRShHTE9CQUxfRkFTVE1BTExPQ19ORVcpCiAKIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qg
c2l6ZSkgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIGZhbHNlKTsKLSAgLy8gV2Uga2Vl
cCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3IgYSByZWFzb246IHdo
ZW4KLSAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxzIGNwcF9hbGxvYywgdGhlIG9wdGlt
aXplciBtYXkgZm9sZCB0aGUKLSAgLy8gbmV3IGNhbGwgaW50byBjcHBfYWxsb2MsIHdoaWNoIG1l
c3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1iYXNlZAotICAvLyBzdGFja3RyYWNpbmcgKHNlZSBB
VFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiAgVGhpcyBlbnN1cmVzIGNwcF9hbGxvYwotICAvLyBp
c24ndCB0aGUgbGFzdCB0aGluZyB0aGlzIGZuIGNhbGxzLCBhbmQgcHJldmVudHMgdGhlIGZvbGRp
bmcuCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7Ci0gIHJldHVybiBwOwor
ICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2UpOworICAgIC8vIFdlIGtlZXAgdGhp
cyBuZXh0IGluc3RydWN0aW9uIG91dCBvZiBjcHBfYWxsb2MgZm9yIGEgcmVhc29uOiB3aGVuCisg
ICAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxzIGNwcF9hbGxvYywgdGhlIG9wdGltaXpl
ciBtYXkgZm9sZCB0aGUKKyAgICAvLyBuZXcgY2FsbCBpbnRvIGNwcF9hbGxvYywgd2hpY2ggbWVz
c2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCisgICAgLy8gc3RhY2t0cmFjaW5nIChzZWUg
QVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4gVGhpcyBlbnN1cmVzIGNwcF9hbGxvYworICAgIC8v
IGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMsIGFuZCBwcmV2ZW50cyB0aGUgZm9s
ZGluZy4KKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOworICAgIHJldHVy
biBwOwogfQogCiB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIGNvbnN0IHN0ZDo6bm90
aHJvd190JikgX19USFJPVyB7Ci0gIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgdHJ1ZSk7Ci0g
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7Ci0gIHJldHVybiBwOworICAgIHZv
aWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgdHJ1ZSk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3
SG9vayhwLCBzaXplKTsKKyAgICByZXR1cm4gcDsKIH0KIAogdm9pZCBvcGVyYXRvciBkZWxldGUo
dm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0g
IGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBk
b0ZyZWUocCk7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHAsIGNvbnN0IHN0ZDo6
bm90aHJvd190JikgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7
Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwKTsKKyAg
ICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplKSB7Ci0g
IHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2UpOwotICAvLyBXZSBrZWVwIHRoaXMgbmV4
dCBpbnN0cnVjdGlvbiBvdXQgb2YgY3BwX2FsbG9jIGZvciBhIHJlYXNvbjogd2hlbgotICAvLyBp
dCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2FsbG9jLCB0aGUgb3B0aW1pemVyIG1heSBm
b2xkIHRoZQotICAvLyBuZXcgY2FsbCBpbnRvIGNwcF9hbGxvYywgd2hpY2ggbWVzc2VzIHVwIG91
ciB3aG9sZSBzZWN0aW9uLWJhc2VkCi0gIC8vIHN0YWNrdHJhY2luZyAoc2VlIEFUVFJJQlVURV9T
RUNUSU9OLCBhYm92ZSkuICBUaGlzIGVuc3VyZXMgY3BwX2FsbG9jCi0gIC8vIGlzbid0IHRoZSBs
YXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMsIGFuZCBwcmV2ZW50cyB0aGUgZm9sZGluZy4KLSAgTWFs
bG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsKLSAgcmV0dXJuIHA7CisgICAgdm9pZCog
cCA9IGNwcF9hbGxvYyhzaXplLCBmYWxzZSk7CisgICAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5z
dHJ1Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3IgYSByZWFzb246IHdoZW4KKyAgICAvLyBpdCdz
IGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2FsbG9jLCB0aGUgb3B0aW1pemVyIG1heSBmb2xk
IHRoZQorICAgIC8vIG5ldyBjYWxsIGludG8gY3BwX2FsbG9jLCB3aGljaCBtZXNzZXMgdXAgb3Vy
IHdob2xlIHNlY3Rpb24tYmFzZWQKKyAgICAvLyBzdGFja3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVf
U0VDVElPTiwgYWJvdmUpLiBUaGlzIGVuc3VyZXMgY3BwX2FsbG9jCisgICAgLy8gaXNuJ3QgdGhl
IGxhc3QgdGhpbmcgdGhpcyBmbiBjYWxscywgYW5kIHByZXZlbnRzIHRoZSBmb2xkaW5nLgorICAg
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7CiB9CiAK
IHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IF9fVEhST1cgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIHRydWUpOwotICBNYWxsb2NI
b29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOwotICByZXR1cm4gcDsKKyAgICB2b2lkKiBwID0g
Y3BwX2FsbG9jKHNpemUsIHRydWUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwg
c2l6ZSk7CisgICAgcmV0dXJuIHA7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCog
cCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2Zy
ZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUo
cCk7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCwgY29uc3Qgc3RkOjpub3Ro
cm93X3QmKSBfX1RIUk9XIHsKLSAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwKTsKLSAg
ZG9fZnJlZShwKTsKKyAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOworICAgIGRv
RnJlZShwKTsKIH0KIAogI2VuZGlmCiAKIGV4dGVybiAiQyIgdm9pZCogbWVtYWxpZ24oc2l6ZV90
IGFsaWduLCBzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFs
aWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNp
emUpOwotICByZXR1cm4gcmVzdWx0OworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24oYWxp
Z24sIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2
b2lkKiogcmVzdWx0X3B0ciwgc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkKK2V4dGVybiAiQyIg
aW50IHBvc2l4X21lbWFsaWduKHZvaWQqKiByZXN1bHRwdHIsIHNpemVfdCBhbGlnbiwgc2l6ZV90
IHNpemUpCiAgICAgX19USFJPVyB7Ci0gIGlmICgoKGFsaWduICUgc2l6ZW9mKHZvaWQqKSkgIT0g
MCkgfHwKLSAgICAgICgoYWxpZ24gJiAoYWxpZ24gLSAxKSkgIT0gMCkgfHwKLSAgICAgIChhbGln
biA9PSAwKSkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KKyAgICBpZiAoKGFsaWduICUgc2l6
ZW9mKHZvaWQqKSkKKyAgICAgICAgfHwgKGFsaWduICYgKGFsaWduIC0gMSkpCisgICAgICAgIHx8
ICghYWxpZ24pKQorICAgICAgICByZXR1cm4gRUlOVkFMOwogCi0gIHZvaWQqIHJlc3VsdCA9IGRv
X21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1
bHQsIHNpemUpOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICByZXR1cm4gRU5PTUVNOwot
ICB9IGVsc2UgewotICAgICpyZXN1bHRfcHRyID0gcmVzdWx0OworICAgIHZvaWQqIHJlc3VsdCA9
IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2so
cmVzdWx0LCBzaXplKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIEVOT01FTTsK
KyAgICAqcmVzdWx0cHRyID0gcmVzdWx0OwogICAgIHJldHVybiAwOwotICB9CiB9CiAKIHN0YXRp
YyBzaXplX3QgcGFnZXNpemUgPSAwOwogCiBleHRlcm4gIkMiIHZvaWQqIHZhbGxvYyhzaXplX3Qg
c2l6ZSkgX19USFJPVyB7Ci0gIC8vIEFsbG9jYXRlIHBhZ2UtYWxpZ25lZCBvYmplY3Qgb2YgbGVu
Z3RoID49IHNpemUgYnl0ZXMKLSAgaWYgKHBhZ2VzaXplID09IDApIHBhZ2VzaXplID0gZ2V0cGFn
ZXNpemUoKTsKLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOwot
ICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1
bHQ7CisgICAgLy8gQWxsb2NhdGUgcGFnZS1hbGlnbmVkIG9iamVjdCBvZiBsZW5ndGggPj0gc2l6
ZSBieXRlcworICAgIGlmICghcGFnZXNpemUpCisgICAgICAgIHBhZ2VzaXplID0gZ2V0cGFnZXNp
emUoKTsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKKyAg
ICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBzaXplKSBfX1RIUk9X
IHsKLSAgLy8gUm91bmQgdXAgc2l6ZSB0byBhIG11bHRpcGxlIG9mIHBhZ2VzaXplCi0gIGlmIChw
YWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0gIHNpemUgPSAoc2l6ZSAr
IHBhZ2VzaXplIC0gMSkgJiB+KHBhZ2VzaXplIC0gMSk7Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21l
bWFsaWduKHBhZ2VzaXplLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1
bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAgIC8vIFJvdW5kIHVwIHNpemUgdG8gYSBt
dWx0aXBsZSBvZiBwYWdlc2l6ZQorICAgIGlmICghcGFnZXNpemUpCisgICAgICAgIHBhZ2VzaXpl
ID0gZ2V0cGFnZXNpemUoKTsKKyAgICBzaXplID0gKHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihw
YWdlc2l6ZSAtIDEpOworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24ocGFnZXNpemUsIHNp
emUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4gIkMiIHZvaWQgbWFsbG9jX3N0YXRzKHZvaWQpIHsK
LSAgZG9fbWFsbG9jX3N0YXRzKCk7CitleHRlcm4gIkMiIHZvaWQgbWFsbG9jX3N0YXRzKHZvaWQp
Cit7CisgICAgZG9NYWxsb2NTdGF0cygpOwogfQogCi1leHRlcm4gIkMiIGludCBtYWxsb3B0KGlu
dCBjbWQsIGludCB2YWx1ZSkgewotICByZXR1cm4gZG9fbWFsbG9wdChjbWQsIHZhbHVlKTsKK2V4
dGVybiAiQyIgaW50IG1hbGxvcHQoaW50IGNtZCwgaW50IHZhbHVlKQoreworICAgIHJldHVybiBk
b01hbGxvcHQoY21kLCB2YWx1ZSk7CiB9CiAKICNpZmRlZiBIQVZFX1NUUlVDVF9NQUxMSU5GTwot
ZXh0ZXJuICJDIiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8odm9pZCkgewotICByZXR1cm4gZG9f
bWFsbGluZm8oKTsKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvKHZvaWQpCit7
CisgICAgcmV0dXJuIGRvTWFsbGluZm8oKTsKIH0KICNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IFNvbWUgbGlicmFyeSByb3V0aW5lcyBvbiBSZWRIYXQgOSBhbGxvY2F0ZSBtZW1vcnkgdXNpbmcg
bWFsbG9jKCkKLS8vIGFuZCBmcmVlIGl0IHVzaW5nIF9fbGliY19mcmVlKCkgKG9yIHZpY2UtdmVy
c2EpLiAgU2luY2Ugd2UgcHJvdmlkZQorLy8gYW5kIGZyZWUgaXQgdXNpbmcgX19saWJjX2ZyZWUo
KSAob3IgdmljZS12ZXJzYSkuIFNpbmNlIHdlIHByb3ZpZGUKIC8vIG91ciBvd24gaW1wbGVtZW50
YXRpb25zIG9mIG1hbGxvYy9mcmVlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CiAvLyB0aGUg
X19saWJjX1hYWCB2YXJpYW50cyAoZGVmaW5lZCBhcyBwYXJ0IG9mIGdsaWJjKSBhbHNvIHBvaW50
IHRvCiAvLyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbnMuCkBAIC00MjYyLDMyICs0Mzg2LDMzIEBA
IGV4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvKHZvaWQKICNpZiBkZWZpbmVkKF9f
R0xJQkNfXykKIGV4dGVybiAiQyIgewogI2lmIENPTVBJTEVSKEdDQykgJiYgIWRlZmluZWQoX19N
QUNIX18pICYmIGRlZmluZWQoSEFWRV9fX0FUVFJJQlVURV9fKQotICAvLyBQb3RlbnRpYWxseSBm
YXN0ZXIgdmFyaWFudHMgdGhhdCB1c2UgdGhlIGdjYyBhbGlhcyBleHRlbnNpb24uCi0gIC8vIE1h
Y2gtTyAoRGFyd2luKSBkb2VzIG5vdCBzdXBwb3J0IHdlYWsgYWxpYXNlcywgaGVuY2UgdGhlIF9f
TUFDSF9fIGNoZWNrLgorICAgIC8vIFBvdGVudGlhbGx5IGZhc3RlciB2YXJpYW50cyB0aGF0IHVz
ZSB0aGUgZ2NjIGFsaWFzIGV4dGVuc2lvbi4KKyAgICAvLyBNYWNoLU8gKERhcndpbikgZG9lcyBu
b3Qgc3VwcG9ydCB3ZWFrIGFsaWFzZXMsIGhlbmNlIHRoZSBfX01BQ0hfXyBjaGVjay4KICMgZGVm
aW5lIEFMSUFTKHgpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcyAoeCkpKQotICB2b2lkKiBf
X2xpYmNfbWFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICAgQUxJQVMoIm1hbGxvYyIpOwot
ICB2b2lkICBfX2xpYmNfZnJlZSh2b2lkKiBwdHIpICAgICAgICAgICAgICAgICAgQUxJQVMoImZy
ZWUiKTsKLSAgdm9pZCogX19saWJjX3JlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgIEFM
SUFTKCJyZWFsbG9jIik7Ci0gIHZvaWQqIF9fbGliY19jYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBz
aXplKSAgICBBTElBUygiY2FsbG9jIik7Ci0gIHZvaWQgIF9fbGliY19jZnJlZSh2b2lkKiBwdHIp
ICAgICAgICAgICAgICAgICBBTElBUygiY2ZyZWUiKTsKLSAgdm9pZCogX19saWJjX21lbWFsaWdu
KHNpemVfdCBhbGlnbiwgc2l6ZV90IHMpIEFMSUFTKCJtZW1hbGlnbiIpOwotICB2b2lkKiBfX2xp
YmNfdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICAgQUxJQVMoInZhbGxvYyIpOwotICB2
b2lkKiBfX2xpYmNfcHZhbGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgQUxJQVMoInB2YWxs
b2MiKTsKLSAgaW50IF9fcG9zaXhfbWVtYWxpZ24odm9pZCoqIHIsIHNpemVfdCBhLCBzaXplX3Qg
cykgQUxJQVMoInBvc2l4X21lbWFsaWduIik7CisgICAgdm9pZCogX19saWJjX21hbGxvYyhzaXpl
X3Qgc2l6ZSkgICAgICAgICAgICAgIEFMSUFTKCJtYWxsb2MiKTsKKyAgICB2b2lkIF9fbGliY19m
cmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgICAgQUxJQVMoImZyZWUiKTsKKyAgICB2b2lk
KiBfX2xpYmNfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSAgQUxJQVMoInJlYWxsb2Mi
KTsKKyAgICB2b2lkKiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkgICAgQUxJ
QVMoImNhbGxvYyIpOworICAgIHZvaWQgX19saWJjX2NmcmVlKHZvaWQqIHB0cikgICAgICAgICAg
ICAgICAgICBBTElBUygiY2ZyZWUiKTsKKyAgICB2b2lkKiBfX2xpYmNfbWVtYWxpZ24oc2l6ZV90
IGFsaWduLCBzaXplX3QgcykgQUxJQVMoIm1lbWFsaWduIik7CisgICAgdm9pZCogX19saWJjX3Zh
bGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgIEFMSUFTKCJ2YWxsb2MiKTsKKyAgICB2b2lk
KiBfX2xpYmNfcHZhbGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgQUxJQVMoInB2YWxsb2Mi
KTsKKyAgICBpbnQgX19wb3NpeF9tZW1hbGlnbih2b2lkKiogciwgc2l6ZV90IGEsIHNpemVfdCBz
KSBBTElBUygicG9zaXhfbWVtYWxpZ24iKTsKICMgdW5kZWYgQUxJQVMKICMgZWxzZSAgIC8qIG5v
dCBfX0dOVUNfXyAqLwotICAvLyBQb3J0YWJsZSB3cmFwcGVycwotICB2b2lkKiBfX2xpYmNfbWFs
bG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICAgeyByZXR1cm4gbWFsbG9jKHNpemUpOyAgICAg
ICB9Ci0gIHZvaWQgIF9fbGliY19mcmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgICB7IGZy
ZWUocHRyKTsgICAgICAgICAgICAgICAgIH0KLSAgdm9pZCogX19saWJjX3JlYWxsb2Modm9pZCog
cHRyLCBzaXplX3Qgc2l6ZSkgIHsgcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsgfQotICB2b2lk
KiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkgICAgeyByZXR1cm4gY2FsbG9j
KG4sIHNpemUpOyAgICB9Ci0gIHZvaWQgIF9fbGliY19jZnJlZSh2b2lkKiBwdHIpICAgICAgICAg
ICAgICAgICB7IGNmcmVlKHB0cik7ICAgICAgICAgICAgICAgIH0KLSAgdm9pZCogX19saWJjX21l
bWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHMpIHsgcmV0dXJuIG1lbWFsaWduKGFsaWduLCBz
KTsgfQotICB2b2lkKiBfX2xpYmNfdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICAgeyBy
ZXR1cm4gdmFsbG9jKHNpemUpOyAgICAgICB9Ci0gIHZvaWQqIF9fbGliY19wdmFsbG9jKHNpemVf
dCBzaXplKSAgICAgICAgICAgICB7IHJldHVybiBwdmFsbG9jKHNpemUpOyAgICAgIH0KLSAgaW50
IF9fcG9zaXhfbWVtYWxpZ24odm9pZCoqIHIsIHNpemVfdCBhLCBzaXplX3QgcykgewotICAgIHJl
dHVybiBwb3NpeF9tZW1hbGlnbihyLCBhLCBzKTsKLSAgfQorICAgIC8vIFBvcnRhYmxlIHdyYXBw
ZXJzCisgICAgdm9pZCogX19saWJjX21hbGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgIHsg
cmV0dXJuIG1hbGxvYyhzaXplKTsgICAgICAgfQorICAgIHZvaWQgX19saWJjX2ZyZWUodm9pZCog
cHRyKSAgICAgICAgICAgICAgICAgICB7IGZyZWUocHRyKTsgICAgICAgICAgICAgICAgIH0KKyAg
ICB2b2lkKiBfX2xpYmNfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSAgeyByZXR1cm4g
cmVhbGxvYyhwdHIsIHNpemUpOyB9CisgICAgdm9pZCogX19saWJjX2NhbGxvYyhzaXplX3Qgbiwg
c2l6ZV90IHNpemUpICAgIHsgcmV0dXJuIGNhbGxvYyhuLCBzaXplKTsgICAgfQorICAgIHZvaWQg
X19saWJjX2NmcmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgICB7IGNmcmVlKHB0cik7ICAg
ICAgICAgICAgICAgIH0KKyAgICB2b2lkKiBfX2xpYmNfbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBz
aXplX3QgcykgeyByZXR1cm4gbWVtYWxpZ24oYWxpZ24sIHMpOyB9CisgICAgdm9pZCogX19saWJj
X3ZhbGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAgICAgIHsgcmV0dXJuIHZhbGxvYyhzaXplKTsg
ICAgICAgfQorICAgIHZvaWQqIF9fbGliY19wdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAg
ICB7IHJldHVybiBwdmFsbG9jKHNpemUpOyAgICAgIH0KKyAgICBpbnQgX19wb3NpeF9tZW1hbGln
bih2b2lkKiogciwgc2l6ZV90IGEsIHNpemVfdCBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBv
c2l4X21lbWFsaWduKHIsIGEsIHMpOworICAgIH0KICMgZW5kaWYgIC8qIF9fR05VQ19fICovCiB9
CiAjZW5kaWYgICAvKiBfX0dMSUJDX18gKi8KQEAgLTQyOTksMTEgKzQ0MjQsMTAgQEAgZXh0ZXJu
ICJDIiB7CiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgcnVsZSBvZiBj
YWxsaW5nIE1hbGxvY0hvb2sgbWV0aG9kCiAvLyBmcm9tIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUg
YWxsb2NhdGlvbiBmdW5jdGlvbjsKIC8vIGhlYXAtY2hlY2tlciBoYW5kbGVzIHRoaXMgc3BlY2lh
bCBjYXNlIGV4cGxpY2l0bHkuCi1zdGF0aWMgdm9pZCAqTWVtYWxpZ25PdmVycmlkZShzaXplX3Qg
YWxpZ24sIHNpemVfdCBzaXplLCBjb25zdCB2b2lkICpjYWxsZXIpCi0gICAgX19USFJPVyB7Ci0g
IHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6
SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0Oworc3RhdGljIHZv
aWQgKk1lbWFsaWduT3ZlcnJpZGUoc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9p
ZCAqY2FsbGVyKSBfX1RIUk9XIHsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01lbWFsaWduKGFsaWdu
LCBzaXplKTsKKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIHZvaWQgKigqX19tZW1hbGlnbl9ob29rKShzaXplX3QsIHNp
emVfdCwgY29uc3Qgdm9pZCAqKSA9IE1lbWFsaWduT3ZlcnJpZGU7CiAKQEAgLTQzMTUsMTIgKzQ0
MzksMTIgQEAgdm9pZCByZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKQogICAgIC8vIEZsdXNo
IGZyZWUgcGFnZXMgaW4gdGhlIGN1cnJlbnQgdGhyZWFkIGNhY2hlIGJhY2sgdG8gdGhlIHBhZ2Ug
aGVhcC4KICAgICAvLyBMb3cgd2F0ZXJtYXJrIG1lY2hhbmlzbSBpbiBTY2F2ZW5nZSgpIHByZXZl
bnRzIGZ1bGwgcmV0dXJuIG9uIHRoZSBmaXJzdCBwYXNzLgogICAgIC8vIFRoZSBzZWNvbmQgcGFz
cyBmbHVzaGVzIGV2ZXJ5dGhpbmcuCi0gICAgaWYgKFRDTWFsbG9jX1RocmVhZENhY2hlKiB0aHJl
YWRDYWNoZSA9IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZUlmUHJlc2VudCgpKSB7Cisg
ICAgaWYgKFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlID0gVENNYWxsb2NUaHJlYWRD
YWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKSkgewogICAgICAgICB0aHJlYWRDYWNoZS0+U2NhdmVu
Z2UoKTsKICAgICAgICAgdGhyZWFkQ2FjaGUtPlNjYXZlbmdlKCk7CiAgICAgfQogCi0gICAgU3Bp
bkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFn
ZWhlYXBMb2NrKTsKICAgICBwYWdlaGVhcC0+UmVsZWFzZUZyZWVQYWdlcygpOwogfQogICAgIApA
QCAtNDMyOCwxOCArNDQ1MiwxOCBAQCBGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3Rh
dGlzdGljCiB7CiAgICAgRmFzdE1hbGxvY1N0YXRpc3RpY3Mgc3RhdGlzdGljczsKIAotICAgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIoJnBhZ2VoZWFwX2xvY2spOworICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tIb2xkZXIoJnBhZ2VoZWFwTG9jayk7CiAgICAgc3RhdGlzdGljcy5yZXNlcnZlZFZN
Qnl0ZXMgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBhZ2VoZWFwLT5TeXN0ZW1CeXRlcygpKTsKICAg
ICBzdGF0aXN0aWNzLmNvbW1pdHRlZFZNQnl0ZXMgPSBzdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRl
cyAtIHBhZ2VoZWFwLT5SZXR1cm5lZEJ5dGVzKCk7CiAKICAgICBzdGF0aXN0aWNzLmZyZWVMaXN0
Qnl0ZXMgPSAwOwogICAgIGZvciAodW5zaWduZWQgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyAr
K2NsKSB7Ci0gICAgICAgIGNvbnN0IGludCBsZW5ndGggPSBjZW50cmFsX2NhY2hlW2NsXS5sZW5n
dGgoKTsKLSAgICAgICAgY29uc3QgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRj
X2xlbmd0aCgpOworICAgICAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJhbENhY2hlW2NsXS5s
ZW5ndGgoKTsKKyAgICAgICAgY29uc3QgaW50IHRjTGVuZ3RoID0gY2VudHJhbENhY2hlW2NsXS50
Y0xlbmd0aCgpOwogCi0gICAgICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyArPSBCeXRlU2l6
ZUZvckNsYXNzKGNsKSAqIChsZW5ndGggKyB0Y19sZW5ndGgpOworICAgICAgICBzdGF0aXN0aWNz
LmZyZWVMaXN0Qnl0ZXMgKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCkgKiAobGVuZ3RoICsgdGNMZW5n
dGgpOwogICAgIH0KLSAgICBmb3IgKFRDTWFsbG9jX1RocmVhZENhY2hlKiB0aHJlYWRDYWNoZSA9
IHRocmVhZF9oZWFwczsgdGhyZWFkQ2FjaGUgOyB0aHJlYWRDYWNoZSA9IHRocmVhZENhY2hlLT5u
ZXh0XykKKyAgICBmb3IgKFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlID0gdGhyZWFk
SGVhcHM7IHRocmVhZENhY2hlIDsgdGhyZWFkQ2FjaGUgPSB0aHJlYWRDYWNoZS0+bmV4dCkKICAg
ICAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IHRocmVhZENhY2hlLT5TaXplKCk7CiAK
ICAgICByZXR1cm4gc3RhdGlzdGljczsKQEAgLTQzNDgsNyArNDQ3Miw3IEBAIEZhc3RNYWxsb2NT
dGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKIHNpemVfdCBmYXN0TWFsbG9jU2l6ZShjb25z
dCB2b2lkKiBwdHIpCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBy
ZXR1cm4gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKGNvbnN0X2Nhc3Q8dm9p
ZCo+KHB0cikpLT5tX3NpemU7CisgICAgcmV0dXJuIEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRh
dGlvbkhlYWRlcihjb25zdF9jYXN0PHZvaWQqPihwdHIpKS0+bXNpemU7CiAjZWxzZQogICAgIGNv
bnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgPj4ga1BhZ2VT
aGlmdDsKICAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3JFbnN1cmVTYWZl
KHApOwpAQCAtNDM1Niw3ICs0NDgwLDcgQEAgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZv
aWQqIHB0cikKICAgICBpZiAoIXNwYW4gfHwgc3Bhbi0+ZnJlZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBmb3IgKHZvaWQqIGZyZWUgPSBzcGFuLT5vYmplY3RzOyBmcmVlICE9IE5VTEw7IGZy
ZWUgPSAqKCh2b2lkKiopIGZyZWUpKSB7CisgICAgZm9yICh2b2lkKiBmcmVlID0gc3Bhbi0+b2Jq
ZWN0czsgZnJlZTsgZnJlZSA9ICooKHZvaWQqKikgZnJlZSkpIHsKICAgICAgICAgaWYgKHB0ciA9
PSBmcmVlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNDM4MiwxMyArNDUwNiwx
MyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZyZWVPYmplY3Qodm1fYWRkcmVzc190IHB0cikgY29u
c3QgeyByZXR1cm4gaXNGcmVlT2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cikpOyB9
CiAgICAgc2l6ZV90IGZyZWVPYmplY3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZU9iamVj
dHMuc2l6ZSgpOyB9CiAKLSAgICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY19UaHJlYWRD
YWNoZSogdGhyZWFkQ2FjaGUpCisgICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENNYWxsb2NUaHJl
YWRDYWNoZSogdGhyZWFkQ2FjaGUpCiAgICAgewotICAgICAgICBmb3IgKDsgdGhyZWFkQ2FjaGU7
IHRocmVhZENhY2hlID0gKHRocmVhZENhY2hlLT5uZXh0XyA/IG1fcmVhZGVyKHRocmVhZENhY2hl
LT5uZXh0XykgOiAwKSkKKyAgICAgICAgZm9yICg7IHRocmVhZENhY2hlOyB0aHJlYWRDYWNoZSA9
ICh0aHJlYWRDYWNoZS0+bmV4dCA/IG1fcmVhZGVyKHRocmVhZENhY2hlLT5uZXh0KSA6IDApKQog
ICAgICAgICAgICAgdGhyZWFkQ2FjaGUtPmVudW1lcmF0ZUZyZWVPYmplY3RzKCp0aGlzLCBtX3Jl
YWRlcik7CiAgICAgfQogCi0gICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdFBhZGRlZCogY2VudHJhbEZyZWVMaXN0LCBzaXplX3QgbnVtU2l6ZXMsIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkKKyAgICB2
b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCogY2VudHJh
bEZyZWVMaXN0LCBzaXplX3QgbnVtU2l6ZXMsIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVk
KiByZW1vdGVDZW50cmFsRnJlZUxpc3QpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtU2l6ZXM7IGkrKykKICAgICAgICAgICAgIGNlbnRyYWxGcmVlTGlzdFtpXS5l
bnVtZXJhdGVGcmVlT2JqZWN0cygqdGhpcywgbV9yZWFkZXIsIHJlbW90ZUNlbnRyYWxGcmVlTGlz
dCArIGkpOwpAQCAtNDQ2OSwxMiArNDU5MywxMiBAQCBwdWJsaWM6CiAKICAgICAgICAgVmVjdG9y
PHZtX3JhbmdlX3QsIDEwMjQ+IGFsbG9jYXRlZFBvaW50ZXJzOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY29hbGVzY2VkU3BhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IFNwYW4gKnRoZVNwYW4gPSBtX2NvYWxlc2NlZFNwYW5zW2ldOworICAgICAgICAgICAgU3Bhbiog
dGhlU3BhbiA9IG1fY29hbGVzY2VkU3BhbnNbaV07CiAgICAgICAgICAgICBpZiAodGhlU3Bhbi0+
ZnJlZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgdm1fYWRkcmVz
c190IHNwYW5TdGFydEFkZHJlc3MgPSB0aGVTcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0OwotICAg
ICAgICAgICAgdm1fc2l6ZV90IHNwYW5TaXplSW5CeXRlcyA9IHRoZVNwYW4tPmxlbmd0aCAqIGtQ
YWdlU2l6ZTsKKyAgICAgICAgICAgIHZtc2l6ZV90IHNwYW5TaXplSW5CeXRlcyA9IHRoZVNwYW4t
Pmxlbmd0aCAqIGtQYWdlU2l6ZTsKIAogICAgICAgICAgICAgaWYgKCF0aGVTcGFuLT5zaXplY2xh
c3MpIHsKICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGFuIGFsbG9jYXRlZCBsYXJnZSBvYmpl
Y3Qgc3BhbiwgbWFyayBpdCBhcyBpbiB1c2UKQEAgLTQ1MTcsNyArNDY0MSw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBTcGFuKiBwcmV2aW91c1NwYW4gPSBtX2NvYWxlc2NlZFNwYW5zW21fY29hbGVz
Y2VkU3BhbnMuc2l6ZSgpIC0gMV07CiAgICAgICAgIHZtX2FkZHJlc3NfdCBwcmV2aW91c1NwYW5T
dGFydEFkZHJlc3MgPSBwcmV2aW91c1NwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQ7Ci0gICAgICAg
IHZtX3NpemVfdCBwcmV2aW91c1NwYW5TaXplSW5CeXRlcyA9IHByZXZpb3VzU3Bhbi0+bGVuZ3Ro
ICoga1BhZ2VTaXplOworICAgICAgICB2bXNpemVfdCBwcmV2aW91c1NwYW5TaXplSW5CeXRlcyA9
IHByZXZpb3VzU3Bhbi0+bGVuZ3RoICoga1BhZ2VTaXplOwogCiAgICAgICAgIC8vIElmIHRoZSBu
ZXcgc3BhbiBpcyBhZGphY2VudCB0byB0aGUgcHJldmlvdXMgc3BhbiwgZG8gbm90aGluZyBmb3Ig
bm93LgogICAgICAgICB2bV9hZGRyZXNzX3Qgc3BhblN0YXJ0QWRkcmVzcyA9IHNwYW4tPnN0YXJ0
IDw8IGtQYWdlU2hpZnQ7CkBAIC00NTg0LDE3ICs0NzA4LDE3IEBAIGtlcm5fcmV0dXJuX3QgRmFz
dE1hbGxvY1pvbmU6OmVudW1lcmF0ZSgKICAgICBJbml0U2l6ZUNsYXNzZXMoKTsKIAogICAgIEZh
c3RNYWxsb2Nab25lKiBtem9uZSA9IG1lbW9yeVJlYWRlcihyZWludGVycHJldF9jYXN0PEZhc3RN
YWxsb2Nab25lKj4oem9uZUFkZHJlc3MpKTsKLSAgICBUQ01hbGxvY19QYWdlSGVhcCogcGFnZUhl
YXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fcGFnZUhlYXApOwotICAgIFRDTWFsbG9jX1RocmVh
ZENhY2hlKiogdGhyZWFkSGVhcHNQb2ludGVyID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3RocmVh
ZEhlYXBzKTsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkSGVhcHMgPSBtZW1vcnlS
ZWFkZXIoKnRocmVhZEhlYXBzUG9pbnRlcik7CisgICAgVENNYWxsb2NQYWdlSGVhcCogcGFnZUhl
YXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fcGFnZUhlYXApOworICAgIFRDTWFsbG9jVGhyZWFk
Q2FjaGUqKiB0aHJlYWRIZWFwc1BvaW50ZXIgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fdGhyZWFk
SGVhcHMpOworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRocmVhZEhlYXBzID0gbWVtb3J5UmVh
ZGVyKCp0aHJlYWRIZWFwc1BvaW50ZXIpOwogCi0gICAgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dFBhZGRlZCogY2VudHJhbENhY2hlcyA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV9jZW50cmFsQ2Fj
aGVzLCBzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCkgKiBrTnVtQ2xhc3Nl
cyk7CisgICAgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqIGNlbnRyYWxDYWNoZXMgPSBt
ZW1vcnlSZWFkZXIobXpvbmUtPm1fY2VudHJhbENhY2hlcywgc2l6ZW9mKFRDTWFsbG9jQ2VudHJh
bEZyZWVMaXN0UGFkZGVkKSAqIGtOdW1DbGFzc2VzKTsKIAogICAgIEZyZWVPYmplY3RGaW5kZXIg
ZmluZGVyKG1lbW9yeVJlYWRlcik7CiAgICAgZmluZGVyLmZpbmRGcmVlT2JqZWN0cyh0aHJlYWRI
ZWFwcyk7CiAgICAgZmluZGVyLmZpbmRGcmVlT2JqZWN0cyhjZW50cmFsQ2FjaGVzLCBrTnVtQ2xh
c3NlcywgbXpvbmUtPm1fY2VudHJhbENhY2hlcyk7CiAKLSAgICBUQ01hbGxvY19QYWdlSGVhcDo6
UGFnZU1hcCogcGFnZU1hcCA9ICZwYWdlSGVhcC0+cGFnZW1hcF87CisgICAgVENNYWxsb2NQYWdl
SGVhcDo6UGFnZU1hcCogcGFnZU1hcCA9ICZwYWdlSGVhcC0+cGFnZW1hcDsKICAgICBQYWdlTWFw
RnJlZU9iamVjdEZpbmRlciBwYWdlTWFwRmluZGVyKG1lbW9yeVJlYWRlciwgZmluZGVyKTsKICAg
ICBwYWdlTWFwLT52aXNpdFZhbHVlcyhwYWdlTWFwRmluZGVyLCBtZW1vcnlSZWFkZXIpOwogCkBA
IC00NjA2LDcgKzQ3MzAsNyBAQCBrZXJuX3JldHVybl90IEZhc3RNYWxsb2Nab25lOjplbnVtZXJh
dGUoCiAgICAgcGFnZU1hcC0+dmlzaXRBbGxvY2F0aW9ucyhhZG1pblJlZ2lvblJlY29yZGVyLCBt
ZW1vcnlSZWFkZXIpOwogCiAgICAgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4qIHNwYW5BbGxvY2F0
b3IgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fc3BhbkFsbG9jYXRvcik7Ci0gICAgUGFnZUhlYXBB
bGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+KiBwYWdlSGVhcEFsbG9jYXRvciA9IG1lbW9y
eVJlYWRlcihtem9uZS0+bV9wYWdlSGVhcEFsbG9jYXRvcik7CisgICAgUGFnZUhlYXBBbGxvY2F0
b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yID0gbWVtb3J5UmVhZGVy
KG16b25lLT5tX3BhZ2VIZWFwQWxsb2NhdG9yKTsKIAogICAgIHNwYW5BbGxvY2F0b3ItPnJlY29y
ZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhhZG1pblJlZ2lvblJlY29yZGVyLCBtZW1vcnlSZWFkZXIp
OwogICAgIHBhZ2VIZWFwQWxsb2NhdG9yLT5yZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMoYWRt
aW5SZWdpb25SZWNvcmRlciwgbWVtb3J5UmVhZGVyKTsKQEAgLTQ2MzQsNyArNDc1OCw3IEBAIHZv
aWQqIEZhc3RNYWxsb2Nab25lOjp6b25lQ2FsbG9jKG1hbGxvY18KIHZvaWQgRmFzdE1hbGxvY1pv
bmU6OnpvbmVGcmVlKG1hbGxvY196b25lX3QqLCB2b2lkKiBwdHIpCiB7CiAgICAgLy8gRHVlIHRv
IDxyZGFyOi8vcHJvYmxlbS81NjcxMzU3PiB6b25lRnJlZSBtYXkgYmUgY2FsbGVkIGJ5IHRoZSBz
eXN0ZW0gZnJlZSBldmVuIGlmIHRoZSBwb2ludGVyCi0gICAgLy8gaXMgbm90IGluIHRoaXMgem9u
ZS4gIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgcG9pbnRlciBiZWluZyBmcmVlZCB3YXMgbm90IGFs
bG9jYXRlZCBieSBhbnkKKyAgICAvLyBpcyBub3QgaW4gdGhpcyB6b25lLiBXaGVuIHRoaXMgaGFw
cGVucywgdGhlIHBvaW50ZXIgYmVpbmcgZnJlZWQgd2FzIG5vdCBhbGxvY2F0ZWQgYnkgYW55CiAg
ICAgLy8gem9uZSBzbyB3ZSBuZWVkIHRvIHByaW50IGEgdXNlZnVsIGVycm9yIGZvciB0aGUgYXBw
bGljYXRpb24gZGV2ZWxvcGVyLgogICAgIG1hbGxvY19wcmludGYoIioqKiBlcnJvciBmb3Igb2Jq
ZWN0ICVwOiBwb2ludGVyIGJlaW5nIGZyZWVkIHdhcyBub3QgYWxsb2NhdGVkXG4iLCBwdHIpOwog
fQpAQCAtNDY2NCw3ICs0Nzg4LDcgQEAgbWFsbG9jX2ludHJvc3BlY3Rpb25fdCBqc2NvcmVfZmFz
dG1hbGxvYwogICAgIH07CiB9CiAKLUZhc3RNYWxsb2Nab25lOjpGYXN0TWFsbG9jWm9uZShUQ01h
bGxvY19QYWdlSGVhcCogcGFnZUhlYXAsIFRDTWFsbG9jX1RocmVhZENhY2hlKiogdGhyZWFkSGVh
cHMsIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqIGNlbnRyYWxDYWNoZXMsIFBhZ2VI
ZWFwQWxsb2NhdG9yPFNwYW4+KiBzcGFuQWxsb2NhdG9yLCBQYWdlSGVhcEFsbG9jYXRvcjxUQ01h
bGxvY19UaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yKQorRmFzdE1hbGxvY1pvbmU6OkZh
c3RNYWxsb2Nab25lKFRDTWFsbG9jUGFnZUhlYXAqIHBhZ2VIZWFwLCBUQ01hbGxvY1RocmVhZENh
Y2hlKiogdGhyZWFkSGVhcHMsIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKiBjZW50cmFs
Q2FjaGVzLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiogc3BhbkFsbG9jYXRvciwgUGFnZUhlYXBB
bGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yKQogICAgIDog
bV9wYWdlSGVhcChwYWdlSGVhcCkKICAgICAsIG1fdGhyZWFkSGVhcHModGhyZWFkSGVhcHMpCiAg
ICAgLCBtX2NlbnRyYWxDYWNoZXMoY2VudHJhbENhY2hlcykKQEAgLTQ2ODgsNyArNDgxMiw3IEBA
IEZhc3RNYWxsb2Nab25lOjpGYXN0TWFsbG9jWm9uZShUQ01hbGxvY18KIAogdm9pZCBGYXN0TWFs
bG9jWm9uZTo6aW5pdCgpCiB7Ci0gICAgc3RhdGljIEZhc3RNYWxsb2Nab25lIHpvbmUocGFnZWhl
YXAsICZ0aHJlYWRfaGVhcHMsIHN0YXRpY19jYXN0PFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQ
YWRkZWQqPihjZW50cmFsX2NhY2hlKSwgJnNwYW5fYWxsb2NhdG9yLCAmdGhyZWFkaGVhcF9hbGxv
Y2F0b3IpOworICAgIHN0YXRpYyBGYXN0TWFsbG9jWm9uZSB6b25lKHBhZ2VoZWFwLCAmdGhyZWFk
SGVhcHMsIHN0YXRpY19jYXN0PFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKj4oY2VudHJh
bENhY2hlKSwgJnNwYW5BbGxvY2F0b3IsICZ0aHJlYWRoZWFwQWxsb2NhdG9yKTsKIH0KIAogI2Vu
ZGlmIC8vIE9TKERBUldJTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148597</attachid>
            <date>2012-06-20 10:30:22 -0700</date>
            <delta_ts>2012-06-20 10:37:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89366-20120620112924.patch</filename>
            <type>text/plain</type>
            <size>237005</size>
            <attacher name="Alex Christensen">alex.christensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjA4MjApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1MiBAQAorMjAxMi0wNi0yMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFsZXguY2hyaXN0ZW5zZW5AZmxleHNpbS5jb20+CisKKyAgICAgICAgRmFzdE1hbGxvYy5jcHAg
bmVlZHMgdG8gYmUgcmVvcmRlcmVkIGJlZm9yZSBwYWRkaW5nIGJ1ZyBjYW4gYmUgZml4ZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MzY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRmFzdE1h
bGxvYy5jcHA6CisgICAgICAgIFJlb3JkZXJlZCBhbmQgZml4ZWQgbWFueSBzdHlsZSBwcm9ibGVt
cyAKKyAgICAgICAgKFdURjo6dHJ5RmFzdE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RD
YWxsb2MpOgorICAgICAgICAoV1RGOjpmYXN0Q2FsbG9jKToKKyAgICAgICAgKFdURjo6ZmFzdEZy
ZWUpOgorICAgICAgICAoV1RGOjp0cnlGYXN0UmVhbGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RN
YWxsb2NTaXplKToKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OkNsYXNzSW5kZXgpOgor
ICAgICAgICAoVENFbnRyeSk6CisgICAgICAgIChXVEY6OlNMTF9OZXh0KToKKyAgICAgICAgKFdU
Rjo6U0xMU2V0TmV4dCk6CisgICAgICAgIChXVEY6OlNMTFB1c2gpOgorICAgICAgICAoV1RGOjpT
TExQb3ApOgorICAgICAgICAoV1RGOjpTTExQb3BSYW5nZSk6CisgICAgICAgIChXVEY6OlNMTFB1
c2hSYW5nZSk6CisgICAgICAgIChXVEY6OlNMTFNpemUpOgorICAgICAgICAoV1RGOjpTaXplQ2xh
c3MpOgorICAgICAgICAoV1RGOjpCeXRlU2l6ZUZvckNsYXNzKToKKyAgICAgICAgKFdURjo6TnVt
TW92ZVNpemUpOgorICAgICAgICAoV1RGOjpJbml0U2l6ZUNsYXNzZXMpOgorICAgICAgICAoV1RG
OjpNZXRhRGF0YUFsbG9jKToKKyAgICAgICAgKFBhZ2VIZWFwQWxsb2NhdG9yKToKKyAgICAgICAg
KFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFs
bG9jYXRvcjo6TmV3KToKKyAgICAgICAgKFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkRlbGV0ZSk6
CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjppbnVzZSk6CisgICAgICAgIChXVEY6
OlBhZ2VIZWFwQWxsb2NhdG9yOjpyZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMpOgorICAgICAg
ICAoV1RGOjpwYWdlcyk6CisgICAgICAgIChXVEY6OkFsbG9jYXRpb25TaXplKToKKyAgICAgICAg
KFNwYW4pOgorICAgICAgICAoV1RGOjpFdmVudCk6CisgICAgICAgIChXVEY6Ok5ld1NwYW4pOgor
ICAgICAgICAoV1RGOjpEZWxldGVTcGFuKToKKyAgICAgICAgKFdURjo6RExMSW5pdCk6CisgICAg
ICAgIChXVEY6OkRMTFJlbW92ZSk6CisgICAgICAgIChXVEY6OkRMTF9Jc0VtcHR5KToKKyAgICAg
ICAgKFdURjo6RExMTGVuZ3RoKToKKyAgICAgICAgKFdURjo6RExMUHJpbnQpOgorICAgICAgICAo
V1RGOjpETExQcmVwZW5kKToKKyAgICAgICAgKFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0KToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0Ojp0Y0xlbmd0aCk6CisgICAgICAgIChXVEY6OlRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjplbnVtZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChU
Q01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCk6CisgICAgICAgIChGYXN0TWFsbG9jWm9uZSk6
CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpnb29kU2l6ZSk6CisgICAgICAgIChXVEY6
OkZhc3RNYWxsb2Nab25lOjpjaGVjayk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpw
cmludCk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpsb2cpOgorICAgICAgICAoV1RG
OjpGYXN0TWFsbG9jWm9uZTo6Zm9yY2VMb2NrKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pv
bmU6OmZvcmNlVW5sb2NrKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OnN0YXRpc3Rp
Y3MpOgorICAgICAgICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6em9uZVZhbGxvYyk6CisgICAgICAg
IChXVEY6OkZhc3RNYWxsb2Nab25lOjp6b25lRGVzdHJveSk6CisgICAgICAgIChXVEY6Oktlcm5l
bFN1cHBvcnRzVExTKToKKyAgICAgICAgKFdURjo6Q2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKToK
KyAgICAgICAgKFN0YWNrVHJhY2UpOgorICAgICAgICAoTWFwU2VsZWN0b3IpOgorICAgICAgICAo
VENNYWxsb2NQYWdlSGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OkdldERl
c2NyaXB0b3IpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpHZXREZXNjcmlwdG9y
RW5zdXJlU2FmZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlN5c3RlbUJ5dGVz
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6RnJlZUJ5dGVzKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NQYWdlSGVhcDo6R2V0U2l6ZUNsYXNzSWZDYWNoZWQpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDYWNoZVNpemVDbGFzcyk6CisgICAgICAgIChTcGFuTGlz
dCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlJlY29yZFNwYW4pOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjppbml0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQ
YWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFn
ZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdl
SGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFw
OjpyZXNjaGVkdWxlU2NhdmVuZ2VyKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
c3VzcGVuZFNjYXZlbmdlcik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNjYXZl
bmdlclRpbWVyRmlyZWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpydW5TY2F2
ZW5nZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzaWduYWxTY2F2
ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNob3VsZFNjYXZlbmdlKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NQYWdlSGVhcDo6TmV3KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVh
cDo6QWxsb2NMYXJnZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlNwbGl0KToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6Q2FydmUpOgorICAgICAgICAoV1RGOjpU
Q01hbGxvY1BhZ2VIZWFwOjpEZWxldGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFw
OjpJbmNyZW1lbnRhbFNjYXZlbmdlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
UmVnaXN0ZXJTaXplQ2xhc3MpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpSZXR1
cm5lZEJ5dGVzKToKKyAgICAgICAgKFdURjo6UGFnZXNUb01CKToKKyAgICAgICAgKFdURjo6VENN
YWxsb2NQYWdlSGVhcDo6RHVtcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6Okdy
b3dIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6Q2hlY2spOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDaGVja0xpc3QpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Bh
Z2VIZWFwOjpSZWxlYXNlRnJlZVBhZ2VzKToKKyAgICAgICAgKFRDTWFsbG9jVGhyZWFkQ2FjaGVG
cmVlTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6SW5p
dCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6bGVuZ3RoKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjplbXB0eSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6bG93d2F0ZXJtYXJrKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjpjbGVhckxvd3dhdGVybWFy
ayk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UHVzaCk6Cisg
ICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UHVzaFJhbmdlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjpQb3BSYW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UG9wKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjplbnVtZXJhdGVGcmVlT2JqZWN0cyk6Cisg
ICAgICAgIChUQ01hbGxvY1RocmVhZENhY2hlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJl
YWRDYWNoZTo6ZnJlZWxpc3RsZW5ndGgpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENh
Y2hlOjpTaXplKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6ZW51bWVyYXRl
RnJlZU9iamVjdHMpOgorICAgICAgICAoV1RGOjpnZXRQYWdlSGVhcCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVuZ2UpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpzZXRUaHJlYWRI
ZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkluaXQpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJlbGVhc2VUb1NwYW5zKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkV2aWN0UmFuZG9tU2l6ZUNs
YXNzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Ok1ha2VDYWNoZVNw
YWNlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlNocmlua0NhY2hl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Okluc2VydFJhbmdlKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zU2FmZSk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFucyk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpQb3B1bGF0ZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlNhbXBsZUFsbG9jYXRpb24pOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0KToKKyAgICAgICAgKFdURjo6VENNYWxs
b2NUaHJlYWRDYWNoZTo6Q2xlYW51cCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6RGVhbGxv
Y2F0ZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkZldGNoRnJvbUNlbnRy
YWxDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlJlbGVhc2VUb0Nl
bnRyYWxDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlNjYXZlbmdl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUpOgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0TW9kdWxlKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6TmV3SGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkdldFRocmVhZEhlYXApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Ro
cmVhZENhY2hlOjpHZXRDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkdldENhY2hlSWZQcmVzZW50KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6
SW5pdFRTRCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkNyZWF0ZUNhY2hl
SWZOZWNlc3NhcnkpOgorCiAyMDEyLTA2LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGxvb2sgYXQgZGlzYXNzZW1i
bHkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxMjA4MjApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjggKzQyLDI4IEBA
CiAvLyAgICAgVGhpcyBpcyBzYWZlIGJlY2F1c2UgZWFjaCBzdWNoIGxpc3QgaXMgb25seSBhY2Nl
c3NlZCBieSBvbmUgdGhyZWFkLgogLy8gIDIuIFdlIGhhdmUgYSBsb2NrIHBlciBjZW50cmFsIGZy
ZWUtbGlzdCwgYW5kIGhvbGQgaXQgd2hpbGUgbWFuaXB1bGF0aW5nCiAvLyAgICAgdGhlIGNlbnRy
YWwgZnJlZSBsaXN0IGZvciBhIHBhcnRpY3VsYXIgc2l6ZS4KLS8vICAzLiBUaGUgY2VudHJhbCBw
YWdlIGFsbG9jYXRvciBpcyBwcm90ZWN0ZWQgYnkgInBhZ2VoZWFwX2xvY2siLgorLy8gIDMuIFRo
ZSBjZW50cmFsIHBhZ2UgYWxsb2NhdG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBMb2NrIi4K
IC8vICA0LiBUaGUgcGFnZW1hcCAod2hpY2ggbWFwcyBmcm9tIHBhZ2UtbnVtYmVyIHRvIGRlc2Ny
aXB0b3IpLAogLy8gICAgIGNhbiBiZSByZWFkIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGFu
ZCB3cml0dGVuIHdoaWxlIGhvbGRpbmcKLS8vICAgICB0aGUgInBhZ2VoZWFwX2xvY2siLgorLy8g
ICAgIHRoZSAicGFnZWhlYXBMb2NrIi4KIC8vICA1LiBUbyBpbXByb3ZlIHBlcmZvcm1hbmNlLCBh
IHN1YnNldCBvZiB0aGUgaW5mb3JtYXRpb24gb25lIGNhbiBnZXQKLS8vICAgICBmcm9tIHRoZSBw
YWdlbWFwIGlzIGNhY2hlZCBpbiBhIGRhdGEgc3RydWN0dXJlLCBwYWdlbWFwX2NhY2hlXywKLS8v
ICAgICB0aGF0IGF0b21pY2FsbHkgcmVhZHMgYW5kIHdyaXRlcyBpdHMgZW50cmllcy4gIFRoaXMg
Y2FjaGUgY2FuIGJlCisvLyAgICAgZnJvbSB0aGUgcGFnZW1hcCBpcyBjYWNoZWQgaW4gYSBkYXRh
IHN0cnVjdHVyZSwgcGFnZW1hcGNhY2hlLAorLy8gICAgIHRoYXQgYXRvbWljYWxseSByZWFkcyBh
bmQgd3JpdGVzIGl0cyBlbnRyaWVzLiBUaGlzIGNhY2hlIGNhbiBiZQogLy8gICAgIHJlYWQgYW5k
IHdyaXR0ZW4gd2l0aG91dCBsb2NraW5nLgogLy8KIC8vICAgICBUaGlzIG11bHRpLXRocmVhZGVk
IGFjY2VzcyB0byB0aGUgcGFnZW1hcCBpcyBzYWZlIGZvciBmYWlybHkKLS8vICAgICBzdWJ0bGUg
cmVhc29ucy4gIFdlIGJhc2ljYWxseSBhc3N1bWUgdGhhdCB3aGVuIGFuIG9iamVjdCBYIGlzCisv
LyAgICAgc3VidGxlIHJlYXNvbnMuIFdlIGJhc2ljYWxseSBhc3N1bWUgdGhhdCB3aGVuIGFuIG9i
amVjdCBYIGlzCiAvLyAgICAgYWxsb2NhdGVkIGJ5IHRocmVhZCBBIGFuZCBkZWFsbG9jYXRlZCBi
eSB0aHJlYWQgQiwgdGhlcmUgbXVzdAogLy8gICAgIGhhdmUgYmVlbiBhcHByb3ByaWF0ZSBzeW5j
aHJvbml6YXRpb24gaW4gdGhlIGhhbmRvZmYgb2Ygb2JqZWN0Ci0vLyAgICAgWCBmcm9tIHRocmVh
ZCBBIHRvIHRocmVhZCBCLiAgVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBwYWdlbWFwX2NhY2hl
Xy4KKy8vICAgICBYIGZyb20gdGhyZWFkIEEgdG8gdGhyZWFkIEIuIFRoZSBzYW1lIGxvZ2ljIGFw
cGxpZXMgdG8gcGFnZW1hcGNhY2hlLgogLy8KIC8vIFRIRSBQQUdFSUQtVE8tU0laRUNMQVNTIENB
Q0hFCi0vLyBIb3QgUGFnZUlELXRvLXNpemVjbGFzcyBtYXBwaW5ncyBhcmUgaGVsZCBieSBwYWdl
bWFwX2NhY2hlXy4gIElmIHRoaXMgY2FjaGUKKy8vIEhvdCBQYWdlSUQtdG8tc2l6ZWNsYXNzIG1h
cHBpbmdzIGFyZSBoZWxkIGJ5IHBhZ2VtYXBjYWNoZS4gSWYgdGhpcyBjYWNoZQogLy8gcmV0dXJu
cyAwIGZvciBhIHBhcnRpY3VsYXIgUGFnZUlEIHRoZW4gdGhhdCBtZWFucyAibm8gaW5mb3JtYXRp
b24sIiBub3QgdGhhdAotLy8gdGhlIHNpemVjbGFzcyBpcyAwLiAgVGhlIGNhY2hlIG1heSBoYXZl
IHN0YWxlIGluZm9ybWF0aW9uIGZvciBwYWdlcyB0aGF0IGRvCi0vLyBub3QgaG9sZCB0aGUgYmVn
aW5uaW5nIG9mIGFueSBmcmVlKCknYWJsZSBvYmplY3QuICBTdGFsZW5lc3MgaXMgZWxpbWluYXRl
ZAotLy8gaW4gUG9wdWxhdGUoKSBmb3IgcGFnZXMgd2l0aCBzaXplY2xhc3MgPiAwIG9iamVjdHMs
IGFuZCBpbiBkb19tYWxsb2MoKSBhbmQKLS8vIGRvX21lbWFsaWduKCkgZm9yIGFsbCBvdGhlciBy
ZWxldmFudCBwYWdlcy4KKy8vIHRoZSBzaXplY2xhc3MgaXMgMC4gVGhlIGNhY2hlIG1heSBoYXZl
IHN0YWxlIGluZm9ybWF0aW9uIGZvciBwYWdlcyB0aGF0IGRvCisvLyBub3QgaG9sZCB0aGUgYmVn
aW5uaW5nIG9mIGFueSBmcmVlKCknYWJsZSBvYmplY3QuIFN0YWxlbmVzcyBpcyBlbGltaW5hdGVk
CisvLyBpbiBQb3B1bGF0ZSgpIGZvciBwYWdlcyB3aXRoIHNpemVjbGFzcyA+IDAgb2JqZWN0cywg
YW5kIGluIGRvTWFsbG9jKCkgYW5kCisvLyBkb01lbWFsaWduKCkgZm9yIGFsbCBvdGhlciByZWxl
dmFudCBwYWdlcy4KIC8vCiAvLyBUT0RPOiBCaWFzIHJlY2xhbWF0aW9uIHRvIGxhcmdlciBhZGRy
ZXNzZXMKIC8vIFRPRE86IGltcGxlbWVudCBtYWxsaW5mby9tYWxsb3B0CkBAIC0yNDMsNyArMjQz
LDcgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdE1hbGxvYyhzaXplXwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKICAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRl
ciogaGVhZGVyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqPihyZXN1
bHQpOwotICAgIGhlYWRlci0+bV9zaXplID0gbjsKKyAgICBoZWFkZXItPm1zaXplID0gbjsKICAg
ICBoZWFkZXItPm1fdHlwZSA9IEludGVybmFsOjpBbGxvY1R5cGVNYWxsb2M7CiAgICAgaGVhZGVy
LT5tX3ByZWZpeCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbnRlcm5hbDo6VmFsaWRhdGlvblBy
ZWZpeCk7CiAgICAgcmVzdWx0ID0gaGVhZGVyICsgMTsKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZv
aWQqIGZhc3RNYWxsb2Moc2l6ZV90IG4pCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVHJ5TWFs
bG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVs
ZW1lbnRfc2l6ZSkKK1RyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG5F
bGVtZW50cywgc2l6ZV90IGVsZW1lbnRzaXplKQogewogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4o
KSk7CiAKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIHNpemVfdCB0b3Rh
bEJ5dGVzID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsKLSAgICBpZiAobl9lbGVtZW50cyA+
IDEgJiYgZWxlbWVudF9zaXplICYmICh0b3RhbEJ5dGVzIC8gZWxlbWVudF9zaXplKSAhPSBuX2Vs
ZW1lbnRzKQorICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gbkVsZW1lbnRzICogZWxlbWVudHNpemU7
CisgICAgaWYgKG5FbGVtZW50cyA+IDEgJiYgZWxlbWVudHNpemUgJiYgKHRvdGFsQnl0ZXMgLyBl
bGVtZW50c2l6ZSkgIT0gbkVsZW1lbnRzKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFRyeU1h
bGxvY1JldHVyblZhbHVlIHJldHVyblZhbHVlID0gdHJ5RmFzdE1hbGxvYyh0b3RhbEJ5dGVzKTsK
QEAgLTI5MSwyMSArMjkxLDIxIEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Mo
c2l6ZV8KICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0
OwogI2Vsc2UKLSAgICByZXR1cm4gY2FsbG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7Cisg
ICAgcmV0dXJuIGNhbGxvYyhuRWxlbWVudHMsIGVsZW1lbnRzaXplKTsKICNlbmRpZgogfQogCi12
b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQor
dm9pZCogZmFzdENhbGxvYyhzaXplX3QgbkVsZW1lbnRzLCBzaXplX3QgZWxlbWVudHNpemUpCiB7
CiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZB
TElEQVRJT04pCi0gICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0
Q2FsbG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7CisgICAgVHJ5TWFsbG9jUmV0dXJuVmFs
dWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0Q2FsbG9jKG5FbGVtZW50cywgZWxlbWVudHNpemUpOwog
ICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoIXJldHVyblZhbHVlLmdldFZhbHVlKHJlc3VsdCkp
CiAgICAgICAgIENSQVNIKCk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuX2Vs
ZW1lbnRzLCBlbGVtZW50X3NpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuRWxlbWVu
dHMsIGVsZW1lbnRzaXplKTsKICNlbmRpZgogCiAgICAgaWYgKCFyZXN1bHQpCkBAIC0zMjQsNyAr
MzI0LDcgQEAgdm9pZCBmYXN0RnJlZSh2b2lkKiBwKQogICAgIAogICAgIGZhc3RNYWxsb2NNYXRj
aFZhbGlkYXRlRnJlZShwLCBJbnRlcm5hbDo6QWxsb2NUeXBlTWFsbG9jKTsKICAgICBJbnRlcm5h
bDo6VmFsaWRhdGlvbkhlYWRlciogaGVhZGVyID0gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0
aW9uSGVhZGVyKHApOwotICAgIG1lbXNldChwLCAweENDLCBoZWFkZXItPm1fc2l6ZSk7CisgICAg
bWVtc2V0KHAsIDB4Q0MsIGhlYWRlci0+bXNpemUpOwogICAgIGZyZWUoaGVhZGVyKTsKICNlbHNl
CiAgICAgZnJlZShwKTsKQEAgLTM0Myw3ICszNDMsNyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0
cnlGYXN0UmVhbGxvYyh2b2lkCiAgICAgICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KHJlYWxsb2Mo
SW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKHApLCBuICsgSW50ZXJuYWw6OlZh
bGlkYXRpb25CdWZmZXJTaXplKSk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJlc3VsdC0+bV9zaXplID0gbjsKKyAgICAgICAgcmVzdWx0LT5t
c2l6ZSA9IG47CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIDE7CiAgICAgICAgICpmYXN0TWFs
bG9jVmFsaWRhdGlvblN1ZmZpeChyZXN1bHQpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7
CiAgICAgICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwpAQCAtMzg1LDkgKzM4NSw5IEBA
IEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKIHNpemVfdCBmYXN0TWFs
bG9jU2l6ZShjb25zdCB2b2lkKiBwKQogewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJ
T04pCi0gICAgcmV0dXJuIEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihjb25z
dF9jYXN0PHZvaWQqPihwKSktPm1fc2l6ZTsKKyAgICByZXR1cm4gSW50ZXJuYWw6OmZhc3RNYWxs
b2NWYWxpZGF0aW9uSGVhZGVyKGNvbnN0X2Nhc3Q8dm9pZCo+KHApKS0+bXNpemU7CiAjZWxpZiBP
UyhEQVJXSU4pCi0gICAgcmV0dXJuIG1hbGxvY19zaXplKHApOworICAgIHJldHVybiBtYWxsb2NT
aXplKHApOwogI2VsaWYgT1MoV0lORE9XUykKICAgICByZXR1cm4gX21zaXplKGNvbnN0X2Nhc3Q8
dm9pZCo+KHApKTsKICNlbHNlCkBAIC00NzIsMTcgKzQ3MiwxNyBAQCBzdGF0aWMgdm9pZCogKCpw
dGhyZWFkX2dldHNwZWNpZmljX2Z1bmN0CiAjZW5kaWYKIAogI2RlZmluZSBERUZJTkVfVkFSSUFC
TEUodHlwZSwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpIFwKLSAgbmFtZXNwYWNlIEZMQUdfX25hbWVz
cGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQgeyAg
XAotICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGNoYXIgRkxBR1Nfbm8jI25hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMj
dHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQorICAgIG5hbWVzcGFjZSBGTEFHX19uYW1lc3Bh
Y2VfZG9fbm90X3VzZV9kaXJlY3RseV91c2VfREVDTEFSRV8jI3R5cGUjI19pbnN0ZWFkIHsgIFwK
KyAgICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2hhciBGTEFHU19ubyMjbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNM
QVJFXyMjdHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQogICAKICNkZWZpbmUgREVGSU5FX2lu
dDY0KG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShpbnQ2NF90LCBu
YW1lLCB2YWx1ZSwgbWVhbmluZykKKyAgICBERUZJTkVfVkFSSUFCTEUoaW50NjRfdCwgbmFtZSwg
dmFsdWUsIG1lYW5pbmcpCiAgIAogI2RlZmluZSBERUZJTkVfZG91YmxlKG5hbWUsIHZhbHVlLCBt
ZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5n
KQorICAgIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKQogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtNDk0LDEwOSArNDk0LDEyIEBAIG5hbWVzcGFjZSBXVEYgewog
I2RlZmluZSBNRVNTQUdFIExPR19FUlJPUgogI2RlZmluZSBDSEVDS19DT05ESVRJT04gQVNTRVJU
CiAKLSNpZiBPUyhEQVJXSU4pCi1zdHJ1Y3QgU3BhbjsKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3RQYWRkZWQ7Ci1jbGFzcyBUQ01hbGxvY19QYWdlSGVhcDsKLWNsYXNzIFRDTWFsbG9j
X1RocmVhZENhY2hlOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhZ2VIZWFwQWxsb2Nh
dG9yOwotCi1jbGFzcyBGYXN0TWFsbG9jWm9uZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
aW5pdCgpOwotCi0gICAgc3RhdGljIGtlcm5fcmV0dXJuX3QgZW51bWVyYXRlKHRhc2tfdCwgdm9p
ZCosIHVuc2lnbmVkIHR5cGVNbWFzaywgdm1fYWRkcmVzc190IHpvbmVBZGRyZXNzLCBtZW1vcnlf
cmVhZGVyX3QsIHZtX3JhbmdlX3JlY29yZGVyX3QpOwotICAgIHN0YXRpYyBzaXplX3QgZ29vZFNp
emUobWFsbG9jX3pvbmVfdCosIHNpemVfdCBzaXplKSB7IHJldHVybiBzaXplOyB9Ci0gICAgc3Rh
dGljIGJvb2xlYW5fdCBjaGVjayhtYWxsb2Nfem9uZV90KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHN0YXRpYyB2b2lkICBwcmludChtYWxsb2Nfem9uZV90KiwgYm9vbGVhbl90KSB7IH0KLSAgICBz
dGF0aWMgdm9pZCBsb2cobWFsbG9jX3pvbmVfdCosIHZvaWQqKSB7IH0KLSAgICBzdGF0aWMgdm9p
ZCBmb3JjZUxvY2sobWFsbG9jX3pvbmVfdCopIHsgfQotICAgIHN0YXRpYyB2b2lkIGZvcmNlVW5s
b2NrKG1hbGxvY196b25lX3QqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBzdGF0aXN0aWNzKG1hbGxv
Y196b25lX3QqLCBtYWxsb2Nfc3RhdGlzdGljc190KiBzdGF0cykgeyBtZW1zZXQoc3RhdHMsIDAs
IHNpemVvZihtYWxsb2Nfc3RhdGlzdGljc190KSk7IH0KLQotcHJpdmF0ZToKLSAgICBGYXN0TWFs
bG9jWm9uZShUQ01hbGxvY19QYWdlSGVhcCosIFRDTWFsbG9jX1RocmVhZENhY2hlKiosIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBh
Z2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiopOwotICAgIHN0YXRpYyBzaXpl
X3Qgc2l6ZShtYWxsb2Nfem9uZV90KiwgY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyB2b2lkKiB6
b25lTWFsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QpOwotICAgIHN0YXRpYyB2b2lkKiB6b25l
Q2FsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QgbnVtSXRlbXMsIHNpemVfdCBzaXplKTsKLSAg
ICBzdGF0aWMgdm9pZCB6b25lRnJlZShtYWxsb2Nfem9uZV90Kiwgdm9pZCopOwotICAgIHN0YXRp
YyB2b2lkKiB6b25lUmVhbGxvYyhtYWxsb2Nfem9uZV90Kiwgdm9pZCosIHNpemVfdCk7Ci0gICAg
c3RhdGljIHZvaWQqIHpvbmVWYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCkgeyBMT0dfRVJS
T1IoInZhbGxvYyBpcyBub3Qgc3VwcG9ydGVkIik7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIHZv
aWQgem9uZURlc3Ryb3kobWFsbG9jX3pvbmVfdCopIHsgfQotCi0gICAgbWFsbG9jX3pvbmVfdCBt
X3pvbmU7Ci0gICAgVENNYWxsb2NfUGFnZUhlYXAqIG1fcGFnZUhlYXA7Ci0gICAgVENNYWxsb2Nf
VGhyZWFkQ2FjaGUqKiBtX3RocmVhZEhlYXBzOwotICAgIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3RQYWRkZWQqIG1fY2VudHJhbENhY2hlczsKLSAgICBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiog
bV9zcGFuQWxsb2NhdG9yOwotICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENh
Y2hlPiogbV9wYWdlSGVhcEFsbG9jYXRvcjsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKLQotI2lm
bmRlZiBXVEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBz
ZXQuICBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgotLy8geW91J3JlIHBvcnRpbmcgdG8gYSBz
eXN0ZW0gd2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQgYSBzdGFja3RyYWNlLgotI2lmZGVmIE5P
X1RDTUFMTE9DX1NBTVBMRVMKLS8vIFdlIHVzZSAjZGVmaW5lIHNvIGNvZGUgY29tcGlsZXMgZXZl
biBpZiB5b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNvbWVob3cuCi0jIGRlZmluZSBHZXRTdGFj
a1RyYWNlKHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQotI2Vsc2UKLSMgaW5jbHVkZSA8Z29vZ2xl
L3N0YWNrdHJhY2UuaD4KLSNlbmRpZgotI2VuZGlmCi0KLS8vIEV2ZW4gaWYgd2UgaGF2ZSBzdXBw
b3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0aGUgY29tcGlsZXIKLS8vIGFuZCBsaW5r
ZXIsIHRoZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuICBXZSBuZWVkIHRvIGNoZWNrIHRoYXQgYXQK
LS8vIHJ1bnRpbWUuICBSaWdodCBub3csIHdlIGhhdmUgdG8ga2VlcCBhIG1hbnVhbCBzZXQgb2Yg
ImJhZCIgT1Nlcy4KLSNpZiBkZWZpbmVkKEhBVkVfVExTKQotICBzdGF0aWMgYm9vbCBrZXJuZWxf
c3VwcG9ydHNfdGxzID0gZmFsc2U7ICAgICAgLy8gYmUgY29uc2VydmF0aXZlCi0gIHN0YXRpYyBp
bmxpbmUgYm9vbCBLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICByZXR1cm4ga2VybmVsX3N1cHBv
cnRzX3RsczsKLSAgfQotIyBpZiAhSEFWRV9ERUNMX1VOQU1FICAgLy8gaWYgdG9vIG9sZCBmb3Ig
dW5hbWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUwotICAgIHN0YXRpYyB2b2lkIENoZWNrSWZL
ZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsK
LSAgICB9Ci0jIGVsc2UKLSMgICBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAvLyBERUNMX1VO
QU1FIGNoZWNrZWQgZm9yIDxzeXMvdXRzbmFtZS5oPiB0b28KLSAgICBzdGF0aWMgdm9pZCBDaGVj
a0lmS2VybmVsU3VwcG9ydHNUTFMoKSB7Ci0gICAgICBzdHJ1Y3QgdXRzbmFtZSBidWY7Ci0gICAg
ICBpZiAodW5hbWUoJmJ1ZikgIT0gMCkgeyAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlCi0gICAg
ICAgIE1FU1NBR0UoInVuYW1lIGZhaWxlZCBhc3N1bWluZyBubyBUTFMgc3VwcG9ydCAoZXJybm89
JWQpXG4iLCBlcnJubyk7Ci0gICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKLSAg
ICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChidWYuc3lzbmFtZSwgImxpbnV4IikgPT0gMCkgewot
ICAgICAgICAvLyBUaGUgbGludXggY2FzZTogdGhlIGZpcnN0IGtlcm5lbCB0byBzdXBwb3J0IFRM
UyB3YXMgMi42LjAKLSAgICAgICAgaWYgKGJ1Zi5yZWxlYXNlWzBdIDwgJzInICYmIGJ1Zi5yZWxl
YXNlWzFdID09ICcuJykgICAgLy8gMC54IG9yIDEueAotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0
c190bHMgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYnVmLnJlbGVhc2VbMF0gPT0gJzInICYm
IGJ1Zi5yZWxlYXNlWzFdID09ICcuJyAmJgotICAgICAgICAgICAgICAgICBidWYucmVsZWFzZVsy
XSA+PSAnMCcgJiYgYnVmLnJlbGVhc2VbMl0gPCAnNicgJiYKLSAgICAgICAgICAgICAgICAgYnVm
LnJlbGVhc2VbM10gPT0gJy4nKSAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4wIC0gMi41Ci0g
ICAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IHRydWU7Ci0gICAgICB9IGVsc2UgeyAgICAgICAg
Ly8gc29tZSBvdGhlciBrZXJuZWwsIHdlJ2xsIGJlIG9wdGltaXNpdGljCi0gICAgICAgIGtlcm5l
bF9zdXBwb3J0c190bHMgPSB0cnVlOwotICAgICAgfQotICAgICAgLy8gVE9ETyhjc2lsdmVycyk6
IFZMT0coMSkgdGhlIHRscyBzdGF0dXMgb25jZSB3ZSBzdXBwb3J0IFJBV19WTE9HCi0gICAgfQot
IyAgZW5kaWYgIC8vIEhBVkVfREVDTF9VTkFNRQotI2VuZGlmICAgIC8vIEhBVkVfVExTCi0KLS8v
IF9fVEhST1cgaXMgZGVmaW5lZCBpbiBnbGliYyBzeXN0ZW1zLiAgSXQgbWVhbnMsIGNvdW50ZXIt
aW50dWl0aXZlbHksCi0vLyAiVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2Vw
dGlvbi4iICBJdCdzIGFuIG9wdGlvbmFsCi0vLyBvcHRpbWl6YXRpb24gdG9vbCwgYnV0IHdlIG1h
eSBuZWVkIHRvIHVzZSBpdCB0byBtYXRjaCBnbGliYyBwcm90b3R5cGVzLgotI2lmbmRlZiBfX1RI
Uk9XICAgIC8vIEkgZ3Vlc3Mgd2UncmUgbm90IG9uIGEgZ2xpYmMgc3lzdGVtCi0jIGRlZmluZSBf
X1RIUk9XICAgLy8gX19USFJPVyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbiwgc28gb2sgdG8gbWFr
ZSBpdCAiIgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ29uZmlndXJhdGlvbgogLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIC8vIE5vdCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIG9mIHRoZSBmb2xsb3dp
bmcgcGFyYW1ldGVycyBtYWtlCi0vLyBzZW5zZS4gIEluIHBhcnRpY3VsYXIsIGlmIGtNYXhTaXpl
IGluY3JlYXNlcywgeW91IG1heSBoYXZlIHRvCisvLyBzZW5zZS4gSW4gcGFydGljdWxhciwgaWYg
a01heFNpemUgaW5jcmVhc2VzLCB5b3UgbWF5IGhhdmUgdG8KIC8vIGluY3JlYXNlIGtOdW1DbGFz
c2VzIGFzIHdlbGwuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2hpZnQgID0gMTI7CiBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2l6ZSAgID0gMSA8PCBrUGFnZVNoaWZ0OwpAQCAtNjA5LDI0
ICs1MTIsMjQgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtQ2xhc3NlcyA9IDY4OwogLy8gMTI4
TUIKIHN0YXRpYyBjb25zdCBzaXplX3Qga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkID0g
MTI4IDw8IDIwOwogCi0vLyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBmZXRjaCBmcm9tIHN5
c3RlbSBhdCBhIHRpbWUuICBNdXN0IGJlCisvLyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBm
ZXRjaCBmcm9tIHN5c3RlbSBhdCBhIHRpbWUuIE11c3QgYmUKIC8vIHNpZ25pZmljYW50bHkgYmln
Z2VyIHRoYW4ga1BhZ2VTaXplIHRvIGFtb3J0aXplIHN5c3RlbS1jYWxsCi0vLyBvdmVyaGVhZCwg
YW5kIGFsc28gdG8gcmVkdWNlIGV4dGVybmFsIGZyYWdlbWVudGF0aW9uLiAgQWxzbywgd2UKKy8v
IG92ZXJoZWFkLCBhbmQgYWxzbyB0byByZWR1Y2UgZXh0ZXJuYWwgZnJhZ2VtZW50YXRpb24uIEFs
c28sIHdlCiAvLyBzaG91bGQga2VlcCB0aGlzIHZhbHVlIGJpZyBiZWNhdXNlIHZhcmlvdXMgaW5j
YXJuYXRpb25zIG9mIExpbnV4CiAvLyBoYXZlIHNtYWxsIGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9m
IG1tYXAoKSByZWdpb25zIHBlcgogLy8gYWRkcmVzcy1zcGFjZS4KIHN0YXRpYyBjb25zdCBzaXpl
X3Qga01pblN5c3RlbUFsbG9jID0gMSA8PCAoMjAgLSBrUGFnZVNoaWZ0KTsKIAogLy8gTnVtYmVy
IG9mIG9iamVjdHMgdG8gbW92ZSBiZXR3ZWVuIGEgcGVyLXRocmVhZCBsaXN0IGFuZCBhIGNlbnRy
YWwKLS8vIGxpc3QgaW4gb25lIHNob3QuICBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRvbyBzbWFs
bCBzbyB3ZSBjYW4KLS8vIGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nlc3Npbmcg
dGhlIGNlbnRyYWwgbGlzdC4gIE1ha2luZworLy8gbGlzdCBpbiBvbmUgc2hvdC4gV2Ugd2FudCB0
aGlzIHRvIGJlIG5vdCB0b28gc21hbGwgc28gd2UgY2FuCisvLyBhbW9ydGl6ZSB0aGUgbG9jayBv
dmVyaGVhZCBmb3IgYWNjZXNzaW5nIHRoZSBjZW50cmFsIGxpc3QuIE1ha2luZwogLy8gaXQgdG9v
IGJpZyBtYXkgdGVtcG9yYXJpbHkgY2F1c2UgdW5uZWNlc3NhcnkgbWVtb3J5IHdhc3RhZ2UgaW4g
dGhlCiAvLyBwZXItdGhyZWFkIGZyZWUgbGlzdCB1bnRpbCB0aGUgc2NhdmVuZ2VyIGNsZWFucyB1
cCB0aGUgbGlzdC4KLXN0YXRpYyBpbnQgbnVtX29iamVjdHNfdG9fbW92ZVtrTnVtQ2xhc3Nlc107
CitzdGF0aWMgaW50IG51bU9iamVjdHNUb01vdmVba051bUNsYXNzZXNdOwogCiAvLyBNYXhpbXVt
IGxlbmd0aCB3ZSBhbGxvdyBhIHBlci10aHJlYWQgZnJlZS1saXN0IHRvIGhhdmUgYmVmb3JlIHdl
Ci0vLyBtb3ZlIG9iamVjdHMgZnJvbSBpdCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGNlbnRyYWwg
ZnJlZS1saXN0LiAgV2UKLS8vIHdhbnQgdGhpcyBiaWcgdG8gYXZvaWQgbG9ja2luZyB0aGUgY2Vu
dHJhbCBmcmVlLWxpc3QgdG9vIG9mdGVuLiAgSXQKKy8vIG1vdmUgb2JqZWN0cyBmcm9tIGl0IGlu
dG8gdGhlIGNvcnJlc3BvbmRpbmcgY2VudHJhbCBmcmVlLWxpc3QuIFdlCisvLyB3YW50IHRoaXMg
YmlnIHRvIGF2b2lkIGxvY2tpbmcgdGhlIGNlbnRyYWwgZnJlZS1saXN0IHRvbyBvZnRlbi4gSXQK
IC8vIHNob3VsZCBub3QgaHVydCB0byBtYWtlIHRoaXMgbGlzdCBzb21ld2hhdCBiaWcgYmVjYXVz
ZSB0aGUKIC8vIHNjYXZlbmdpbmcgY29kZSB3aWxsIHNocmluayBpdCBkb3duIHdoZW4gaXRzIGNv
bnRlbnRzIGFyZSBub3QgaW4gdXNlLgogc3RhdGljIGNvbnN0IGludCBrTWF4RnJlZUxpc3RMZW5n
dGggPSAyNTY7CkBAIC02NDcsNyArNTUwLDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVs
dE92ZXJhbGxUaHJlYQogc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4UGFnZXMgPSBrTWluU3lzdGVt
QWxsb2M7CiAKIC8qIFRoZSBzbWFsbGVzdCBwcmltZSA+IDJebiAqLwotc3RhdGljIGludCBwcmlt
ZXNfbGlzdFtdID0geworc3RhdGljIGludCBwcmltZXNMaXN0W10gPSB7CiAgICAgLy8gU21hbGwg
dmFsdWVzIG1pZ2h0IGNhdXNlIGhpZ2ggcmF0ZXMgb2Ygc2FtcGxpbmcKICAgICAvLyBhbmQgaGVu
Y2UgY29tbWVudGVkIG91dC4KICAgICAvLyAyLCA1LCAxMSwgMTcsIDM3LCA2NywgMTMxLCAyNTcs
CkBAIC02NjUsMTAgKzU2OCw3IEBAIERFRklORV9pbnQ2NCh0Y21hbGxvY19zYW1wbGVfcGFyYW1l
dGVyLAogICAgICAgICAgICAgICJVbnVzZWQ6IGNvZGUgaXMgY29tcGlsZWQgd2l0aCBOT19UQ01B
TExPQ19TQU1QTEVTIik7CiBzdGF0aWMgc2l6ZV90IHNhbXBsZV9wZXJpb2QgPSAwOwogI2Vsc2UK
LURFRklORV9pbnQ2NCh0Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyLCAyNjIxNDcsCi0gICAgICAg
ICAiVHdpY2UgdGhlIGFwcHJveGltYXRlIGdhcCBiZXR3ZWVuIHNhbXBsaW5nIGFjdGlvbnMuIgot
ICAgICAgICAgIiBNdXN0IGJlIGEgcHJpbWUgbnVtYmVyLiBPdGhlcndpc2Ugd2lsbCBiZSByb3Vu
ZGVkIHVwIHRvIGEgIgotICAgICAgICAgIiBsYXJnZXIgcHJpbWUgbnVtYmVyIik7CitERUZJTkVf
aW50NjQodGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlciwgMjYyMTQ3LCAiVHdpY2UgdGhlIGFwcHJv
eGltYXRlIGdhcCBiZXR3ZWVuIHNhbXBsaW5nIGFjdGlvbnMuIE11c3QgYmUgYSBwcmltZSBudW1i
ZXIuIE90aGVyd2lzZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gYSBsYXJnZXIgcHJpbWUgbnVtYmVy
Iik7CiBzdGF0aWMgc2l6ZV90IHNhbXBsZV9wZXJpb2QgPSAyNjIxNDc7CiAjZW5kaWYKIApAQCAt
Njc3LDIzICs1NzcsMTggQEAgc3RhdGljIFNwaW5Mb2NrIHNhbXBsZV9wZXJpb2RfbG9jayA9IFNQ
SQogCiAvLyBQYXJhbWV0ZXJzIGZvciBjb250cm9sbGluZyBob3cgZmFzdCBtZW1vcnkgaXMgcmV0
dXJuZWQgdG8gdGhlIE9TLgogCi1ERUZJTkVfZG91YmxlKHRjbWFsbG9jX3JlbGVhc2VfcmF0ZSwg
MSwKLSAgICAgICAgICAgICAgIlJhdGUgYXQgd2hpY2ggd2UgcmVsZWFzZSB1bnVzZWQgbWVtb3J5
IHRvIHRoZSBzeXN0ZW0uICAiCi0gICAgICAgICAgICAgICJaZXJvIG1lYW5zIHdlIG5ldmVyIHJl
bGVhc2UgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbS4gICIKLSAgICAgICAgICAgICAgIkluY3Jl
YXNlIHRoaXMgZmxhZyB0byByZXR1cm4gbWVtb3J5IGZhc3RlcjsgZGVjcmVhc2UgaXQgIgotICAg
ICAgICAgICAgICAidG8gcmV0dXJuIG1lbW9yeSBzbG93ZXIuICBSZWFzb25hYmxlIHJhdGVzIGFy
ZSBpbiB0aGUgIgotICAgICAgICAgICAgICAicmFuZ2UgWzAsMTBdIik7CitERUZJTkVfZG91Ymxl
KHRjbWFsbG9jX3JlbGVhc2VfcmF0ZSwgMSwgIlJhdGUgYXQgd2hpY2ggd2UgcmVsZWFzZSB1bnVz
ZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0uIFplcm8gbWVhbnMgd2UgbmV2ZXIgcmVsZWFzZSBtZW1v
cnkgYmFjayB0byB0aGUgc3lzdGVtLiBJbmNyZWFzZSB0aGlzIGZsYWcgdG8gcmV0dXJuIG1lbW9y
eSBmYXN0ZXI7IGRlY3JlYXNlIGl0IHRvIHJldHVybiBtZW1vcnkgc2xvd2VyLiBSZWFzb25hYmxl
IHJhdGVzIGFyZSBpbiB0aGUgcmFuZ2UgWzAsMTBdIik7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFw
cGluZyBmcm9tIHNpemUgdG8gc2l6ZV9jbGFzcyBhbmQgdmljZSB2ZXJzYQorLy8gTWFwcGluZyBm
cm9tIHNpemUgdG8gc2l6ZWNsYXNzIGFuZCB2aWNlIHZlcnNhCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8g
U2l6ZXMgPD0gMTAyNCBoYXZlIGFuIGFsaWdubWVudCA+PSA4LiAgU28gZm9yIHN1Y2ggc2l6ZXMg
d2UgaGF2ZSBhbgotLy8gYXJyYXkgaW5kZXhlZCBieSBjZWlsKHNpemUvOCkuICBTaXplcyA+IDEw
MjQgaGF2ZSBhbiBhbGlnbm1lbnQgPj0gMTI4LgorLy8gU2l6ZXMgPD0gMTAyNCBoYXZlIGFuIGFs
aWdubWVudCA+PSA4LiBTbyBmb3Igc3VjaCBzaXplcyB3ZSBoYXZlIGFuCisvLyBhcnJheSBpbmRl
eGVkIGJ5IGNlaWwoc2l6ZS84KS4gU2l6ZXMgPiAxMDI0IGhhdmUgYW4gYWxpZ25tZW50ID49IDEy
OC4KIC8vIFNvIGZvciB0aGVzZSBsYXJnZXIgc2l6ZXMgd2UgaGF2ZSBhbiBhcnJheSBpbmRleGVk
IGJ5IGNlaWwoc2l6ZS8xMjgpLgogLy8KIC8vIFdlIGZsYXR0ZW4gYm90aCBsb2dpY2FsIGFycmF5
cyBpbnRvIG9uZSBwaHlzaWNhbCBhcnJheSBhbmQgdXNlCi0vLyBhcml0aG1ldGljIHRvIGNvbXB1
dGUgYW4gYXBwcm9wcmlhdGUgaW5kZXguICBUaGUgY29uc3RhbnRzIHVzZWQgYnkKKy8vIGFyaXRo
bWV0aWMgdG8gY29tcHV0ZSBhbiBhcHByb3ByaWF0ZSBpbmRleC4gVGhlIGNvbnN0YW50cyB1c2Vk
IGJ5CiAvLyBDbGFzc0luZGV4KCkgd2VyZSBzZWxlY3RlZCB0byBtYWtlIHRoZSBmbGF0dGVuaW5n
IHdvcmsuCiAvLwogLy8gRXhhbXBsZXM6CkBAIC03MDksMzAgKzYwNCwzMSBAQCBERUZJTkVfZG91
YmxlKHRjbWFsbG9jX3JlbGVhc2VfcmF0ZSwgMSwKIHN0YXRpYyBjb25zdCBzaXplX3Qga01heFNt
YWxsU2l6ZSA9IDEwMjQ7CiBzdGF0aWMgY29uc3QgaW50IHNoaWZ0X2Ftb3VudFsyXSA9IHsgMywg
NyB9OyAgLy8gRm9yIGRpdmlkZXMgYnkgOCBvciAxMjgKIHN0YXRpYyBjb25zdCBpbnQgYWRkX2Ft
b3VudFsyXSA9IHsgNywgMTI3ICsgKDEyMCA8PCA3KSB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIg
Y2xhc3NfYXJyYXlbMzc3XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYXNzQXJyYXlbMzc3XTsK
IAotLy8gQ29tcHV0ZSBpbmRleCBvZiB0aGUgY2xhc3NfYXJyYXlbXSBlbnRyeSBmb3IgYSBnaXZl
biBzaXplCi1zdGF0aWMgaW5saW5lIGludCBDbGFzc0luZGV4KHNpemVfdCBzKSB7Ci0gIGNvbnN0
IGludCBpID0gKHMgPiBrTWF4U21hbGxTaXplKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
KHMgKyBhZGRfYW1vdW50W2ldKSA+PiBzaGlmdF9hbW91bnRbaV0pOworLy8gQ29tcHV0ZSBpbmRl
eCBvZiB0aGUgY2xhc3NBcnJheVtdIGVudHJ5IGZvciBhIGdpdmVuIHNpemUKK3N0YXRpYyBpbmxp
bmUgaW50IENsYXNzSW5kZXgoc2l6ZV90IHMpCit7CisgICAgY29uc3QgaW50IGkgPSAocyA+IGtN
YXhTbWFsbFNpemUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KChzICsgYWRkX2Ftb3Vu
dFtpXSkgPj4gc2hpZnRfYW1vdW50W2ldKTsKIH0KIAogLy8gTWFwcGluZyBmcm9tIHNpemUgY2xh
c3MgdG8gbWF4IHNpemUgc3RvcmFibGUgaW4gdGhhdCBjbGFzcwotc3RhdGljIHNpemVfdCBjbGFz
c190b19zaXplW2tOdW1DbGFzc2VzXTsKK3N0YXRpYyBzaXplX3QgY2xhc3NUb3NpemVba051bUNs
YXNzZXNdOwogCiAvLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBudW1iZXIgb2YgcGFnZXMg
dG8gYWxsb2NhdGUgYXQgYSB0aW1lCiBzdGF0aWMgc2l6ZV90IGNsYXNzX3RvX3BhZ2VzW2tOdW1D
bGFzc2VzXTsKIAotLy8gVHJhbnNmZXJDYWNoZSBpcyB1c2VkIHRvIGNhY2hlIHRyYW5zZmVycyBv
ZiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NdCisvLyBUcmFuc2ZlckNhY2hlIGlzIHVz
ZWQgdG8gY2FjaGUgdHJhbnNmZXJzIG9mIG51bU9iamVjdHNUb01vdmVbc2l6ZWNsYXNzXQogLy8g
YmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aHJlYWQgY2FjaGVzIGFuZCB0aGUgY2VudHJhbCBjYWNo
ZSBmb3IgYSBnaXZlbiBzaXplCiAvLyBjbGFzcy4KIHN0cnVjdCBUQ0VudHJ5IHsKLSAgdm9pZCAq
aGVhZDsgIC8vIEhlYWQgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KLSAgdm9pZCAqdGFpbDsgIC8vIFRh
aWwgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KKyAgICB2b2lkKiBoZWFkOyAvLyBIZWFkIG9mIGNoYWlu
IG9mIG9iamVjdHMuCisgICAgdm9pZCogdGFpbDsgLy8gVGFpbCBvZiBjaGFpbiBvZiBvYmplY3Rz
LgogfTsKIC8vIEEgY2VudHJhbCBjYWNoZSBmcmVlbGlzdCBjYW4gaGF2ZSBhbnl3aGVyZSBmcm9t
IDAgdG8ga051bVRyYW5zZmVyRW50cmllcwotLy8gc2xvdHMgdG8gcHV0IGxpbmsgbGlzdCBjaGFp
bnMgaW50by4gIFRvIGtlZXAgbWVtb3J5IHVzYWdlIGJvdW5kZWQgdGhlIHRvdGFsCi0vLyBudW1i
ZXIgb2YgVENFbnRyaWVzIGFjcm9zcyBzaXplIGNsYXNzZXMgaXMgZml4ZWQuICBDdXJyZW50bHkg
ZWFjaCBzaXplCisvLyBzbG90cyB0byBwdXQgbGluayBsaXN0IGNoYWlucyBpbnRvLiBUbyBrZWVw
IG1lbW9yeSB1c2FnZSBib3VuZGVkIHRoZSB0b3RhbAorLy8gbnVtYmVyIG9mIFRDRW50cmllcyBh
Y3Jvc3Mgc2l6ZSBjbGFzc2VzIGlzIGZpeGVkLiBDdXJyZW50bHkgZWFjaCBzaXplCiAvLyBjbGFz
cyBpcyBpbml0aWFsbHkgZ2l2ZW4gb25lIFRDRW50cnkgd2hpY2ggYWxzbyBtZWFucyB0aGF0IHRo
ZSBtYXhpbXVtIGFueQogLy8gb25lIGNsYXNzIGNhbiBoYXZlIGlzIGtOdW1DbGFzc2VzLgogc3Rh
dGljIGNvbnN0IGludCBrTnVtVHJhbnNmZXJFbnRyaWVzID0ga051bUNsYXNzZXM7CkBAIC03NTYs
MzEyICs2NTIsMzI4IEBAIHN0YXRpYyBpbmxpbmUgaW50IExnRmxvb3Ioc2l6ZV90IG4pIHsKIC8v
IFNvbWUgdmVyeSBiYXNpYyBsaW5rZWQgbGlzdCBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB1
c2luZyB2b2lkICogYXMKIC8vIHN0b3JhZ2UuCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqU0xMX05l
eHQodm9pZCAqdCkgewotICByZXR1cm4gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4odCkpOwor
c3RhdGljIGlubGluZSB2b2lkICpTTExfTmV4dCh2b2lkICp0KQoreworICAgIHJldHVybiAqKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBTTExf
U2V0TmV4dCh2b2lkICp0LCB2b2lkICpuKSB7Ci0gICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KHQpKSA9IG47CitzdGF0aWMgaW5saW5lIHZvaWQgU0xMU2V0TmV4dCh2b2lkICp0LCB2b2lkICpu
KQoreworICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHQpKSA9IG47CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBTTExfUHVzaCh2b2lkICoqbGlzdCwgdm9pZCAqZWxlbWVudCkgewotICBT
TExfU2V0TmV4dChlbGVtZW50LCAqbGlzdCk7Ci0gICpsaXN0ID0gZWxlbWVudDsKK3N0YXRpYyBp
bmxpbmUgdm9pZCBTTExQdXNoKHZvaWQgKipsaXN0LCB2b2lkICplbGVtZW50KQoreworICAgIFNM
TFNldE5leHQoZWxlbWVudCwgKmxpc3QpOworICAgICpsaXN0ID0gZWxlbWVudDsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkICpTTExfUG9wKHZvaWQgKipsaXN0KSB7Ci0gIHZvaWQgKnJlc3VsdCA9
ICpsaXN0OwotICAqbGlzdCA9IFNMTF9OZXh0KCpsaXN0KTsKLSAgcmV0dXJuIHJlc3VsdDsKK3N0
YXRpYyBpbmxpbmUgdm9pZCAqU0xMUG9wKHZvaWQgKipsaXN0KQoreworICAgIHZvaWQqIHJlc3Vs
dCA9ICpsaXN0OworICAgICpsaXN0ID0gU0xMX05leHQoKmxpc3QpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAotLy8gUmVtb3ZlIE4gZWxlbWVudHMgZnJvbSBhIGxpbmtlZCBsaXN0IHRvIHdo
aWNoIGhlYWQgcG9pbnRzLiAgaGVhZCB3aWxsIGJlCi0vLyBtb2RpZmllZCB0byBwb2ludCB0byB0
aGUgbmV3IGhlYWQuICBzdGFydCBhbmQgZW5kIHdpbGwgcG9pbnQgdG8gdGhlIGZpcnN0Ci0vLyBh
bmQgbGFzdCBub2RlcyBvZiB0aGUgcmFuZ2UuICBOb3RlIHRoYXQgZW5kIHdpbGwgcG9pbnQgdG8g
TlVMTCBhZnRlciB0aGlzCisvLyBSZW1vdmUgTiBlbGVtZW50cyBmcm9tIGEgbGlua2VkIGxpc3Qg
dG8gd2hpY2ggaGVhZCBwb2ludHMuIGhlYWQgd2lsbCBiZQorLy8gbW9kaWZpZWQgdG8gcG9pbnQg
dG8gdGhlIG5ldyBoZWFkLiBzdGFydCBhbmQgZW5kIHdpbGwgcG9pbnQgdG8gdGhlIGZpcnN0Cisv
LyBhbmQgbGFzdCBub2RlcyBvZiB0aGUgcmFuZ2UuIE5vdGUgdGhhdCBlbmQgd2lsbCBwb2ludCB0
byAwIGFmdGVyIHRoaXMKIC8vIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBTTExfUG9wUmFuZ2Uodm9pZCAqKmhlYWQsIGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQgKipl
bmQpIHsKLSAgaWYgKE4gPT0gMCkgewotICAgICpzdGFydCA9IE5VTEw7Ci0gICAgKmVuZCA9IE5V
TEw7Ci0gICAgcmV0dXJuOwotICB9CitzdGF0aWMgaW5saW5lIHZvaWQgU0xMUG9wUmFuZ2Uodm9p
ZCAqKmhlYWQsIGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpCit7CisgICAgaWYgKCFO
KSB7CisgICAgICAgICpzdGFydCA9IDA7CisgICAgICAgICplbmQgPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0gIHZvaWQgKnRtcCA9ICpoZWFkOwotICBmb3IgKGludCBpID0gMTsgaSA8
IE47ICsraSkgewotICAgIHRtcCA9IFNMTF9OZXh0KHRtcCk7Ci0gIH0KKyAgICB2b2lkKiB0bXAg
PSAqaGVhZDsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IE47ICsraSkKKyAgICAgICAgdG1wID0g
U0xMX05leHQodG1wKTsKIAotICAqc3RhcnQgPSAqaGVhZDsKLSAgKmVuZCA9IHRtcDsKLSAgKmhl
YWQgPSBTTExfTmV4dCh0bXApOwotICAvLyBVbmxpbmsgcmFuZ2UgZnJvbSBsaXN0LgotICBTTExf
U2V0TmV4dCh0bXAsIE5VTEwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgU0xMX1B1c2hSYW5n
ZSh2b2lkICoqaGVhZCwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkgewotICBpZiAoIXN0YXJ0KSBy
ZXR1cm47Ci0gIFNMTF9TZXROZXh0KGVuZCwgKmhlYWQpOwotICAqaGVhZCA9IHN0YXJ0OwotfQot
Ci1zdGF0aWMgaW5saW5lIHNpemVfdCBTTExfU2l6ZSh2b2lkICpoZWFkKSB7Ci0gIGludCBjb3Vu
dCA9IDA7Ci0gIHdoaWxlIChoZWFkKSB7Ci0gICAgY291bnQrKzsKLSAgICBoZWFkID0gU0xMX05l
eHQoaGVhZCk7Ci0gIH0KLSAgcmV0dXJuIGNvdW50OworICAgICpzdGFydCA9ICpoZWFkOworICAg
ICplbmQgPSB0bXA7CisgICAgKmhlYWQgPSBTTExfTmV4dCh0bXApOworICAgIC8vIFVubGluayBy
YW5nZSBmcm9tIGxpc3QuCisgICAgU0xMU2V0TmV4dCh0bXAsIDApOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgU0xMUHVzaFJhbmdlKHZvaWQgKipoZWFkLCB2b2lkICpzdGFydCwgdm9pZCAqZW5k
KQoreworICAgIGlmICghc3RhcnQpCisgICAgICAgIHJldHVybjsKKyAgICBTTExTZXROZXh0KGVu
ZCwgKmhlYWQpOworICAgICpoZWFkID0gc3RhcnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90
IFNMTFNpemUodm9pZCAqaGVhZCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIHdoaWxlICho
ZWFkKSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGhlYWQgPSBTTExfTmV4dChoZWFkKTsK
KyAgICB9CisgICAgcmV0dXJuIGNvdW50OwogfQogCiAvLyBTZXR1cCBoZWxwZXIgZnVuY3Rpb25z
LgogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBzaXplX3QgU2l6ZUNsYXNzKHNpemVfdCBzaXplKSB7
Ci0gIHJldHVybiBjbGFzc19hcnJheVtDbGFzc0luZGV4KHNpemUpXTsKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIHNpemVfdCBTaXplQ2xhc3Moc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGNsYXNz
QXJyYXlbQ2xhc3NJbmRleChzaXplKV07CiB9CiAKIC8vIEdldCB0aGUgYnl0ZS1zaXplIGZvciBh
IHNwZWNpZmllZCBjbGFzcwotc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90IEJ5dGVTaXplRm9y
Q2xhc3Moc2l6ZV90IGNsKSB7Ci0gIHJldHVybiBjbGFzc190b19zaXplW2NsXTsKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIHNpemVfdCBCeXRlU2l6ZUZvckNsYXNzKHNpemVfdCBjbCkKK3sKKyAgICBy
ZXR1cm4gY2xhc3NUb3NpemVbY2xdOwogfQotc3RhdGljIGludCBOdW1Nb3ZlU2l6ZShzaXplX3Qg
c2l6ZSkgewotICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gMDsKLSAgLy8gVXNlIGFwcHJveCA2NGsg
dHJhbnNmZXJzIGJldHdlZW4gdGhyZWFkIGFuZCBjZW50cmFsIGNhY2hlcy4KLSAgaW50IG51bSA9
IHN0YXRpY19jYXN0PGludD4oNjQuMCAqIDEwMjQuMCAvIHNpemUpOwotICBpZiAobnVtIDwgMikg
bnVtID0gMjsKLSAgLy8gQ2xhbXAgd2VsbCBiZWxvdyBrTWF4RnJlZUxpc3RMZW5ndGggdG8gYXZv
aWQgcGluZyBwb25nIGJldHdlZW4gY2VudHJhbAotICAvLyBhbmQgdGhyZWFkIGNhY2hlcy4KLSAg
aWYgKG51bSA+IHN0YXRpY19jYXN0PGludD4oMC44ICoga01heEZyZWVMaXN0TGVuZ3RoKSkKLSAg
ICBudW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDAuOCAqIGtNYXhGcmVlTGlzdExlbmd0aCk7Ci0KLSAg
Ly8gQWxzbywgYXZvaWQgYnJpbmdpbmcgaW4gdG9vIG1hbnkgb2JqZWN0cyBpbnRvIHNtYWxsIG9i
amVjdCBmcmVlCi0gIC8vIGxpc3RzLiAgVGhlcmUgYXJlIGxvdHMgb2Ygc3VjaCBsaXN0cywgYW5k
IGlmIHdlIGFsbG93IGVhY2ggb25lIHRvCi0gIC8vIGZldGNoIHRvbyBtYW55IGF0IGEgdGltZSwg
d2UgZW5kIHVwIGhhdmluZyB0byBzY2F2ZW5nZSB0b28gb2Z0ZW4KLSAgLy8gKGVzcGVjaWFsbHkg
d2hlbiB0aGVyZSBhcmUgbG90cyBvZiB0aHJlYWRzIGFuZCBlYWNoIHRocmVhZCBnZXRzIGEKLSAg
Ly8gc21hbGwgYWxsb3dhbmNlIGZvciBpdHMgdGhyZWFkIGNhY2hlKS4KLSAgLy8KLSAgLy8gVE9E
TzogTWFrZSB0aHJlYWQgY2FjaGUgZnJlZSBsaXN0IHNpemVzIGR5bmFtaWMgc28gdGhhdCB3ZSBk
byBub3QKLSAgLy8gaGF2ZSB0byBlcXVhbGx5IGRpdmlkZSBhIGZpeGVkIHJlc291cmNlIGFtb25n
c3QgbG90cyBvZiB0aHJlYWRzLgotICBpZiAobnVtID4gMzIpIG51bSA9IDMyOworc3RhdGljIGlu
dCBOdW1Nb3ZlU2l6ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJl
dHVybiAwOworICAgIC8vIFVzZSBhcHByb3ggNjRrIHRyYW5zZmVycyBiZXR3ZWVuIHRocmVhZCBh
bmQgY2VudHJhbCBjYWNoZXMuCisgICAgaW50IG51bSA9IHN0YXRpY19jYXN0PGludD4oNjQuMCAq
IDEwMjQuMCAvIHNpemUpOworICAgIGlmIChudW0gPCAyKQorICAgICAgICBudW0gPSAyOworICAg
IC8vIENsYW1wIHdlbGwgYmVsb3cga01heEZyZWVMaXN0TGVuZ3RoIHRvIGF2b2lkIHBpbmcgcG9u
ZyBiZXR3ZWVuIGNlbnRyYWwKKyAgICAvLyBhbmQgdGhyZWFkIGNhY2hlcy4KKyAgICBpZiAobnVt
ID4gc3RhdGljX2Nhc3Q8aW50PigwLjggKiBrTWF4RnJlZUxpc3RMZW5ndGgpKQorICAgICAgICBu
dW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDAuOCAqIGtNYXhGcmVlTGlzdExlbmd0aCk7CisKKyAgICAv
LyBBbHNvLCBhdm9pZCBicmluZ2luZyBpbiB0b28gbWFueSBvYmplY3RzIGludG8gc21hbGwgb2Jq
ZWN0IGZyZWUKKyAgICAvLyBsaXN0cy4gVGhlcmUgYXJlIGxvdHMgb2Ygc3VjaCBsaXN0cywgYW5k
IGlmIHdlIGFsbG93IGVhY2ggb25lIHRvCisgICAgLy8gZmV0Y2ggdG9vIG1hbnkgYXQgYSB0aW1l
LCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHNjYXZlbmdlIHRvbyBvZnRlbgorICAgIC8vIChlc3BlY2lh
bGx5IHdoZW4gdGhlcmUgYXJlIGxvdHMgb2YgdGhyZWFkcyBhbmQgZWFjaCB0aHJlYWQgZ2V0cyBh
CisgICAgLy8gc21hbGwgYWxsb3dhbmNlIGZvciBpdHMgdGhyZWFkIGNhY2hlKS4KKyAgICAvLwor
ICAgIC8vIFRPRE86IE1ha2UgdGhyZWFkIGNhY2hlIGZyZWUgbGlzdCBzaXplcyBkeW5hbWljIHNv
IHRoYXQgd2UgZG8gbm90CisgICAgLy8gaGF2ZSB0byBlcXVhbGx5IGRpdmlkZSBhIGZpeGVkIHJl
c291cmNlIGFtb25nc3QgbG90cyBvZiB0aHJlYWRzLgorICAgIGlmIChudW0gPiAzMikKKyAgICAg
ICAgbnVtID0gMzI7CiAKLSAgcmV0dXJuIG51bTsKKyAgICByZXR1cm4gbnVtOwogfQogCiAvLyBJ
bml0aWFsaXplIHRoZSBtYXBwaW5nIGFycmF5cwotc3RhdGljIHZvaWQgSW5pdFNpemVDbGFzc2Vz
KCkgewotICAvLyBEbyBzb21lIHNhbml0eSBjaGVja2luZyBvbiBhZGRfYW1vdW50W10vc2hpZnRf
YW1vdW50W10vY2xhc3NfYXJyYXlbXQotICBpZiAoQ2xhc3NJbmRleCgwKSA8IDApIHsKLSAgICBN
RVNTQUdFKCJJbnZhbGlkIGNsYXNzIGluZGV4ICVkIGZvciBzaXplIDBcbiIsIENsYXNzSW5kZXgo
MCkpOwotICAgIENSQVNIKCk7Ci0gIH0KLSAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oQ2xhc3NJ
bmRleChrTWF4U2l6ZSkpID49IHNpemVvZihjbGFzc19hcnJheSkpIHsKLSAgICBNRVNTQUdFKCJJ
bnZhbGlkIGNsYXNzIGluZGV4ICVkIGZvciBrTWF4U2l6ZVxuIiwgQ2xhc3NJbmRleChrTWF4U2l6
ZSkpOwotICAgIENSQVNIKCk7Ci0gIH0KLQotICAvLyBDb21wdXRlIHRoZSBzaXplIGNsYXNzZXMg
d2Ugd2FudCB0byB1c2UKLSAgc2l6ZV90IHNjID0gMTsgICAvLyBOZXh0IHNpemUgY2xhc3MgdG8g
YXNzaWduCi0gIHVuc2lnbmVkIGNoYXIgYWxpZ25zaGlmdCA9IGtBbGlnblNoaWZ0OwotICBpbnQg
bGFzdF9sZyA9IC0xOwotICBmb3IgKHNpemVfdCBzaXplID0ga0FsaWdubWVudDsgc2l6ZSA8PSBr
TWF4U2l6ZTsgc2l6ZSArPSAoMSA8PCBhbGlnbnNoaWZ0KSkgewotICAgIGludCBsZyA9IExnRmxv
b3Ioc2l6ZSk7Ci0gICAgaWYgKGxnID4gbGFzdF9sZykgewotICAgICAgLy8gSW5jcmVhc2UgYWxp
Z25tZW50IGV2ZXJ5IHNvIG9mdGVuLgotICAgICAgLy8KLSAgICAgIC8vIFNpbmNlIHdlIGRvdWJs
ZSB0aGUgYWxpZ25tZW50IGV2ZXJ5IHRpbWUgc2l6ZSBkb3VibGVzIGFuZAotICAgICAgLy8gc2l6
ZSA+PSAxMjgsIHRoaXMgbWVhbnMgdGhhdCBzcGFjZSB3YXN0ZWQgZHVlIHRvIGFsaWdubWVudCBp
cwotICAgICAgLy8gYXQgbW9zdCAxNi8xMjggaS5lLiwgMTIuNSUuICBQbHVzIHdlIGNhcCB0aGUg
YWxpZ25tZW50IGF0IDI1NgotICAgICAgLy8gYnl0ZXMsIHNvIHRoZSBzcGFjZSB3YXN0ZWQgYXMg
YSBwZXJjZW50YWdlIHN0YXJ0cyBmYWxsaW5nIGZvcgotICAgICAgLy8gc2l6ZXMgPiAySy4KLSAg
ICAgIGlmICgobGcgPj0gNykgJiYgKGFsaWduc2hpZnQgPCA4KSkgewotICAgICAgICBhbGlnbnNo
aWZ0Kys7Ci0gICAgICB9Ci0gICAgICBsYXN0X2xnID0gbGc7CitzdGF0aWMgdm9pZCBJbml0U2l6
ZUNsYXNzZXMoKQoreworICAgIC8vIERvIHNvbWUgc2FuaXR5IGNoZWNraW5nIG9uIGFkZF9hbW91
bnRbXS9zaGlmdF9hbW91bnRbXS9jbGFzc0FycmF5W10KKyAgICBpZiAoQ2xhc3NJbmRleCgwKSA8
IDApIHsKKyAgICAgICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBmb3Igc2l6ZSAw
XG4iLCBDbGFzc0luZGV4KDApKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0KLSAgICAvLyBB
bGxvY2F0ZSBlbm91Z2ggcGFnZXMgc28gbGVmdG92ZXIgaXMgbGVzcyB0aGFuIDEvOCBvZiB0b3Rh
bC4KLSAgICAvLyBUaGlzIGJvdW5kcyB3YXN0ZWQgc3BhY2UgdG8gYXQgbW9zdCAxMi41JS4KLSAg
ICBzaXplX3QgcHNpemUgPSBrUGFnZVNpemU7Ci0gICAgd2hpbGUgKChwc2l6ZSAlIHNpemUpID4g
KHBzaXplID4+IDMpKSB7Ci0gICAgICBwc2l6ZSArPSBrUGFnZVNpemU7Ci0gICAgfQotICAgIGNv
bnN0IHNpemVfdCBteV9wYWdlcyA9IHBzaXplID4+IGtQYWdlU2hpZnQ7Ci0KLSAgICBpZiAoc2Mg
PiAxICYmIG15X3BhZ2VzID09IGNsYXNzX3RvX3BhZ2VzW3NjLTFdKSB7Ci0gICAgICAvLyBTZWUg
aWYgd2UgY2FuIG1lcmdlIHRoaXMgaW50byB0aGUgcHJldmlvdXMgY2xhc3Mgd2l0aG91dAotICAg
ICAgLy8gaW5jcmVhc2luZyB0aGUgZnJhZ21lbnRhdGlvbiBvZiB0aGUgcHJldmlvdXMgY2xhc3Mu
Ci0gICAgICBjb25zdCBzaXplX3QgbXlfb2JqZWN0cyA9IChteV9wYWdlcyA8PCBrUGFnZVNoaWZ0
KSAvIHNpemU7Ci0gICAgICBjb25zdCBzaXplX3QgcHJldl9vYmplY3RzID0gKGNsYXNzX3RvX3Bh
Z2VzW3NjLTFdIDw8IGtQYWdlU2hpZnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyBjbGFzc190b19zaXplW3NjLTFdOwotICAgICAgaWYgKG15X29iamVjdHMgPT0gcHJldl9v
YmplY3RzKSB7Ci0gICAgICAgIC8vIEFkanVzdCBsYXN0IGNsYXNzIHRvIGluY2x1ZGUgdGhpcyBz
aXplCi0gICAgICAgIGNsYXNzX3RvX3NpemVbc2MtMV0gPSBzaXplOwotICAgICAgICBjb250aW51
ZTsKLSAgICAgIH0KKyAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihDbGFzc0luZGV4KGtNYXhT
aXplKSkgPj0gc2l6ZW9mKGNsYXNzQXJyYXkpKSB7CisgICAgICAgIE1FU1NBR0UoIkludmFsaWQg
Y2xhc3MgaW5kZXggJWQgZm9yIGtNYXhTaXplXG4iLCBDbGFzc0luZGV4KGtNYXhTaXplKSk7Cisg
ICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgLy8gQWRkIG5ldyBjbGFzcwotICAgIGNsYXNz
X3RvX3BhZ2VzW3NjXSA9IG15X3BhZ2VzOwotICAgIGNsYXNzX3RvX3NpemVbc2NdID0gc2l6ZTsK
LSAgICBzYysrOwotICB9Ci0gIGlmIChzYyAhPSBrTnVtQ2xhc3NlcykgewotICAgIE1FU1NBR0Uo
Indyb25nIG51bWJlciBvZiBzaXplIGNsYXNzZXM6IGZvdW5kICUiIFBSSXVTICIgaW5zdGVhZCBv
ZiAlZFxuIiwKKyAgICAvLyBDb21wdXRlIHRoZSBzaXplIGNsYXNzZXMgd2Ugd2FudCB0byB1c2UK
KyAgICBzaXplX3Qgc2MgPSAxOyAvLyBOZXh0IHNpemUgY2xhc3MgdG8gYXNzaWduCisgICAgdW5z
aWduZWQgY2hhciBhbGlnbnNoaWZ0ID0ga0FsaWduU2hpZnQ7CisgICAgaW50IGxhc3RMZyA9IC0x
OworICAgIGZvciAoc2l6ZV90IHNpemUgPSBrQWxpZ25tZW50OyBzaXplIDw9IGtNYXhTaXplOyBz
aXplICs9ICgxIDw8IGFsaWduc2hpZnQpKSB7CisgICAgICAgIGludCBsZyA9IExnRmxvb3Ioc2l6
ZSk7CisgICAgICAgIGlmIChsZyA+IGxhc3RMZykgeworICAgICAgICAgICAgLy8gSW5jcmVhc2Ug
YWxpZ25tZW50IGV2ZXJ5IHNvIG9mdGVuLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IFNpbmNlIHdlIGRvdWJsZSB0aGUgYWxpZ25tZW50IGV2ZXJ5IHRpbWUgc2l6ZSBkb3VibGVzIGFu
ZAorICAgICAgICAgICAgLy8gc2l6ZSA+PSAxMjgsIHRoaXMgbWVhbnMgdGhhdCBzcGFjZSB3YXN0
ZWQgZHVlIHRvIGFsaWdubWVudCBpcworICAgICAgICAgICAgLy8gYXQgbW9zdCAxNi8xMjggaS5l
LiwgMTIuNSUuIFBsdXMgd2UgY2FwIHRoZSBhbGlnbm1lbnQgYXQgMjU2CisgICAgICAgICAgICAv
LyBieXRlcywgc28gdGhlIHNwYWNlIHdhc3RlZCBhcyBhIHBlcmNlbnRhZ2Ugc3RhcnRzIGZhbGxp
bmcgZm9yCisgICAgICAgICAgICAvLyBzaXplcyA+IDJLLgorICAgICAgICAgICAgaWYgKChsZyA+
PSA3KSAmJiAoYWxpZ25zaGlmdCA8IDgpKQorICAgICAgICAgICAgICAgIGFsaWduc2hpZnQrKzsK
KyAgICAgICAgICAgIGxhc3RMZyA9IGxnOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb2Nh
dGUgZW5vdWdoIHBhZ2VzIHNvIGxlZnRvdmVyIGlzIGxlc3MgdGhhbiAxLzggb2YgdG90YWwuCisg
ICAgICAgIC8vIFRoaXMgYm91bmRzIHdhc3RlZCBzcGFjZSB0byBhdCBtb3N0IDEyLjUlLgorICAg
ICAgICBzaXplX3QgcHNpemUgPSBrUGFnZVNpemU7CisgICAgICAgIHdoaWxlICgocHNpemUgJSBz
aXplKSA+IChwc2l6ZSA+PiAzKSkKKyAgICAgICAgICAgIHBzaXplICs9IGtQYWdlU2l6ZTsKKyAg
ICAgICAgY29uc3Qgc2l6ZV90IG15UGFnZXMgPSBwc2l6ZSA+PiBrUGFnZVNoaWZ0OworCisgICAg
ICAgIGlmIChzYyA+IDEgJiYgbXlQYWdlcyA9PSBjbGFzc190b19wYWdlc1tzYy0xXSkgeworICAg
ICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBtZXJnZSB0aGlzIGludG8gdGhlIHByZXZpb3VzIGNs
YXNzIHdpdGhvdXQKKyAgICAgICAgICAgIC8vIGluY3JlYXNpbmcgdGhlIGZyYWdtZW50YXRpb24g
b2YgdGhlIHByZXZpb3VzIGNsYXNzLgorICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG15T2JqZWN0
cyA9IChteVBhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gc2l6ZTsKKyAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBwcmV2b2JqZWN0cyA9IChjbGFzc190b19wYWdlc1tzYy0xXSA8PCBrUGFnZVNoaWZ0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gY2xhc3NUb3NpemVbc2Mt
MV07CisgICAgICAgICAgICBpZiAobXlPYmplY3RzID09IHByZXZvYmplY3RzKSB7CisgICAgICAg
ICAgICAgICAgLy8gQWRqdXN0IGxhc3QgY2xhc3MgdG8gaW5jbHVkZSB0aGlzIHNpemUKKyAgICAg
ICAgICAgICAgICBjbGFzc1Rvc2l6ZVtzYy0xXSA9IHNpemU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgbmV3IGNs
YXNzCisgICAgICAgIGNsYXNzX3RvX3BhZ2VzW3NjXSA9IG15UGFnZXM7CisgICAgICAgIGNsYXNz
VG9zaXplW3NjXSA9IHNpemU7CisgICAgICAgIHNjKys7CisgICAgfQorICAgIGlmIChzYyAhPSBr
TnVtQ2xhc3NlcykgeworICAgICAgICBNRVNTQUdFKCJ3cm9uZyBudW1iZXIgb2Ygc2l6ZSBjbGFz
c2VzOiBmb3VuZCAlIiBQUkl1UyAiIGluc3RlYWQgb2YgJWRcbiIsCiAgICAgICAgICAgICBzYywg
aW50KGtOdW1DbGFzc2VzKSk7Ci0gICAgQ1JBU0goKTsKLSAgfQorICAgICAgICBDUkFTSCgpOwor
ICAgIH0KIAotICAvLyBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGFycmF5cwotICBpbnQgbmV4dF9z
aXplID0gMDsKLSAgZm9yICh1bnNpZ25lZCBjaGFyIGMgPSAxOyBjIDwga051bUNsYXNzZXM7IGMr
KykgewotICAgIGNvbnN0IHNpemVfdCBtYXhfc2l6ZV9pbl9jbGFzcyA9IGNsYXNzX3RvX3NpemVb
Y107Ci0gICAgZm9yIChzaXplX3QgcyA9IG5leHRfc2l6ZTsgcyA8PSBtYXhfc2l6ZV9pbl9jbGFz
czsgcyArPSBrQWxpZ25tZW50KSB7Ci0gICAgICBjbGFzc19hcnJheVtDbGFzc0luZGV4KHMpXSA9
IGM7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBhcnJheXMKKyAgICBpbnQgbmV4dHNp
emUgPSAwOworICAgIGZvciAodW5zaWduZWQgY2hhciBjID0gMTsgYyA8IGtOdW1DbGFzc2VzOyBj
KyspIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG1heFNpemVpbkNsYXNzID0gY2xhc3NUb3NpemVb
Y107CisgICAgICAgIGZvciAoc2l6ZV90IHMgPSBuZXh0c2l6ZTsgcyA8PSBtYXhTaXplaW5DbGFz
czsgcyArPSBrQWxpZ25tZW50KQorICAgICAgICAgICAgY2xhc3NBcnJheVtDbGFzc0luZGV4KHMp
XSA9IGM7CisgICAgICAgIG5leHRzaXplID0gc3RhdGljX2Nhc3Q8aW50PihtYXhTaXplaW5DbGFz
cyArIGtBbGlnbm1lbnQpOwogICAgIH0KLSAgICBuZXh0X3NpemUgPSBzdGF0aWNfY2FzdDxpbnQ+
KG1heF9zaXplX2luX2NsYXNzICsga0FsaWdubWVudCk7Ci0gIH0KIAotICAvLyBEb3VibGUtY2hl
Y2sgc2l6ZXMganVzdCB0byBiZSBzYWZlCi0gIGZvciAoc2l6ZV90IHNpemUgPSAwOyBzaXplIDw9
IGtNYXhTaXplOyBzaXplKyspIHsKLSAgICBjb25zdCBzaXplX3Qgc2MgPSBTaXplQ2xhc3Moc2l6
ZSk7Ci0gICAgaWYgKHNjID09IDApIHsKLSAgICAgIE1FU1NBR0UoIkJhZCBzaXplIGNsYXNzICUi
IFBSSXVTICIgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKLSAgICAgIENSQVNIKCk7Ci0g
ICAgfQotICAgIGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFzc190b19zaXplW3NjLTFdKSB7Ci0g
ICAgICBNRVNTQUdFKCJBbGxvY2F0aW5nIHVubmVjZXNzYXJpbHkgbGFyZ2UgY2xhc3MgJSIgUFJJ
dVMgIiBmb3IgJSIgUFJJdVMKLSAgICAgICAgICAgICAgIlxuIiwgc2MsIHNpemUpOwotICAgICAg
Q1JBU0goKTsKLSAgICB9Ci0gICAgaWYgKHNjID49IGtOdW1DbGFzc2VzKSB7Ci0gICAgICBNRVNT
QUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiXG4iLCBzYywgc2l6
ZSk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBjb25zdCBzaXplX3QgcyA9IGNsYXNzX3Rv
X3NpemVbc2NdOwotICAgIGlmIChzaXplID4gcykgewotICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAl
IiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBSSXVTICIpXG4iLCBzLCBzaXplLCBz
Yyk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBpZiAocyA9PSAwKSB7Ci0gICAgICBNRVNT
QUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBSSXVTICIp
XG4iLCBzLCBzaXplLCBzYyk7Ci0gICAgICBDUkFTSCgpOworICAgIC8vIERvdWJsZS1jaGVjayBz
aXplcyBqdXN0IHRvIGJlIHNhZmUKKyAgICBmb3IgKHNpemVfdCBzaXplID0gMDsgc2l6ZSA8PSBr
TWF4U2l6ZTsgc2l6ZSsrKSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBzYyA9IFNpemVDbGFzcyhz
aXplKTsKKyAgICAgICAgaWYgKCFzYykgeworICAgICAgICAgICAgTUVTU0FHRSgiQmFkIHNpemUg
Y2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIlxuIiwgc2MsIHNpemUpOworICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2MgPiAxICYmIHNpemUgPD0gY2xh
c3NUb3NpemVbc2MtMV0pIHsKKyAgICAgICAgICAgIE1FU1NBR0UoIkFsbG9jYXRpbmcgdW5uZWNl
c3NhcmlseSBsYXJnZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UworICAgICAgICAgICAg
ICAgICAgICAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9
CisgICAgICAgIGlmIChzYyA+PSBrTnVtQ2xhc3NlcykgeworICAgICAgICAgICAgTUVTU0FHRSgi
QmFkIHNpemUgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIlxuIiwgc2MsIHNpemUpOwor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBzaXplX3QgcyA9
IGNsYXNzVG9zaXplW3NjXTsKKyAgICAgICAgaWYgKHNpemUgPiBzKSB7CisgICAgICAgICAgICBN
RVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBSSXVT
ICIpXG4iLCBzLCBzaXplLCBzYyk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghcykgeworICAgICAgICAgICAgTUVTU0FHRSgiQmFkIHNpemUgJSIgUFJJdVMg
IiBmb3IgJSIgUFJJdVMgIiAoc2MgPSAlIiBQUkl1UyAiKVxuIiwgcywgc2l6ZSwgc2MpOworICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIC8vIEluaXRpYWxp
emUgdGhlIG51bV9vYmplY3RzX3RvX21vdmUgYXJyYXkuCi0gIGZvciAoc2l6ZV90IGNsID0gMTsg
Y2wgIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBudW1fb2JqZWN0c190b19tb3ZlW2NsXSA9
IE51bU1vdmVTaXplKEJ5dGVTaXplRm9yQ2xhc3MoY2wpKTsKLSAgfQorICAgIC8vIEluaXRpYWxp
emUgdGhlIG51bU9iamVjdHNUb01vdmUgYXJyYXkuCisgICAgZm9yIChzaXplX3QgY2wgPSAxOyBj
bCAgPCBrTnVtQ2xhc3NlczsgKytjbCkKKyAgICAgICAgbnVtT2JqZWN0c1RvTW92ZVtjbF0gPSBO
dW1Nb3ZlU2l6ZShCeXRlU2l6ZUZvckNsYXNzKGNsKSk7CiAKICNpZm5kZWYgV1RGX0NIQU5HRVMK
LSAgaWYgKGZhbHNlKSB7Ci0gICAgLy8gRHVtcCBjbGFzcyBzaXplcyBhbmQgbWF4aW11bSBleHRl
cm5hbCB3YXN0YWdlIHBlciBzaXplIGNsYXNzCi0gICAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAg
PCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgY29uc3QgaW50IGFsbG9jX3NpemUgPSBjbGFz
c190b19wYWdlc1tjbF0gPDwga1BhZ2VTaGlmdDsKLSAgICAgIGNvbnN0IGludCBhbGxvY19vYmpz
ID0gYWxsb2Nfc2l6ZSAvIGNsYXNzX3RvX3NpemVbY2xdOwotICAgICAgY29uc3QgaW50IG1pbl91
c2VkID0gKGNsYXNzX3RvX3NpemVbY2wtMV0gKyAxKSAqIGFsbG9jX29ianM7Ci0gICAgICBjb25z
dCBpbnQgbWF4X3dhc3RlID0gYWxsb2Nfc2l6ZSAtIG1pbl91c2VkOwotICAgICAgTUVTU0FHRSgi
U0MgJTNkIFsgJThkIC4uICU4ZCBdIGZyb20gJThkIDsgJTIuMGYlJSBtYXh3YXN0ZVxuIiwKLSAg
ICAgICAgICAgICAgaW50KGNsKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2wt
MV0gKyAxKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2xdKSwKLSAgICAgICAg
ICAgICAgaW50KGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAg
ICAgbWF4X3dhc3RlICogMTAwLjAgLyBhbGxvY19zaXplCi0gICAgICAgICAgICAgICk7CisgICAg
aWYgKGZhbHNlKSB7CisgICAgICAgIC8vIER1bXAgY2xhc3Mgc2l6ZXMgYW5kIG1heGltdW0gZXh0
ZXJuYWwgd2FzdGFnZSBwZXIgc2l6ZSBjbGFzcworICAgICAgICBmb3IgKHNpemVfdCBjbCA9IDE7
IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgYWxsb2NT
aXplID0gY2xhc3NfdG9fcGFnZXNbY2xdIDw8IGtQYWdlU2hpZnQ7CisgICAgICAgICAgICBjb25z
dCBpbnQgYWxsb2NPYmpzID0gYWxsb2NTaXplIC8gY2xhc3NUb3NpemVbY2xdOworICAgICAgICAg
ICAgY29uc3QgaW50IG1pblVzZWQgPSAoY2xhc3NUb3NpemVbY2wtMV0gKyAxKSAqIGFsbG9jT2Jq
czsKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhXYXN0ZSA9IGFsbG9jU2l6ZSAtIG1pblVzZWQ7
CisgICAgICAgICAgICBNRVNTQUdFKCJTQyAlM2QgWyAlOGQgLi4gJThkIF0gZnJvbSAlOGQgOyAl
Mi4wZiUlIG1heHdhc3RlXG4iLAorICAgICAgICAgICAgICAgICAgICBpbnQoY2wpLAorICAgICAg
ICAgICAgICAgICAgICBpbnQoY2xhc3NUb3NpemVbY2wtMV0gKyAxKSwKKyAgICAgICAgICAgICAg
ICAgICAgaW50KGNsYXNzVG9zaXplW2NsXSksCisgICAgICAgICAgICAgICAgICAgIGludChjbGFz
c190b19wYWdlc1tjbF0gPDwga1BhZ2VTaGlmdCksCisgICAgICAgICAgICAgICAgICAgIG1heFdh
c3RlICogMTAwLjAgLyBhbGxvY1NpemUKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
fQogICAgIH0KLSAgfQogI2VuZGlmCiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNpbXBs
ZSBhbGxvY2F0b3IgZm9yIG9iamVjdHMgb2YgYSBzcGVjaWZpZWQgdHlwZS4gIEV4dGVybmFsIGxv
Y2tpbmcKKy8vIFNpbXBsZSBhbGxvY2F0b3IgZm9yIG9iamVjdHMgb2YgYSBzcGVjaWZpZWQgdHlw
ZS4gRXh0ZXJuYWwgbG9ja2luZwogLy8gaXMgcmVxdWlyZWQgYmVmb3JlIGFjY2Vzc2luZyBvbmUg
b2YgdGhlc2Ugb2JqZWN0cy4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gTWV0YWRhdGEgYWxs
b2NhdG9yIC0tIGtlZXBzIHN0YXRzIGFib3V0IGhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZAotc3Rh
dGljIHVpbnQ2NF90IG1ldGFkYXRhX3N5c3RlbV9ieXRlcyA9IDA7Ci1zdGF0aWMgdm9pZCogTWV0
YURhdGFBbGxvYyhzaXplX3QgYnl0ZXMpIHsKLSAgdm9pZCogcmVzdWx0ID0gVENNYWxsb2NfU3lz
dGVtQWxsb2MoYnl0ZXMsIDApOwotICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICBtZXRhZGF0
YV9zeXN0ZW1fYnl0ZXMgKz0gYnl0ZXM7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyB1
aW50NjRfdCBtZXRhZGF0YVN5c3RlbUJ5dGVzID0gMDsKK3N0YXRpYyB2b2lkKiBNZXRhRGF0YUFs
bG9jKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBUQ01hbGxvY19TeXN0ZW1B
bGxvYyhieXRlcywgMCk7CisgICAgaWYgKHJlc3VsdCkgCisgICAgICAgIG1ldGFkYXRhU3lzdGVt
Qnl0ZXMgKz0gYnl0ZXM7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGUgPGNsYXNz
IFQ+CiBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvciB7Ci0gcHJpdmF0ZToKLSAgLy8gSG93IG11Y2gg
dG8gYWxsb2NhdGUgZnJvbSBzeXN0ZW0gYXQgYSB0aW1lCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qg
a0FsbG9jSW5jcmVtZW50ID0gMzIgPDwgMTA7Citwcml2YXRlOgorICAgIC8vIEhvdyBtdWNoIHRv
IGFsbG9jYXRlIGZyb20gc3lzdGVtIGF0IGEgdGltZQorICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
a0FsbG9jSW5jcmVtZW50ID0gMzIgPDwgMTA7CiAKLSAgLy8gQWxpZ25lZCBzaXplIG9mIFQKLSAg
c3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25lZFNpemUKLSAgPSAoKChzaXplb2YoVCkgKyBrQWxp
Z25tZW50IC0gMSkgLyBrQWxpZ25tZW50KSAqIGtBbGlnbm1lbnQpOworICAgIC8vIEFsaWduZWQg
c2l6ZSBvZiBUCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25lZFNpemUKKyAgICA9ICgo
KHNpemVvZihUKSArIGtBbGlnbm1lbnQgLSAxKSAvIGtBbGlnbm1lbnQpICoga0FsaWdubWVudCk7
CiAKLSAgLy8gRnJlZSBhcmVhIGZyb20gd2hpY2ggdG8gY2FydmUgbmV3IG9iamVjdHMKLSAgY2hh
ciogZnJlZV9hcmVhXzsKLSAgc2l6ZV90IGZyZWVfYXZhaWxfOworICAgIC8vIEZyZWUgYXJlYSBm
cm9tIHdoaWNoIHRvIGNhcnZlIG5ldyBvYmplY3RzCisgICAgY2hhciogZnJlZUFyZWE7CisgICAg
c2l6ZV90IGZyZWVBdmFpbDsKIAotICAvLyBMaW5rZWQgbGlzdCBvZiBhbGwgcmVnaW9ucyBhbGxv
Y2F0ZWQgYnkgdGhpcyBhbGxvY2F0b3IKLSAgdm9pZCogYWxsb2NhdGVkX3JlZ2lvbnNfOworICAg
IC8vIExpbmtlZCBsaXN0IG9mIGFsbCByZWdpb25zIGFsbG9jYXRlZCBieSB0aGlzIGFsbG9jYXRv
cgorICAgIHZvaWQqIGFsbG9jYXRlZFJlZ2lvbnM7CiAKLSAgLy8gRnJlZSBsaXN0IG9mIGFscmVh
ZHkgY2FydmVkIG9iamVjdHMKLSAgdm9pZCogZnJlZV9saXN0XzsKKyAgICAvLyBGcmVlIGxpc3Qg
b2YgYWxyZWFkeSBjYXJ2ZWQgb2JqZWN0cworICAgIHZvaWQqIGZyZWVMaXN0OwogCi0gIC8vIE51
bWJlciBvZiBhbGxvY2F0ZWQgYnV0IHVuZnJlZWQgb2JqZWN0cwotICBpbnQgaW51c2VfOworICAg
IC8vIE51bWJlciBvZiBhbGxvY2F0ZWQgYnV0IHVuZnJlZWQgb2JqZWN0cworICAgIGludCBpblVz
ZTsKIAotIHB1YmxpYzoKLSAgdm9pZCBJbml0KCkgewotICAgIEFTU0VSVChrQWxpZ25lZFNpemUg
PD0ga0FsbG9jSW5jcmVtZW50KTsKLSAgICBpbnVzZV8gPSAwOwotICAgIGFsbG9jYXRlZF9yZWdp
b25zXyA9IDA7Ci0gICAgZnJlZV9hcmVhXyA9IE5VTEw7Ci0gICAgZnJlZV9hdmFpbF8gPSAwOwot
ICAgIGZyZWVfbGlzdF8gPSBOVUxMOwotICB9CitwdWJsaWM6CisgICAgdm9pZCBJbml0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChrQWxpZ25lZFNpemUgPD0ga0FsbG9jSW5jcmVtZW50KTsKKyAg
ICAgICAgaW5Vc2UgPSAwOworICAgICAgICBhbGxvY2F0ZWRSZWdpb25zID0gMDsKKyAgICAgICAg
ZnJlZUFyZWEgPSAwOworICAgICAgICBmcmVlQXZhaWwgPSAwOworICAgICAgICBmcmVlTGlzdCA9
IDA7CisgICAgfQogCi0gIFQqIE5ldygpIHsKLSAgICAvLyBDb25zdWx0IGZyZWUgbGlzdAotICAg
IHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoZnJlZV9saXN0XyAhPSBOVUxMKSB7Ci0gICAgICByZXN1
bHQgPSBmcmVlX2xpc3RfOwotICAgICAgZnJlZV9saXN0XyA9ICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KHJlc3VsdCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZnJlZV9hdmFpbF8gPCBr
QWxpZ25lZFNpemUpIHsKLSAgICAgICAgLy8gTmVlZCBtb3JlIHJvb20KLSAgICAgICAgY2hhciog
bmV3X2FsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihNZXRhRGF0YUFsbG9jKGtB
bGxvY0luY3JlbWVudCkpOwotICAgICAgICBpZiAoIW5ld19hbGxvY2F0aW9uKQotICAgICAgICAg
IENSQVNIKCk7Ci0KLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPHZvaWQqKj4obmV3X2Fs
bG9jYXRpb24pID0gYWxsb2NhdGVkX3JlZ2lvbnNfOwotICAgICAgICBhbGxvY2F0ZWRfcmVnaW9u
c18gPSBuZXdfYWxsb2NhdGlvbjsKLSAgICAgICAgZnJlZV9hcmVhXyA9IG5ld19hbGxvY2F0aW9u
ICsga0FsaWduZWRTaXplOwotICAgICAgICBmcmVlX2F2YWlsXyA9IGtBbGxvY0luY3JlbWVudCAt
IGtBbGlnbmVkU2l6ZTsKLSAgICAgIH0KLSAgICAgIHJlc3VsdCA9IGZyZWVfYXJlYV87Ci0gICAg
ICBmcmVlX2FyZWFfICs9IGtBbGlnbmVkU2l6ZTsKLSAgICAgIGZyZWVfYXZhaWxfIC09IGtBbGln
bmVkU2l6ZTsKKyAgICBUKiBOZXcoKQorICAgIHsKKyAgICAgICAgLy8gQ29uc3VsdCBmcmVlIGxp
c3QKKyAgICAgICAgdm9pZCogcmVzdWx0OworICAgICAgICBpZiAoZnJlZUxpc3QpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGZyZWVMaXN0OworICAgICAgICAgICAgZnJlZUxpc3QgPSAqKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPihyZXN1bHQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChmcmVlQXZhaWwgPCBrQWxpZ25lZFNpemUpIHsKKyAgICAgICAgICAgICAgICAvLyBO
ZWVkIG1vcmUgcm9vbQorICAgICAgICAgICAgICAgIGNoYXIqIG5ld2FsbG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihNZXRhRGF0YUFsbG9jKGtBbGxvY0luY3JlbWVudCkpOworICAg
ICAgICAgICAgICAgIGlmICghbmV3YWxsb2NhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgQ1JB
U0goKTsKKworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KG5l
d2FsbG9jYXRpb24pID0gYWxsb2NhdGVkUmVnaW9uczsKKyAgICAgICAgICAgICAgICAgYWxsb2Nh
dGVkUmVnaW9ucyA9IG5ld2FsbG9jYXRpb247CisgICAgICAgICAgICAgICAgZnJlZUFyZWEgPSBu
ZXdhbGxvY2F0aW9uICsga0FsaWduZWRTaXplOworICAgICAgICAgICAgICAgIGZyZWVBdmFpbCA9
IGtBbGxvY0luY3JlbWVudCAtIGtBbGlnbmVkU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJlc3VsdCA9IGZyZWVBcmVhOworICAgICAgICAgICAgZnJlZUFyZWEgKz0ga0FsaWduZWRT
aXplOworICAgICAgICAgICAgZnJlZUF2YWlsIC09IGtBbGlnbmVkU2l6ZTsKKyAgICAgICAgfQor
ICAgICAgICBpblVzZSsrOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVz
dWx0KTsKICAgICB9Ci0gICAgaW51c2VfKys7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KHJlc3VsdCk7Ci0gIH0KIAotICB2b2lkIERlbGV0ZShUKiBwKSB7Ci0gICAgKihyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4ocCkpID0gZnJlZV9saXN0XzsKLSAgICBmcmVlX2xpc3RfID0gcDsK
LSAgICBpbnVzZV8tLTsKLSAgfQorICAgIHZvaWQgRGVsZXRlKFQqIHApCisgICAgeworICAgICAg
ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBmcmVlTGlzdDsKKyAgICAgICAgZnJl
ZUxpc3QgPSBwOworICAgICAgICBpblVzZS0tOworICAgIH0KIAotICBpbnQgaW51c2UoKSBjb25z
dCB7IHJldHVybiBpbnVzZV87IH0KKyAgICBpbnQgaW51c2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluVXNlOworICAgIH0KIAogI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9T
KERBUldJTikKLSAgdGVtcGxhdGUgPGNsYXNzIFJlY29yZGVyPgotICB2b2lkIHJlY29yZEFkbWlu
aXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYgcmVjb3JkZXIsIGNvbnN0IFJlbW90ZU1lbW9yeVJl
YWRlciYgcmVhZGVyKQotICB7Ci0gICAgICBmb3IgKHZvaWQqIGFkbWluQWxsb2NhdGlvbiA9IGFs
bG9jYXRlZF9yZWdpb25zXzsgYWRtaW5BbGxvY2F0aW9uOyBhZG1pbkFsbG9jYXRpb24gPSByZWFk
ZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFs
bG9jYXRpb24pKSkKLSAgICAgICAgICByZWNvcmRlci5yZWNvcmRSZWdpb24ocmVpbnRlcnByZXRf
Y2FzdDx2bV9hZGRyZXNzX3Q+KGFkbWluQWxsb2NhdGlvbiksIGtBbGxvY0luY3JlbWVudCk7Ci0g
IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgUmVjb3JkZXI+CisgICAgdm9pZCByZWNvcmRBZG1pbmlz
dHJhdGl2ZVJlZ2lvbnMoUmVjb3JkZXImIHJlY29yZGVyLCBjb25zdCBSZW1vdGVNZW1vcnlSZWFk
ZXImIHJlYWRlcikKKyAgICB7CisgICAgICAgIGZvciAodm9pZCogYWRtaW5BbGxvY2F0aW9uID0g
YWxsb2NhdGVkUmVnaW9uczsgYWRtaW5BbGxvY2F0aW9uOyBhZG1pbkFsbG9jYXRpb24gPSByZWFk
ZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFs
bG9jYXRpb24pKSkKKyAgICAgICAgICAgIHJlY29yZGVyLnJlY29yZFJlZ2lvbihyZWludGVycHJl
dF9jYXN0PHZtX2FkZHJlc3NfdD4oYWRtaW5BbGxvY2F0aW9uKSwga0FsbG9jSW5jcmVtZW50KTsK
KyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTEwNzcsMTQ2ICs5ODksMzgzIEBAIHR5cGVkZWYgdWlu
dHB0cl90IExlbmd0aDsKIAogc3RhdGljIGNvbnN0IExlbmd0aCBrTWF4VmFsaWRQYWdlcyA9ICh+
c3RhdGljX2Nhc3Q8TGVuZ3RoPigwKSkgPj4ga1BhZ2VTaGlmdDsKIAotLy8gQ29udmVydCBieXRl
IHNpemUgaW50byBwYWdlcy4gIFRoaXMgd29uJ3Qgb3ZlcmZsb3csIGJ1dCBtYXkgcmV0dXJuCisv
LyBDb252ZXJ0IGJ5dGUgc2l6ZSBpbnRvIHBhZ2VzLiBUaGlzIHdvbid0IG92ZXJmbG93LCBidXQg
bWF5IHJldHVybgogLy8gYW4gdW5yZWFzb25hYmx5IGxhcmdlIHZhbHVlIGlmIGJ5dGVzIGlzIGh1
Z2UgZW5vdWdoLgotc3RhdGljIGlubGluZSBMZW5ndGggcGFnZXMoc2l6ZV90IGJ5dGVzKSB7Ci0g
IHJldHVybiAoYnl0ZXMgPj4ga1BhZ2VTaGlmdCkgKwotICAgICAgKChieXRlcyAmIChrUGFnZVNp
emUgLSAxKSkgPiAwID8gMSA6IDApOworc3RhdGljIGlubGluZSBMZW5ndGggcGFnZXMoc2l6ZV90
IGJ5dGVzKQoreworICAgIHJldHVybiAoYnl0ZXMgPj4ga1BhZ2VTaGlmdCkgKyAoKGJ5dGVzICYg
KGtQYWdlU2l6ZSAtIDEpKSA+IDAgPyAxIDogMCk7CiB9CiAKIC8vIENvbnZlcnQgYSB1c2VyIHNp
emUgaW50byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBhY3R1YWxseSBiZQogLy8gYWxs
b2NhdGVkCi1zdGF0aWMgc2l6ZV90IEFsbG9jYXRpb25TaXplKHNpemVfdCBieXRlcykgewotICBp
ZiAoYnl0ZXMgPiBrTWF4U2l6ZSkgewotICAgIC8vIExhcmdlIG9iamVjdDogd2UgYWxsb2NhdGUg
YW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzCi0gICAgQVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFs
aWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgcmV0dXJuIHBhZ2VzKGJ5dGVzKSA8PCBrUGFn
ZVNoaWZ0OwotICB9IGVsc2Ugeworc3RhdGljIHNpemVfdCBBbGxvY2F0aW9uU2l6ZShzaXplX3Qg
Ynl0ZXMpCit7CisgICAgaWYgKGJ5dGVzID4ga01heFNpemUpIHsKKyAgICAgICAgLy8gTGFyZ2Ug
b2JqZWN0OiB3ZSBhbGxvY2F0ZSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMKKyAgICAgICAg
QVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFsaWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7CisgICAgICAg
IHJldHVybiBwYWdlcyhieXRlcykgPDwga1BhZ2VTaGlmdDsKKyAgICB9CiAgICAgLy8gU21hbGwg
b2JqZWN0OiBmaW5kIHRoZSBzaXplIGNsYXNzIHRvIHdoaWNoIGl0IGJlbG9uZ3MKICAgICByZXR1
cm4gQnl0ZVNpemVGb3JDbGFzcyhTaXplQ2xhc3MoYnl0ZXMpKTsKLSAgfQogfQogCiAvLyBJbmZv
cm1hdGlvbiBrZXB0IGZvciBhIHNwYW4gKGEgY29udGlndW91cyBydW4gb2YgcGFnZXMpLgogc3Ry
dWN0IFNwYW4gewotICBQYWdlSUQgICAgICAgIHN0YXJ0OyAgICAgICAgICAvLyBTdGFydGluZyBw
YWdlIG51bWJlcgotICBMZW5ndGggICAgICAgIGxlbmd0aDsgICAgICAgICAvLyBOdW1iZXIgb2Yg
cGFnZXMgaW4gc3BhbgotICBTcGFuKiAgICAgICAgIG5leHQ7ICAgICAgICAgICAvLyBVc2VkIHdo
ZW4gaW4gbGluayBsaXN0Ci0gIFNwYW4qICAgICAgICAgcHJldjsgICAgICAgICAgIC8vIFVzZWQg
d2hlbiBpbiBsaW5rIGxpc3QKLSAgdm9pZCogICAgICAgICBvYmplY3RzOyAgICAgICAgLy8gTGlu
a2VkIGxpc3Qgb2YgZnJlZSBvYmplY3RzCi0gIHVuc2lnbmVkIGludCAgZnJlZSA6IDE7ICAgICAg
IC8vIElzIHRoZSBzcGFuIGZyZWUKKyAgICBQYWdlSUQgc3RhcnQ7IC8vIFN0YXJ0aW5nIHBhZ2Ug
bnVtYmVyCisgICAgTGVuZ3RoIGxlbmd0aDsgLy8gTnVtYmVyIG9mIHBhZ2VzIGluIHNwYW4KKyAg
ICBTcGFuKiBuZXh0OyAvLyBVc2VkIHdoZW4gaW4gbGluayBsaXN0CisgICAgU3BhbiogcHJldjsg
Ly8gVXNlZCB3aGVuIGluIGxpbmsgbGlzdAorICAgIHZvaWQqIG9iamVjdHM7IC8vIExpbmtlZCBs
aXN0IG9mIGZyZWUgb2JqZWN0cworICAgIHVuc2lnbmVkIGludCBmcmVlIDogMTsgLy8gSXMgdGhl
IHNwYW4gZnJlZQogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCi0gIHVuc2lnbmVkIGludCAg
c2FtcGxlIDogMTsgICAgIC8vIFNhbXBsZWQgb2JqZWN0PworICAgIHVuc2lnbmVkIGludCBzYW1w
bGUgOiAxOyAvLyBTYW1wbGVkIG9iamVjdD8KICNlbmRpZgotICB1bnNpZ25lZCBpbnQgIHNpemVj
bGFzcyA6IDg7ICAvLyBTaXplLWNsYXNzIGZvciBzbWFsbCBvYmplY3RzIChvciAwKQotICB1bnNp
Z25lZCBpbnQgIHJlZmNvdW50IDogMTE7ICAvLyBOdW1iZXIgb2Ygbm9uLWZyZWUgb2JqZWN0cwot
ICBib29sIGRlY29tbWl0dGVkIDogMTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZWNsYXNzIDogODsg
Ly8gU2l6ZS1jbGFzcyBmb3Igc21hbGwgb2JqZWN0cyAob3IgMCkKKyAgICB1bnNpZ25lZCBpbnQg
cmVmY291bnQgOiAxMTsgLy8gTnVtYmVyIG9mIG5vbi1mcmVlIG9iamVjdHMKKyAgICBib29sIGRl
Y29tbWl0dGVkIDogMTsKIAogI3VuZGVmIFNQQU5fSElTVE9SWQogI2lmZGVmIFNQQU5fSElTVE9S
WQotICAvLyBGb3IgZGVidWdnaW5nLCB3ZSBjYW4ga2VlcCBhIGxvZyBldmVudHMgcGVyIHNwYW4K
LSAgaW50IG5leHRoaXN0b3J5OwotICBjaGFyIGhpc3RvcnlbNjRdOwotICBpbnQgdmFsdWVbNjRd
OworICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHdlIGNhbiBrZWVwIGEgbG9nIGV2ZW50cyBwZXIgc3Bh
bgorICAgIGludCBuZXh0aGlzdG9yeTsKKyAgICBjaGFyIGhpc3RvcnlbNjRdOworICAgIGludCB2
YWx1ZVs2NF07CiAjZW5kaWYKIH07CiAKICNkZWZpbmUgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNw
YW4pIEFTU0VSVCghc3Bhbi0+ZGVjb21taXR0ZWQpCiAKICNpZmRlZiBTUEFOX0hJU1RPUlkKLXZv
aWQgRXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50IHYgPSAwKSB7Ci0gIHNwYW4tPmhpc3Rv
cnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7Ci0gIHNwYW4tPnZhbHVlW3NwYW4tPm5leHRoaXN0
b3J5XSA9IHY7Ci0gIHNwYW4tPm5leHRoaXN0b3J5Kys7Ci0gIGlmIChzcGFuLT5uZXh0aGlzdG9y
eSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9yeSkpIHNwYW4tPm5leHRoaXN0b3J5ID0gMDsKK3ZvaWQg
RXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50IHYgPSAwKQoreworICAgIHNwYW4tPmhpc3Rv
cnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7CisgICAgc3Bhbi0+dmFsdWVbc3Bhbi0+bmV4dGhp
c3RvcnldID0gdjsKKyAgICBzcGFuLT5uZXh0aGlzdG9yeSsrOworICAgIGlmIChzcGFuLT5uZXh0
aGlzdG9yeSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9yeSkpCisgICAgICAgIHNwYW4tPm5leHRoaXN0
b3J5ID0gMDsKIH0KICNlbHNlCiAjZGVmaW5lIEV2ZW50KHMsbyx2KSAoKHZvaWQpIDApCiAjZW5k
aWYKIAogLy8gQWxsb2NhdG9yL2RlYWxsb2NhdG9yIGZvciBzcGFucwotc3RhdGljIFBhZ2VIZWFw
QWxsb2NhdG9yPFNwYW4+IHNwYW5fYWxsb2NhdG9yOwotc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFn
ZUlEIHAsIExlbmd0aCBsZW4pIHsKLSAgU3BhbiogcmVzdWx0ID0gc3Bhbl9hbGxvY2F0b3IuTmV3
KCk7Ci0gIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7Ci0gIHJlc3VsdC0+c3Rh
cnQgPSBwOwotICByZXN1bHQtPmxlbmd0aCA9IGxlbjsKK3N0YXRpYyBQYWdlSGVhcEFsbG9jYXRv
cjxTcGFuPiBzcGFuQWxsb2NhdG9yOworc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExl
bmd0aCBsZW4pCit7CisgICAgU3BhbiogcmVzdWx0ID0gc3BhbkFsbG9jYXRvci5OZXcoKTsKKyAg
ICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOworICAgIHJlc3VsdC0+c3RhcnQg
PSBwOworICAgIHJlc3VsdC0+bGVuZ3RoID0gbGVuOwogI2lmZGVmIFNQQU5fSElTVE9SWQotICBy
ZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKKyAgICByZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKICNl
bmRpZgotICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNwYW4pIHsKK3N0YXRpYyBpbmxpbmUgdm9pZCBE
ZWxldGVTcGFuKFNwYW4qIHNwYW4pCit7CiAjaWZuZGVmIE5ERUJVRwotICAvLyBJbiBkZWJ1ZyBt
b2RlLCB0cmFzaCB0aGUgY29udGVudHMgb2YgZGVsZXRlZCBTcGFucwotICBtZW1zZXQoc3Bhbiwg
MHgzZiwgc2l6ZW9mKCpzcGFuKSk7CisgICAgLy8gSW4gZGVidWcgbW9kZSwgdHJhc2ggdGhlIGNv
bnRlbnRzIG9mIGRlbGV0ZWQgU3BhbnMKKyAgICBtZW1zZXQoc3BhbiwgMHgzZiwgc2l6ZW9mKCpz
cGFuKSk7CiAjZW5kaWYKLSAgc3Bhbl9hbGxvY2F0b3IuRGVsZXRlKHNwYW4pOworICAgIHNwYW5B
bGxvY2F0b3IuRGVsZXRlKHNwYW4pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBEb3Vi
bHkgbGlua2VkIGxpc3Qgb2Ygc3BhbnMuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBETExfSW5pdChTcGFuKiBsaXN0KSB7Ci0gIGxpc3QtPm5leHQgPSBsaXN0Owot
ICBsaXN0LT5wcmV2ID0gbGlzdDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBETExJbml0KFNwYW4qIGxp
c3QpCit7CisgICAgbGlzdC0+bmV4dCA9IGxpc3Q7CisgICAgbGlzdC0+cHJldiA9IGxpc3Q7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfUmVtb3ZlKFNwYW4qIHNwYW4pIHsKLSAgc3Bhbi0+
cHJldi0+bmV4dCA9IHNwYW4tPm5leHQ7Ci0gIHNwYW4tPm5leHQtPnByZXYgPSBzcGFuLT5wcmV2
OwotICBzcGFuLT5wcmV2ID0gTlVMTDsKLSAgc3Bhbi0+bmV4dCA9IE5VTEw7CitzdGF0aWMgaW5s
aW5lIHZvaWQgRExMUmVtb3ZlKFNwYW4qIHNwYW4pCit7CisgICAgc3Bhbi0+cHJldi0+bmV4dCA9
IHNwYW4tPm5leHQ7CisgICAgc3Bhbi0+bmV4dC0+cHJldiA9IHNwYW4tPnByZXY7CisgICAgc3Bh
bi0+cHJldiA9IDA7CisgICAgc3Bhbi0+bmV4dCA9IDA7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5M
SU5FIGJvb2wgRExMX0lzRW1wdHkoY29uc3QgU3BhbiogbGlzdCkgewotICByZXR1cm4gbGlzdC0+
bmV4dCA9PSBsaXN0Oworc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBETExfSXNFbXB0eShjb25z
dCBTcGFuKiBsaXN0KQoreworICAgIHJldHVybiBsaXN0LT5uZXh0ID09IGxpc3Q7CiB9CiAKLXN0
YXRpYyBpbnQgRExMX0xlbmd0aChjb25zdCBTcGFuKiBsaXN0KSB7Ci0gIGludCByZXN1bHQgPSAw
OwotICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KSB7
Ci0gICAgcmVzdWx0Kys7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyBpbnQgRExMTGVu
Z3RoKGNvbnN0IFNwYW4qIGxpc3QpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgZm9yIChT
cGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkKKyAgICAgICAgcmVz
dWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIDAgLyogTm90IG5lZWRlZCBhdCB0
aGUgbW9tZW50IC0tIGNhdXNlcyBjb21waWxlciB3YXJuaW5ncyBpZiBub3QgdXNlZCAqLwotc3Rh
dGljIHZvaWQgRExMX1ByaW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KSB7
Ci0gIE1FU1NBR0UoIiUtMTBzICVwOiIsIGxhYmVsLCBsaXN0KTsKLSAgZm9yIChjb25zdCBTcGFu
KiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewotICAgIE1FU1NBR0Uo
IiA8JXAsJXUsJXU+Iiwgcywgcy0+c3RhcnQsIHMtPmxlbmd0aCk7Ci0gIH0KLSAgTUVTU0FHRSgi
XG4iKTsKK3N0YXRpYyB2b2lkIERMTFByaW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFu
KiBsaXN0KQoreworICAgIE1FU1NBR0UoIiUtMTBzICVwOiIsIGxhYmVsLCBsaXN0KTsKKyAgICBm
b3IgKGNvbnN0IFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KQor
ICAgICAgICBNRVNTQUdFKCIgPCVwLCV1LCV1PiIsIHMsIHMtPnN0YXJ0LCBzLT5sZW5ndGgpOwor
ICAgIE1FU1NBR0UoIlxuIik7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIERMTF9Q
cmVwZW5kKFNwYW4qIGxpc3QsIFNwYW4qIHNwYW4pIHsKLSAgQVNTRVJUKHNwYW4tPm5leHQgPT0g
TlVMTCk7Ci0gIEFTU0VSVChzcGFuLT5wcmV2ID09IE5VTEwpOwotICBzcGFuLT5uZXh0ID0gbGlz
dC0+bmV4dDsKLSAgc3Bhbi0+cHJldiA9IGxpc3Q7Ci0gIGxpc3QtPm5leHQtPnByZXYgPSBzcGFu
OwotICBsaXN0LT5uZXh0ID0gc3BhbjsKK3N0YXRpYyBpbmxpbmUgdm9pZCBETExQcmVwZW5kKFNw
YW4qIGxpc3QsIFNwYW4qIHNwYW4pCit7CisgICAgQVNTRVJUKCFzcGFuLT5uZXh0KTsKKyAgICBB
U1NFUlQoIXNwYW4tPnByZXYpOworICAgIHNwYW4tPm5leHQgPSBsaXN0LT5uZXh0OworICAgIHNw
YW4tPnByZXYgPSBsaXN0OworICAgIGxpc3QtPm5leHQtPnByZXYgPSBzcGFuOworICAgIGxpc3Qt
Pm5leHQgPSBzcGFuOwogfQogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEga2VwdCBwZXIgc2l6ZS1j
bGFzcyBpbiBjZW50cmFsIGNhY2hlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVENNYWxsb2NDZW50
cmFsRnJlZUxpc3QgeworcHVibGljOgorICAgIHZvaWQgSW5pdChzaXplX3QgY2wpOworCisgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhbGwgZG8gaW50ZXJuYWwgbG9ja2luZy4KKworICAgIC8vIEluc2Vy
dCB0aGUgc3BlY2lmaWVkIHJhbmdlIGludG8gdGhlIGNlbnRyYWwgZnJlZWxpc3QuIE4gaXMgdGhl
IG51bWJlciBvZgorICAgIC8vIGVsZW1lbnRzIGluIHRoZSByYW5nZS4KKyAgICB2b2lkIEluc2Vy
dFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBhY3R1YWwgbnVtYmVyIG9mIGZldGNoZWQgZWxlbWVudHMgaW50byBOLgorICAgIHZvaWQgUmVt
b3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQqKTsKKworICAgIC8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCisgICAgc2l6ZV90IGxlbmd0
aCgpCisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrKTsKKyAgICAgICAgcmV0
dXJuIGNvdW50ZXI7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyZWUg
b2JqZWN0cyBpbiB0aGUgdHJhbnNmZXIgY2FjaGUuCisgICAgaW50IHRjTGVuZ3RoKCkKKyAgICB7
CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAgICAgICByZXR1cm4gdXNlZFNs
b3RzICogbnVtT2JqZWN0c1RvTW92ZVtzaXplQ2xhc3NdOworICAgIH0KKworI2lmZGVmIFdURl9D
SEFOR0VTCisgICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZv
aWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVh
ZGVyLCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQorICAg
IHsKKyAgICAgICAgZm9yIChTcGFuKiBzcGFuID0gJmVtcHR5OyBzcGFuICYmIHNwYW4gIT0gJmVt
cHR5OyBzcGFuID0gKHNwYW4tPm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkKKyAgICAg
ICAgICAgIEFTU0VSVCghc3Bhbi0+b2JqZWN0cyk7CisKKyAgICAgICAgQVNTRVJUKCFub25lbXB0
eS5vYmplY3RzKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHB0cmRpZmZfdCBub25lbXB0eU9mZnNl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZub25lbXB0eSkgLSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzKTsKKworICAgICAgICBTcGFuKiByZW1vdGVOb25lbXB0
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlbW90
ZUNlbnRyYWxGcmVlTGlzdCkgKyBub25lbXB0eU9mZnNldCk7CisgICAgICAgIFNwYW4qIHJlbW90
ZVNwYW4gPSBub25lbXB0eS5uZXh0OworCisgICAgICAgIGZvciAoU3Bhbiogc3BhbiA9IHJlYWRl
cihyZW1vdGVTcGFuKTsgc3BhbiAmJiByZW1vdGVTcGFuICE9IHJlbW90ZU5vbmVtcHR5OyByZW1v
dGVTcGFuID0gc3Bhbi0+bmV4dCwgc3BhbiA9IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4tPm5l
eHQpIDogMCkpIHsKKyAgICAgICAgICAgIGZvciAodm9pZCogbmV4dE9iamVjdCA9IHNwYW4tPm9i
amVjdHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRM
aXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCisgICAgICAgICAgICAg
ICAgZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFJlbW92ZSBv
YmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgorICAgIC8vIFJldHVybiAwIGlmIG5vIGZyZWUg
ZW50cmllcyBpbiBjYWNoZS4KKyAgICB2b2lkKiBGZXRjaEZyb21TcGFucygpOworCisgICAgLy8g
UkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFJlbW92ZSBvYmplY3QgZnJvbSBjYWNoZSBh
bmQgcmV0dXJuLiBGZXRjaGVzCisgICAgLy8gZnJvbSBwYWdlaGVhcCBpZiBjYWNoZSBpcyBlbXB0
eS4gT25seSByZXR1cm5zCisgICAgLy8gMCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCisgICAgdm9p
ZCogRmV0Y2hGcm9tU3BhbnNTYWZlKCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxk
CisgICAgLy8gUmVsZWFzZSBhIGxpbmtlZCBsaXN0IG9mIG9iamVjdHMgdG8gc3BhbnMuCisgICAg
Ly8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9jay4KKyAgICB2b2lkIFJlbGVhc2VMaXN0VG9T
cGFucyh2b2lkICpzdGFydCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkCisgICAg
Ly8gUmVsZWFzZSBhbiBvYmplY3QgdG8gc3BhbnMuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IHJl
bGVhc2UgbG9jay4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgUmVsZWFzZVRvU3BhbnModm9pZCop
OworCisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFBvcHVsYXRlIGNhY2hl
IGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVhcC4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkg
cmVsZWFzZSBsb2NrLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBQb3B1bGF0ZSgpOworCisgICAg
Ly8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZC4KKyAgICAvLyBUcmllcyB0byBtYWtlIHJvb20gZm9y
IGEgVENFbnRyeS4gSWYgdGhlIGNhY2hlIGlzIGZ1bGwgaXQgd2lsbCB0cnkgdG8KKyAgICAvLyBl
eHBhbmQgaXQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBvdGhlciBjYWNoZSBzaXplLiBSZXR1cm4gZmFs
c2UgaWYgdGhlcmUgaXMKKyAgICAvLyBubyBzcGFjZS4KKyAgICBib29sIE1ha2VDYWNoZVNwYWNl
KCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBmb3IgbG9ja2VkU2l6ZUNsYXNzIGlzIGhlbGQu
CisgICAgLy8gUGlja3MgYSAicmFuZG9tIiBzaXplIGNsYXNzIHRvIHN0ZWFsIFRDRW50cnkgc2xv
dCBmcm9tLiBJbiByZWFsaXR5IGl0CisgICAgLy8ganVzdCBpdGVyYXRlcyBvdmVyIHRoZSBzaXpl
Y2xhc3NlcyBidXQgZG9lcyBzbyB3aXRob3V0IHRha2luZyBhIGxvY2suCisgICAgLy8gUmV0dXJu
cyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IGxvY2sgYSAicmFuZG9t
IiBzaXplIGNsYXNzLgorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRXZpY3RSYW5kb21T
aXplQ2xhc3Moc2l6ZV90IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSk7CisKKyAgICAvLyBS
RVFVSVJFUzogbG9jayBpcyAqbm90KiBoZWxkLgorICAgIC8vIFRyaWVzIHRvIHNocmluayB0aGUg
Q2FjaGUuIElmIGZvcmNlIGlzIHRydWUgaXQgd2lsbCByZWxhc2Ugb2JqZWN0cyB0bworICAgIC8v
IHNwYW5zIGlmIGl0IGFsbG93cyBpdCB0byBzaHJpbmsgdGhlIGNhY2hlLiBSZXR1cm4gZmFsc2Ug
aWYgaXQgZmFpbGVkIHRvCisgICAgLy8gc2hyaW5rIHRoZSBjYWNoZS4gRGVjcmVtZW50cyBjYWNo
ZVNpemUgb24gc3VjY2Vlc3MuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IHRha2UgbG9jay4gSWYg
aXQgdGFrZXMgbG9jaywgdGhlIGxvY2tlZFNpemVDbGFzcworICAgIC8vIGxvY2sgaXMgcmVsZWFz
ZWQgdG8gdGhlIHRocmVhZCBmcm9tIGhvbGRpbmcgdHdvIHNpemUgY2xhc3MgbG9ja3MKKyAgICAv
LyBjb25jdXJyZW50bHkgd2hpY2ggY291bGQgbGVhZCB0byBhIGRlYWRsb2NrLgorICAgIGJvb2wg
U2hyaW5rQ2FjaGUoaW50IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSk7CisKKyAgICAvLyBU
aGlzIGxvY2sgcHJvdGVjdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuIGNhY2hlZF9lbnRyaWVzIGFu
ZCBjYWNoZVNpemUKKyAgICAvLyBtYXkgYmUgbG9va2VkIGF0IHdpdGhvdXQgaG9sZGluZyB0aGUg
bG9jay4KKyAgICBTcGluTG9jayBsb2NrOworCisgICAgLy8gV2Uga2VlcCBsaW5rZWQgbGlzdHMg
b2YgZW1wdHkgYW5kIG5vbi1lbXB0eSBzcGFucy4KKyAgICBzaXplX3Qgc2l6ZUNsYXNzOyAvLyBN
eSBzaXplIGNsYXNzCisgICAgU3BhbiBlbXB0eTsgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0IG9m
IGVtcHR5IHNwYW5zCisgICAgU3BhbiBub25lbXB0eTsgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0
IG9mIG5vbi1lbXB0eSBzcGFucworICAgIHNpemVfdCBjb3VudGVyOyAvLyBOdW1iZXIgb2YgZnJl
ZSBvYmplY3RzIGluIGNhY2hlIGVudHJ5CisKKyAgICAvLyBIZXJlIHdlIHJlc2VydmUgc3BhY2Ug
Zm9yIFRDRW50cnkgY2FjaGUgc2xvdHMuIFNpbmNlIG9uZSBzaXplIGNsYXNzIGNhbgorICAgIC8v
IGVuZCB1cCBnZXR0aW5nIGFsbCB0aGUgVENFbnRyaWVzIHF1b3RhIGluIHRoZSBzeXN0ZW0gd2Ug
anVzdCBwcmVhbGxvY2F0ZQorICAgIC8vIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGVudHJpZXMgaGVy
ZS4KKyAgICBUQ0VudHJ5IHRjU2xvdHNba051bVRyYW5zZmVyRW50cmllc107CisKKyAgICAvLyBO
dW1iZXIgb2YgY3VycmVudGx5IHVzZWQgY2FjaGVkIGVudHJpZXMgaW4gdGNTbG90cy4gVGhpcyB2
YXJpYWJsZSBpcworICAgIC8vIHVwZGF0ZWQgdW5kZXIgYSBsb2NrIGJ1dCBjYW4gYmUgcmVhZCB3
aXRob3V0IG9uZS4KKyAgICBpbnQzMl90IHVzZWRTbG90czsKKyAgICAvLyBUaGUgY3VycmVudCBu
dW1iZXIgb2Ygc2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4gVGhpcyBpcyBhbgorICAgIC8vIGFk
YXB0aXZlIHZhbHVlIHRoYXQgaXMgaW5jcmVhc2VkIGlmIHRoZXJlIGlzIGxvdHMgb2YgdHJhZmZp
YworICAgIC8vIG9uIGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KKyAgICBpbnQzMl90IGNhY2hlU2l6ZTsK
K307CisKKy8vIFBhZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVsdGlwbGUgb2YgNjQg
Ynl0ZXMKK2NsYXNzIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkIDogcHVibGljIFRDTWFs
bG9jQ2VudHJhbEZyZWVMaXN0IHsKK3ByaXZhdGU6CisgICAgY2hhciBwYWRbKDY0IC0gKHNpemVv
ZihUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCkgJSA2NCkpICUgNjRdOworfTsKKworI2lmIE9TKERB
UldJTikKK3N0cnVjdCBTcGFuOworY2xhc3MgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQ7
CitjbGFzcyBUQ01hbGxvY1BhZ2VIZWFwOworY2xhc3MgVENNYWxsb2NUaHJlYWRDYWNoZTsKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvcjsKKworY2xhc3MgRmFz
dE1hbGxvY1pvbmUgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKKworICAgIHN0
YXRpYyBrZXJuX3JldHVybl90IGVudW1lcmF0ZSh0YXNrX3QsIHZvaWQqLCB1bnNpZ25lZCB0eXBl
TW1hc2ssIHZtX2FkZHJlc3NfdCB6b25lQWRkcmVzcywgbWVtb3J5X3JlYWRlcl90LCB2bV9yYW5n
ZV9yZWNvcmRlcl90KTsKKyAgICBzdGF0aWMgc2l6ZV90IGdvb2RTaXplKG1hbGxvY196b25lX3Qq
LCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZTsgfQorICAgIHN0YXRpYyBib29sZWFuX3QgY2hl
Y2sobWFsbG9jX3pvbmVfdCopIHsgcmV0dXJuIHRydWU7IH0KKyAgICBzdGF0aWMgdm9pZCAgcHJp
bnQobWFsbG9jX3pvbmVfdCosIGJvb2xlYW5fdCkgeyB9CisgICAgc3RhdGljIHZvaWQgbG9nKG1h
bGxvY196b25lX3QqLCB2b2lkKikgeyB9CisgICAgc3RhdGljIHZvaWQgZm9yY2VMb2NrKG1hbGxv
Y196b25lX3QqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBmb3JjZVVubG9jayhtYWxsb2Nfem9uZV90
KikgeyB9CisgICAgc3RhdGljIHZvaWQgc3RhdGlzdGljcyhtYWxsb2Nfem9uZV90KiwgbWFsbG9j
X3N0YXRpc3RpY3NfdCogc3RhdHMpIHsgbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YobWFsbG9jX3N0
YXRpc3RpY3NfdCkpOyB9CisKK3ByaXZhdGU6CisgICAgRmFzdE1hbGxvY1pvbmUoVENNYWxsb2NQ
YWdlSGVhcCosIFRDTWFsbG9jVGhyZWFkQ2FjaGUqKiwgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQ
YWRkZWQqLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFs
bG9jVGhyZWFkQ2FjaGU+Kik7CisgICAgc3RhdGljIHNpemVfdCBzaXplKG1hbGxvY196b25lX3Qq
LCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQqIHpvbmVNYWxsb2MobWFsbG9jX3pvbmVf
dCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHpvbmVDYWxsb2MobWFsbG9jX3pvbmVfdCos
IHNpemVfdCBudW1JdGVtcywgc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCB6b25lRnJlZShtYWxs
b2Nfem9uZV90Kiwgdm9pZCopOworICAgIHN0YXRpYyB2b2lkKiB6b25lUmVhbGxvYyhtYWxsb2Nf
em9uZV90Kiwgdm9pZCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHpvbmVWYWxsb2MobWFs
bG9jX3pvbmVfdCosIHNpemVfdCkgeyBMT0dfRVJST1IoInZhbGxvYyBpcyBub3Qgc3VwcG9ydGVk
Iik7IHJldHVybiAwOyB9CisgICAgc3RhdGljIHZvaWQgem9uZURlc3Ryb3kobWFsbG9jX3pvbmVf
dCopIHsgfQorCisgICAgbWFsbG9jX3pvbmVfdCBtX3pvbmU7CisgICAgVENNYWxsb2NQYWdlSGVh
cCogbV9wYWdlSGVhcDsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiogbV90aHJlYWRIZWFwczsK
KyAgICBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCogbV9jZW50cmFsQ2FjaGVzOworICAg
IFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBtX3NwYW5BbGxvY2F0b3I7CisgICAgUGFnZUhlYXBB
bGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIG1fcGFnZUhlYXBBbGxvY2F0b3I7Cit9Owor
CisjZW5kaWYKKworI2VuZGlmCisKKyNpZm5kZWYgV1RGX0NIQU5HRVMKKy8vIFRoaXMgI2lmZGVm
IHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgc2V0LiBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgor
Ly8geW91J3JlIHBvcnRpbmcgdG8gYSBzeXN0ZW0gd2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQg
YSBzdGFja3RyYWNlLgorI2lmZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKKy8vIFdlIHVzZSAjZGVm
aW5lIHNvIGNvZGUgY29tcGlsZXMgZXZlbiBpZiB5b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNv
bWVob3cuCisjIGRlZmluZSBHZXRTdGFja1RyYWNlKHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQor
I2Vsc2UKKyMgaW5jbHVkZSA8Z29vZ2xlL3N0YWNrdHJhY2UuaD4KKyNlbmRpZgorI2VuZGlmCisK
Ky8vIEV2ZW4gaWYgd2UgaGF2ZSBzdXBwb3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0
aGUgY29tcGlsZXIKKy8vIGFuZCBsaW5rZXIsIHRoZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuIFdl
IG5lZWQgdG8gY2hlY2sgdGhhdCBhdAorLy8gcnVudGltZS4gUmlnaHQgbm93LCB3ZSBoYXZlIHRv
IGtlZXAgYSBtYW51YWwgc2V0IG9mICJiYWQiIE9TZXMuCisjaWYgZGVmaW5lZChIQVZFX1RMUykK
K3N0YXRpYyBib29sIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7IC8vIGJlIGNvbnNlcnZhdGl2
ZQorc3RhdGljIGlubGluZSBib29sIEtlcm5lbFN1cHBvcnRzVExTKCkKK3sKKyAgICByZXR1cm4g
a2VybmVsU3VwcG9ydHNUbHM7Cit9CisjIGlmICFIQVZFX0RFQ0xfVU5BTUUgLy8gaWYgdG9vIG9s
ZCBmb3IgdW5hbWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUworc3RhdGljIHZvaWQgQ2hlY2tJ
Zktlcm5lbFN1cHBvcnRzVExTKCkKK3sKKyAgICBrZXJuZWxTdXBwb3J0c1RscyA9IGZhbHNlOwor
fQorIyBlbHNlCisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+IC8vIERFQ0xfVU5BTUUgY2hlY2tl
ZCBmb3IgPHN5cy91dHNuYW1lLmg+IHRvbworc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBv
cnRzVExTKCkKK3sKKyAgICBzdHJ1Y3QgdXRzbmFtZSBidWY7CisgICAgaWYgKHVuYW1lKCZidWYp
KSB7IC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlCisgICAgICAgIE1FU1NBR0UoInVuYW1lIGZhaWxl
ZCBhc3N1bWluZyBubyBUTFMgc3VwcG9ydCAoZXJybm89JWQpXG4iLCBlcnJubyk7CisgICAgICAg
IGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7CisgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChi
dWYuc3lzbmFtZSwgImxpbnV4IikpIHsKKyAgICAgICAgLy8gVGhlIGxpbnV4IGNhc2U6IHRoZSBm
aXJzdCBrZXJuZWwgdG8gc3VwcG9ydCBUTFMgd2FzIDIuNi4wCisgICAgICAgIGlmIChidWYucmVs
ZWFzZVswXSA8ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicpIC8vIDAueCBvciAxLngKKyAg
ICAgICAgICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGJ1
Zi5yZWxlYXNlWzBdID09ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicKKyAgICAgICAgICAg
ICAgICAmJiBidWYucmVsZWFzZVsyXSA+PSAnMCcgJiYgYnVmLnJlbGVhc2VbMl0gPCAnNicKKyAg
ICAgICAgICAgICAgICAmJiBidWYucmVsZWFzZVszXSA9PSAnLicpIC8vIDIuMCAtIDIuNQorICAg
ICAgICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSB0cnVlOworICAgIH0gZWxzZSAvLyBzb21lIG90aGVy
IGtlcm5lbCwgd2UnbGwgYmUgb3B0aW1pc2l0aWMKKyAgICAgICAga2VybmVsU3VwcG9ydHNUbHMg
PSB0cnVlOworICAgIC8vIFRPRE8oY3NpbHZlcnMpOiBWTE9HKDEpIHRoZSB0bHMgc3RhdHVzIG9u
Y2Ugd2Ugc3VwcG9ydCBSQVdfVkxPRworfQorI2VuZGlmIC8vIEhBVkVfREVDTF9VTkFNRQorI2Vu
ZGlmIC8vIEhBVkVfVExTCisKKy8vIF9fVEhST1cgaXMgZGVmaW5lZCBpbiBnbGliYyBzeXN0ZW1z
LiBJdCBtZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKKy8vICJUaGlzIGZ1bmN0aW9uIHdpbGwg
bmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uLiIgSXQncyBhbiBvcHRpb25hbAorLy8gb3B0aW1pemF0
aW9uIHRvb2wsIGJ1dCB3ZSBtYXkgbmVlZCB0byB1c2UgaXQgdG8gbWF0Y2ggZ2xpYmMgcHJvdG90
eXBlcy4KKyNpZm5kZWYgX19USFJPVyAvLyBJIGd1ZXNzIHdlJ3JlIG5vdCBvbiBhIGdsaWJjIHN5
c3RlbQorI2RlZmluZSBfX1RIUk9XIC8vIF9fVEhST1cgaXMganVzdCBhbiBvcHRpbWl6YXRpb24s
IHNvIG9rIHRvIG1ha2UgaXQgIiIKKyNlbmRpZgorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBT
dGFjayB0cmFjZXMga2VwdCBmb3Igc2FtcGxlZCBhbGxvY2F0aW9ucwotLy8gICBUaGUgZm9sbG93
aW5nIHN0YXRlIGlzIHByb3RlY3RlZCBieSBwYWdlaGVhcF9sb2NrXy4KKy8vICAgVGhlIGZvbGxv
d2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFnZWhlYXBMb2NrLgogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiAvLyBzaXplL2RlcHRoIGFyZSBtYWRlIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVy
IHNvIHRoYXQgc29tZSBnZW5lcmljCiAvLyBjb2RlIGJlbG93IGNhbiBjb252ZW5pZW50bHkgY2Fz
dCB0aGVtIGJhY2sgYW5kIGZvcnRoIHRvIHZvaWQqLgogc3RhdGljIGNvbnN0IGludCBrTWF4U3Rh
Y2tEZXB0aCA9IDMxOwogc3RydWN0IFN0YWNrVHJhY2UgewotICB1aW50cHRyX3Qgc2l6ZTsgICAg
ICAgICAgLy8gU2l6ZSBvZiBvYmplY3QKLSAgdWludHB0cl90IGRlcHRoOyAgICAgICAgIC8vIE51
bWJlciBvZiBQQyB2YWx1ZXMgc3RvcmVkIGluIGFycmF5IGJlbG93Ci0gIHZvaWQqICAgICBzdGFj
a1trTWF4U3RhY2tEZXB0aF07CisgICAgdWludHB0cl90IHNpemU7IC8vIFNpemUgb2Ygb2JqZWN0
CisgICAgdWludHB0cl90IGRlcHRoOyAvLyBOdW1iZXIgb2YgUEMgdmFsdWVzIHN0b3JlZCBpbiBh
cnJheSBiZWxvdworICAgIHZvaWQqIHN0YWNrW2tNYXhTdGFja0RlcHRoXTsKIH07CiBzdGF0aWMg
UGFnZUhlYXBBbGxvY2F0b3I8U3RhY2tUcmFjZT4gc3RhY2t0cmFjZV9hbGxvY2F0b3I7Ci1zdGF0
aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CitzdGF0aWMgU3BhbiBzYW1wbGVkT2JqZWN0czsKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTWFwIGZyb20gcGFnZS1pZCB0byBwZXItcGFnZSBkYXRh
CkBAIC0xMjI4LDkgKzEzNzcsOSBAQCBzdGF0aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CiAKIC8v
IFNlbGVjdG9yIGNsYXNzIC0tIGdlbmVyYWwgc2VsZWN0b3IgdXNlcyAzLWxldmVsIG1hcAogdGVt
cGxhdGUgPGludCBCSVRTPiBjbGFzcyBNYXBTZWxlY3RvciB7Ci0gcHVibGljOgotICB0eXBlZGVm
IFRDTWFsbG9jX1BhZ2VNYXAzPEJJVFMta1BhZ2VTaGlmdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNr
ZWRDYWNoZTxCSVRTLCB1aW50NjRfdD4gQ2FjaGVUeXBlOworcHVibGljOgorICAgIHR5cGVkZWYg
VENNYWxsb2NfUGFnZU1hcDM8QklUUy1rUGFnZVNoaWZ0PiBUeXBlOworICAgIHR5cGVkZWYgUGFj
a2VkQ2FjaGU8QklUUywgdWludDY0X3Q+IENhY2hlVHlwZTsKIH07CiAKICNpZiBkZWZpbmVkKFdU
Rl9DSEFOR0VTKQpAQCAtMTI0NiwyNCArMTM5NSwyNCBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IGtC
aXRzVW51c2VkT242NEJpdCA9CiAKIC8vIEEgdGhyZWUtbGV2ZWwgbWFwIGZvciA2NC1iaXQgbWFj
aGluZXMKIHRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDY0PiB7Ci0gcHVibGljOgotICB0
eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPDY0IC0ga1BhZ2VTaGlmdCAtIGtCaXRzVW51c2VkT242
NEJpdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNrZWRDYWNoZTw2NCwgdWludDY0X3Q+IENhY2hlVHlw
ZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPDY0IC0ga1BhZ2VTaGlm
dCAtIGtCaXRzVW51c2VkT242NEJpdD4gVHlwZTsKKyAgICB0eXBlZGVmIFBhY2tlZENhY2hlPDY0
LCB1aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsKICNlbmRpZgogCiAvLyBBIHR3by1sZXZlbCBtYXAg
Zm9yIDMyLWJpdCBtYWNoaW5lcwogdGVtcGxhdGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8MzI+IHsK
LSBwdWJsaWM6Ci0gIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDI8MzIgLSBrUGFnZVNoaWZ0PiBU
eXBlOwotICB0eXBlZGVmIFBhY2tlZENhY2hlPDMyIC0ga1BhZ2VTaGlmdCwgdWludDE2X3Q+IENh
Y2hlVHlwZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAyPDMyIC0ga1Bh
Z2VTaGlmdD4gVHlwZTsKKyAgICB0eXBlZGVmIFBhY2tlZENhY2hlPDMyIC0ga1BhZ2VTaGlmdCwg
dWludDE2X3Q+IENhY2hlVHlwZTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBhZ2Ut
bGV2ZWwgYWxsb2NhdG9yCiAvLyAgKiBFYWdlciBjb2FsZXNjaW5nCiAvLwotLy8gSGVhcCBmb3Ig
cGFnZS1sZXZlbCBhbGxvY2F0aW9uLiAgV2UgYWxsb3cgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBh
CisvLyBIZWFwIGZvciBwYWdlLWxldmVsIGFsbG9jYXRpb24uIFdlIGFsbG93IGFsbG9jYXRpbmcg
YW5kIGZyZWVpbmcgYQogLy8gY29udGlndW91cyBydW5zIG9mIHBhZ2VzIChjYWxsZWQgYSAic3Bh
biIpLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMjcyLDEyICsxNDIxLDEyIEBAIHRlbXBs
YXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDMyPiB7CiAvLyB0aGUgY2VudHJhbCBjYWNoZSBvciBh
bnkgdGhyZWFkIGNhY2hlcy4gV2UgdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgdG8KIC8vIHBlcmlv
ZGljYWxseSBzY2FuIHRoZSBmcmVlIGxpc3QgYW5kIHJlbGVhc2UgYSBwZXJjZW50YWdlIG9mIGl0
IGJhY2sgdG8gdGhlIE9TLgogCi0vLyBJZiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gZXhjZWVkcyBr
TWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQsIHRoZQorLy8gSWYgZnJlZUNvbW1pdHRlZFBh
Z2VzIGV4Y2VlZHMga01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCB0aGUKIC8vIGJhY2tn
cm91bmQgdGhyZWFkOgogLy8gICAgIC0gd2FrZXMgdXAKIC8vICAgICAtIHBhdXNlcyBmb3Iga1Nj
YXZlbmdlRGVsYXlJblNlY29uZHMKIC8vICAgICAtIHJldHVybnMgdG8gdGhlIE9TIGEgcGVyY2Vu
dGFnZSBvZiB0aGUgbWVtb3J5IHRoYXQgcmVtYWluZWQgdW51c2VkIGR1cmluZwotLy8gICAgICAg
dGhhdCBwYXVzZSAoa1NjYXZlbmdlUGVyY2VudGFnZSAqIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdl
c19zaW5jZV9sYXN0X3NjYXZlbmdlXykKKy8vICAgICAgIHRoYXQgcGF1c2UgKGtTY2F2ZW5nZVBl
cmNlbnRhZ2UgKiBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkKIC8vIFRo
ZSBnb2FsIG9mIHRoaXMgc3RyYXRlZ3kgaXMgdG8gcmVkdWNlIG1lbW9yeSBwcmVzc3VyZSBpbiBh
IHRpbWVseSBmYXNoaW9uCiAvLyB3aGlsZSBhdm9pZGluZyB0aHJhc2hpbmcgdGhlIE9TIGFsbG9j
YXRvci4KIApAQCAtMTI5MiwyMzIgKzE0NDEsMjQxIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBrU2Nh
dmVuZ2VQZXJjZW50YWdlID0KIC8vIG51bWJlciBvZiBzcGFuIGxpc3RzIHRvIGtlZXAgc3BhbnMg
aW4gd2hlbiBtZW1vcnkgaXMgcmV0dXJuZWQuCiBzdGF0aWMgY29uc3QgaW50IGtNaW5TcGFuTGlz
dHNXaXRoU3BhbnMgPSAzMjsKIAotLy8gTnVtYmVyIG9mIGZyZWUgY29tbWl0dGVkIHBhZ2VzIHRo
YXQgd2Ugd2FudCB0byBrZWVwIGFyb3VuZC4gIFRoZSBtaW5pbXVtIG51bWJlciBvZiBwYWdlcyB1
c2VkIHdoZW4gdGhlcmUKLS8vIGlzIDEgc3BhbiBpbiBlYWNoIG9mIHRoZSBmaXJzdCBrTWluU3Bh
bkxpc3RzV2l0aFNwYW5zIHNwYW5saXN0cy4gIEN1cnJlbnRseSA1MjggcGFnZXMuCisvLyBOdW1i
ZXIgb2YgZnJlZSBjb21taXR0ZWQgcGFnZXMgdGhhdCB3ZSB3YW50IHRvIGtlZXAgYXJvdW5kLiBU
aGUgbWluaW11bSBudW1iZXIgb2YgcGFnZXMgdXNlZCB3aGVuIHRoZXJlCisvLyBpcyAxIHNwYW4g
aW4gZWFjaCBvZiB0aGUgZmlyc3Qga01pblNwYW5MaXN0c1dpdGhTcGFucyBzcGFubGlzdHMuIEN1
cnJlbnRseSA1MjggcGFnZXMuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNaW5pbXVtRnJlZUNvbW1p
dHRlZFBhZ2VDb3VudCA9IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgKiAoKDEuMGYra01pblNwYW5M
aXN0c1dpdGhTcGFucykgLyAyLjBmKTsKIAogI2VuZGlmCiAKLXN0YXRpYyBTcGluTG9jayBwYWdl
aGVhcF9sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CitzdGF0aWMgU3BpbkxvY2sgcGFnZWhl
YXBMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CiAKLWNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFw
IHsKLSBwdWJsaWM6Ci0gIHZvaWQgaW5pdCgpOworY2xhc3MgVENNYWxsb2NQYWdlSGVhcCB7Citw
dWJsaWM6CisgICAgdm9pZCBpbml0KCk7CiAKLSAgLy8gQWxsb2NhdGUgYSBydW4gb2YgIm4iIHBh
Z2VzLiAgUmV0dXJucyB6ZXJvIGlmIG91dCBvZiBtZW1vcnkuCi0gIFNwYW4qIE5ldyhMZW5ndGgg
bik7CisgICAgLy8gQWxsb2NhdGUgYSBydW4gb2YgIm4iIHBhZ2VzLiBSZXR1cm5zIHplcm8gaWYg
b3V0IG9mIG1lbW9yeS4KKyAgICBTcGFuKiBOZXcoTGVuZ3RoKTsKIAotICAvLyBEZWxldGUgdGhl
IHNwYW4gIltwLCBwK24tMV0iLgotICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkg
ZWFybGllciBjYWxsIHRvIE5ldygpIGFuZAotICAvLyAgICAgICAgICAgaGFzIG5vdCB5ZXQgYmVl
biBkZWxldGVkLgotICB2b2lkIERlbGV0ZShTcGFuKiBzcGFuKTsKLQotICAvLyBNYXJrIGFuIGFs
bG9jYXRlZCBzcGFuIGFzIGJlaW5nIHVzZWQgZm9yIHNtYWxsIG9iamVjdHMgb2YgdGhlCi0gIC8v
IHNwZWNpZmllZCBzaXplLWNsYXNzLgotICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQg
YnkgYW4gZWFybGllciBjYWxsIHRvIE5ldygpCi0gIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5
ZXQgYmVlbiBkZWxldGVkLgotICB2b2lkIFJlZ2lzdGVyU2l6ZUNsYXNzKFNwYW4qIHNwYW4sIHNp
emVfdCBzYyk7Ci0KLSAgLy8gU3BsaXQgYW4gYWxsb2NhdGVkIHNwYW4gaW50byB0d28gc3BhbnM6
IG9uZSBvZiBsZW5ndGggIm4iIHBhZ2VzCi0gIC8vIGZvbGxvd2VkIGJ5IGFub3RoZXIgc3BhbiBv
ZiBsZW5ndGggInNwYW4tPmxlbmd0aCAtIG4iIHBhZ2VzLgotICAvLyBNb2RpZmllcyAiKnNwYW4i
IHRvIHBvaW50IHRvIHRoZSBmaXJzdCBzcGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCi0gIC8vIFJl
dHVybnMgYSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgc3Bhbi4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6
ICIwIDwgbiA8IHNwYW4tPmxlbmd0aCIKLSAgLy8gUkVRVUlSRVM6ICFzcGFuLT5mcmVlCi0gIC8v
IFJFUVVJUkVTOiBzcGFuLT5zaXplY2xhc3MgPT0gMAotICBTcGFuKiBTcGxpdChTcGFuKiBzcGFu
LCBMZW5ndGggbik7Ci0KLSAgLy8gUmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgc3BlY2lm
aWVkIHBhZ2UuCi0gIGlubGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJRCBwKSBjb25zdCB7
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHBhZ2VtYXBfLmdldChwKSk7Ci0g
IH0KKyAgICAvLyBEZWxldGUgdGhlIHNwYW4gIltwLCBwK24tMV0iLgorICAgIC8vIFJFUVVJUkVT
OiBzcGFuIHdhcyByZXR1cm5lZCBieSBlYXJsaWVyIGNhbGwgdG8gTmV3KCkgYW5kCisgICAgLy8g
ICAgICAgICAgIGhhcyBub3QgeWV0IGJlZW4gZGVsZXRlZC4KKyAgICB2b2lkIERlbGV0ZShTcGFu
Kik7CisKKyAgICAvLyBNYXJrIGFuIGFsbG9jYXRlZCBzcGFuIGFzIGJlaW5nIHVzZWQgZm9yIHNt
YWxsIG9iamVjdHMgb2YgdGhlCisgICAgLy8gc3BlY2lmaWVkIHNpemUtY2xhc3MuCisgICAgLy8g
UkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgY2FsbCB0byBOZXcoKQor
ICAgIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgorICAgIHZvaWQg
UmVnaXN0ZXJTaXplQ2xhc3MoU3BhbiosIHNpemVfdCBzYyk7CisKKyAgICAvLyBTcGxpdCBhbiBh
bGxvY2F0ZWQgc3BhbiBpbnRvIHR3byBzcGFuczogb25lIG9mIGxlbmd0aCAibiIgcGFnZXMKKyAg
ICAvLyBmb2xsb3dlZCBieSBhbm90aGVyIHNwYW4gb2YgbGVuZ3RoICJzcGFuLT5sZW5ndGggLSBu
IiBwYWdlcy4KKyAgICAvLyBNb2RpZmllcyAiKnNwYW4iIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBz
cGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCisgICAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
IHNlY29uZCBzcGFuLgorICAgIC8vCisgICAgLy8gUkVRVUlSRVM6ICIwIDwgbiA8IHNwYW4tPmxl
bmd0aCIKKyAgICAvLyBSRVFVSVJFUzogIXNwYW4tPmZyZWUKKyAgICAvLyBSRVFVSVJFUzogc3Bh
bi0+c2l6ZWNsYXNzID09IDAKKyAgICBTcGFuKiBTcGxpdChTcGFuKiwgTGVuZ3RoKTsKKworICAg
IC8vIFJldHVybiB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBwYWdlLgorICAgIGlu
bGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJRCBwKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHBhZ2VtYXAuZ2V0KHApKTsKKyAgICB9CiAK
ICNpZmRlZiBXVEZfQ0hBTkdFUwotICBpbmxpbmUgU3BhbiogR2V0RGVzY3JpcHRvckVuc3VyZVNh
ZmUoUGFnZUlEIHApCi0gIHsKLSAgICAgIHBhZ2VtYXBfLkVuc3VyZShwLCAxKTsKLSAgICAgIHJl
dHVybiBHZXREZXNjcmlwdG9yKHApOwotICB9CisgICAgaW5saW5lIFNwYW4qIEdldERlc2NyaXB0
b3JFbnN1cmVTYWZlKFBhZ2VJRCBwKQorICAgIHsKKyAgICAgICAgcGFnZW1hcC5FbnN1cmUocCwg
MSk7CisgICAgICAgIHJldHVybiBHZXREZXNjcmlwdG9yKHApOworICAgIH0KICAgICAKLSAgc2l6
ZV90IFJldHVybmVkQnl0ZXMoKSBjb25zdDsKKyAgICBzaXplX3QgUmV0dXJuZWRCeXRlcygpIGNv
bnN0OwogI2VuZGlmCiAKLSAgLy8gRHVtcCBzdGF0ZSB0byBzdGRlcnIKKyAgICAvLyBEdW1wIHN0
YXRlIHRvIHN0ZGVycgogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICB2b2lkIER1bXAoVENNYWxsb2Nf
UHJpbnRlciogb3V0KTsKKyAgICB2b2lkIER1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KTsKICNl
bmRpZgogCi0gIC8vIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVt
Ci0gIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRlcygpIGNvbnN0IHsgcmV0dXJuIHN5c3RlbV9i
eXRlc187IH0KKyAgICAvLyBSZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5
c3RlbQorICAgIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRlcygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gc3lzdGVtQnl0ZXM7CisgICAgfQogCi0gIC8vIFJldHVybiBudW1iZXIgb2Yg
ZnJlZSBieXRlcyBpbiBoZWFwCi0gIHVpbnQ2NF90IEZyZWVCeXRlcygpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmcmVlX3BhZ2VzXykgPDwga1BhZ2VTaGlmdCk7
Ci0gIH0KKyAgICAvLyBSZXR1cm4gbnVtYmVyIG9mIGZyZWUgYnl0ZXMgaW4gaGVhcAorICAgIHVp
bnQ2NF90IEZyZWVCeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihmcmVlUGFnZXMpIDw8IGtQYWdlU2hpZnQpOworICAgIH0KIAotICBib29s
IENoZWNrKCk7Ci0gIHNpemVfdCBDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdl
cywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCk7CisgICAgYm9vbCBDaGVjaygp
OworICAgIHNpemVfdCBDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pblBhZ2VzLCBMZW5n
dGggbWF4UGFnZXMsIGJvb2wgZGVjb21taXR0ZWQpOwogCi0gIC8vIFJlbGVhc2UgYWxsIHBhZ2Vz
IG9uIHRoZSBmcmVlIGxpc3QgZm9yIHJldXNlIGJ5IHRoZSBPUzoKLSAgdm9pZCBSZWxlYXNlRnJl
ZVBhZ2VzKCk7Ci0gIHZvaWQgUmVsZWFzZUZyZWVMaXN0KFNwYW4qLCBTcGFuKik7Ci0KLSAgLy8g
UmV0dXJuIDAgaWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiwgb3IgZWxzZSB0aGUgY29ycmVjdCBz
aXplY2xhc3MgZm9yIHAuCi0gIC8vIFJlYWRzIGFuZCB3cml0ZXMgdG8gcGFnZW1hcF9jYWNoZV8g
ZG8gbm90IHJlcXVpcmUgbG9ja2luZy4KLSAgLy8gVGhlIGVudHJpZXMgYXJlIDY0IGJpdHMgb24g
NjQtYml0IGhhcmR3YXJlIGFuZCAxNiBiaXRzIG9uCi0gIC8vIDMyLWJpdCBoYXJkd2FyZSwgYW5k
IHdlIGRvbid0IG1pbmQgcmFjaW5lc3MgYXMgbG9uZyBhcyBlYWNoIHJlYWQgb2YKLSAgLy8gYW4g
ZW50cnkgeWllbGRzIGEgdmFsaWQgZW50cnksIG5vdCBhIHBhcnRpYWxseSB1cGRhdGVkIGVudHJ5
LgotICBzaXplX3QgR2V0U2l6ZUNsYXNzSWZDYWNoZWQoUGFnZUlEIHApIGNvbnN0IHsKLSAgICBy
ZXR1cm4gcGFnZW1hcF9jYWNoZV8uR2V0T3JEZWZhdWx0KHAsIDApOwotICB9Ci0gIHZvaWQgQ2Fj
aGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNpemVfdCBjbCkgY29uc3QgeyBwYWdlbWFwX2NhY2hlXy5Q
dXQocCwgY2wpOyB9CisgICAgLy8gUmVsZWFzZSBhbGwgcGFnZXMgb24gdGhlIGZyZWUgbGlzdCBm
b3IgcmV1c2UgYnkgdGhlIE9TOgorICAgIHZvaWQgUmVsZWFzZUZyZWVQYWdlcygpOworICAgIHZv
aWQgUmVsZWFzZUZyZWVMaXN0KFNwYW4qLCBTcGFuKik7CisKKyAgICAvLyBSZXR1cm4gMCBpZiB3
ZSBoYXZlIG5vIGluZm9ybWF0aW9uLCBvciBlbHNlIHRoZSBjb3JyZWN0IHNpemVjbGFzcyBmb3Ig
cC4KKyAgICAvLyBSZWFkcyBhbmQgd3JpdGVzIHRvIHBhZ2VtYXBjYWNoZSBkbyBub3QgcmVxdWly
ZSBsb2NraW5nLgorICAgIC8vIFRoZSBlbnRyaWVzIGFyZSA2NCBiaXRzIG9uIDY0LWJpdCBoYXJk
d2FyZSBhbmQgMTYgYml0cyBvbgorICAgIC8vIDMyLWJpdCBoYXJkd2FyZSwgYW5kIHdlIGRvbid0
IG1pbmQgcmFjaW5lc3MgYXMgbG9uZyBhcyBlYWNoIHJlYWQgb2YKKyAgICAvLyBhbiBlbnRyeSB5
aWVsZHMgYSB2YWxpZCBlbnRyeSwgbm90IGEgcGFydGlhbGx5IHVwZGF0ZWQgZW50cnkuCisgICAg
c2l6ZV90IEdldFNpemVDbGFzc0lmQ2FjaGVkKFBhZ2VJRCBwKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHBhZ2VtYXBjYWNoZS5HZXRPckRlZmF1bHQocCwgMCk7CisgICAgfQorICAgIHZv
aWQgQ2FjaGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNpemVfdCBjbCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHBhZ2VtYXBjYWNoZS5QdXQocCwgY2wpOworICAgIH0KIAotIHByaXZhdGU6Ci0gIC8vIFBp
Y2sgdGhlIGFwcHJvcHJpYXRlIG1hcCBhbmQgY2FjaGUgdHlwZXMgYmFzZWQgb24gcG9pbnRlciBz
aXplCi0gIHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpzaXplb2YodWludHB0cl90KT46OlR5cGUgUGFn
ZU1hcDsKLSAgdHlwZWRlZiBNYXBTZWxlY3Rvcjw4KnNpemVvZih1aW50cHRyX3QpPjo6Q2FjaGVU
eXBlIFBhZ2VNYXBDYWNoZTsKLSAgUGFnZU1hcCBwYWdlbWFwXzsKLSAgbXV0YWJsZSBQYWdlTWFw
Q2FjaGUgcGFnZW1hcF9jYWNoZV87Ci0KLSAgLy8gV2Ugc2VncmVnYXRlIHNwYW5zIG9mIGEgZ2l2
ZW4gc2l6ZSBpbnRvIHR3byBjaXJjdWxhciBsaW5rZWQKLSAgLy8gbGlzdHM6IG9uZSBmb3Igbm9y
bWFsIHNwYW5zLCBhbmQgb25lIGZvciBzcGFucyB3aG9zZSBtZW1vcnkKLSAgLy8gaGFzIGJlZW4g
cmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KLSAgc3RydWN0IFNwYW5MaXN0IHsKLSAgICBTcGFuICAg
ICAgICBub3JtYWw7Ci0gICAgU3BhbiAgICAgICAgcmV0dXJuZWQ7Ci0gIH07Ci0KLSAgLy8gTGlz
dCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBrTWF4UGFnZXMKLSAgU3Bhbkxpc3QgbGFyZ2Vf
OworcHJpdmF0ZToKKyAgICAvLyBQaWNrIHRoZSBhcHByb3ByaWF0ZSBtYXAgYW5kIGNhY2hlIHR5
cGVzIGJhc2VkIG9uIHBvaW50ZXIgc2l6ZQorICAgIHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpzaXpl
b2YodWludHB0cl90KT46OlR5cGUgUGFnZU1hcDsKKyAgICB0eXBlZGVmIE1hcFNlbGVjdG9yPDgq
c2l6ZW9mKHVpbnRwdHJfdCk+OjpDYWNoZVR5cGUgUGFnZU1hcENhY2hlOworICAgIFBhZ2VNYXAg
cGFnZW1hcDsKKyAgICBtdXRhYmxlIFBhZ2VNYXBDYWNoZSBwYWdlbWFwY2FjaGU7CisKKyAgICAv
LyBXZSBzZWdyZWdhdGUgc3BhbnMgb2YgYSBnaXZlbiBzaXplIGludG8gdHdvIGNpcmN1bGFyIGxp
bmtlZAorICAgIC8vIGxpc3RzOiBvbmUgZm9yIG5vcm1hbCBzcGFucywgYW5kIG9uZSBmb3Igc3Bh
bnMgd2hvc2UgbWVtb3J5CisgICAgLy8gaGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4K
KyAgICBzdHJ1Y3QgU3Bhbkxpc3QgeworICAgICAgICBTcGFuIG5vcm1hbDsKKyAgICAgICAgU3Bh
biByZXR1cm5lZDsKKyAgICB9OworCisgICAgLy8gTGlzdCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0
aCA+PSBrTWF4UGFnZXMKKyAgICBTcGFuTGlzdCBsYXJnZTsKIAotICAvLyBBcnJheSBtYXBwaW5n
IGZyb20gc3BhbiBsZW5ndGggdG8gYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBzcGFucwot
ICBTcGFuTGlzdCBmcmVlX1trTWF4UGFnZXNdOworICAgIC8vIEFycmF5IG1hcHBpbmcgZnJvbSBz
cGFuIGxlbmd0aCB0byBhIGRvdWJseSBsaW5rZWQgbGlzdCBvZiBmcmVlIHNwYW5zCisgICAgU3Bh
bkxpc3QgZnJlZVNwYW5MaXN0W2tNYXhQYWdlc107CiAKLSAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtl
cHQgaW4gZnJlZSBsaXN0cwotICB1aW50cHRyX3QgZnJlZV9wYWdlc187CisgICAgLy8gTnVtYmVy
IG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cworICAgIHVpbnRwdHJfdCBmcmVlUGFnZXM7CiAK
LSAgLy8gQnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCi0gIHVpbnQ2NF90IHN5c3RlbV9ieXRl
c187CisgICAgLy8gQnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgICAgdWludDY0X3Qgc3lz
dGVtQnl0ZXM7CiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZ
Ci0gIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlzdHMgdGhhdCBhcmUgc3RpbGwg
Y29tbWl0dGVkLgotICBMZW5ndGggZnJlZV9jb21taXR0ZWRfcGFnZXNfOworICAgIC8vIE51bWJl
ciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlzdHMgdGhhdCBhcmUgc3RpbGwgY29tbWl0dGVkLgor
ICAgIExlbmd0aCBmcmVlQ29tbWl0dGVkUGFnZXM7CiAKLSAgLy8gTWluaW11bSBudW1iZXIgb2Yg
ZnJlZSBjb21taXR0ZWQgcGFnZXMgc2luY2UgbGFzdCBzY2F2ZW5nZS4gKENhbiBiZSAwIGlmCi0g
IC8vIHdlJ3ZlIGNvbW1pdHRlZCBuZXcgcGFnZXMgc2luY2UgdGhlIGxhc3Qgc2NhdmVuZ2UuKQot
ICBMZW5ndGggbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfOwot
I2VuZGlmCi0KLSAgYm9vbCBHcm93SGVhcChMZW5ndGggbik7Ci0KLSAgLy8gUkVRVUlSRVMgICBz
cGFuLT5sZW5ndGggPj0gbgotICAvLyBSZW1vdmUgc3BhbiBmcm9tIGl0cyBmcmVlIGxpc3QsIGFu
ZCBtb3ZlIGFueSBsZWZ0b3ZlciBwYXJ0IG9mCi0gIC8vIHNwYW4gaW50byBhcHByb3ByaWF0ZSBm
cmVlIGxpc3RzLiAgQWxzbyB1cGRhdGUgInNwYW4iIHRvIGhhdmUKLSAgLy8gbGVuZ3RoIGV4YWN0
bHkgIm4iIGFuZCBtYXJrIGl0IGFzIG5vbi1mcmVlIHNvIGl0IGNhbiBiZSByZXR1cm5lZAotICAv
LyB0byB0aGUgY2xpZW50LgotICAvLwotICAvLyAicmVsZWFzZWQiIGlzIHRydWUgaWZmICJzcGFu
IiB3YXMgZm91bmQgb24gYSAicmV0dXJuZWQiIGxpc3QuCi0gIHZvaWQgQ2FydmUoU3Bhbiogc3Bh
biwgTGVuZ3RoIG4sIGJvb2wgcmVsZWFzZWQpOwotCi0gIHZvaWQgUmVjb3JkU3BhbihTcGFuKiBz
cGFuKSB7Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0LCBzcGFuKTsKLSAgICBpZiAoc3Bh
bi0+bGVuZ3RoID4gMSkgewotICAgICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+
bGVuZ3RoIC0gMSwgc3Bhbik7CisgICAgLy8gTWluaW11bSBudW1iZXIgb2YgZnJlZSBjb21taXR0
ZWQgcGFnZXMgc2luY2UgbGFzdCBzY2F2ZW5nZS4gKENhbiBiZSAwIGlmCisgICAgLy8gd2UndmUg
Y29tbWl0dGVkIG5ldyBwYWdlcyBzaW5jZSB0aGUgbGFzdCBzY2F2ZW5nZS4pCisgICAgTGVuZ3Ro
IG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlOworI2VuZGlmCisKKyAgICBi
b29sIEdyb3dIZWFwKExlbmd0aCk7CisKKyAgICAvLyBSRVFVSVJFUyAgIHNwYW4tPmxlbmd0aCA+
PSBuCisgICAgLy8gUmVtb3ZlIHNwYW4gZnJvbSBpdHMgZnJlZSBsaXN0LCBhbmQgbW92ZSBhbnkg
bGVmdG92ZXIgcGFydCBvZgorICAgIC8vIHNwYW4gaW50byBhcHByb3ByaWF0ZSBmcmVlIGxpc3Rz
LiBBbHNvIHVwZGF0ZSAic3BhbiIgdG8gaGF2ZQorICAgIC8vIGxlbmd0aCBleGFjdGx5ICJuIiBh
bmQgbWFyayBpdCBhcyBub24tZnJlZSBzbyBpdCBjYW4gYmUgcmV0dXJuZWQKKyAgICAvLyB0byB0
aGUgY2xpZW50LgorICAgIC8vCisgICAgLy8gInJlbGVhc2VkIiBpcyB0cnVlIGlmZiAic3BhbiIg
d2FzIGZvdW5kIG9uIGEgInJldHVybmVkIiBsaXN0LgorICAgIHZvaWQgQ2FydmUoU3BhbiosIExl
bmd0aCwgYm9vbCByZWxlYXNlZCk7CisKKyAgICB2b2lkIFJlY29yZFNwYW4oU3Bhbiogc3BhbikK
KyAgICB7CisgICAgICAgIHBhZ2VtYXAuc2V0KHNwYW4tPnN0YXJ0LCBzcGFuKTsKKyAgICAgICAg
aWYgKHNwYW4tPmxlbmd0aCA+IDEpCisgICAgICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFy
dCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOwogICAgIH0KLSAgfQogICAKLSAgICAvLyBBbGxv
Y2F0ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09IG4uICBJZiBzdWNjZXNzZnVsLCByZXR1cm5z
IGEKLSAgLy8gc3BhbiBvZiBleGFjdGx5IHRoZSBzcGVjaWZpZWQgbGVuZ3RoLiAgRWxzZSwgcmV0
dXJucyBOVUxMLgotICBTcGFuKiBBbGxvY0xhcmdlKExlbmd0aCBuKTsKKyAgICAvLyBBbGxvY2F0
ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09IG4uIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgYQor
ICAgIC8vIHNwYW4gb2YgZXhhY3RseSB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gRWxzZSwgcmV0dXJu
cyAwLgorICAgIFNwYW4qIEFsbG9jTGFyZ2UoTGVuZ3RoKTsKIAogI2lmICFVU0VfQkFDS0dST1VO
RF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIC8vIEluY3JlbWVudGFsbHkgcmVsZWFzZSBz
b21lIG1lbW9yeSB0byB0aGUgc3lzdGVtLgotICAvLyBJbmNyZW1lbnRhbFNjYXZlbmdlKG4pIGlz
IGNhbGxlZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBmcmVlZC4KLSAgdm9pZCBJbmNyZW1lbnRhbFNj
YXZlbmdlKExlbmd0aCBuKTsKKyAgICAvLyBJbmNyZW1lbnRhbGx5IHJlbGVhc2Ugc29tZSBtZW1v
cnkgdG8gdGhlIHN5c3RlbS4KKyAgICAvLyBJbmNyZW1lbnRhbFNjYXZlbmdlKG4pIGlzIGNhbGxl
ZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBmcmVlZC4KKyAgICB2b2lkIEluY3JlbWVudGFsU2NhdmVu
Z2UoTGVuZ3RoKTsKICNlbmRpZgogCi0gIC8vIE51bWJlciBvZiBwYWdlcyB0byBkZWFsbG9jYXRl
IGJlZm9yZSBkb2luZyBtb3JlIHNjYXZlbmdpbmcKLSAgaW50NjRfdCBzY2F2ZW5nZV9jb3VudGVy
XzsKKyAgICAvLyBOdW1iZXIgb2YgcGFnZXMgdG8gZGVhbGxvY2F0ZSBiZWZvcmUgZG9pbmcgbW9y
ZSBzY2F2ZW5naW5nCisgICAgaW50NjRfdCBzY2F2ZW5nZUNvdW50ZXI7CiAKLSAgLy8gSW5kZXgg
b2YgbGFzdCBmcmVlIGxpc3Qgd2Ugc2NhdmVuZ2VkCi0gIHNpemVfdCBzY2F2ZW5nZV9pbmRleF87
CisgICAgLy8gSW5kZXggb2YgbGFzdCBmcmVlIGxpc3Qgd2Ugc2NhdmVuZ2VkCisgICAgc2l6ZV90
IHNjYXZlbmdlSW5kZXg7CiAgIAogI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9TKERBUldJ
TikKLSAgZnJpZW5kIGNsYXNzIEZhc3RNYWxsb2Nab25lOworICAgIGZyaWVuZCBjbGFzcyBGYXN0
TWFsbG9jWm9uZTsKICNlbmRpZgogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZF
TkdFX01FTU9SWQotICB2b2lkIGluaXRpYWxpemVTY2F2ZW5nZXIoKTsKLSAgQUxXQVlTX0lOTElO
RSB2b2lkIHNpZ25hbFNjYXZlbmdlcigpOwotICB2b2lkIHNjYXZlbmdlKCk7Ci0gIEFMV0FZU19J
TkxJTkUgYm9vbCBzaG91bGRTY2F2ZW5nZSgpIGNvbnN0OworICAgIHZvaWQgaW5pdGlhbGl6ZVNj
YXZlbmdlcigpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzaWduYWxTY2F2ZW5nZXIoKTsKKyAg
ICB2b2lkIHNjYXZlbmdlKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZFNjYXZlbmdl
KCkgY29uc3Q7CiAKICNpZiBIQVZFKERJU1BBVENIX0gpIHx8IE9TKFdJTkRPV1MpCi0gIHZvaWQg
cGVyaW9kaWNTY2F2ZW5nZSgpOwotICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNTY2F2ZW5nZXJTdXNw
ZW5kZWQoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHNjaGVkdWxlU2NhdmVuZ2VyKCk7Ci0gIEFM
V0FZU19JTkxJTkUgdm9pZCByZXNjaGVkdWxlU2NhdmVuZ2VyKCk7Ci0gIEFMV0FZU19JTkxJTkUg
dm9pZCBzdXNwZW5kU2NhdmVuZ2VyKCk7CisgICAgdm9pZCBwZXJpb2RpY1NjYXZlbmdlKCk7Cisg
ICAgQUxXQVlTX0lOTElORSBib29sIGlzU2NhdmVuZ2VyU3VzcGVuZGVkKCk7CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHNjaGVkdWxlU2NhdmVuZ2VyKCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHJlc2NoZWR1bGVTY2F2ZW5nZXIoKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3VzcGVuZFNj
YXZlbmdlcigpOwogI2VuZGlmCiAKICNpZiBIQVZFKERJU1BBVENIX0gpCi0gIGRpc3BhdGNoX3F1
ZXVlX3QgbV9zY2F2ZW5nZVF1ZXVlOwotICBkaXNwYXRjaF9zb3VyY2VfdCBtX3NjYXZlbmdlVGlt
ZXI7Ci0gIGJvb2wgbV9zY2F2ZW5naW5nU3VzcGVuZGVkOworICAgIGRpc3BhdGNoX3F1ZXVlX3Qg
bV9zY2F2ZW5nZVF1ZXVlOworICAgIGRpc3BhdGNoX3NvdXJjZV90IG1fc2NhdmVuZ2VUaW1lcjsK
KyAgICBib29sIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZDsKICNlbGlmIE9TKFdJTkRPV1MpCi0gIHN0
YXRpYyB2b2lkIENBTExCQUNLIHNjYXZlbmdlclRpbWVyRmlyZWQodm9pZCosIEJPT0xFQU4pOwot
ICBIQU5ETEUgbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CisgICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sg
c2NhdmVuZ2VyVGltZXJGaXJlZCh2b2lkKiwgQk9PTEVBTik7CisgICAgSEFORExFIG1fc2NhdmVu
Z2VRdWV1ZVRpbWVyOwogI2Vsc2UgCi0gIHN0YXRpYyBOT19SRVRVUk5fV0lUSF9WQUxVRSB2b2lk
KiBydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCopOwotICBOT19SRVRVUk4gdm9pZCBzY2F2ZW5nZXJU
aHJlYWQoKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX1dJVEhfVkFMVUUgdm9pZCogcnVuU2NhdmVu
Z2VyVGhyZWFkKHZvaWQqKTsKKyAgICBOT19SRVRVUk4gdm9pZCBzY2F2ZW5nZXJUaHJlYWQoKTsK
IAotICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBpcyBh
Y3RpdmVseSBzY2F2ZW5naW5nIG1lbW9yeSBldmVyeSBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcywg
b3IKLSAgLy8gaXQncyBibG9ja2VkIHdhaXRpbmcgZm9yIG1vcmUgcGFnZXMgdG8gYmUgZGVsZXRl
ZC4KLSAgYm9vbCBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlOworICAgIC8vIEtlZXBzIHRyYWNrIG9m
IHdoZXRoZXIgdGhlIGJhY2tncm91bmQgdGhyZWFkIGlzIGFjdGl2ZWx5IHNjYXZlbmdpbmcgbWVt
b3J5IGV2ZXJ5IGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzLCBvcgorICAgIC8vIGl0J3MgYmxvY2tl
ZCB3YWl0aW5nIGZvciBtb3JlIHBhZ2VzIHRvIGJlIGRlbGV0ZWQuCisgICAgYm9vbCBtX3NjYXZl
bmdlVGhyZWFkQWN0aXZlOwogCi0gIHB0aHJlYWRfbXV0ZXhfdCBtX3NjYXZlbmdlTXV0ZXg7Ci0g
IHB0aHJlYWRfY29uZF90IG1fc2NhdmVuZ2VDb25kaXRpb247CisgICAgcHRocmVhZF9tdXRleF90
IG1fc2NhdmVuZ2VNdXRleDsKKyAgICBwdGhyZWFkX2NvbmRfdCBtX3NjYXZlbmdlQ29uZGl0aW9u
OwogI2VuZGlmCiAKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdF
X01FTU9SWQorI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1P
UlkKIH07CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXQoKQordm9pZCBUQ01hbGxvY1Bh
Z2VIZWFwOjppbml0KCkKIHsKLSAgcGFnZW1hcF8uaW5pdChNZXRhRGF0YUFsbG9jKTsKLSAgcGFn
ZW1hcF9jYWNoZV8gPSBQYWdlTWFwQ2FjaGUoMCk7Ci0gIGZyZWVfcGFnZXNfID0gMDsKLSAgc3lz
dGVtX2J5dGVzXyA9IDA7CisgICAgcGFnZW1hcC5pbml0KE1ldGFEYXRhQWxsb2MpOworICAgIHBh
Z2VtYXBjYWNoZSA9IFBhZ2VNYXBDYWNoZSgwKTsKKyAgICBmcmVlUGFnZXMgPSAwOworICAgIHN5
c3RlbUJ5dGVzID0gMDsKIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9N
RU1PUlkKLSAgZnJlZV9jb21taXR0ZWRfcGFnZXNfID0gMDsKLSAgbWluX2ZyZWVfY29tbWl0dGVk
X3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gMDsKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9V
TkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotCi0gIHNjYXZlbmdlX2NvdW50ZXJfID0gMDsK
LSAgLy8gU3RhcnQgc2NhdmVuZ2luZyBhdCBrTWF4UGFnZXMgbGlzdAotICBzY2F2ZW5nZV9pbmRl
eF8gPSBrTWF4UGFnZXMtMTsKLSAgQ09NUElMRV9BU1NFUlQoa051bUNsYXNzZXMgPD0gKDEgPDwg
UGFnZU1hcENhY2hlOjprVmFsdWViaXRzKSwgdmFsdWViaXRzKTsKLSAgRExMX0luaXQoJmxhcmdl
Xy5ub3JtYWwpOwotICBETExfSW5pdCgmbGFyZ2VfLnJldHVybmVkKTsKLSAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrTWF4UGFnZXM7IGkrKykgewotICAgIERMTF9Jbml0KCZmcmVlX1tpXS5ub3Jt
YWwpOwotICAgIERMTF9Jbml0KCZmcmVlX1tpXS5yZXR1cm5lZCk7Ci0gIH0KKyAgICBmcmVlQ29t
bWl0dGVkUGFnZXMgPSAwOworICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZl
bmdlID0gMDsKKyNlbmRpZiAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVN
T1JZCisKKyAgICBzY2F2ZW5nZUNvdW50ZXIgPSAwOworICAgIC8vIFN0YXJ0IHNjYXZlbmdpbmcg
YXQga01heFBhZ2VzIGxpc3QKKyAgICBzY2F2ZW5nZUluZGV4ID0ga01heFBhZ2VzLTE7CisgICAg
Q09NUElMRV9BU1NFUlQoa051bUNsYXNzZXMgPD0gKDEgPDwgUGFnZU1hcENhY2hlOjprVmFsdWVi
aXRzKSwgdmFsdWViaXRzKTsKKyAgICBETExJbml0KCZsYXJnZS5ub3JtYWwpOworICAgIERMTElu
aXQoJmxhcmdlLnJldHVybmVkKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdl
czsgaSsrKSB7CisgICAgICAgIERMTEluaXQoJmZyZWVTcGFuTGlzdFtpXS5ub3JtYWwpOworICAg
ICAgICBETExJbml0KCZmcmVlU3Bhbkxpc3RbaV0ucmV0dXJuZWQpOworICAgIH0KIAogI2lmIFVT
RV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgaW5pdGlhbGl6ZVNjYXZl
bmdlcigpOwotI2VuZGlmICAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVN
T1JZCisgICAgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOworI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5E
X1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIH0KIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVB
RF9UT19TQ0FWRU5HRV9NRU1PUlkKIAogI2lmIEhBVkUoRElTUEFUQ0hfSCkKIAotdm9pZCBUQ01h
bGxvY19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCit2b2lkIFRDTWFsbG9jUGFnZUhl
YXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQogewotICAgIG1fc2NhdmVuZ2VRdWV1ZSA9IGRpc3Bh
dGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlLkZhc3RNYWxsb2NTYXZl
bmdlciIsIE5VTEwpOworICAgIG1fc2NhdmVuZ2VRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0
ZSgiY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlLkZhc3RNYWxsb2NTYXZlbmdlciIsIDApOwogICAg
IG1fc2NhdmVuZ2VUaW1lciA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNF
X1RZUEVfVElNRVIsIDAsIDAsIG1fc2NhdmVuZ2VRdWV1ZSk7CiAgICAgZGlzcGF0Y2hfdGltZV90
IHN0YXJ0VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGtTY2F2ZW5nZURl
bGF5SW5TZWNvbmRzICogTlNFQ19QRVJfU0VDKTsKICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X3Rp
bWVyKG1fc2NhdmVuZ2VUaW1lciwgc3RhcnRUaW1lLCBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyAq
IE5TRUNfUEVSX1NFQywgMTAwMCAqIE5TRUNfUEVSX1VTRUMpOwpAQCAtMTUyNSw2NyArMTY4Myw2
NyBAQCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuCiAgICAgbV9zY2F2
ZW5naW5nU3VzcGVuZGVkID0gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9j
X1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRlZCgpCitBTFdBWVNfSU5MSU5FIGJvb2wgVENN
YWxsb2NQYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNwZW5kZWQoKQogewotICAgIEFTU0VSVChwYWdl
aGVhcF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NFUlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsK
ICAgICByZXR1cm4gbV9zY2F2ZW5naW5nU3VzcGVuZGVkOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2hlZHVsZVNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJU
KHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxk
KCkpOwogICAgIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZCA9IGZhbHNlOwogICAgIGRpc3BhdGNoX3Jl
c3VtZShtX3NjYXZlbmdlVGltZXIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2Nf
UGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5nZXIoKQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFs
bG9jUGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5nZXIoKQogewogICAgIC8vIE5vdGhpbmcgdG8g
ZG8gaGVyZSBmb3IgbGliZGlzcGF0Y2guCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxv
Y19QYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxs
b2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJUKHBhZ2VoZWFwX2xv
Y2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogICAgIG1f
c2NhdmVuZ2luZ1N1c3BlbmRlZCA9IHRydWU7CiAgICAgZGlzcGF0Y2hfc3VzcGVuZChtX3NjYXZl
bmdlVGltZXIpOwogfQogCiAjZWxpZiBPUyhXSU5ET1dTKQogCi12b2lkIFRDTWFsbG9jX1BhZ2VI
ZWFwOjpzY2F2ZW5nZXJUaW1lckZpcmVkKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4pCit2b2lkIFRD
TWFsbG9jUGFnZUhlYXA6OnNjYXZlbmdlclRpbWVyRmlyZWQodm9pZCogY29udGV4dCwgQk9PTEVB
TikKIHsKLSAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY19QYWdlSGVhcCo+KGNvbnRleHQpLT5wZXJp
b2RpY1NjYXZlbmdlKCk7CisgICAgc3RhdGljX2Nhc3Q8VENNYWxsb2NQYWdlSGVhcCo+KGNvbnRl
eHQpLT5wZXJpb2RpY1NjYXZlbmdlKCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6Omlu
aXRpYWxpemVTY2F2ZW5nZXIoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjppbml0aWFsaXplU2Nh
dmVuZ2VyKCkKIHsKICAgICBtX3NjYXZlbmdlUXVldWVUaW1lciA9IDA7CiB9CiAKLUFMV0FZU19J
TkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNwZW5kZWQoKQorQUxX
QVlTX0lOTElORSBib29sIFRDTWFsbG9jUGFnZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKCkK
IHsKLSAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFwX2xvY2spKTsKKyAgICBBU1NFUlQoSXNIZWxk
KHBhZ2VoZWFwTG9jaykpOwogICAgIHJldHVybiAhbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIo
KQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2Vy
KCkKIHsKICAgICAvLyBXZSBuZWVkIHRvIHVzZSBXVF9FWEVDVVRFT05MWU9OQ0UgaGVyZSBhbmQg
cmVzY2hlZHVsZSB0aGUgdGltZXIsIGJlY2F1c2UKICAgICAvLyBXaW5kb3dzIHdpbGwgZmlyZSB0
aGUgdGltZXIgZXZlbnQgZXZlbiB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbHJlYWR5IHJ1bm5pbmcu
Ci0gICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9sb2NrKSk7CisgICAgQVNTRVJUKElzSGVsZChw
YWdlaGVhcExvY2spKTsKICAgICBDcmVhdGVUaW1lclF1ZXVlVGltZXIoJm1fc2NhdmVuZ2VRdWV1
ZVRpbWVyLCAwLCBzY2F2ZW5nZXJUaW1lckZpcmVkLCB0aGlzLCBrU2NhdmVuZ2VEZWxheUluU2Vj
b25kcyAqIDEwMDAsIDAsIFdUX0VYRUNVVEVPTkxZT05DRSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCitBTFdBWVNfSU5M
SU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCiB7CiAgICAg
Ly8gV2UgbXVzdCBkZWxldGUgdGhlIHRpbWVyIGFuZCBjcmVhdGUgaXQgYWdhaW4sIGJlY2F1c2Ug
aXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZ2dlciBhIHRpbWVyIG9uIFdpbmRvd3MuCiAgICAg
c3VzcGVuZFNjYXZlbmdlcigpOwogICAgIHNjaGVkdWxlU2NhdmVuZ2VyKCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCitBTFdB
WVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCiB7Ci0g
ICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9sb2NrKSk7CisgICAgQVNTRVJUKElzSGVsZChwYWdl
aGVhcExvY2spKTsKICAgICBIQU5ETEUgc2NhdmVuZ2VRdWV1ZVRpbWVyID0gbV9zY2F2ZW5nZVF1
ZXVlVGltZXI7CiAgICAgbV9zY2F2ZW5nZVF1ZXVlVGltZXIgPSAwOwogICAgIERlbGV0ZVRpbWVy
UXVldWVUaW1lcigwLCBzY2F2ZW5nZVF1ZXVlVGltZXIsIDApOwpAQCAtMTU5Myw3ICsxNzUxLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzdQogCiAjZWxzZQogCi12
b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKK3ZvaWQgVENNYWxs
b2NQYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gQ3JlYXRlIGEgbm9u
LXJlY3Vyc2l2ZSBtdXRleC4KICNpZiAhZGVmaW5lZChQVEhSRUFEX01VVEVYX05PUk1BTCkgfHwg
UFRIUkVBRF9NVVRFWF9OT1JNQUwgPT0gUFRIUkVBRF9NVVRFWF9ERUZBVUxUCkBAIC0xNjE0LDE2
ICsxNzcyLDE2IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW4KICAg
ICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCAwLCBydW5TY2F2ZW5nZXJUaHJlYWQsIHRoaXMpOwog
fQogCi12b2lkKiBUQ01hbGxvY19QYWdlSGVhcDo6cnVuU2NhdmVuZ2VyVGhyZWFkKHZvaWQqIGNv
bnRleHQpCit2b2lkKiBUQ01hbGxvY1BhZ2VIZWFwOjpydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCog
Y29udGV4dCkKIHsKLSAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY19QYWdlSGVhcCo+KGNvbnRleHQp
LT5zY2F2ZW5nZXJUaHJlYWQoKTsKKyAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY1BhZ2VIZWFwKj4o
Y29udGV4dCktPnNjYXZlbmdlclRocmVhZCgpOwogI2lmIChDT01QSUxFUihNU1ZDKSB8fCBDT01Q
SUxFUihTVU5DQykpCiAgICAgLy8gV2l0aG91dCB0aGlzLCBWaXN1YWwgU3R1ZGlvIGFuZCBTdW4g
U3R1ZGlvIHdpbGwgY29tcGxhaW4gdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSB2
YWx1ZS4KICAgICByZXR1cm4gMDsKICNlbmRpZgogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENN
YWxsb2NfUGFnZUhlYXA6OnNpZ25hbFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENN
YWxsb2NQYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2VyKCkKIHsKICAgICAvLyBtX3NjYXZlbmdlTXV0
ZXggc2hvdWxkIGJlIGhlbGQgYmVmb3JlIGFjY2Vzc2luZyBtX3NjYXZlbmdlVGhyZWFkQWN0aXZl
LgogICAgIEFTU0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2sobV9zY2F2ZW5nZU11dGV4KSk7CkBA
IC0xNjMzLDIwMSArMTc5MSwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VI
ZWFwOjpzaQogCiAjZW5kaWYKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVuZ2UoKQor
dm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZSgpCiB7Ci0gICAgc2l6ZV90IHBhZ2VzVG9S
ZWxlYXNlID0gbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfICog
a1NjYXZlbmdlUGVyY2VudGFnZTsKLSAgICBzaXplX3QgdGFyZ2V0UGFnZUNvdW50ID0gc3RkOjpt
YXg8c2l6ZV90PihrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQsIGZyZWVfY29tbWl0dGVk
X3BhZ2VzXyAtIHBhZ2VzVG9SZWxlYXNlKTsKKyAgICBzaXplX3QgcGFnZXNUb1JlbGVhc2UgPSBt
aW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSAqIGtTY2F2ZW5nZVBlcmNlbnRh
Z2U7CisgICAgc2l6ZV90IHRhcmdldFBhZ2VDb3VudCA9IHN0ZDo6bWF4PHNpemVfdD4oa01pbmlt
dW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCBmcmVlQ29tbWl0dGVkUGFnZXMgLSBwYWdlc1RvUmVs
ZWFzZSk7CiAKLSAgICBMZW5ndGggbGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVfY29tbWl0
dGVkX3BhZ2VzXzsKLSAgICB3aGlsZSAoZnJlZV9jb21taXR0ZWRfcGFnZXNfID4gdGFyZ2V0UGFn
ZUNvdW50KSB7CisgICAgTGVuZ3RoIGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPSBmcmVlQ29tbWl0
dGVkUGFnZXM7CisgICAgd2hpbGUgKGZyZWVDb21taXR0ZWRQYWdlcyA+IHRhcmdldFBhZ2VDb3Vu
dCkgewogICAgICAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBrTWF4
UGFnZXM7IGkgPiAwICYmIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+PSB0YXJnZXRQYWdlQ291bnQ7
IGktLSkgewotICAgICAgICAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRpY19jYXN0PHNpemVf
dD4oaSkgPT0ga01heFBhZ2VzKSA/ICZsYXJnZV8gOiAmZnJlZV9baV07Ci0gICAgICAgICAgICAv
LyBJZiB0aGUgc3BhbiBzaXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMg
cGFnZXMgcmV0dXJuIGFsbCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2UgcmV0dXJuIGFsbCBi
dXQgMSBzcGFuLiAgCisgICAgICAgIGZvciAoaW50IGkgPSBrTWF4UGFnZXM7IGkgPiAwICYmIGZy
ZWVDb21taXR0ZWRQYWdlcyA+PSB0YXJnZXRQYWdlQ291bnQ7IGktLSkgeworICAgICAgICAgICAg
U3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRpY19jYXN0PHNpemVfdD4oaSkgPT0ga01heFBhZ2VzKSA/
ICZsYXJnZSA6ICZmcmVlU3Bhbkxpc3RbaV07CisgICAgICAgICAgICAvLyBJZiB0aGUgc3BhbiBz
aXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgcGFnZXMgcmV0dXJuIGFs
bCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2UgcmV0dXJuIGFsbCBidXQgMSBzcGFuLiAKICAg
ICAgICAgICAgIC8vIFJldHVybiBvbmx5IDUwJSBvZiBhIHNwYW5saXN0IGF0IGEgdGltZSBzbyBz
cGFucyBvZiBzaXplIDEgYXJlIG5vdCB0aGUgb25seSBvbmVzIGxlZnQuCi0gICAgICAgICAgICBz
aXplX3QgbGVuZ3RoID0gRExMX0xlbmd0aCgmc2xpc3QtPm5vcm1hbCk7CisgICAgICAgICAgICBz
aXplX3QgbGVuZ3RoID0gRExMTGVuZ3RoKCZzbGlzdC0+bm9ybWFsKTsKICAgICAgICAgICAgIHNp
emVfdCBudW1TcGFuc1RvUmV0dXJuID0gKGkgPiBrTWluU3Bhbkxpc3RzV2l0aFNwYW5zKSA/IGxl
bmd0aCA6IGxlbmd0aCAvIDI7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgc3RhdGljX2Nh
c3Q8c2l6ZV90PihqKSA8IG51bVNwYW5zVG9SZXR1cm4gJiYgIURMTF9Jc0VtcHR5KCZzbGlzdC0+
bm9ybWFsKSAmJiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiB0YXJnZXRQYWdlQ291bnQ7IGorKykg
eworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IHN0YXRpY19jYXN0PHNpemVfdD4oaikgPCBu
dW1TcGFuc1RvUmV0dXJuICYmICFETExfSXNFbXB0eSgmc2xpc3QtPm5vcm1hbCkgJiYgZnJlZUNv
bW1pdHRlZFBhZ2VzID4gdGFyZ2V0UGFnZUNvdW50OyBqKyspIHsKICAgICAgICAgICAgICAgICBT
cGFuKiBzID0gc2xpc3QtPm5vcm1hbC5wcmV2OyAKLSAgICAgICAgICAgICAgICBETExfUmVtb3Zl
KHMpOworICAgICAgICAgICAgICAgIERMTFJlbW92ZShzKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQoIXMtPmRlY29tbWl0dGVkKTsKICAgICAgICAgICAgICAgICBpZiAoIXMtPmRlY29tbWl0dGVk
KSB7CiAgICAgICAgICAgICAgICAgICAgIFRDTWFsbG9jX1N5c3RlbVJlbGVhc2UocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocy0+c3RhcnQgPDwga1BhZ2VTaGlmdCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGgg
PDwga1BhZ2VTaGlmdCkpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZnJlZV9jb21taXR0
ZWRfcGFnZXNfID49IHMtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWVfY29tbWl0
dGVkX3BhZ2VzXyAtPSBzLT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmcmVl
Q29tbWl0dGVkUGFnZXMgPj0gcy0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZUNv
bW1pdHRlZFBhZ2VzIC09IHMtPmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgcy0+ZGVjb21t
aXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBETExfUHJl
cGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKKyAgICAgICAgICAgICAgICBETExQcmVwZW5kKCZz
bGlzdC0+cmV0dXJuZWQsIHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPT0gZnJlZV9jb21taXR0ZWRfcGFnZXNfKQorICAg
ICAgICBpZiAobGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9PSBmcmVlQ29tbWl0dGVkUGFnZXMpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVf
Y29tbWl0dGVkX3BhZ2VzXzsKKyAgICAgICAgbGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVD
b21taXR0ZWRQYWdlczsKICAgICB9CiAKLSAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2lu
Y2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAgbWluRnJlZUNv
bW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6c2hvdWxkU2NhdmVuZ2UoKSBj
b25zdCAKK0FMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY1BhZ2VIZWFwOjpzaG91bGRTY2F2ZW5n
ZSgpIGNvbnN0IAogewotICAgIHJldHVybiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiBrTWluaW11
bUZyZWVDb21taXR0ZWRQYWdlQ291bnQ7IAorICAgIHJldHVybiBmcmVlQ29tbWl0dGVkUGFnZXMg
PiBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQ7IAogfQogCiAjZW5kaWYgIC8vIFVTRV9C
QUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIAotaW5saW5lIFNwYW4qIFRDTWFs
bG9jX1BhZ2VIZWFwOjpOZXcoTGVuZ3RoIG4pIHsKLSAgQVNTRVJUKENoZWNrKCkpOwotICBBU1NF
UlQobiA+IDApOwotCi0gIC8vIEZpbmQgZmlyc3Qgc2l6ZSA+PSBuIHRoYXQgaGFzIGEgbm9uLWVt
cHR5IGxpc3QKLSAgZm9yIChMZW5ndGggcyA9IG47IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAg
IFNwYW4qIGxsID0gTlVMTDsKLSAgICBib29sIHJlbGVhc2VkID0gZmFsc2U7Ci0gICAgaWYgKCFE
TExfSXNFbXB0eSgmZnJlZV9bc10ubm9ybWFsKSkgewotICAgICAgLy8gRm91bmQgbm9ybWFsIHNw
YW4KLSAgICAgIGxsID0gJmZyZWVfW3NdLm5vcm1hbDsKLSAgICB9IGVsc2UgaWYgKCFETExfSXNF
bXB0eSgmZnJlZV9bc10ucmV0dXJuZWQpKSB7Ci0gICAgICAvLyBGb3VuZCByZXR1cm5lZCBzcGFu
OyByZWFsbG9jYXRlIGl0Ci0gICAgICBsbCA9ICZmcmVlX1tzXS5yZXR1cm5lZDsKLSAgICAgIHJl
bGVhc2VkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gS2VlcCBsb29raW5nIGluIGxh
cmdlciBjbGFzc2VzCi0gICAgICBjb250aW51ZTsKLSAgICB9CitpbmxpbmUgU3BhbiogVENNYWxs
b2NQYWdlSGVhcDo6TmV3KExlbmd0aCBuKQoreworICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICBB
U1NFUlQobiA+IDApOworCisgICAgLy8gRmluZCBmaXJzdCBzaXplID49IG4gdGhhdCBoYXMgYSBu
b24tZW1wdHkgbGlzdAorICAgIGZvciAoTGVuZ3RoIHMgPSBuOyBzIDwga01heFBhZ2VzOyBzKysp
IHsKKyAgICAgICAgU3BhbiogbGwgPSAwOworICAgICAgICBib29sIHJlbGVhc2VkID0gZmFsc2U7
CisgICAgICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwpKSB7Cisg
ICAgICAgICAgICAvLyBGb3VuZCBub3JtYWwgc3BhbgorICAgICAgICAgICAgbGwgPSAmZnJlZVNw
YW5MaXN0W3NdLm5vcm1hbDsKKyAgICAgICAgfSBlbHNlIGlmICghRExMX0lzRW1wdHkoJmZyZWVT
cGFuTGlzdFtzXS5yZXR1cm5lZCkpIHsKKyAgICAgICAgICAgIC8vIEZvdW5kIHJldHVybmVkIHNw
YW47IHJlYWxsb2NhdGUgaXQKKyAgICAgICAgICAgIGxsID0gJmZyZWVTcGFuTGlzdFtzXS5yZXR1
cm5lZDsKKyAgICAgICAgICAgIHJlbGVhc2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAvLyBLZWVwIGxvb2tpbmcgaW4gbGFyZ2VyIGNsYXNzZXMKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgU3BhbiogcmVzdWx0ID0gbGwtPm5leHQ7Ci0gICAgQ2FydmUocmVzdWx0
LCBuLCByZWxlYXNlZCk7CisgICAgICAgIFNwYW4qIHJlc3VsdCA9IGxsLT5uZXh0OworICAgICAg
ICBDYXJ2ZShyZXN1bHQsIG4sIHJlbGVhc2VkKTsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURf
VE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgLy8gVGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMg
ZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3JtYWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1p
dHRlZCkuICBVcGRhdGUgdGhlCi0gICAgLy8gZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCi0g
ICAgQVNTRVJUKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+PSBuKTsKLSAgICBmcmVlX2NvbW1pdHRl
ZF9wYWdlc18gLT0gbjsKLSAgICBpZiAoZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVf
Y29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKSAKLSAgICAgIG1pbl9mcmVlX2Nv
bW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0dGVkX3BhZ2Vz
XzsKKyAgICAgICAgLy8gVGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJvbSBhIHNwYW4g
dGhhdCdzIGluIHRoZSBub3JtYWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1pdHRlZCkuIFVwZGF0
ZSB0aGUKKyAgICAgICAgLy8gZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCisgICAgICAgIEFT
U0VSVChmcmVlQ29tbWl0dGVkUGFnZXMgPj0gbik7CisgICAgICAgIGZyZWVDb21taXR0ZWRQYWdl
cyAtPSBuOworICAgICAgICBpZiAoZnJlZUNvbW1pdHRlZFBhZ2VzIDwgbWluRnJlZUNvbW1pdHRl
ZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UpIAorICAgICAgICAgICAgbWluRnJlZUNvbW1pdHRlZFBh
Z2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CiAjZW5kaWYgIC8vIFVT
RV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICBBU1NFUlQoQ2hlY2so
KSk7Ci0gICAgZnJlZV9wYWdlc18gLT0gbjsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9CisgICAg
ICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICAgICAgZnJlZVBhZ2VzIC09IG47CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQogCi0gIFNwYW4qIHJlc3VsdCA9IEFsbG9jTGFyZ2Uobik7Ci0g
IGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHJlc3Vs
dCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICB9CisgICAgU3BhbiogcmVzdWx0ID0gQWxsb2NM
YXJnZShuKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIEFTU0VSVF9TUEFOX0NPTU1JVFRF
RChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAvLyBHcm93IHRo
ZSBoZWFwIGFuZCB0cnkgYWdhaW4KLSAgaWYgKCFHcm93SGVhcChuKSkgewotICAgIEFTU0VSVChD
aGVjaygpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICAgIC8vIEdyb3cgdGhlIGhlYXAgYW5k
IHRyeSBhZ2FpbgorICAgIGlmICghR3Jvd0hlYXAobikpIHsKKyAgICAgICAgQVNTRVJUKENoZWNr
KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgcmV0dXJuIE5ldyhuKTsKKyAgICBy
ZXR1cm4gTmV3KG4pOwogfQogCi1TcGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6QWxsb2NMYXJnZShM
ZW5ndGggbikgewotICAvLyBmaW5kIHRoZSBiZXN0IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXpl
KS4KLSAgLy8gVGhlIGZvbGxvd2luZyBsb29wcyBpbXBsZW1lbnRzIGFkZHJlc3Mtb3JkZXJlZCBi
ZXN0LWZpdC4KLSAgYm9vbCBmcm9tX3JlbGVhc2VkID0gZmFsc2U7Ci0gIFNwYW4gKmJlc3QgPSBO
VUxMOwotCi0gIC8vIFNlYXJjaCB0aHJvdWdoIG5vcm1hbCBsaXN0Ci0gIGZvciAoU3Bhbiogc3Bh
biA9IGxhcmdlXy5ub3JtYWwubmV4dDsKLSAgICAgICBzcGFuICE9ICZsYXJnZV8ubm9ybWFsOwot
ICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KSB7Ci0gICAgaWYgKHNwYW4tPmxlbmd0aCA+PSBuKSB7
Ci0gICAgICBpZiAoKGJlc3QgPT0gTlVMTCkKLSAgICAgICAgICB8fCAoc3Bhbi0+bGVuZ3RoIDwg
YmVzdC0+bGVuZ3RoKQotICAgICAgICAgIHx8ICgoc3Bhbi0+bGVuZ3RoID09IGJlc3QtPmxlbmd0
aCkgJiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQpKSkgewotICAgICAgICBiZXN0ID0gc3Bh
bjsKLSAgICAgICAgZnJvbV9yZWxlYXNlZCA9IGZhbHNlOwotICAgICAgfQorU3BhbiogVENNYWxs
b2NQYWdlSGVhcDo6QWxsb2NMYXJnZShMZW5ndGggbikKK3sKKyAgICAvLyBmaW5kIHRoZSBiZXN0
IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXplKS4KKyAgICAvLyBUaGUgZm9sbG93aW5nIGxvb3Bz
IGltcGxlbWVudHMgYWRkcmVzcy1vcmRlcmVkIGJlc3QtZml0LgorICAgIGJvb2wgZnJvbVJlbGVh
c2VkID0gZmFsc2U7CisgICAgU3BhbiogYmVzdCA9IDA7CisKKyAgICAvLyBTZWFyY2ggdGhyb3Vn
aCBub3JtYWwgbGlzdAorICAgIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlLm5vcm1hbC5uZXh0Owor
ICAgICAgICAgICAgc3BhbiAhPSAmbGFyZ2Uubm9ybWFsOworICAgICAgICAgICAgc3BhbiA9IHNw
YW4tPm5leHQpIHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA+PSBuKSB7CisgICAgICAgICAg
ICBpZiAoIWJlc3QKKyAgICAgICAgICAgICAgICB8fCAoc3Bhbi0+bGVuZ3RoIDwgYmVzdC0+bGVu
Z3RoKQorICAgICAgICAgICAgICAgIHx8ICgoc3Bhbi0+bGVuZ3RoID09IGJlc3QtPmxlbmd0aCkg
JiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQpKSkgeworICAgICAgICAgICAgICAgIGJlc3Qg
PSBzcGFuOworICAgICAgICAgICAgICAgZnJvbVJlbGVhc2VkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAotICAvLyBTZWFyY2ggdGhyb3VnaCByZWxlYXNl
ZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAotICBmb3IgKFNwYW4qIHNwYW4gPSBs
YXJnZV8ucmV0dXJuZWQubmV4dDsKLSAgICAgICBzcGFuICE9ICZsYXJnZV8ucmV0dXJuZWQ7Ci0g
ICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4pIHsK
LSAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQotICAgICAgICAgIHx8IChzcGFuLT5sZW5ndGggPCBi
ZXN0LT5sZW5ndGgpCi0gICAgICAgICAgfHwgKChzcGFuLT5sZW5ndGggPT0gYmVzdC0+bGVuZ3Ro
KSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7Ci0gICAgICAgIGJlc3QgPSBzcGFu
OwotICAgICAgICBmcm9tX3JlbGVhc2VkID0gdHJ1ZTsKLSAgICAgIH0KKyAgICAvLyBTZWFyY2gg
dGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAorICAgIGZv
ciAoU3Bhbiogc3BhbiA9IGxhcmdlLnJldHVybmVkLm5leHQ7CisgICAgICAgICAgICBzcGFuICE9
ICZsYXJnZS5yZXR1cm5lZDsKKyAgICAgICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KSB7CisgICAg
ICAgIGlmIChzcGFuLT5sZW5ndGggPj0gbikgeworICAgICAgICAgICAgaWYgKCFiZXN0CisgICAg
ICAgICAgICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkKKyAgICAgICAgICAg
ICAgICB8fCAoKHNwYW4tPmxlbmd0aCA9PSBiZXN0LT5sZW5ndGgpICYmIChzcGFuLT5zdGFydCA8
IGJlc3QtPnN0YXJ0KSkpIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gc3BhbjsKKyAgICAgICAg
ICAgICAgICBmcm9tUmVsZWFzZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQotICB9CiAKLSAgaWYgKGJlc3QgIT0gTlVMTCkgewotICAgIENhcnZlKGJlc3QsIG4sIGZy
b21fcmVsZWFzZWQpOworICAgIGlmIChiZXN0KSB7CisgICAgICAgIENhcnZlKGJlc3QsIG4sIGZy
b21SZWxlYXNlZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9S
WQotICAgIC8vIFRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyb20gYSBzcGFuIHRoYXQn
cyBpbiB0aGUgbm9ybWFsIHNwYW4gbGlzdCAoYWxyZWFkeSBjb21taXR0ZWQpLiAgVXBkYXRlIHRo
ZQotICAgIC8vIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgIEFTU0VSVChmcmVlX2Nv
bW1pdHRlZF9wYWdlc18gPj0gbik7Ci0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IG47Ci0g
ICAgaWYgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA8IG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19z
aW5jZV9sYXN0X3NjYXZlbmdlXykKLSAgICAgIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5j
ZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKLSNlbmRpZiAgLy8gVVNF
X0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIEFTU0VSVChDaGVjaygp
KTsKLSAgICBmcmVlX3BhZ2VzXyAtPSBuOwotICAgIHJldHVybiBiZXN0OwotICB9Ci0gIHJldHVy
biBOVUxMOworICAgICAgICAvLyBUaGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEg
c3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFuIGxpc3QgKGFscmVhZHkgY29tbWl0dGVkKS4g
VXBkYXRlIHRoZQorICAgICAgICAvLyBmcmVlIGNvbW1pdHRlZCBwYWdlcyBjb3VudC4KKyAgICAg
ICAgQVNTRVJUKGZyZWVDb21taXR0ZWRQYWdlcyA+PSBuKTsKKyAgICAgICAgZnJlZUNvbW1pdHRl
ZFBhZ2VzIC09IG47CisgICAgICAgIGlmIChmcmVlQ29tbWl0dGVkUGFnZXMgPCBtaW5GcmVlQ29t
bWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkKKyAgICAgICAgICAgIG1pbkZyZWVDb21taXR0
ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJlZUNvbW1pdHRlZFBhZ2VzOworI2VuZGlmIC8v
IFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKKyAgICAgICAgQVNTRVJU
KENoZWNrKCkpOworICAgICAgICBmcmVlUGFnZXMgLT0gbjsKKyAgICAgICAgcmV0dXJuIGJlc3Q7
CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1TcGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6U3Bs
aXQoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pIHsKLSAgQVNTRVJUKDAgPCBuKTsKLSAgQVNTRVJUKG4g
PCBzcGFuLT5sZW5ndGgpOwotICBBU1NFUlQoIXNwYW4tPmZyZWUpOwotICBBU1NFUlQoc3Bhbi0+
c2l6ZWNsYXNzID09IDApOwotICBFdmVudChzcGFuLCAnVCcsIG4pOwotCi0gIGNvbnN0IExlbmd0
aCBleHRyYSA9IHNwYW4tPmxlbmd0aCAtIG47Ci0gIFNwYW4qIGxlZnRvdmVyID0gTmV3U3Bhbihz
cGFuLT5zdGFydCArIG4sIGV4dHJhKTsKLSAgRXZlbnQobGVmdG92ZXIsICdVJywgZXh0cmEpOwot
ICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKLSAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgbiAt
IDEsIHNwYW4pOyAvLyBVcGRhdGUgbWFwIGZyb20gcGFnZWlkIHRvIHNwYW4KLSAgc3Bhbi0+bGVu
Z3RoID0gbjsKLQotICByZXR1cm4gbGVmdG92ZXI7Ci19Ci0KLWlubGluZSB2b2lkIFRDTWFsbG9j
X1BhZ2VIZWFwOjpDYXJ2ZShTcGFuKiBzcGFuLCBMZW5ndGggbiwgYm9vbCByZWxlYXNlZCkgewot
ICBBU1NFUlQobiA+IDApOwotICBETExfUmVtb3ZlKHNwYW4pOwotICBzcGFuLT5mcmVlID0gMDsK
LSAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKLQotICBpZiAocmVsZWFzZWQpIHsKLSAgICAvLyBJZiB0
aGUgc3BhbiBjaG9zZW4gdG8gY2FydmUgZnJvbSBpcyBkZWNvbW1pdGVkLCBjb21taXQgdGhlIGVu
dGlyZSBzcGFuIGF0IG9uY2UgdG8gYXZvaWQgY29tbWl0dGluZyBzcGFucyAxIHBhZ2UgYXQgYSB0
aW1lLgotICAgIEFTU0VSVChzcGFuLT5kZWNvbW1pdHRlZCk7Ci0gICAgVENNYWxsb2NfU3lzdGVt
Q29tbWl0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAg
c3Bhbi0+ZGVjb21taXR0ZWQgPSBmYWxzZTsKLSNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfICs9IHNwYW4tPmxlbmd0
aDsKLSNlbmRpZgotICB9Ci0gIAotICBjb25zdCBpbnQgZXh0cmEgPSBzdGF0aWNfY2FzdDxpbnQ+
KHNwYW4tPmxlbmd0aCAtIG4pOwotICBBU1NFUlQoZXh0cmEgPj0gMCk7Ci0gIGlmIChleHRyYSA+
IDApIHsKK1NwYW4qIFRDTWFsbG9jUGFnZUhlYXA6OlNwbGl0KFNwYW4qIHNwYW4sIExlbmd0aCBu
KQoreworICAgIEFTU0VSVCgwIDwgbik7CisgICAgQVNTRVJUKG4gPCBzcGFuLT5sZW5ndGgpOwor
ICAgIEFTU0VSVCghc3Bhbi0+ZnJlZSk7CisgICAgQVNTRVJUKCFzcGFuLT5zaXplY2xhc3MpOwor
ICAgIEV2ZW50KHNwYW4sICdUJywgbik7CisKKyAgICBjb25zdCBMZW5ndGggZXh0cmEgPSBzcGFu
LT5sZW5ndGggLSBuOwogICAgIFNwYW4qIGxlZnRvdmVyID0gTmV3U3BhbihzcGFuLT5zdGFydCAr
IG4sIGV4dHJhKTsKLSAgICBsZWZ0b3Zlci0+ZnJlZSA9IDE7Ci0gICAgbGVmdG92ZXItPmRlY29t
bWl0dGVkID0gZmFsc2U7Ci0gICAgRXZlbnQobGVmdG92ZXIsICdTJywgZXh0cmEpOworICAgIEV2
ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKICAgICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKKyAg
ICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsgLy8gVXBkYXRlIG1hcCBm
cm9tIHBhZ2VpZCB0byBzcGFuCisgICAgc3Bhbi0+bGVuZ3RoID0gbjsKIAotICAgIC8vIFBsYWNl
IGxlZnRvdmVyIHNwYW4gb24gYXBwcm9wcmlhdGUgZnJlZSBsaXN0Ci0gICAgU3Bhbkxpc3QqIGxp
c3RwYWlyID0gKHN0YXRpY19jYXN0PHNpemVfdD4oZXh0cmEpIDwga01heFBhZ2VzKSA/ICZmcmVl
X1tleHRyYV0gOiAmbGFyZ2VfOwotICAgIFNwYW4qIGRzdCA9ICZsaXN0cGFpci0+bm9ybWFsOwot
ICAgIERMTF9QcmVwZW5kKGRzdCwgbGVmdG92ZXIpOworICAgIHJldHVybiBsZWZ0b3ZlcjsKK30K
IAotICAgIHNwYW4tPmxlbmd0aCA9IG47Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsg
biAtIDEsIHNwYW4pOwotICB9CitpbmxpbmUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpDYXJ2ZShT
cGFuKiBzcGFuLCBMZW5ndGggbiwgYm9vbCByZWxlYXNlZCkKK3sKKyAgICBBU1NFUlQobiA+IDAp
OworICAgIERMTFJlbW92ZShzcGFuKTsKKyAgICBzcGFuLT5mcmVlID0gMDsKKyAgICBFdmVudChz
cGFuLCAnQScsIG4pOworCisgICAgaWYgKHJlbGVhc2VkKSB7CisgICAgICAgIC8vIElmIHRoZSBz
cGFuIGNob3NlbiB0byBjYXJ2ZSBmcm9tIGlzIGRlY29tbWl0ZWQsIGNvbW1pdCB0aGUgZW50aXJl
IHNwYW4gYXQgb25jZSB0byBhdm9pZCBjb21taXR0aW5nIHNwYW5zIDEgcGFnZSBhdCBhIHRpbWUu
CisgICAgICAgIEFTU0VSVChzcGFuLT5kZWNvbW1pdHRlZCk7CisgICAgICAgIFRDTWFsbG9jX1N5
c3RlbUNvbW1pdChyZWludGVycHJldF9jYXN0PHZvaWQqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNo
aWZ0KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwor
ICAgICAgICBzcGFuLT5kZWNvbW1pdHRlZCA9IGZhbHNlOworI2lmIFVTRV9CQUNLR1JPVU5EX1RI
UkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKKyAgICAgICAgZnJlZUNvbW1pdHRlZFBhZ2VzICs9IHNw
YW4tPmxlbmd0aDsKKyNlbmRpZgorICAgIH0KKyAgCisgICAgY29uc3QgaW50IGV4dHJhID0gc3Rh
dGljX2Nhc3Q8aW50PihzcGFuLT5sZW5ndGggLSBuKTsKKyAgICBBU1NFUlQoZXh0cmEgPj0gMCk7
CisgICAgaWYgKGV4dHJhID4gMCkgeworICAgICAgICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4o
c3Bhbi0+c3RhcnQgKyBuLCBleHRyYSk7CisgICAgICAgIGxlZnRvdmVyLT5mcmVlID0gMTsKKyAg
ICAgICAgbGVmdG92ZXItPmRlY29tbWl0dGVkID0gZmFsc2U7CisgICAgICAgIEV2ZW50KGxlZnRv
dmVyLCAnUycsIGV4dHJhKTsKKyAgICAgICAgUmVjb3JkU3BhbihsZWZ0b3Zlcik7CisKKyAgICAg
ICAgLy8gUGxhY2UgbGVmdG92ZXIgc3BhbiBvbiBhcHByb3ByaWF0ZSBmcmVlIGxpc3QKKyAgICAg
ICAgU3Bhbkxpc3QqIGxpc3RwYWlyID0gKHN0YXRpY19jYXN0PHNpemVfdD4oZXh0cmEpIDwga01h
eFBhZ2VzKSA/ICZmcmVlU3Bhbkxpc3RbZXh0cmFdIDogJmxhcmdlOworICAgICAgICBTcGFuKiBk
c3QgPSAmbGlzdHBhaXItPm5vcm1hbDsKKyAgICAgICAgRExMUHJlcGVuZChkc3QsIGxlZnRvdmVy
KTsKKworICAgICAgICBzcGFuLT5sZW5ndGggPSBuOworICAgICAgICBwYWdlbWFwLnNldChzcGFu
LT5zdGFydCArIG4gLSAxLCBzcGFuKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhTcGFuKiBkZXN0aW5hdGlvbiwgU3Bhbiogb3Ro
ZXIpCkBAIC0xODQyLDQzMiArMjAwMyw0NTggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBt
ZXJnZURlY29tbWl0dAogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6
OkRlbGV0ZShTcGFuKiBzcGFuKSB7Ci0gIEFTU0VSVChDaGVjaygpKTsKLSAgQVNTRVJUKCFzcGFu
LT5mcmVlKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+IDApOwotICBBU1NFUlQoR2V0RGVzY3Jp
cHRvcihzcGFuLT5zdGFydCkgPT0gc3Bhbik7Ci0gIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4t
PnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7Ci0gIHNwYW4tPnNpemVjbGFzcyA9
IDA7CitpbmxpbmUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpEZWxldGUoU3Bhbiogc3BhbikKK3sK
KyAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAgICBBU1NF
UlQoc3Bhbi0+bGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3Rh
cnQpID09IHNwYW4pOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0ICsgc3Bh
bi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7CisgICAgc3Bhbi0+c2l6ZWNsYXNzID0gMDsKICNpZm5k
ZWYgTk9fVENNQUxMT0NfU0FNUExFUwotICBzcGFuLT5zYW1wbGUgPSAwOworICAgIHNwYW4tPnNh
bXBsZSA9IDA7CiAjZW5kaWYKIAotICAvLyBDb2FsZXNjZSAtLSB3ZSBndWFyYW50ZWUgdGhhdCAi
cCIgIT0gMCwgc28gbm8gYm91bmRzIGNoZWNraW5nCi0gIC8vIG5lY2Vzc2FyeS4gIFdlIGRvIG5v
dCBib3RoZXIgcmVzZXR0aW5nIHRoZSBzdGFsZSBwYWdlbWFwCi0gIC8vIGVudHJpZXMgZm9yIHRo
ZSBwaWVjZXMgd2UgYXJlIG1lcmdpbmcgdG9nZXRoZXIgYmVjYXVzZSB3ZSBvbmx5Ci0gIC8vIGNh
cmUgYWJvdXQgdGhlIHBhZ2VtYXAgZW50cmllcyBmb3IgdGhlIGJvdW5kYXJpZXMuCisgICAgLy8g
Q29hbGVzY2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQgInAiICE9IDAsIHNvIG5vIGJvdW5kcyBjaGVj
a2luZworICAgIC8vIG5lY2Vzc2FyeS4gV2UgZG8gbm90IGJvdGhlciByZXNldHRpbmcgdGhlIHN0
YWxlIHBhZ2VtYXAKKyAgICAvLyBlbnRyaWVzIGZvciB0aGUgcGllY2VzIHdlIGFyZSBtZXJnaW5n
IHRvZ2V0aGVyIGJlY2F1c2Ugd2Ugb25seQorICAgIC8vIGNhcmUgYWJvdXQgdGhlIHBhZ2VtYXAg
ZW50cmllcyBmb3IgdGhlIGJvdW5kYXJpZXMuCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RP
X1NDQVZFTkdFX01FTU9SWQotICAvLyBUcmFjayB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmVpZ2hi
b3JpbmcgZnJlZSBzcGFucyB0aGF0IGFyZSBjb21taXR0ZWQuCi0gIExlbmd0aCBuZWlnaGJvcmlu
Z0NvbW1pdHRlZFNwYW5zTGVuZ3RoID0gMDsKKyAgICAvLyBUcmFjayB0aGUgdG90YWwgc2l6ZSBv
ZiB0aGUgbmVpZ2hib3JpbmcgZnJlZSBzcGFucyB0aGF0IGFyZSBjb21taXR0ZWQuCisgICAgTGVu
Z3RoIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGggPSAwOwogI2VuZGlmCi0gIGNvbnN0
IFBhZ2VJRCBwID0gc3Bhbi0+c3RhcnQ7Ci0gIGNvbnN0IExlbmd0aCBuID0gc3Bhbi0+bGVuZ3Ro
OwotICBTcGFuKiBwcmV2ID0gR2V0RGVzY3JpcHRvcihwLTEpOwotICBpZiAocHJldiAhPSBOVUxM
ICYmIHByZXYtPmZyZWUpIHsKLSAgICAvLyBNZXJnZSBwcmVjZWRpbmcgc3BhbiBpbnRvIHRoaXMg
c3BhbgotICAgIEFTU0VSVChwcmV2LT5zdGFydCArIHByZXYtPmxlbmd0aCA9PSBwKTsKLSAgICBj
b25zdCBMZW5ndGggbGVuID0gcHJldi0+bGVuZ3RoOworICAgIGNvbnN0IFBhZ2VJRCBwID0gc3Bh
bi0+c3RhcnQ7CisgICAgY29uc3QgTGVuZ3RoIG4gPSBzcGFuLT5sZW5ndGg7CisgICAgU3Bhbiog
cHJldiA9IEdldERlc2NyaXB0b3IocC0xKTsKKyAgICBpZiAocHJldiAmJiBwcmV2LT5mcmVlKSB7
CisgICAgICAgIC8vIE1lcmdlIHByZWNlZGluZyBzcGFuIGludG8gdGhpcyBzcGFuCisgICAgICAg
IEFTU0VSVChwcmV2LT5zdGFydCArIHByZXYtPmxlbmd0aCA9PSBwKTsKKyAgICAgICAgY29uc3Qg
TGVuZ3RoIGxlbiA9IHByZXYtPmxlbmd0aDsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCi0gICAgaWYgKCFwcmV2LT5kZWNvbW1pdHRlZCkKLSAgICAgICAgbmVp
Z2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47CisgICAgICAgIGlmICghcHJldi0+
ZGVjb21taXR0ZWQpCisgICAgICAgICAgICBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3Ro
ICs9IGxlbjsKICNlbmRpZgotICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgcHJldik7
Ci0gICAgRExMX1JlbW92ZShwcmV2KTsKLSAgICBEZWxldGVTcGFuKHByZXYpOwotICAgIHNwYW4t
PnN0YXJ0IC09IGxlbjsKLSAgICBzcGFuLT5sZW5ndGggKz0gbGVuOwotICAgIHBhZ2VtYXBfLnNl
dChzcGFuLT5zdGFydCwgc3Bhbik7Ci0gICAgRXZlbnQoc3BhbiwgJ0wnLCBsZW4pOwotICB9Ci0g
IFNwYW4qIG5leHQgPSBHZXREZXNjcmlwdG9yKHArbik7Ci0gIGlmIChuZXh0ICE9IE5VTEwgJiYg
bmV4dC0+ZnJlZSkgewotICAgIC8vIE1lcmdlIG5leHQgc3BhbiBpbnRvIHRoaXMgc3BhbgotICAg
IEFTU0VSVChuZXh0LT5zdGFydCA9PSBwK24pOwotICAgIGNvbnN0IExlbmd0aCBsZW4gPSBuZXh0
LT5sZW5ndGg7CisgICAgICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgcHJldik7Cisg
ICAgICAgIERMTFJlbW92ZShwcmV2KTsKKyAgICAgICAgRGVsZXRlU3BhbihwcmV2KTsKKyAgICAg
ICAgc3Bhbi0+c3RhcnQgLT0gbGVuOworICAgICAgICBzcGFuLT5sZW5ndGggKz0gbGVuOworICAg
ICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCwgc3Bhbik7CisgICAgICAgIEV2ZW50KHNwYW4s
ICdMJywgbGVuKTsKKyAgICB9CisgICAgU3BhbiogbmV4dCA9IEdldERlc2NyaXB0b3IocCtuKTsK
KyAgICBpZiAobmV4dCAmJiBuZXh0LT5mcmVlKSB7CisgICAgICAgIC8vIE1lcmdlIG5leHQgc3Bh
biBpbnRvIHRoaXMgc3BhbgorICAgICAgICBBU1NFUlQobmV4dC0+c3RhcnQgPT0gcCtuKTsKKyAg
ICAgICAgY29uc3QgTGVuZ3RoIGxlbiA9IG5leHQtPmxlbmd0aDsKICNpZiBVU0VfQkFDS0dST1VO
RF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgaWYgKCFuZXh0LT5kZWNvbW1pdHRlZCkK
LSAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47CisgICAgICAg
IGlmICghbmV4dC0+ZGVjb21taXR0ZWQpCisgICAgICAgICAgICBuZWlnaGJvcmluZ0NvbW1pdHRl
ZFNwYW5zTGVuZ3RoICs9IGxlbjsKICNlbmRpZgotICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMo
c3BhbiwgbmV4dCk7Ci0gICAgRExMX1JlbW92ZShuZXh0KTsKLSAgICBEZWxldGVTcGFuKG5leHQp
OwotICAgIHNwYW4tPmxlbmd0aCArPSBsZW47Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0
ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7Ci0gICAgRXZlbnQoc3BhbiwgJ1InLCBsZW4pOwot
ICB9Ci0KLSAgRXZlbnQoc3BhbiwgJ0QnLCBzcGFuLT5sZW5ndGgpOwotICBzcGFuLT5mcmVlID0g
MTsKLSAgaWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7Ci0gICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtN
YXhQYWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFuLT5sZW5ndGhdLnJldHVybmVk
LCBzcGFuKTsKLSAgICBlbHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLnJldHVybmVkLCBz
cGFuKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKQotICAg
ICAgRExMX1ByZXBlbmQoJmZyZWVfW3NwYW4tPmxlbmd0aF0ubm9ybWFsLCBzcGFuKTsKLSAgICBl
bHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLm5vcm1hbCwgc3Bhbik7Ci0gIH0KLSAgZnJl
ZV9wYWdlc18gKz0gbjsKKyAgICAgICAgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhzcGFuLCBuZXh0
KTsKKyAgICAgICAgRExMUmVtb3ZlKG5leHQpOworICAgICAgICBEZWxldGVTcGFuKG5leHQpOwor
ICAgICAgICBzcGFuLT5sZW5ndGggKz0gbGVuOworICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5z
dGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOworICAgICAgICBFdmVudChzcGFuLCAnUics
IGxlbik7CisgICAgfQorCisgICAgRXZlbnQoc3BhbiwgJ0QnLCBzcGFuLT5sZW5ndGgpOworICAg
IHNwYW4tPmZyZWUgPSAxOworICAgIGlmIChzcGFuLT5kZWNvbW1pdHRlZCkgeworICAgICAgICBp
ZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKQorICAgICAgICAgICAgRExMUHJlcGVuZCgmZnJl
ZVNwYW5MaXN0W3NwYW4tPmxlbmd0aF0ucmV0dXJuZWQsIHNwYW4pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBETExQcmVwZW5kKCZsYXJnZS5yZXR1cm5lZCwgc3Bhbik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykKKyAgICAgICAgICAgIERM
TFByZXBlbmQoJmZyZWVTcGFuTGlzdFtzcGFuLT5sZW5ndGhdLm5vcm1hbCwgc3Bhbik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIERMTFByZXBlbmQoJmxhcmdlLm5vcm1hbCwgc3Bhbik7Cisg
ICAgfQorICAgIGZyZWVQYWdlcyArPSBuOwogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RP
X1NDQVZFTkdFX01FTU9SWQotICBpZiAoc3Bhbi0+ZGVjb21taXR0ZWQpIHsKLSAgICAgIC8vIElm
IHRoZSBtZXJnZWQgc3BhbiBpcyBkZWNvbW1pdHRlZCwgdGhhdCBtZWFucyB3ZSBkZWNvbW1pdHRl
ZCBhbnkgbmVpZ2hib3Jpbmcgc3BhbnMgdGhhdCB3ZXJlCi0gICAgICAvLyBjb21taXR0ZWQuICBV
cGRhdGUgdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgICAgZnJlZV9jb21taXR0
ZWRfcGFnZXNfIC09IG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGg7Ci0gICAgICBpZiAo
ZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xh
c3Rfc2NhdmVuZ2VfKQotICAgICAgICAgICAgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNl
X2xhc3Rfc2NhdmVuZ2VfID0gZnJlZV9jb21taXR0ZWRfcGFnZXNfOwotICB9IGVsc2UgewotICAg
ICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIHJlbWFpbnMgY29tbWl0dGVkLCBhZGQgdGhlIGRlbGV0
ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgICAg
ZnJlZV9jb21taXR0ZWRfcGFnZXNfICs9IG47Ci0gIH0KKyAgICBpZiAoc3Bhbi0+ZGVjb21taXR0
ZWQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIGlzIGRlY29tbWl0dGVkLCB0aGF0
IG1lYW5zIHdlIGRlY29tbWl0dGVkIGFueSBuZWlnaGJvcmluZyBzcGFucyB0aGF0IHdlcmUKKyAg
ICAgICAgLy8gY29tbWl0dGVkLiBVcGRhdGUgdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50
LgorICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgLT0gbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFu
c0xlbmd0aDsKKyAgICAgICAgaWYgKGZyZWVDb21taXR0ZWRQYWdlcyA8IG1pbkZyZWVDb21taXR0
ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlKQorICAgICAgICAgICAgbWluRnJlZUNvbW1pdHRlZFBh
Z2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIHJlbWFpbnMgY29tbWl0dGVkLCBhZGQgdGhl
IGRlbGV0ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50Lgor
ICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgKz0gbjsKKyAgICB9CiAKLSAgLy8gTWFrZSBzdXJl
IHRoZSBzY2F2ZW5nZSB0aHJlYWQgYmVjb21lcyBhY3RpdmUgaWYgd2UgaGF2ZSBlbm91Z2ggZnJl
ZWQgcGFnZXMgdG8gcmVsZWFzZSBzb21lIGJhY2sgdG8gdGhlIHN5c3RlbS4KLSAgc2lnbmFsU2Nh
dmVuZ2VyKCk7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2F2ZW5nZSB0aHJlYWQgYmVjb21lcyBh
Y3RpdmUgaWYgd2UgaGF2ZSBlbm91Z2ggZnJlZWQgcGFnZXMgdG8gcmVsZWFzZSBzb21lIGJhY2sg
dG8gdGhlIHN5c3RlbS4KKyAgICBzaWduYWxTY2F2ZW5nZXIoKTsKICNlbHNlCi0gIEluY3JlbWVu
dGFsU2NhdmVuZ2Uobik7CisgICAgSW5jcmVtZW50YWxTY2F2ZW5nZShuKTsKICNlbmRpZgogCi0g
IEFTU0VSVChDaGVjaygpKTsKKyAgICBBU1NFUlQoQ2hlY2soKSk7CiB9CiAKICNpZiAhVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotdm9pZCBUQ01hbGxvY19QYWdlSGVh
cDo6SW5jcmVtZW50YWxTY2F2ZW5nZShMZW5ndGggbikgewotICAvLyBGYXN0IHBhdGg7IG5vdCB5
ZXQgdGltZSB0byByZWxlYXNlIG1lbW9yeQotICBzY2F2ZW5nZV9jb3VudGVyXyAtPSBuOwotICBp
ZiAoc2NhdmVuZ2VfY291bnRlcl8gPj0gMCkgcmV0dXJuOyAgLy8gTm90IHlldCB0aW1lIHRvIHNj
YXZlbmdlCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OkluY3JlbWVudGFsU2NhdmVuZ2UoTGVuZ3Ro
IG4pCit7CisgICAgLy8gRmFzdCBwYXRoOyBub3QgeWV0IHRpbWUgdG8gcmVsZWFzZSBtZW1vcnkK
KyAgICBzY2F2ZW5nZUNvdW50ZXIgLT0gbjsKKyAgICBpZiAoc2NhdmVuZ2VDb3VudGVyID49IDAp
CisgICAgICAgIHJldHVybjsgLy8gTm90IHlldCB0aW1lIHRvIHNjYXZlbmdlCiAKICNpZiBQTEFU
Rk9STShJT1MpCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qga0RlZmF1bHRSZWxlYXNlRGVsYXkgPSA2
NDsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZhdWx0UmVsZWFzZURlbGF5ID0gNjQ7CiAj
ZWxzZQotICAvLyBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbGVhc2UsIHdhaXQgZm9yIHNvIG1h
bnkgcGFnZXMgYmVmb3JlCi0gIC8vIHNjYXZlbmdpbmcgYWdhaW4uICBXaXRoIDRLIHBhZ2VzLCB0
aGlzIGNvbWVzIHRvIDE2TUIgb2YgbWVtb3J5LgotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZh
dWx0UmVsZWFzZURlbGF5ID0gMSA8PCA4OwotI2VuZGlmCi0KLSAgLy8gRmluZCBpbmRleCBvZiBm
cmVlIGxpc3QgdG8gc2NhdmVuZ2UKLSAgc2l6ZV90IGluZGV4ID0gc2NhdmVuZ2VfaW5kZXhfICsg
MTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4UGFnZXMrMTsgaSsrKSB7Ci0gICAgaWYg
KGluZGV4ID4ga01heFBhZ2VzKSBpbmRleCA9IDA7Ci0gICAgU3Bhbkxpc3QqIHNsaXN0ID0gKGlu
ZGV4ID09IGtNYXhQYWdlcykgPyAmbGFyZ2VfIDogJmZyZWVfW2luZGV4XTsKLSAgICBpZiAoIURM
TF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSkgewotICAgICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBz
cGFuIG9uIHRoZSBub3JtYWwgcG9ydGlvbiBvZiB0aGlzIGxpc3QKLSAgICAgIFNwYW4qIHMgPSBz
bGlzdC0+bm9ybWFsLnByZXY7Ci0gICAgICBETExfUmVtb3ZlKHMpOwotICAgICAgVENNYWxsb2Nf
U3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNo
aWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
LT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAgICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwot
ICAgICAgRExMX1ByZXBlbmQoJnNsaXN0LT5yZXR1cm5lZCwgcyk7CisgICAgLy8gSWYgdGhlcmUg
aXMgbm90aGluZyB0byByZWxlYXNlLCB3YWl0IGZvciBzbyBtYW55IHBhZ2VzIGJlZm9yZQorICAg
IC8vIHNjYXZlbmdpbmcgYWdhaW4uIFdpdGggNEsgcGFnZXMsIHRoaXMgY29tZXMgdG8gMTZNQiBv
ZiBtZW1vcnkuCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVsdFJlbGVhc2VEZWxheSA9
IDEgPDwgODsKKyNlbmRpZgorCisgICAgLy8gRmluZCBpbmRleCBvZiBmcmVlIGxpc3QgdG8gc2Nh
dmVuZ2UKKyAgICBzaXplX3QgaW5kZXggPSBzY2F2ZW5nZUluZGV4ICsgMTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtNYXhQYWdlcysxOyBpKyspIHsKKyAgICAgICAgaWYgKGluZGV4ID4g
a01heFBhZ2VzKQorICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICBTcGFuTGlzdCogc2xp
c3QgPSAoaW5kZXggPT0ga01heFBhZ2VzKSA/ICZsYXJnZSA6ICZmcmVlU3Bhbkxpc3RbaW5kZXhd
OworICAgICAgICBpZiAoIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSkgeworICAgICAgICAg
ICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBzcGFuIG9uIHRoZSBub3JtYWwgcG9ydGlvbiBvZiB0aGlz
IGxpc3QKKyAgICAgICAgICAgIFNwYW4qIHMgPSBzbGlzdC0+bm9ybWFsLnByZXY7CisgICAgICAg
ICAgICBETExSZW1vdmUocyk7CisgICAgICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGgg
PDwga1BhZ2VTaGlmdCkpOworICAgICAgICAgICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgRExMUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKIAogI2lmIFBMQVRGT1JN
KElPUykKLSAgICAgIHNjYXZlbmdlX2NvdW50ZXJfID0gc3RkOjptYXg8c2l6ZV90PigxNlVMLCBz
dGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxh
eSAtIChmcmVlX3BhZ2VzXyAvIGtEZWZhdWx0UmVsZWFzZURlbGF5KSkpOworICAgICAgICAgICAg
c2NhdmVuZ2VDb3VudGVyID0gc3RkOjptYXg8c2l6ZV90PigxNlVMLCBzdGQ6Om1pbjxzaXplX3Q+
KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxheSAtIChmcmVlUGFnZXMg
LyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKICNlbHNlCi0gICAgICBzY2F2ZW5nZV9jb3VudGVy
XyA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90PihrRGVmYXVsdFJlbGVh
c2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkgLSAoZnJlZV9wYWdlc18gLyBrRGVmYXVsdFJl
bGVhc2VEZWxheSkpKTsKKyAgICAgICAgICAgIHNjYXZlbmdlQ291bnRlciA9IHN0ZDo6bWF4PHNp
emVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90PihrRGVmYXVsdFJlbGVhc2VEZWxheSwga0RlZmF1
bHRSZWxlYXNlRGVsYXkgLSAoZnJlZVBhZ2VzIC8ga0RlZmF1bHRSZWxlYXNlRGVsYXkpKSk7CiAj
ZW5kaWYKIAotICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdlcyAmJiAhRExMX0lzRW1wdHkoJnNs
aXN0LT5ub3JtYWwpKQotICAgICAgICBzY2F2ZW5nZV9pbmRleF8gPSBpbmRleCAtIDE7Ci0gICAg
ICBlbHNlCi0gICAgICAgIHNjYXZlbmdlX2luZGV4XyA9IGluZGV4OwotICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdlcyAmJiAhRExMX0lzRW1wdHkoJnNsaXN0
LT5ub3JtYWwpKQorICAgICAgICAgICAgICAgIHNjYXZlbmdlSW5kZXggPSBpbmRleCAtIDE7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2NhdmVuZ2VJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGluZGV4Kys7CiAgICAgfQot
ICAgIGluZGV4Kys7Ci0gIH0KIAotICAvLyBOb3RoaW5nIHRvIHNjYXZlbmdlLCBkZWxheSBmb3Ig
YSB3aGlsZQotICBzY2F2ZW5nZV9jb3VudGVyXyA9IGtEZWZhdWx0UmVsZWFzZURlbGF5OworICAg
IC8vIE5vdGhpbmcgdG8gc2NhdmVuZ2UsIGRlbGF5IGZvciBhIHdoaWxlCisgICAgc2NhdmVuZ2VD
b3VudGVyID0ga0RlZmF1bHRSZWxlYXNlRGVsYXk7CiB9CiAjZW5kaWYKIAotdm9pZCBUQ01hbGxv
Y19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3MoU3Bhbiogc3Bhbiwgc2l6ZV90IHNjKSB7Ci0g
IC8vIEFzc29jaWF0ZSBzcGFuIG9iamVjdCB3aXRoIGFsbCBpbnRlcmlvciBwYWdlcyBhcyB3ZWxs
Ci0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0
YXJ0KSA9PSBzcGFuKTsKLSAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQrc3Bhbi0+
bGVuZ3RoLTEpID09IHNwYW4pOwotICBFdmVudChzcGFuLCAnQycsIHNjKTsKLSAgc3Bhbi0+c2l6
ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzYyk7Ci0gIGZvciAoTGVuZ3RoIGkg
PSAxOyBpIDwgc3Bhbi0+bGVuZ3RoLTE7IGkrKykgewotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5z
dGFydCtpLCBzcGFuKTsKLSAgfQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpSZWdpc3RlclNpemVD
bGFzcyhTcGFuKiBzcGFuLCBzaXplX3Qgc2MpCit7CisgICAgLy8gQXNzb2NpYXRlIHNwYW4gb2Jq
ZWN0IHdpdGggYWxsIGludGVyaW9yIHBhZ2VzIGFzIHdlbGwKKyAgICBBU1NFUlQoIXNwYW4tPmZy
ZWUpOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKKyAg
ICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCtzcGFuLT5sZW5ndGgtMSkgPT0gc3Bh
bik7CisgICAgRXZlbnQoc3BhbiwgJ0MnLCBzYyk7CisgICAgc3Bhbi0+c2l6ZWNsYXNzID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PihzYyk7CisgICAgZm9yIChMZW5ndGggaSA9IDE7IGkgPCBz
cGFuLT5sZW5ndGgtMTsgaSsrKQorICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCtpLCBz
cGFuKTsKIH0KICAgICAKICNpZmRlZiBXVEZfQ0hBTkdFUwotc2l6ZV90IFRDTWFsbG9jX1BhZ2VI
ZWFwOjpSZXR1cm5lZEJ5dGVzKCkgY29uc3Qgeworc2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6OlJl
dHVybmVkQnl0ZXMoKSBjb25zdAorewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAo
dW5zaWduZWQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgICAgICBjb25zdCBpbnQg
cl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5yZXR1cm5lZCk7Ci0gICAgICAgIHVuc2ln
bmVkIHJfcGFnZXMgPSBzICogcl9sZW5ndGg7Ci0gICAgICAgIHJlc3VsdCArPSByX3BhZ2VzIDw8
IGtQYWdlU2hpZnQ7CisgICAgICAgIGNvbnN0IGludCByTGVuZ3RoID0gRExMTGVuZ3RoKCZmcmVl
U3Bhbkxpc3Rbc10ucmV0dXJuZWQpOworICAgICAgICB1bnNpZ25lZCByUGFnZXMgPSBzICogckxl
bmd0aDsKKyAgICAgICAgcmVzdWx0ICs9IHJQYWdlcyA8PCBrUGFnZVNoaWZ0OwogICAgIH0KICAg
ICAKLSAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZV8ucmV0dXJuZWQubmV4dDsgcyAhPSAmbGFyZ2Vf
LnJldHVybmVkOyBzID0gcy0+bmV4dCkKKyAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZS5yZXR1cm5l
ZC5uZXh0OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsgcyA9IHMtPm5leHQpCiAgICAgICAgIHJlc3Vs
dCArPSBzLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2Vu
ZGlmCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyBkb3VibGUgUGFnZXNUb01CKHVpbnQ2
NF90IHBhZ2VzKSB7CitzdGF0aWMgZG91YmxlIFBhZ2VzVG9NQih1aW50NjRfdCBwYWdlcykKK3sK
ICAgcmV0dXJuIChwYWdlcyA8PCBrUGFnZVNoaWZ0KSAvIDEwNDg1NzYuMDsKIH0KIAotdm9pZCBU
Q01hbGxvY19QYWdlSGVhcDo6RHVtcChUQ01hbGxvY19QcmludGVyKiBvdXQpIHsKLSAgaW50IG5v
bmVtcHR5X3NpemVzID0gMDsKLSAgZm9yIChpbnQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykg
ewotICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLm5vcm1hbCkgfHwgIURMTF9Jc0VtcHR5
KCZmcmVlX1tzXS5yZXR1cm5lZCkpIHsKLSAgICAgIG5vbmVtcHR5X3NpemVzKys7Ci0gICAgfQot
ICB9Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIpOwotICBvdXQtPnByaW50ZigiUGFnZUhlYXA6ICVkIHNpemVzOyAlNi4x
ZiBNQiBmcmVlXG4iLAotICAgICAgICAgICAgICBub25lbXB0eV9zaXplcywgUGFnZXNUb01CKGZy
ZWVfcGFnZXNfKSk7Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICB1aW50NjRfdCB0b3RhbF9ub3JtYWwgPSAwOwot
ICB1aW50NjRfdCB0b3RhbF9yZXR1cm5lZCA9IDA7Ci0gIGZvciAoaW50IHMgPSAwOyBzIDwga01h
eFBhZ2VzOyBzKyspIHsKLSAgICBjb25zdCBpbnQgbl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVl
X1tzXS5ub3JtYWwpOwotICAgIGNvbnN0IGludCByX2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVf
W3NdLnJldHVybmVkKTsKLSAgICBpZiAobl9sZW5ndGggKyByX2xlbmd0aCA+IDApIHsKLSAgICAg
IHVpbnQ2NF90IG5fcGFnZXMgPSBzICogbl9sZW5ndGg7Ci0gICAgICB1aW50NjRfdCByX3BhZ2Vz
ID0gcyAqIHJfbGVuZ3RoOwotICAgICAgdG90YWxfbm9ybWFsICs9IG5fcGFnZXM7Ci0gICAgICB0
b3RhbF9yZXR1cm5lZCArPSByX3BhZ2VzOwotICAgICAgb3V0LT5wcmludGYoIiU2dSBwYWdlcyAq
ICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0iCi0gICAgICAgICAgICAgICAgICAi
OyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1CIGN1bVxuIiwKLSAgICAgICAgICAgICAgICAg
IHMsCi0gICAgICAgICAgICAgICAgICAobl9sZW5ndGggKyByX2xlbmd0aCksCi0gICAgICAgICAg
ICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJfcGFnZXMpLAotICAgICAgICAgICAgICAgICAg
UGFnZXNUb01CKHRvdGFsX25vcm1hbCArIHRvdGFsX3JldHVybmVkKSwKLSAgICAgICAgICAgICAg
ICAgIFBhZ2VzVG9NQihyX3BhZ2VzKSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3Rh
bF9yZXR1cm5lZCkpOwordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpEdW1wKFRDTWFsbG9jX1ByaW50
ZXIqIG91dCkKK3sKKyAgICBpbnQgbm9uZW1wdHlTaXplcyA9IDA7CisgICAgZm9yIChpbnQgcyA9
IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykKKyAgICAgICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZVNw
YW5MaXN0W3NdLm5vcm1hbCkgfHwgIURMTF9Jc0VtcHR5KCZmcmVlU3Bhbkxpc3Rbc10ucmV0dXJu
ZWQpKQorICAgICAgICAgICAgbm9uZW1wdHlTaXplcysrOworICAgIG91dC0+cHJpbnRmKCItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgIG91
dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQgc2l6ZXM7ICU2LjFmIE1CIGZyZWVcbiIsCisgICAgICAg
ICAgICAgICAgbm9uZW1wdHlTaXplcywgUGFnZXNUb01CKGZyZWVQYWdlcykpOworICAgIG91dC0+
cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c
biIpOworICAgIHVpbnQ2NF90IHRvdGFsTm9ybWFsID0gMDsKKyAgICB1aW50NjRfdCB0b3RhbFJl
dHVybmVkID0gMDsKKyAgICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Cisg
ICAgICAgIGNvbnN0IGludCBuTGVuZ3RoID0gRExMTGVuZ3RoKCZmcmVlU3Bhbkxpc3Rbc10ubm9y
bWFsKTsKKyAgICAgICAgY29uc3QgaW50IHJMZW5ndGggPSBETExMZW5ndGgoJmZyZWVTcGFuTGlz
dFtzXS5yZXR1cm5lZCk7CisgICAgICAgIGlmIChuTGVuZ3RoICsgckxlbmd0aCA+IDApIHsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IG5QYWdlcyA9IHMgKiBuTGVuZ3RoOworICAgICAgICAgICAgdWlu
dDY0X3QgclBhZ2VzID0gcyAqIHJMZW5ndGg7CisgICAgICAgICAgICB0b3RhbE5vcm1hbCArPSBu
UGFnZXM7CisgICAgICAgICAgICB0b3RhbFJldHVybmVkICs9IHJQYWdlczsKKyAgICAgICAgICAg
IG91dC0+cHJpbnRmKCIlNnUgcGFnZXMgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIg
Y3VtIgorICAgICAgICAgICAgICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAlNi4x
ZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgKG5MZW5ndGggKyByTGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBh
Z2VzVG9NQihuUGFnZXMgKyByUGFnZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFnZXNU
b01CKHRvdGFsTm9ybWFsICsgdG90YWxSZXR1cm5lZCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBQYWdlc1RvTUIoclBhZ2VzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQih0
b3RhbFJldHVybmVkKSk7CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAotICB1aW50NjRfdCBuX3Bh
Z2VzID0gMDsKLSAgdWludDY0X3Qgcl9wYWdlcyA9IDA7Ci0gIGludCBuX3NwYW5zID0gMDsKLSAg
aW50IHJfc3BhbnMgPSAwOwotICBvdXQtPnByaW50ZigiTm9ybWFsIGxhcmdlIHNwYW5zOlxuIik7
Ci0gIGZvciAoU3BhbiogcyA9IGxhcmdlXy5ub3JtYWwubmV4dDsgcyAhPSAmbGFyZ2VfLm5vcm1h
bDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdl
cyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMt
Pmxlbmd0aCkpOwotICAgIG5fcGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIG5fc3BhbnMrKzsKLSAg
fQotICBvdXQtPnByaW50ZigiVW5tYXBwZWQgbGFyZ2Ugc3BhbnM6XG4iKTsKLSAgZm9yIChTcGFu
KiBzID0gbGFyZ2VfLnJldHVybmVkLm5leHQ7IHMgIT0gJmxhcmdlXy5yZXR1cm5lZDsgcyA9IHMt
Pm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFm
IE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkp
OwotICAgIHJfcGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIHJfc3BhbnMrKzsKLSAgfQotICB0b3Rh
bF9ub3JtYWwgKz0gbl9wYWdlczsKLSAgdG90YWxfcmV0dXJuZWQgKz0gcl9wYWdlczsKLSAgb3V0
LT5wcmludGYoIj4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBj
dW0iCi0gICAgICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4i
LAotICAgICAgICAgICAgICAobl9zcGFucyArIHJfc3BhbnMpLAotICAgICAgICAgICAgICBQYWdl
c1RvTUIobl9wYWdlcyArIHJfcGFnZXMpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxf
bm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIocl9wYWdl
cyksCi0gICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOworICAgIHVpbnQ2
NF90IG5QYWdlcyA9IDA7CisgICAgdWludDY0X3QgclBhZ2VzID0gMDsKKyAgICBpbnQgblNwYW5z
ID0gMDsKKyAgICBpbnQgclNwYW5zID0gMDsKKyAgICBvdXQtPnByaW50ZigiTm9ybWFsIGxhcmdl
IHNwYW5zOlxuIik7CisgICAgZm9yIChTcGFuKiBzID0gbGFyZ2Uubm9ybWFsLm5leHQ7IHMgIT0g
JmxhcmdlLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgb3V0LT5wcmludGYoIiAgIFsg
JTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxuIiwKKyAgICAgICAgICAgICAgICAgICAgcy0+
bGVuZ3RoLCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7CisgICAgICAgIG5QYWdlcyArPSBzLT5sZW5n
dGg7CisgICAgICAgIG5TcGFucysrOworICAgIH0KKyAgICBvdXQtPnByaW50ZigiVW5tYXBwZWQg
bGFyZ2Ugc3BhbnM6XG4iKTsKKyAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZS5yZXR1cm5lZC5uZXh0
OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgb3V0LT5wcmlu
dGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxuIiwKKyAgICAgICAgICAgICAg
ICAgICAgcy0+bGVuZ3RoLCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7CisgICAgICAgIHJQYWdlcyAr
PSBzLT5sZW5ndGg7CisgICAgICAgIHJTcGFucysrOworICAgIH0KKyAgICB0b3RhbE5vcm1hbCAr
PSBuUGFnZXM7CisgICAgdG90YWxSZXR1cm5lZCArPSByUGFnZXM7CisgICAgb3V0LT5wcmludGYo
Ij4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0iCisgICAg
ICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAlNi4xZiBNQiBjdW1cbiIsCisgICAg
ICAgICAgICAgICAgKG5TcGFucyArIHJTcGFucyksCisgICAgICAgICAgICAgICAgUGFnZXNUb01C
KG5QYWdlcyArIHJQYWdlcyksCisgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsTm9ybWFs
ICsgdG90YWxSZXR1cm5lZCksCisgICAgICAgICAgICAgICAgUGFnZXNUb01CKHJQYWdlcyksCisg
ICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsUmV0dXJuZWQpKTsKIH0KICNlbmRpZgogCi1i
b29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpHcm93SGVhcChMZW5ndGggbikgewotICBBU1NFUlQoa01h
eFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxvYyk7Ci0gIGlmIChuID4ga01heFZhbGlkUGFnZXMpIHJl
dHVybiBmYWxzZTsKLSAgTGVuZ3RoIGFzayA9IChuPmtNaW5TeXN0ZW1BbGxvYykgPyBuIDogc3Rh
dGljX2Nhc3Q8TGVuZ3RoPihrTWluU3lzdGVtQWxsb2MpOwotICBzaXplX3QgYWN0dWFsX3NpemU7
Ci0gIHZvaWQqIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAm
YWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Ci0gIGlmIChwdHIgPT0gTlVMTCkgewotICAgIGlmIChu
IDwgYXNrKSB7Ci0gICAgICAvLyBUcnkgZ3Jvd2luZyBqdXN0ICJuIiBwYWdlcwotICAgICAgYXNr
ID0gbjsKLSAgICAgIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0
LCAmYWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Citib29sIFRDTWFsbG9jUGFnZUhlYXA6Okdyb3dI
ZWFwKExlbmd0aCBuKQoreworICAgIEFTU0VSVChrTWF4UGFnZXMgPj0ga01pblN5c3RlbUFsbG9j
KTsKKyAgICBpZiAobiA+IGtNYXhWYWxpZFBhZ2VzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgTGVuZ3RoIGFzayA9IChuPmtNaW5TeXN0ZW1BbGxvYykgPyBuIDogc3RhdGljX2Nhc3Q8TGVu
Z3RoPihrTWluU3lzdGVtQWxsb2MpOworICAgIHNpemVfdCBhY3R1YWxTaXplOworICAgIHZvaWQq
IHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsU2l6
ZSwga1BhZ2VTaXplKTsKKyAgICBpZiAoIXB0cikgeworICAgICAgICBpZiAobiA8IGFzaykgewor
ICAgICAgICAgICAgLy8gVHJ5IGdyb3dpbmcganVzdCAibiIgcGFnZXMKKyAgICAgICAgICAgIGFz
ayA9IG47CisgICAgICAgICAgICBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhhc2sgPDwga1Bh
Z2VTaGlmdCwgJmFjdHVhbFNpemUsIGtQYWdlU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChwdHIgPT0g
TlVMTCkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGFzayA9IGFjdHVhbF9zaXplID4+IGtQYWdlU2hp
ZnQ7CisgICAgYXNrID0gYWN0dWFsU2l6ZSA+PiBrUGFnZVNoaWZ0OwogCi0gIHVpbnQ2NF90IG9s
ZF9zeXN0ZW1fYnl0ZXMgPSBzeXN0ZW1fYnl0ZXNfOwotICBzeXN0ZW1fYnl0ZXNfICs9IChhc2sg
PDwga1BhZ2VTaGlmdCk7Ci0gIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHB0cikgPj4ga1BhZ2VTaGlmdDsKLSAgQVNTRVJUKHAgPiAwKTsKKyAgICB1aW50NjRf
dCBvbGRTeXN0ZW1CeXRlcyA9IHN5c3RlbUJ5dGVzOworICAgIHN5c3RlbUJ5dGVzICs9IChhc2sg
PDwga1BhZ2VTaGlmdCk7CisgICAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIEFTU0VSVChwID4gMCk7CiAKLSAgLy8g
SWYgd2UgaGF2ZSBhbHJlYWR5IGEgbG90IG9mIHBhZ2VzIGFsbG9jYXRlZCwganVzdCBwcmUgYWxs
b2NhdGUgYSBidW5jaCBvZgotICAvLyBtZW1vcnkgZm9yIHRoZSBwYWdlIG1hcC4gVGhpcyBwcmV2
ZW50cyBmcmFnbWVudGF0aW9uIGJ5IHBhZ2VtYXAgbWV0YWRhdGEKLSAgLy8gd2hlbiBhIHByb2dy
YW0ga2VlcHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJnZSBibG9ja3MuCi0KLSAgaWYgKG9s
ZF9zeXN0ZW1fYnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQKLSAgICAgICYm
IHN5c3RlbV9ieXRlc18gPj0ga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkKSB7Ci0gICAg
cGFnZW1hcF8uUHJlYWxsb2NhdGVNb3JlTWVtb3J5KCk7Ci0gIH0KKyAgICAvLyBJZiB3ZSBoYXZl
IGFscmVhZHkgYSBsb3Qgb2YgcGFnZXMgYWxsb2NhdGVkLCBqdXN0IHByZSBhbGxvY2F0ZSBhIGJ1
bmNoIG9mCisgICAgLy8gbWVtb3J5IGZvciB0aGUgcGFnZSBtYXAuIFRoaXMgcHJldmVudHMgZnJh
Z21lbnRhdGlvbiBieSBwYWdlbWFwIG1ldGFkYXRhCisgICAgLy8gd2hlbiBhIHByb2dyYW0ga2Vl
cHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJnZSBibG9ja3MuCisKKyAgICBpZiAob2xkU3lz
dGVtQnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQKKyAgICAgICAgJiYgc3lz
dGVtQnl0ZXMgPj0ga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkKQorICAgICAgICBwYWdl
bWFwLlByZWFsbG9jYXRlTW9yZU1lbW9yeSgpOworCisgICAgLy8gTWFrZSBzdXJlIHBhZ2VtYXAg
aGFzIGVudHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3IHBhZ2VzLgorICAgIC8vIFBsdXMgZW5zdXJl
IG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciBzbyBjb2FsZXNjaW5nIGNvZGUKKyAgICAvLyBkb2Vz
IG5vdCBuZWVkIGJvdW5kcy1jaGVja2luZy4KKyAgICBpZiAocGFnZW1hcC5FbnN1cmUocC0xLCBh
c2srMikpIHsKKyAgICAgICAgLy8gUHJldGVuZCB0aGUgbmV3IGFyZWEgaXMgYWxsb2NhdGVkIGFu
ZCB0aGVuIERlbGV0ZSgpIGl0IHRvCisgICAgICAgIC8vIGNhdXNlIGFueSBuZWNlc3NhcnkgY29h
bGVzY2luZyB0byBvY2N1ci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgZG8gbm90IGFkanVz
dCBmcmVlUGFnZXMgaGVyZSBzaW5jZSBEZWxldGUoKSB3aWxsIGRvIGl0IGZvciB1cy4KKyAgICAg
ICAgU3Bhbiogc3BhbiA9IE5ld1NwYW4ocCwgYXNrKTsKKyAgICAgICAgUmVjb3JkU3BhbihzcGFu
KTsKKyAgICAgICAgRGVsZXRlKHNwYW4pOworICAgICAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAvLyBNYWtlIHN1cmUgcGFnZW1hcF8gaGFzIGVu
dHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3IHBhZ2VzLgotICAvLyBQbHVzIGVuc3VyZSBvbmUgYmVm
b3JlIGFuZCBvbmUgYWZ0ZXIgc28gY29hbGVzY2luZyBjb2RlCi0gIC8vIGRvZXMgbm90IG5lZWQg
Ym91bmRzLWNoZWNraW5nLgotICBpZiAocGFnZW1hcF8uRW5zdXJlKHAtMSwgYXNrKzIpKSB7Ci0g
ICAgLy8gUHJldGVuZCB0aGUgbmV3IGFyZWEgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIERlbGV0ZSgp
IGl0IHRvCi0gICAgLy8gY2F1c2UgYW55IG5lY2Vzc2FyeSBjb2FsZXNjaW5nIHRvIG9jY3VyLgot
ICAgIC8vCi0gICAgLy8gV2UgZG8gbm90IGFkanVzdCBmcmVlX3BhZ2VzXyBoZXJlIHNpbmNlIERl
bGV0ZSgpIHdpbGwgZG8gaXQgZm9yIHVzLgotICAgIFNwYW4qIHNwYW4gPSBOZXdTcGFuKHAsIGFz
ayk7Ci0gICAgUmVjb3JkU3BhbihzcGFuKTsKLSAgICBEZWxldGUoc3Bhbik7Ci0gICAgQVNTRVJU
KENoZWNrKCkpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIC8vIFdlIGNvdWxk
IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2l0aGluICJwYWdlbWFwXyIKKyAgICAvLyBXZSBjb3VsZCBu
b3QgYWxsb2NhdGUgbWVtb3J5IHdpdGhpbiAicGFnZW1hcCIKICAgICAvLyBUT0RPOiBPbmNlIHdl
IGNhbiByZXR1cm4gbWVtb3J5IHRvIHRoZSBzeXN0ZW0sIHJldHVybiB0aGUgbmV3IHNwYW4KICAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KIH0KIAotYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6Q2hlY2so
KSB7Citib29sIFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrKCkKK3sKICNpZiBVU0VfQkFDS0dST1VO
RF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIHNpemVfdCB0b3RhbEZyZWVDb21taXR0ZWQg
PSAwOworICAgIHNpemVfdCB0b3RhbEZyZWVDb21taXR0ZWQgPSAwOwogI2VuZGlmCi0gIEFTU0VS
VChmcmVlX1swXS5ub3JtYWwubmV4dCA9PSAmZnJlZV9bMF0ubm9ybWFsKTsKLSAgQVNTRVJUKGZy
ZWVfWzBdLnJldHVybmVkLm5leHQgPT0gJmZyZWVfWzBdLnJldHVybmVkKTsKKyAgICBBU1NFUlQo
ZnJlZVNwYW5MaXN0WzBdLm5vcm1hbC5uZXh0ID09ICZmcmVlU3Bhbkxpc3RbMF0ubm9ybWFsKTsK
KyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLnJldHVybmVkLm5leHQgPT0gJmZyZWVTcGFuTGlz
dFswXS5yZXR1cm5lZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01F
TU9SWQotICB0b3RhbEZyZWVDb21taXR0ZWQgPSBDaGVja0xpc3QoJmxhcmdlXy5ub3JtYWwsIGtN
YXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOworICAgIHRvdGFsRnJlZUNvbW1pdHRlZCA9IENo
ZWNrTGlzdCgmbGFyZ2Uubm9ybWFsLCBrTWF4UGFnZXMsIDEwMDAwMDAwMDAsIGZhbHNlKTsKICNl
bHNlCi0gIENoZWNrTGlzdCgmbGFyZ2VfLm5vcm1hbCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCBm
YWxzZSk7CisgICAgQ2hlY2tMaXN0KCZsYXJnZS5ub3JtYWwsIGtNYXhQYWdlcywgMTAwMDAwMDAw
MCwgZmFsc2UpOwogI2VuZGlmCi0gICAgQ2hlY2tMaXN0KCZsYXJnZV8ucmV0dXJuZWQsIGtNYXhQ
YWdlcywgMTAwMDAwMDAwMCwgdHJ1ZSk7Ci0gIGZvciAoTGVuZ3RoIHMgPSAxOyBzIDwga01heFBh
Z2VzOyBzKyspIHsKKyAgICBDaGVja0xpc3QoJmxhcmdlLnJldHVybmVkLCBrTWF4UGFnZXMsIDEw
MDAwMDAwMDAsIHRydWUpOworICAgIGZvciAoTGVuZ3RoIHMgPSAxOyBzIDwga01heFBhZ2VzOyBz
KyspIHsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAg
dG90YWxGcmVlQ29tbWl0dGVkICs9IENoZWNrTGlzdCgmZnJlZV9bc10ubm9ybWFsLCBzLCBzLCBm
YWxzZSk7CisgICAgICAgIHRvdGFsRnJlZUNvbW1pdHRlZCArPSBDaGVja0xpc3QoJmZyZWVTcGFu
TGlzdFtzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKICNlbHNlCi0gICAgQ2hlY2tMaXN0KCZmcmVl
X1tzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKKyAgICAgICAgQ2hlY2tMaXN0KCZmcmVlU3Bhbkxp
c3Rbc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CiAjZW5kaWYKLSAgICBDaGVja0xpc3QoJmZyZWVf
W3NdLnJldHVybmVkLCBzLCBzLCB0cnVlKTsKLSAgfQorICAgICAgICBDaGVja0xpc3QoJmZyZWVT
cGFuTGlzdFtzXS5yZXR1cm5lZCwgcywgcywgdHJ1ZSk7CisgICAgfQogI2lmIFVTRV9CQUNLR1JP
VU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgQVNTRVJUKHRvdGFsRnJlZUNvbW1pdHRl
ZCA9PSBmcmVlX2NvbW1pdHRlZF9wYWdlc18pOworICAgIEFTU0VSVCh0b3RhbEZyZWVDb21taXR0
ZWQgPT0gZnJlZUNvbW1pdHRlZFBhZ2VzKTsKICNlbmRpZgotICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIEFTU0VSVF9ESVNBQkxFRAotc2l6ZV90IFRDTWFsbG9jX1Bh
Z2VIZWFwOjpDaGVja0xpc3QoU3BhbiosIExlbmd0aCwgTGVuZ3RoLCBib29sKSB7Ci0gIHJldHVy
biAwOworc2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrTGlzdChTcGFuKiwgTGVuZ3RoLCBM
ZW5ndGgsIGJvb2wpCit7CisgICAgcmV0dXJuIDA7CiB9CiAjZWxzZQotc2l6ZV90IFRDTWFsbG9j
X1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3Ro
IG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCkgewotICBzaXplX3QgZnJlZUNvdW50ID0gMDsK
LSAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewot
ICAgIENIRUNLX0NPTkRJVElPTihzLT5mcmVlKTsKLSAgICBDSEVDS19DT05ESVRJT04ocy0+bGVu
Z3RoID49IG1pbl9wYWdlcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0aCA8PSBtYXhf
cGFnZXMpOwotICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0KSA9PSBz
KTsKLSAgICBDSEVDS19DT05ESVRJT04oR2V0RGVzY3JpcHRvcihzLT5zdGFydCtzLT5sZW5ndGgt
MSkgPT0gcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmRlY29tbWl0dGVkID09IGRlY29tbWl0
dGVkKTsKLSAgICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOwotICB9Ci0gIHJldHVybiBmcmVlQ291
bnQ7CitzaXplX3QgVENNYWxsb2NQYWdlSGVhcDo6Q2hlY2tMaXN0KFNwYW4qIGxpc3QsIExlbmd0
aCBtaW5QYWdlcywgTGVuZ3RoIG1heFBhZ2VzLCBib29sIGRlY29tbWl0dGVkKQoreworICAgIHNp
emVfdCBmcmVlQ291bnQgPSAwOworICAgIGZvciAoU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0g
bGlzdDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOwor
ICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoID49IG1pblBhZ2VzKTsKKyAgICAgICAg
Q0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0aCA8PSBtYXhQYWdlcyk7CisgICAgICAgIENIRUNLX0NP
TkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0KSA9PSBzKTsKKyAgICAgICAgQ0hFQ0tfQ09O
RElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQrcy0+bGVuZ3RoLTEpID09IHMpOworICAgICAg
ICBDSEVDS19DT05ESVRJT04ocy0+ZGVjb21taXR0ZWQgPT0gZGVjb21taXR0ZWQpOworICAgICAg
ICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gZnJlZUNvdW50Owog
fQogI2VuZGlmCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlTGlzdChTcGFu
KiBsaXN0LCBTcGFuKiByZXR1cm5lZCkgewotICAvLyBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIGxp
c3Qgc28gdGhhdCB3aGVuIHdlIHB1c2ggdGhlc2UKLSAgLy8gc3BhbnMgb24gdGhlICJyZXR1cm5l
ZCIgbGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpS
ZWxlYXNlRnJlZUxpc3QoU3BhbiogbGlzdCwgU3BhbiogcmV0dXJuZWQpCit7CisgICAgLy8gV2Fs
ayBiYWNrd2FyZHMgdGhyb3VnaCBsaXN0IHNvIHRoYXQgd2hlbiB3ZSBwdXNoIHRoZXNlCisgICAg
Ly8gc3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgog
I2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgc2l6ZV90IGZy
ZWVQYWdlUmVkdWN0aW9uID0gMDsKKyAgICBzaXplX3QgZnJlZVBhZ2VSZWR1Y3Rpb24gPSAwOwog
I2VuZGlmCiAKLSAgd2hpbGUgKCFETExfSXNFbXB0eShsaXN0KSkgewotICAgIFNwYW4qIHMgPSBs
aXN0LT5wcmV2OworICAgIHdoaWxlICghRExMX0lzRW1wdHkobGlzdCkpIHsKKyAgICAgICAgU3Bh
biogcyA9IGxpc3QtPnByZXY7CiAKLSAgICBETExfUmVtb3ZlKHMpOwotICAgIHMtPmRlY29tbWl0
dGVkID0gdHJ1ZTsKLSAgICBETExfUHJlcGVuZChyZXR1cm5lZCwgcyk7Ci0gICAgVENNYWxsb2Nf
U3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNo
aWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+
bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAgICAgRExMUmVtb3ZlKHMpOworICAgICAgICBz
LT5kZWNvbW1pdHRlZCA9IHRydWU7CisgICAgICAgIERMTFByZXBlbmQocmV0dXJuZWQsIHMpOwor
ICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMt
PnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxzaXplX3Q+KHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7CiAjaWYgVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIGZyZWVQYWdlUmVkdWN0aW9u
ICs9IHMtPmxlbmd0aDsKKyAgICAgICAgZnJlZVBhZ2VSZWR1Y3Rpb24gKz0gcy0+bGVuZ3RoOwog
I2VuZGlmCi0gIH0KKyAgICB9CiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVO
R0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IGZyZWVQYWdlUmVkdWN0aW9u
OwotICAgIGlmIChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPCBtaW5fZnJlZV9jb21taXR0ZWRfcGFn
ZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pIAotICAgICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFn
ZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAgZnJl
ZUNvbW1pdHRlZFBhZ2VzIC09IGZyZWVQYWdlUmVkdWN0aW9uOworICAgIGlmIChmcmVlQ29tbWl0
dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkgCisgICAg
ICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJlZUNvbW1pdHRl
ZFBhZ2VzOwogI2VuZGlmCiB9CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVl
UGFnZXMoKSB7Ci0gIGZvciAoTGVuZ3RoIHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAg
ICBSZWxlYXNlRnJlZUxpc3QoJmZyZWVfW3NdLm5vcm1hbCwgJmZyZWVfW3NdLnJldHVybmVkKTsK
LSAgfQotICBSZWxlYXNlRnJlZUxpc3QoJmxhcmdlXy5ub3JtYWwsICZsYXJnZV8ucmV0dXJuZWQp
OwotICBBU1NFUlQoQ2hlY2soKSk7Cit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OlJlbGVhc2VGcmVl
UGFnZXMoKQoreworICAgIGZvciAoTGVuZ3RoIHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspCisg
ICAgICAgIFJlbGVhc2VGcmVlTGlzdCgmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbCwgJmZyZWVTcGFu
TGlzdFtzXS5yZXR1cm5lZCk7CisgICAgUmVsZWFzZUZyZWVMaXN0KCZsYXJnZS5ub3JtYWwsICZs
YXJnZS5yZXR1cm5lZCk7CisgICAgQVNTRVJUKENoZWNrKCkpOwogfQogCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IC8vIEZyZWUgbGlzdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hl
X0ZyZWVMaXN0IHsKLSBwcml2YXRlOgotICB2b2lkKiAgICBsaXN0XzsgICAgICAgLy8gTGlua2Vk
IGxpc3Qgb2Ygbm9kZXMKLSAgdWludDE2X3QgbGVuZ3RoXzsgICAgIC8vIEN1cnJlbnQgbGVuZ3Ro
Ci0gIHVpbnQxNl90IGxvd2F0ZXJfOyAgICAvLyBMb3cgd2F0ZXIgbWFyayBmb3IgbGlzdCBsZW5n
dGgKK2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdCB7Citwcml2YXRlOgorICAgIHZv
aWQqIGxpc3Q7IC8vIExpbmtlZCBsaXN0IG9mIG5vZGVzCisgICAgdWludDE2X3QgY3VycmVudExl
bmd0aDsgLy8gQ3VycmVudCBsZW5ndGgKKyAgICB1aW50MTZfdCBsb3dhdGVyOyAvLyBMb3cgd2F0
ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKIAotIHB1YmxpYzoKLSAgdm9pZCBJbml0KCkgewotICAg
IGxpc3RfID0gTlVMTDsKLSAgICBsZW5ndGhfID0gMDsKLSAgICBsb3dhdGVyXyA9IDA7Ci0gIH0K
K3B1YmxpYzoKKyAgICB2b2lkIEluaXQoKQorICAgIHsKKyAgICAgICAgbGlzdCA9IDA7CisgICAg
ICAgIGN1cnJlbnRMZW5ndGggPSAwOworICAgICAgICBsb3dhdGVyID0gMDsKKyAgICB9CiAKLSAg
Ly8gUmV0dXJuIGN1cnJlbnQgbGVuZ3RoIG9mIGxpc3QKLSAgaW50IGxlbmd0aCgpIGNvbnN0IHsK
LSAgICByZXR1cm4gbGVuZ3RoXzsKLSAgfQorICAgIC8vIFJldHVybiBjdXJyZW50IGxlbmd0aCBv
ZiBsaXN0CisgICAgaW50IGxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY3Vy
cmVudExlbmd0aDsKKyAgICB9CiAKLSAgLy8gSXMgbGlzdCBlbXB0eT8KLSAgYm9vbCBlbXB0eSgp
IGNvbnN0IHsKLSAgICByZXR1cm4gbGlzdF8gPT0gTlVMTDsKLSAgfQorICAgIC8vIElzIGxpc3Qg
ZW1wdHk/CisgICAgYm9vbCBlbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWxp
c3Q7CisgICAgfQogCi0gIC8vIExvdy13YXRlciBtYXJrIG1hbmFnZW1lbnQKLSAgaW50IGxvd3dh
dGVybWFyaygpIGNvbnN0IHsgcmV0dXJuIGxvd2F0ZXJfOyB9Ci0gIHZvaWQgY2xlYXJfbG93d2F0
ZXJtYXJrKCkgeyBsb3dhdGVyXyA9IGxlbmd0aF87IH0KLQotICBBTFdBWVNfSU5MSU5FIHZvaWQg
UHVzaCh2b2lkKiBwdHIpIHsKLSAgICBTTExfUHVzaCgmbGlzdF8sIHB0cik7Ci0gICAgbGVuZ3Ro
XysrOwotICB9CisgICAgLy8gTG93LXdhdGVyIG1hcmsgbWFuYWdlbWVudAorICAgIGludCBsb3d3
YXRlcm1hcmsoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvd2F0ZXI7CisgICAgfQor
ICAgIHZvaWQgY2xlYXJMb3d3YXRlcm1hcmsoKQorICAgIHsKKyAgICAgICAgbG93YXRlciA9IGN1
cnJlbnRMZW5ndGg7CisgICAgfQogCi0gIHZvaWQgUHVzaFJhbmdlKGludCBOLCB2b2lkICpzdGFy
dCwgdm9pZCAqZW5kKSB7Ci0gICAgU0xMX1B1c2hSYW5nZSgmbGlzdF8sIHN0YXJ0LCBlbmQpOwot
ICAgIGxlbmd0aF8gPSBsZW5ndGhfICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOwotICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIFB1c2godm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgU0xM
UHVzaCgmbGlzdCwgcHRyKTsKKyAgICAgICAgY3VycmVudExlbmd0aCsrOworICAgIH0KIAotICB2
b2lkIFBvcFJhbmdlKGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpIHsKLSAgICBTTExf
UG9wUmFuZ2UoJmxpc3RfLCBOLCBzdGFydCwgZW5kKTsKLSAgICBBU1NFUlQobGVuZ3RoXyA+PSBO
KTsKLSAgICBsZW5ndGhfID0gbGVuZ3RoXyAtIHN0YXRpY19jYXN0PHVpbnQxNl90PihOKTsKLSAg
ICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dhdGVyXyA9IGxlbmd0aF87Ci0gIH0KKyAgICB2
b2lkIFB1c2hSYW5nZShpbnQgTiwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKKyAgICB7CisgICAg
ICAgIFNMTFB1c2hSYW5nZSgmbGlzdCwgc3RhcnQsIGVuZCk7CisgICAgICAgIGN1cnJlbnRMZW5n
dGggPSBjdXJyZW50TGVuZ3RoICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOworICAgIH0KIAot
ICBBTFdBWVNfSU5MSU5FIHZvaWQqIFBvcCgpIHsKLSAgICBBU1NFUlQobGlzdF8gIT0gTlVMTCk7
Ci0gICAgbGVuZ3RoXy0tOwotICAgIGlmIChsZW5ndGhfIDwgbG93YXRlcl8pIGxvd2F0ZXJfID0g
bGVuZ3RoXzsKLSAgICByZXR1cm4gU0xMX1BvcCgmbGlzdF8pOwotICB9CisgICAgdm9pZCBQb3BS
YW5nZShpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKQorICAgIHsKKyAgICAgICAgU0xM
UG9wUmFuZ2UoJmxpc3QsIE4sIHN0YXJ0LCBlbmQpOworICAgICAgICBBU1NFUlQoY3VycmVudExl
bmd0aCA+PSBOKTsKKyAgICAgICAgY3VycmVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGggLSBzdGF0
aWNfY2FzdDx1aW50MTZfdD4oTik7CisgICAgICAgIGlmIChjdXJyZW50TGVuZ3RoIDwgbG93YXRl
cikKKyAgICAgICAgICAgIGxvd2F0ZXIgPSBjdXJyZW50TGVuZ3RoOworICAgIH0KKworICAgIEFM
V0FZU19JTkxJTkUgdm9pZCogUG9wKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsaXN0KTsKKyAg
ICAgICAgY3VycmVudExlbmd0aC0tOworICAgICAgICBpZiAoY3VycmVudExlbmd0aCA8IGxvd2F0
ZXIpCisgICAgICAgICAgICBsb3dhdGVyID0gY3VycmVudExlbmd0aDsKKyAgICAgICAgcmV0dXJu
IFNMTFBvcCgmbGlzdCk7CisgICAgfQogCiAjaWZkZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUg
PGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgotICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3Rz
KEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKLSAgewotICAgICAgZm9yICh2
b2lkKiBuZXh0T2JqZWN0ID0gbGlzdF87IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIu
bmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0
KSkpCi0gICAgICAgICAgZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOwotICB9CisgICAgdGVtcGxh
dGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZvaWQgZW51bWVyYXRlRnJlZU9i
amVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAg
ICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlzdDsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9
IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG5l
eHRPYmplY3QpKSkKKyAgICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICB9
CiAjZW5kaWYKIH07CiAKQEAgLTIyNzUsMjA0ICsyNDYyLDgyIEBAIGNsYXNzIFRDTWFsbG9jX1Ro
cmVhZENhY2hlX0ZyZWVMaXN0IHsKIC8vIERhdGEga2VwdCBwZXIgdGhyZWFkCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGUgewotIHByaXZhdGU6Ci0gIHR5cGVkZWYg
VENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3QgRnJlZUxpc3Q7CitjbGFzcyBUQ01hbGxvY1Ro
cmVhZENhY2hlIHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUQ01hbGxvY1RocmVhZENhY2hlRnJl
ZUxpc3QgRnJlZUxpc3Q7CiAjaWYgT1MoV0lORE9XUykKLSAgdHlwZWRlZiBEV09SRCBUaHJlYWRJ
ZGVudGlmaWVyOworICAgIHR5cGVkZWYgRFdPUkQgVGhyZWFkSWRlbnRpZmllcjsKICNlbHNlCi0g
IHR5cGVkZWYgcHRocmVhZF90IFRocmVhZElkZW50aWZpZXI7CisgICAgdHlwZWRlZiBwdGhyZWFk
X3QgVGhyZWFkSWRlbnRpZmllcjsKICNlbmRpZgogCi0gIHNpemVfdCAgICAgICAgc2l6ZV87ICAg
ICAgICAgICAgICAgICAgLy8gQ29tYmluZWQgc2l6ZSBvZiBkYXRhCi0gIFRocmVhZElkZW50aWZp
ZXIgdGlkXzsgICAgICAgICAgICAgICAgLy8gV2hpY2ggdGhyZWFkIG93bnMgaXQKLSAgYm9vbCAg
ICAgICAgICBpbl9zZXRzcGVjaWZpY187ICAgICAgICAgICAvLyBDYWxsZWQgcHRocmVhZF9zZXRz
cGVjaWZpYz8KLSAgRnJlZUxpc3QgICAgICBsaXN0X1trTnVtQ2xhc3Nlc107ICAgICAvLyBBcnJh
eSBpbmRleGVkIGJ5IHNpemUtY2xhc3MKLQotICAvLyBXZSBzYW1wbGUgYWxsb2NhdGlvbnMsIGJp
YXNlZCBieSB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICB1aW50MzJfdCAgICAgIHJuZF87
ICAgICAgICAgICAgICAgICAgIC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0gIHNp
emVfdCAgICAgICAgYnl0ZXNfdW50aWxfc2FtcGxlXzsgICAgLy8gQnl0ZXMgdW50aWwgd2Ugc2Ft
cGxlIG5leHQKKyAgICBzaXplX3Qgc2l6ZTsgLy8gQ29tYmluZWQgc2l6ZSBvZiBkYXRhCisgICAg
VGhyZWFkSWRlbnRpZmllciB0aWQ7IC8vIFdoaWNoIHRocmVhZCBvd25zIGl0CisgICAgYm9vbCBp
blNldHNwZWNpZmljOyAvLyBDYWxsZWQgcHRocmVhZF9zZXRzcGVjaWZpYz8KKyAgICBGcmVlTGlz
dCBsaXN0W2tOdW1DbGFzc2VzXTsgLy8gQXJyYXkgaW5kZXhlZCBieSBzaXplLWNsYXNzCiAKLSAg
Ly8gQWxsb2NhdGUgYSBuZXcgaGVhcC4gUkVRVUlSRVM6IHBhZ2VoZWFwX2xvY2sgaXMgaGVsZC4K
LSAgc3RhdGljIGlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNoZSogTmV3SGVhcChUaHJlYWRJZGVu
dGlmaWVyIHRpZCk7Ci0KLSAgLy8gVXNlIG9ubHkgYXMgcHRocmVhZCB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvciBmdW5jdGlvbi4KLSAgc3RhdGljIHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZv
aWQqIHB0cik7Ci0gcHVibGljOgotICAvLyBBbGwgVGhyZWFkQ2FjaGUgb2JqZWN0cyBhcmUga2Vw
dCBpbiBhIGxpbmtlZCBsaXN0IChmb3Igc3RhdHMgY29sbGVjdGlvbikKLSAgVENNYWxsb2NfVGhy
ZWFkQ2FjaGUqIG5leHRfOwotICBUQ01hbGxvY19UaHJlYWRDYWNoZSogcHJldl87Ci0KLSAgdm9p
ZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkKTsKLSAgdm9pZCBDbGVhbnVwKCk7Ci0KLSAgLy8g
QWNjZXNzb3JzIChtb3N0bHkganVzdCBmb3IgcHJpbnRpbmcgc3RhdHMpCi0gIGludCBmcmVlbGlz
dF9sZW5ndGgoc2l6ZV90IGNsKSBjb25zdCB7IHJldHVybiBsaXN0X1tjbF0ubGVuZ3RoKCk7IH0K
LQotICAvLyBUb3RhbCBieXRlIHNpemUgaW4gY2FjaGUKLSAgc2l6ZV90IFNpemUoKSBjb25zdCB7
IHJldHVybiBzaXplXzsgfQotCi0gIEFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdGUoc2l6ZV90
IHNpemUpOwotICB2b2lkIERlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3Qgc2l6ZV9jbGFzcyk7
Ci0KLSAgQUxXQVlTX0lOTElORSB2b2lkIEZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2ws
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSk7Ci0gIHZvaWQgUmVsZWFzZVRvQ2VudHJhbENhY2hlKHNp
emVfdCBjbCwgaW50IE4pOwotICB2b2lkIFNjYXZlbmdlKCk7Ci0gIHZvaWQgUHJpbnQoKSBjb25z
dDsKLQotICAvLyBSZWNvcmQgYWxsb2NhdGlvbiBvZiAiayIgYnl0ZXMuICBSZXR1cm4gdHJ1ZSBp
ZmYgYWxsb2NhdGlvbgotICAvLyBzaG91bGQgYmUgc2FtcGxlZAotICBib29sIFNhbXBsZUFsbG9j
YXRpb24oc2l6ZV90IGspOwotCi0gIC8vIFBpY2sgbmV4dCBzYW1wbGluZyBwb2ludAotICB2b2lk
IFBpY2tOZXh0U2FtcGxlKHNpemVfdCBrKTsKLQotICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAg
ICAgIEluaXRNb2R1bGUoKTsKLSAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBJbml0VFNE
KCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogR2V0VGhyZWFkSGVhcCgpOwotICBz
dGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIEdldENhY2hlKCk7Ci0gIHN0YXRpYyBUQ01hbGxv
Y19UaHJlYWRDYWNoZSogR2V0Q2FjaGVJZlByZXNlbnQoKTsKLSAgc3RhdGljIFRDTWFsbG9jX1Ro
cmVhZENhY2hlKiBDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCk7Ci0gIHN0YXRpYyB2b2lkICAgICAg
ICAgICAgICAgICAgRGVsZXRlQ2FjaGUoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXApOwotICBz
dGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEJlY29tZUlkbGUoKTsKLSAgc3RhdGljIHZvaWQg
ICAgICAgICAgICAgICAgICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKLQotI2lmZGVmIFdU
Rl9DSEFOR0VTCi0gIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KLSAgdm9p
ZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFk
ZXIpCi0gIHsKLSAgICAgIGZvciAodW5zaWduZWQgc2l6ZUNsYXNzID0gMDsgc2l6ZUNsYXNzIDwg
a051bUNsYXNzZXM7IHNpemVDbGFzcysrKQotICAgICAgICAgIGxpc3RfW3NpemVDbGFzc10uZW51
bWVyYXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFkZXIpOwotICB9Ci0jZW5kaWYKLX07CisgICAg
Ly8gV2Ugc2FtcGxlIGFsbG9jYXRpb25zLCBiaWFzZWQgYnkgdGhlIHNpemUgb2YgdGhlIGFsbG9j
YXRpb24KKyAgICB1aW50MzJfdCBybmQ7IC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9y
CisgICAgc2l6ZV90IGJ5dGVzVW50aWxTYW1wbGU7IC8vIEJ5dGVzIHVudGlsIHdlIHNhbXBsZSBu
ZXh0CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBrZXB0IHBlciBzaXplLWNsYXNzIGluIGNlbnRy
YWwgY2FjaGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEFsbG9jYXRlIGEgbmV3IGhlYXAuIFJFUVVJ
UkVTOiBwYWdlaGVhcExvY2sgaXMgaGVsZC4KKyAgICBzdGF0aWMgaW5saW5lIFRDTWFsbG9jVGhy
ZWFkQ2FjaGUqIE5ld0hlYXAoVGhyZWFkSWRlbnRpZmllciB0aWQpOwogCi1jbGFzcyBUQ01hbGxv
Y19DZW50cmFsX0ZyZWVMaXN0IHsKLSBwdWJsaWM6Ci0gIHZvaWQgSW5pdChzaXplX3QgY2wpOwor
ICAgIC8vIFVzZSBvbmx5IGFzIHB0aHJlYWQgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgZnVu
Y3Rpb24uCisgICAgc3RhdGljIHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZvaWQqIHB0cik7Citw
dWJsaWM6CisgICAgLy8gQWxsIFRocmVhZENhY2hlIG9iamVjdHMgYXJlIGtlcHQgaW4gYSBsaW5r
ZWQgbGlzdCAoZm9yIHN0YXRzIGNvbGxlY3Rpb24pCisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSog
bmV4dDsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBwcmV2OwogCi0gIC8vIFRoZXNlIG1ldGhv
ZHMgYWxsIGRvIGludGVybmFsIGxvY2tpbmcuCisgICAgdm9pZCBJbml0KFRocmVhZElkZW50aWZp
ZXIgdGlkKTsKKyAgICB2b2lkIENsZWFudXAoKTsKIAotICAvLyBJbnNlcnQgdGhlIHNwZWNpZmll
ZCByYW5nZSBpbnRvIHRoZSBjZW50cmFsIGZyZWVsaXN0LiAgTiBpcyB0aGUgbnVtYmVyIG9mCi0g
IC8vIGVsZW1lbnRzIGluIHRoZSByYW5nZS4KLSAgdm9pZCBJbnNlcnRSYW5nZSh2b2lkICpzdGFy
dCwgdm9pZCAqZW5kLCBpbnQgTik7CisgICAgLy8gQWNjZXNzb3JzIChtb3N0bHkganVzdCBmb3Ig
cHJpbnRpbmcgc3RhdHMpCisgICAgaW50IGZyZWVsaXN0bGVuZ3RoKHNpemVfdCBjbCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBsaXN0W2NsXS5sZW5ndGgoKTsKKyAgICB9CiAKLSAgLy8g
UmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRzIGludG8gTi4KLSAg
dm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCAqTik7CisgICAg
Ly8gVG90YWwgYnl0ZSBzaXplIGluIGNhY2hlCisgICAgc2l6ZV90IFNpemUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQogCi0gIC8vIFJldHVybnMgdGhlIG51bWJl
ciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCi0gIHNpemVfdCBsZW5ndGgoKSB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICAgIHJldHVybiBjb3VudGVyXzsKLSAgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkIERlYWxsb2NhdGUo
dm9pZCogcHRyLCBzaXplX3Qgc2l6ZWNsYXNzKTsKIAotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgZnJlZSBvYmplY3RzIGluIHRoZSB0cmFuc2ZlciBjYWNoZS4KLSAgaW50IHRjX2xlbmd0aCgp
IHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gICAgcmV0dXJuIHVzZWRfc2xvdHNf
ICogbnVtX29iamVjdHNfdG9fbW92ZVtzaXplX2NsYXNzX107Ci0gIH0KKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgc2l6ZV90IGFsbG9jYXRp
b25TaXplKTsKKyAgICB2b2lkIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShzaXplX3QgY2wsIGludCk7
CisgICAgdm9pZCBTY2F2ZW5nZSgpOworICAgIHZvaWQgUHJpbnQoKSBjb25zdDsKKworICAgIC8v
IFJlY29yZCBhbGxvY2F0aW9uIG9mICJrIiBieXRlcy4gUmV0dXJuIHRydWUgaWZmIGFsbG9jYXRp
b24KKyAgICAvLyBzaG91bGQgYmUgc2FtcGxlZAorICAgIGJvb2wgU2FtcGxlQWxsb2NhdGlvbihz
aXplX3Qgayk7CisKKyAgICAvLyBQaWNrIG5leHQgc2FtcGxpbmcgcG9pbnQKKyAgICB2b2lkIFBp
Y2tOZXh0U2FtcGxlKHNpemVfdCBrKTsKKworICAgIHN0YXRpYyB2b2lkIEluaXRNb2R1bGUoKTsK
KyAgICBzdGF0aWMgdm9pZCBJbml0VFNEKCk7CisgICAgc3RhdGljIFRDTWFsbG9jVGhyZWFkQ2Fj
aGUqIEdldFRocmVhZEhlYXAoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogR2V0
Q2FjaGUoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogR2V0Q2FjaGVJZlByZXNl
bnQoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogQ3JlYXRlQ2FjaGVJZk5lY2Vz
c2FyeSgpOworICAgIHN0YXRpYyB2b2lkIERlbGV0ZUNhY2hlKFRDTWFsbG9jVGhyZWFkQ2FjaGUq
IGhlYXApOworICAgIHN0YXRpYyB2b2lkIEJlY29tZUlkbGUoKTsKKyAgICBzdGF0aWMgdm9pZCBS
ZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKIAogI2lmZGVmIFdURl9DSEFOR0VTCi0gIHRlbXBs
YXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KLSAgdm9pZCBlbnVtZXJhdGVGcmVlT2Jq
ZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIsIFRDTWFsbG9jX0NlbnRy
YWxfRnJlZUxpc3QqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkKLSAgewotICAgIGZvciAoU3Bhbiog
c3BhbiA9ICZlbXB0eV87IHNwYW4gJiYgc3BhbiAhPSAmZW1wdHlfOyBzcGFuID0gKHNwYW4tPm5l
eHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkKLSAgICAgIEFTU0VSVCghc3Bhbi0+b2JqZWN0
cyk7Ci0KLSAgICBBU1NFUlQoIW5vbmVtcHR5Xy5vYmplY3RzKTsKLSAgICBzdGF0aWMgY29uc3Qg
cHRyZGlmZl90IG5vbmVtcHR5T2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
Jm5vbmVtcHR5XykgLSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzKTsKLQotICAg
IFNwYW4qIHJlbW90ZU5vbmVtcHR5ID0gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2VudHJhbEZyZWVMaXN0KSArIG5vbmVtcHR5T2Zmc2V0KTsK
LSAgICBTcGFuKiByZW1vdGVTcGFuID0gbm9uZW1wdHlfLm5leHQ7Ci0KLSAgICBmb3IgKFNwYW4q
IHNwYW4gPSByZWFkZXIocmVtb3RlU3Bhbik7IHNwYW4gJiYgcmVtb3RlU3BhbiAhPSByZW1vdGVO
b25lbXB0eTsgcmVtb3RlU3BhbiA9IHNwYW4tPm5leHQsIHNwYW4gPSAoc3Bhbi0+bmV4dCA/IHJl
YWRlcihzcGFuLT5uZXh0KSA6IDApKSB7Ci0gICAgICBmb3IgKHZvaWQqIG5leHRPYmplY3QgPSBz
cGFuLT5vYmplY3RzOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0ID0gcmVhZGVyLm5leHRFbnRyeUlu
TGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQotICAgICAg
ICBmaW5kZXIudmlzaXQobmV4dE9iamVjdCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwg
Y2xhc3MgUmVhZGVyPgorICAgIHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5k
ZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBz
aXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBrTnVtQ2xhc3Nlczsgc2l6ZUNsYXNzKyspCisgICAg
ICAgICAgICBsaXN0W3NpemVDbGFzc10uZW51bWVyYXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFk
ZXIpOwogICAgIH0KLSAgfQogI2VuZGlmCi0KLSBwcml2YXRlOgotICAvLyBSRVFVSVJFUzogbG9j
a18gaXMgaGVsZAotICAvLyBSZW1vdmUgb2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4KLSAg
Ly8gUmV0dXJuIE5VTEwgaWYgbm8gZnJlZSBlbnRyaWVzIGluIGNhY2hlLgotICB2b2lkKiBGZXRj
aEZyb21TcGFucygpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFJlbW92
ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLiAgRmV0Y2hlcwotICAvLyBmcm9tIHBhZ2Vo
ZWFwIGlmIGNhY2hlIGlzIGVtcHR5LiAgT25seSByZXR1cm5zCi0gIC8vIE5VTEwgb24gYWxsb2Nh
dGlvbiBmYWlsdXJlLgotICB2b2lkKiBGZXRjaEZyb21TcGFuc1NhZmUoKTsKLQotICAvLyBSRVFV
SVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBSZWxlYXNlIGEgbGlua2VkIGxpc3Qgb2Ygb2JqZWN0
cyB0byBzcGFucy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIHZvaWQg
UmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0YXJ0KTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18g
aXMgaGVsZAotICAvLyBSZWxlYXNlIGFuIG9iamVjdCB0byBzcGFucy4KLSAgLy8gTWF5IHRlbXBv
cmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19JTkxJTkUgdm9pZCBSZWxlYXNlVG9TcGFu
cyh2b2lkKiBvYmplY3QpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFBv
cHVsYXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVhcC4KLSAgLy8gTWF5IHRl
bXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19JTkxJTkUgdm9pZCBQb3B1bGF0ZSgp
OwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQuCi0gIC8vIFRyaWVzIHRvIG1ha2Ugcm9v
bSBmb3IgYSBUQ0VudHJ5LiAgSWYgdGhlIGNhY2hlIGlzIGZ1bGwgaXQgd2lsbCB0cnkgdG8KLSAg
Ly8gZXhwYW5kIGl0IGF0IHRoZSBjb3N0IG9mIHNvbWUgb3RoZXIgY2FjaGUgc2l6ZS4gIFJldHVy
biBmYWxzZSBpZiB0aGVyZSBpcwotICAvLyBubyBzcGFjZS4KLSAgYm9vbCBNYWtlQ2FjaGVTcGFj
ZSgpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBmb3IgbG9ja2VkX3NpemVfY2xhc3MgaXMgaGVs
ZC4KLSAgLy8gUGlja3MgYSAicmFuZG9tIiBzaXplIGNsYXNzIHRvIHN0ZWFsIFRDRW50cnkgc2xv
dCBmcm9tLiAgSW4gcmVhbGl0eSBpdAotICAvLyBqdXN0IGl0ZXJhdGVzIG92ZXIgdGhlIHNpemVj
bGFzc2VzIGJ1dCBkb2VzIHNvIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KLSAgLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3MuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSBsb2NrIGEgInJhbmRvbSIgc2l6
ZSBjbGFzcy4KLSAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBFdmljdFJhbmRvbVNpemVDbGFz
cyhzaXplX3QgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpOwotCi0gIC8vIFJFUVVJUkVT
OiBsb2NrXyBpcyAqbm90KiBoZWxkLgotICAvLyBUcmllcyB0byBzaHJpbmsgdGhlIENhY2hlLiAg
SWYgZm9yY2UgaXMgdHJ1ZSBpdCB3aWxsIHJlbGFzZSBvYmplY3RzIHRvCi0gIC8vIHNwYW5zIGlm
IGl0IGFsbG93cyBpdCB0byBzaHJpbmsgdGhlIGNhY2hlLiAgUmV0dXJuIGZhbHNlIGlmIGl0IGZh
aWxlZCB0bwotICAvLyBzaHJpbmsgdGhlIGNhY2hlLiAgRGVjcmVtZW50cyBjYWNoZV9zaXplXyBv
biBzdWNjZWVzcy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHRha2UgbG9ja18uICBJZiBpdCB0YWtl
cyBsb2NrXywgdGhlIGxvY2tlZF9zaXplX2NsYXNzCi0gIC8vIGxvY2sgaXMgcmVsZWFzZWQgdG8g
dGhlIHRocmVhZCBmcm9tIGhvbGRpbmcgdHdvIHNpemUgY2xhc3MgbG9ja3MKLSAgLy8gY29uY3Vy
cmVudGx5IHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBkZWFkbG9jay4KLSAgYm9vbCBTaHJpbmtDYWNo
ZShpbnQgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpOwotCi0gIC8vIFRoaXMgbG9jayBw
cm90ZWN0cyBhbGwgdGhlIGRhdGEgbWVtYmVycy4gIGNhY2hlZF9lbnRyaWVzIGFuZCBjYWNoZV9z
aXplXwotICAvLyBtYXkgYmUgbG9va2VkIGF0IHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4KLSAg
U3BpbkxvY2sgbG9ja187Ci0KLSAgLy8gV2Uga2VlcCBsaW5rZWQgbGlzdHMgb2YgZW1wdHkgYW5k
IG5vbi1lbXB0eSBzcGFucy4KLSAgc2l6ZV90ICAgc2l6ZV9jbGFzc187ICAgICAvLyBNeSBzaXpl
IGNsYXNzCi0gIFNwYW4gICAgIGVtcHR5XzsgICAgICAgICAgLy8gRHVtbXkgaGVhZGVyIGZvciBs
aXN0IG9mIGVtcHR5IHNwYW5zCi0gIFNwYW4gICAgIG5vbmVtcHR5XzsgICAgICAgLy8gRHVtbXkg
aGVhZGVyIGZvciBsaXN0IG9mIG5vbi1lbXB0eSBzcGFucwotICBzaXplX3QgICBjb3VudGVyXzsg
ICAgICAgIC8vIE51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUgZW50cnkKLQotICAvLyBI
ZXJlIHdlIHJlc2VydmUgc3BhY2UgZm9yIFRDRW50cnkgY2FjaGUgc2xvdHMuICBTaW5jZSBvbmUg
c2l6ZSBjbGFzcyBjYW4KLSAgLy8gZW5kIHVwIGdldHRpbmcgYWxsIHRoZSBUQ0VudHJpZXMgcXVv
dGEgaW4gdGhlIHN5c3RlbSB3ZSBqdXN0IHByZWFsbG9jYXRlCi0gIC8vIHN1ZmZpY2llbnQgbnVt
YmVyIG9mIGVudHJpZXMgaGVyZS4KLSAgVENFbnRyeSB0Y19zbG90c19ba051bVRyYW5zZmVyRW50
cmllc107Ci0KLSAgLy8gTnVtYmVyIG9mIGN1cnJlbnRseSB1c2VkIGNhY2hlZCBlbnRyaWVzIGlu
IHRjX3Nsb3RzXy4gIFRoaXMgdmFyaWFibGUgaXMKLSAgLy8gdXBkYXRlZCB1bmRlciBhIGxvY2sg
YnV0IGNhbiBiZSByZWFkIHdpdGhvdXQgb25lLgotICBpbnQzMl90IHVzZWRfc2xvdHNfOwotICAv
LyBUaGUgY3VycmVudCBudW1iZXIgb2Ygc2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4gIFRoaXMg
aXMgYW4KLSAgLy8gYWRhcHRpdmUgdmFsdWUgdGhhdCBpcyBpbmNyZWFzZWQgaWYgdGhlcmUgaXMg
bG90cyBvZiB0cmFmZmljCi0gIC8vIG9uIGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KLSAgaW50MzJfdCBj
YWNoZV9zaXplXzsKLX07Ci0KLS8vIFBhZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVs
dGlwbGUgb2YgNjQgYnl0ZXMKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQg
OiBwdWJsaWMgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7Ci0gcHJpdmF0ZToKLSAgY2hhciBw
YWRfWyg2NCAtIChzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCkgJSA2NCkpICUgNjRd
OwogfTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDgxLDIyICsyNTQ2LDIyIEBAIGNsYXNzIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgOgogCiAvLyBDZW50cmFsIGNhY2hlIC0tIGEgY29s
bGVjdGlvbiBvZiBmcmVlLWxpc3RzLCBvbmUgcGVyIHNpemUtY2xhc3MuCiAvLyBXZSBoYXZlIGEg
c2VwYXJhdGUgbG9jayBwZXIgZnJlZS1saXN0IHRvIHJlZHVjZSBjb250ZW50aW9uLgotc3RhdGlj
IFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgY2VudHJhbF9jYWNoZVtrTnVtQ2xhc3Nl
c107CitzdGF0aWMgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQgY2VudHJhbENhY2hlW2tO
dW1DbGFzc2VzXTsKIAogLy8gUGFnZS1sZXZlbCBhbGxvY2F0b3IKLXN0YXRpYyBBbGxvY0FsaWdu
bWVudEludGVnZXIgcGFnZWhlYXBfbWVtb3J5WyhzaXplb2YoVENNYWxsb2NfUGFnZUhlYXApICsg
c2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdlcikgLSAxKSAvIHNpemVvZihBbGxvY0FsaWdubWVu
dEludGVnZXIpXTsKK3N0YXRpYyBBbGxvY0FsaWdubWVudEludGVnZXIgcGFnZWhlYXBNZW1vcnlb
KHNpemVvZihUQ01hbGxvY1BhZ2VIZWFwKSArIHNpemVvZihBbGxvY0FsaWdubWVudEludGVnZXIp
IC0gMSkgLyBzaXplb2YoQWxsb2NBbGlnbm1lbnRJbnRlZ2VyKV07CiBzdGF0aWMgYm9vbCBwaGlu
aXRlZCA9IGZhbHNlOwogCiAvLyBBdm9pZCBleHRyYSBsZXZlbCBvZiBpbmRpcmVjdGlvbiBieSBt
YWtpbmcgInBhZ2VoZWFwIiBiZSBqdXN0IGFuIGFsaWFzCi0vLyBvZiBwYWdlaGVhcF9tZW1vcnku
CisvLyBvZiBwYWdlaGVhcE1lbW9yeS4KIHR5cGVkZWYgdW5pb24gewogICAgIHZvaWQqIG1fbWVt
b3J5OwotICAgIFRDTWFsbG9jX1BhZ2VIZWFwKiBtX3BhZ2VIZWFwOworICAgIFRDTWFsbG9jUGFn
ZUhlYXAqIG1fcGFnZUhlYXA7CiB9IFBhZ2VIZWFwVW5pb247CiAKLXN0YXRpYyBpbmxpbmUgVENN
YWxsb2NfUGFnZUhlYXAqIGdldFBhZ2VIZWFwKCkKK3N0YXRpYyBpbmxpbmUgVENNYWxsb2NQYWdl
SGVhcCogZ2V0UGFnZUhlYXAoKQogewotICAgIFBhZ2VIZWFwVW5pb24gdSA9IHsgJnBhZ2VoZWFw
X21lbW9yeVswXSB9OworICAgIFBhZ2VIZWFwVW5pb24gdSA9IHsgJnBhZ2VoZWFwTWVtb3J5WzBd
IH07CiAgICAgcmV0dXJuIHUubV9wYWdlSGVhcDsKIH0KIApAQCAtMjUwNiw5ICsyNTcxLDkgQEAg
c3RhdGljIGlubGluZSBUQ01hbGxvY19QYWdlSGVhcCogZ2V0UGFnZQogCiAjaWYgSEFWRShESVNQ
QVRDSF9IKSB8fCBPUyhXSU5ET1dTKQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpwZXJpb2Rp
Y1NjYXZlbmdlKCkKK3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6cGVyaW9kaWNTY2F2ZW5nZSgpCiB7
Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBMb2NrKTsKICAgICBwYWdlaGVhcC0+c2NhdmVuZ2UoKTsKIAogICAgIGlm
IChzaG91bGRTY2F2ZW5nZSgpKSB7CkBAIC0yNTE5LDM2ICsyNTg0LDM2IEBAIHZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVuZ2UKICAgICBzdXNwZW5kU2NhdmVuZ2VyKCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2Vy
KCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzaWduYWxTY2F2ZW5nZXIo
KQogewotICAgIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NFUlQocGFn
ZWhlYXBMb2NrLklzSGVsZCgpKTsKICAgICBpZiAoaXNTY2F2ZW5nZXJTdXNwZW5kZWQoKSAmJiBz
aG91bGRTY2F2ZW5nZSgpKQogICAgICAgICBzY2hlZHVsZVNjYXZlbmdlcigpOwogfQogCiAjZWxz
ZQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoKQordm9pZCBUQ01h
bGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVRO
QU1FX05QKQotICBwdGhyZWFkX3NldG5hbWVfbnAoIkphdmFTY3JpcHRDb3JlOiBGYXN0TWFsbG9j
IHNjYXZlbmdlciIpOworICAgIHB0aHJlYWRfc2V0bmFtZV9ucCgiSmF2YVNjcmlwdENvcmU6IEZh
c3RNYWxsb2Mgc2NhdmVuZ2VyIik7CiAjZW5kaWYKIAotICB3aGlsZSAoMSkgewotICAgICAgaWYg
KCFzaG91bGRTY2F2ZW5nZSgpKSB7Ci0gICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtX3Nj
YXZlbmdlTXV0ZXgpOwotICAgICAgICAgIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmUgPSBmYWxzZTsK
LSAgICAgICAgICAvLyBCbG9jayB1bnRpbCB0aGVyZSBhcmUgZW5vdWdoIGZyZWUgY29tbWl0dGVk
IHBhZ2VzIHRvIHJlbGVhc2UgYmFjayB0byB0aGUgc3lzdGVtLgotICAgICAgICAgIHB0aHJlYWRf
Y29uZF93YWl0KCZtX3NjYXZlbmdlQ29uZGl0aW9uLCAmbV9zY2F2ZW5nZU11dGV4KTsKLSAgICAg
ICAgICBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICBwdGhyZWFkX211
dGV4X3VubG9jaygmbV9zY2F2ZW5nZU11dGV4KTsKLSAgICAgIH0KLSAgICAgIHNsZWVwKGtTY2F2
ZW5nZURlbGF5SW5TZWNvbmRzKTsKLSAgICAgIHsKLSAgICAgICAgICBTcGluTG9ja0hvbGRlciBo
KCZwYWdlaGVhcF9sb2NrKTsKLSAgICAgICAgICBwYWdlaGVhcC0+c2NhdmVuZ2UoKTsKLSAgICAg
IH0KLSAgfQorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghc2hvdWxkU2NhdmVuZ2UoKSkg
eworICAgICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtX3NjYXZlbmdlTXV0ZXgpOworICAg
ICAgICAgICAgbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgLy8g
QmxvY2sgdW50aWwgdGhlcmUgYXJlIGVub3VnaCBmcmVlIGNvbW1pdHRlZCBwYWdlcyB0byByZWxl
YXNlIGJhY2sgdG8gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZt
X3NjYXZlbmdlQ29uZGl0aW9uLCAmbV9zY2F2ZW5nZU11dGV4KTsKKyAgICAgICAgICAgIG1fc2Nh
dmVuZ2VUaHJlYWRBY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxv
Y2soJm1fc2NhdmVuZ2VNdXRleCk7CisgICAgICAgIH0KKyAgICAgICAgc2xlZXAoa1NjYXZlbmdl
RGVsYXlJblNlY29uZHMpOworICAgICAgICB7CisgICAgICAgICAgICBTcGluTG9ja0hvbGRlciBo
KCZwYWdlaGVhcExvY2spOworICAgICAgICAgICAgcGFnZWhlYXAtPnNjYXZlbmdlKCk7CisgICAg
ICAgIH0KKyAgICB9CiB9CiAKICNlbmRpZgpAQCAtMjU1OCwxOSArMjYyMywxOSBAQCB2b2lkIFRD
TWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoCiAvLyBJZiBUTFMgaXMgYXZhaWxhYmxl
LCB3ZSBhbHNvIHN0b3JlIGEgY29weQogLy8gb2YgdGhlIHBlci10aHJlYWQgb2JqZWN0IGluIGEg
X190aHJlYWQgdmFyaWFibGUKIC8vIHNpbmNlIF9fdGhyZWFkIHZhcmlhYmxlcyBhcmUgZmFzdGVy
IHRvIHJlYWQKLS8vIHRoYW4gcHRocmVhZF9nZXRzcGVjaWZpYygpLiAgV2Ugc3RpbGwgbmVlZAor
Ly8gdGhhbiBwdGhyZWFkX2dldHNwZWNpZmljKCkuIFdlIHN0aWxsIG5lZWQKIC8vIHB0aHJlYWRf
c2V0c3BlY2lmaWMoKSBiZWNhdXNlIF9fdGhyZWFkCiAvLyB2YXJpYWJsZXMgcHJvdmlkZSBubyB3
YXkgdG8gcnVuIGNsZWFudXAKIC8vIGNvZGUgd2hlbiBhIHRocmVhZCBpcyBkZXN0cm95ZWQuCiAj
aWZkZWYgSEFWRV9UTFMKLXN0YXRpYyBfX3RocmVhZCBUQ01hbGxvY19UaHJlYWRDYWNoZSAqdGhy
ZWFkbG9jYWxfaGVhcDsKK3N0YXRpYyBfX3RocmVhZCBUQ01hbGxvY1RocmVhZENhY2hlICp0aHJl
YWRsb2NhbEhlYXA7CiAjZW5kaWYKLS8vIFRocmVhZC1zcGVjaWZpYyBrZXkuICBJbml0aWFsaXph
dGlvbiBoZXJlIGlzIHNvbWV3aGF0IHRyaWNreQorLy8gVGhyZWFkLXNwZWNpZmljIGtleS4gSW5p
dGlhbGl6YXRpb24gaGVyZSBpcyBzb21ld2hhdCB0cmlja3kKIC8vIGJlY2F1c2Ugc29tZSBMaW51
eCBzdGFydHVwIGNvZGUgaW52b2tlcyBtYWxsb2MoKSBiZWZvcmUgaXQKIC8vIGlzIGluIGEgZ29v
ZCBlbm91Z2ggc3RhdGUgdG8gaGFuZGxlIHB0aHJlYWRfa2V5Y3JlYXRlKCkuCi0vLyBUaGVyZWZv
cmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZF9pbml0ZWQgaXMgc2V0IHRvIHRydWUu
CisvLyBUaGVyZWZvcmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZEluaXRlZCBpcyBz
ZXQgdG8gdHJ1ZS4KIC8vIFVudGlsIHRoZW4sIHdlIHVzZSBhIHNsb3cgcGF0aCB0byBnZXQgdGhl
IGhlYXAgb2JqZWN0Lgotc3RhdGljIGJvb2wgdHNkX2luaXRlZCA9IGZhbHNlOworc3RhdGljIGJv
b2wgdHNkSW5pdGVkID0gZmFsc2U7CiAjaWYgVVNFKFBUSFJFQURfR0VUU1BFQ0lGSUNfRElSRUNU
KQogc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgaGVhcF9rZXkgPSBfX1BUS19GUkFNRVdPUktf
SkFWQVNDUklQVENPUkVfS0VZMDsKICNlbHNlCkBAIC0yNTgwLDcgKzI2NDUsNyBAQCBzdGF0aWMg
cHRocmVhZF9rZXlfdCBoZWFwX2tleTsKIERXT1JEIHRsc0luZGV4ID0gVExTX09VVF9PRl9JTkRF
WEVTOwogI2VuZGlmCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VGhyZWFkSGVhcChU
Q01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
VGhyZWFkSGVhcChUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwKQogewogI2lmIFVTRShQVEhSRUFE
X0dFVFNQRUNJRklDX0RJUkVDVCkKICAgICAvLyBDYW4ndCBoYXZlIHR3byBsaWJyYXJpZXMgYm90
aCBkb2luZyB0aGlzIGluIHRoZSBzYW1lIHByb2Nlc3MsCkBAIC0yNTk5LDExOSArMjY2NCwxMjUg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUaHJlYWRIZWFwKAogfQogCiAvLyBBbGxv
Y2F0b3IgZm9yIHRocmVhZCBoZWFwcwotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9j
X1RocmVhZENhY2hlPiB0aHJlYWRoZWFwX2FsbG9jYXRvcjsKK3N0YXRpYyBQYWdlSGVhcEFsbG9j
YXRvcjxUQ01hbGxvY1RocmVhZENhY2hlPiB0aHJlYWRoZWFwQWxsb2NhdG9yOwogCi0vLyBMaW5r
ZWQgbGlzdCBvZiBoZWFwIG9iamVjdHMuICBQcm90ZWN0ZWQgYnkgcGFnZWhlYXBfbG9jay4KLXN0
YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkX2hlYXBzID0gTlVMTDsKKy8vIExpbmtl
ZCBsaXN0IG9mIGhlYXAgb2JqZWN0cy4gUHJvdGVjdGVkIGJ5IHBhZ2VoZWFwTG9jay4KK3N0YXRp
YyBUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRIZWFwcyA9IDA7CiBzdGF0aWMgaW50IHRocmVh
ZF9oZWFwX2NvdW50ID0gMDsKIAotLy8gT3ZlcmFsbCB0aHJlYWQgY2FjaGUgc2l6ZS4gIFByb3Rl
Y3RlZCBieSBwYWdlaGVhcF9sb2NrLgotc3RhdGljIHNpemVfdCBvdmVyYWxsX3RocmVhZF9jYWNo
ZV9zaXplID0ga0RlZmF1bHRPdmVyYWxsVGhyZWFkQ2FjaGVTaXplOworLy8gT3ZlcmFsbCB0aHJl
YWQgY2FjaGUgc2l6ZS4gUHJvdGVjdGVkIGJ5IHBhZ2VoZWFwTG9jay4KK3N0YXRpYyBzaXplX3Qg
b3ZlcmFsbFRocmVhZENhY2hlc2l6ZSA9IGtEZWZhdWx0T3ZlcmFsbFRocmVhZENhY2hlU2l6ZTsK
IAotLy8gR2xvYmFsIHBlci10aHJlYWQgY2FjaGUgc2l6ZS4gIFdyaXRlcyBhcmUgcHJvdGVjdGVk
IGJ5Ci0vLyBwYWdlaGVhcF9sb2NrLiAgUmVhZHMgYXJlIGRvbmUgd2l0aG91dCBhbnkgbG9ja2lu
Zywgd2hpY2ggc2hvdWxkIGJlCisvLyBHbG9iYWwgcGVyLXRocmVhZCBjYWNoZSBzaXplLiBXcml0
ZXMgYXJlIHByb3RlY3RlZCBieQorLy8gcGFnZWhlYXBMb2NrLiBSZWFkcyBhcmUgZG9uZSB3aXRo
b3V0IGFueSBsb2NraW5nLCB3aGljaCBzaG91bGQgYmUKIC8vIGZpbmUgYXMgbG9uZyBhcyBzaXpl
X3QgY2FuIGJlIHdyaXR0ZW4gYXRvbWljYWxseSBhbmQgd2UgZG9uJ3QgcGxhY2UKIC8vIGludmFy
aWFudHMgYmV0d2VlbiB0aGlzIHZhcmlhYmxlIGFuZCBvdGhlciBwaWVjZXMgb2Ygc3RhdGUuCi1z
dGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBlcl90aHJlYWRfY2FjaGVfc2l6ZSA9IGtNYXhUaHJlYWRD
YWNoZVNpemU7CitzdGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBlclRocmVhZENhY2hlU2l6ZSA9IGtN
YXhUaHJlYWRDYWNoZVNpemU7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ2VudHJhbCBjYWNoZSBpbXBs
ZW1lbnRhdGlvbgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dDo6SW5pdChzaXplX3QgY2wpIHsKLSAgbG9ja18uSW5pdCgpOwotICBzaXplX2NsYXNzXyA9IGNs
OwotICBETExfSW5pdCgmZW1wdHlfKTsKLSAgRExMX0luaXQoJm5vbmVtcHR5Xyk7Ci0gIGNvdW50
ZXJfID0gMDsKLQotICBjYWNoZV9zaXplXyA9IDE7Ci0gIHVzZWRfc2xvdHNfID0gMDsKLSAgQVNT
RVJUKGNhY2hlX3NpemVfIDw9IGtOdW1UcmFuc2ZlckVudHJpZXMpOwotfQotCi12b2lkIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbGVhc2VMaXN0VG9TcGFucyh2b2lkKiBzdGFydCkgewot
ICB3aGlsZSAoc3RhcnQpIHsKLSAgICB2b2lkICpuZXh0ID0gU0xMX05leHQoc3RhcnQpOwotICAg
IFJlbGVhc2VUb1NwYW5zKHN0YXJ0KTsKLSAgICBzdGFydCA9IG5leHQ7Ci0gIH0KK3ZvaWQgVENN
YWxsb2NDZW50cmFsRnJlZUxpc3Q6OkluaXQoc2l6ZV90IGNsKQoreworICAgIGxvY2suSW5pdCgp
OworICAgIHNpemVDbGFzcyA9IGNsOworICAgIERMTEluaXQoJmVtcHR5KTsKKyAgICBETExJbml0
KCZub25lbXB0eSk7CisgICAgY291bnRlciA9IDA7CisKKyAgICBjYWNoZVNpemUgPSAxOworICAg
IHVzZWRTbG90cyA9IDA7CisgICAgQVNTRVJUKGNhY2hlU2l6ZSA8PSBrTnVtVHJhbnNmZXJFbnRy
aWVzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6
OlJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCkgewotICBjb25zdCBQYWdlSUQgcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYmplY3QpID4+IGtQYWdlU2hpZnQ7Ci0gIFNwYW4qIHNw
YW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKLSAgQVNTRVJUKHNwYW4gIT0gTlVMTCk7
Ci0gIEFTU0VSVChzcGFuLT5yZWZjb3VudCA+IDApOwotCi0gIC8vIElmIHNwYW4gaXMgZW1wdHks
IG1vdmUgaXQgdG8gbm9uLWVtcHR5IGxpc3QKLSAgaWYgKHNwYW4tPm9iamVjdHMgPT0gTlVMTCkg
ewotICAgIERMTF9SZW1vdmUoc3Bhbik7Ci0gICAgRExMX1ByZXBlbmQoJm5vbmVtcHR5Xywgc3Bh
bik7Ci0gICAgRXZlbnQoc3BhbiwgJ04nLCAwKTsKLSAgfQordm9pZCBUQ01hbGxvY0NlbnRyYWxG
cmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQqIHN0YXJ0KQoreworICAgIHdoaWxlIChz
dGFydCkgeworICAgICAgICB2b2lkKiBuZXh0ID0gU0xMX05leHQoc3RhcnQpOworICAgICAgICBS
ZWxlYXNlVG9TcGFucyhzdGFydCk7CisgICAgICAgIHN0YXJ0ID0gbmV4dDsKKyAgICB9Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZVRvU3Bh
bnModm9pZCogb2JqZWN0KQoreworICAgIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG9iamVjdCkgPj4ga1BhZ2VTaGlmdDsKKyAgICBTcGFuKiBzcGFuID0gcGFn
ZWhlYXAtPkdldERlc2NyaXB0b3IocCk7CisgICAgQVNTRVJUKHNwYW4pOworICAgIEFTU0VSVChz
cGFuLT5yZWZjb3VudCA+IDApOwogCi0gIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgZXhwZW5z
aXZlLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Ci0gIGlmIChmYWxzZSkgewotICAgIC8v
IENoZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9jY3VyIGluIGxpc3QKLSAgICB1bnNpZ25lZCBn
b3QgPSAwOwotICAgIGZvciAodm9pZCogcCA9IHNwYW4tPm9iamVjdHM7IHAgIT0gTlVMTDsgcCA9
ICooKHZvaWQqKikgcCkpIHsKLSAgICAgIEFTU0VSVChwICE9IG9iamVjdCk7Ci0gICAgICBnb3Qr
KzsKKyAgICAvLyBJZiBzcGFuIGlzIGVtcHR5LCBtb3ZlIGl0IHRvIG5vbi1lbXB0eSBsaXN0Cisg
ICAgaWYgKCFzcGFuLT5vYmplY3RzKSB7CisgICAgICAgIERMTFJlbW92ZShzcGFuKTsKKyAgICAg
ICAgRExMUHJlcGVuZCgmbm9uZW1wdHksIHNwYW4pOworICAgICAgICBFdmVudChzcGFuLCAnTics
IDApOwogICAgIH0KLSAgICBBU1NFUlQoZ290ICsgc3Bhbi0+cmVmY291bnQgPT0KLSAgICAgICAg
ICAgKHNwYW4tPmxlbmd0aDw8a1BhZ2VTaGlmdCkvQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5zaXpl
Y2xhc3MpKTsKLSAgfQogCi0gIGNvdW50ZXJfKys7Ci0gIHNwYW4tPnJlZmNvdW50LS07Ci0gIGlm
IChzcGFuLT5yZWZjb3VudCA9PSAwKSB7Ci0gICAgRXZlbnQoc3BhbiwgJyMnLCAwKTsKLSAgICBj
b3VudGVyXyAtPSAoc3Bhbi0+bGVuZ3RoPDxrUGFnZVNoaWZ0KSAvIEJ5dGVTaXplRm9yQ2xhc3Mo
c3Bhbi0+c2l6ZWNsYXNzKTsKLSAgICBETExfUmVtb3ZlKHNwYW4pOworICAgIC8vIFRoZSBmb2xs
b3dpbmcgY2hlY2sgaXMgZXhwZW5zaXZlLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Cisg
ICAgaWYgKGZhbHNlKSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9j
Y3VyIGluIGxpc3QKKyAgICAgICAgdW5zaWduZWQgZ290ID0gMDsKKyAgICAgICAgZm9yICh2b2lk
KiBwID0gc3Bhbi0+b2JqZWN0czsgcDsgcCA9ICooKHZvaWQqKikgcCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVChwICE9IG9iamVjdCk7CisgICAgICAgICAgICBnb3QrKzsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoZ290ICsgc3Bhbi0+cmVmY291bnQgPT0KKyAgICAgICAgICAgICAgICAoc3Bh
bi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5zaXplY2xh
c3MpKTsKKyAgICB9CiAKLSAgICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9w
ZXJhdGluZyBvbiBwYWdlaGVhcAotICAgIGxvY2tfLlVubG9jaygpOwotICAgIHsKLSAgICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgICAgcGFnZWhlYXAtPkRlbGV0ZShz
cGFuKTsKKyAgICBjb3VudGVyKys7CisgICAgc3Bhbi0+cmVmY291bnQtLTsKKyAgICBpZiAoIXNw
YW4tPnJlZmNvdW50KSB7CisgICAgICAgIEV2ZW50KHNwYW4sICcjJywgMCk7CisgICAgICAgIGNv
dW50ZXIgLT0gKHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSAvIEJ5dGVTaXplRm9yQ2xhc3Mo
c3Bhbi0+c2l6ZWNsYXNzKTsKKyAgICAgICAgRExMUmVtb3ZlKHNwYW4pOworCisgICAgICAgIC8v
IFJlbGVhc2UgY2VudHJhbCBsaXN0IGxvY2sgd2hpbGUgb3BlcmF0aW5nIG9uIHBhZ2VoZWFwCisg
ICAgICAgIGxvY2suVW5sb2NrKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgICAgICBwYWdlaGVhcC0+RGVsZXRlKHNwYW4p
OworICAgICAgICB9CisgICAgICAgIGxvY2suTG9jaygpOworICAgIH0gZWxzZSB7CisgICAgICAg
ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0gc3Bhbi0+b2JqZWN0czsKKyAg
ICAgICAgc3Bhbi0+b2JqZWN0cyA9IG9iamVjdDsKICAgICB9Ci0gICAgbG9ja18uTG9jaygpOwot
ICB9IGVsc2UgewotICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0gc3Bh
bi0+b2JqZWN0czsKLSAgICBzcGFuLT5vYmplY3RzID0gb2JqZWN0OwotICB9CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpFdmljdFJhbmRvbVNpemVD
bGFzcygKLSAgICBzaXplX3QgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpIHsKLSAgc3Rh
dGljIGludCByYWNlX2NvdW50ZXIgPSAwOwotICBpbnQgdCA9IHJhY2VfY291bnRlcisrOyAgLy8g
VXBkYXRlZCB3aXRob3V0IGEgbG9jaywgYnV0IHdobyBjYXJlcy4KLSAgaWYgKHQgPj0gc3RhdGlj
X2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKLSAgICB3aGlsZSAodCA+PSBzdGF0aWNfY2FzdDxp
bnQ+KGtOdW1DbGFzc2VzKSkgewotICAgICAgdCAtPSBrTnVtQ2xhc3NlczsKK0FMV0FZU19JTkxJ
TkUgYm9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6
ZV90IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSkKK3sKKyAgICBzdGF0aWMgaW50IHJhY2VD
b3VudGVyID0gMDsKKyAgICBpbnQgdCA9IHJhY2VDb3VudGVyKys7IC8vIFVwZGF0ZWQgd2l0aG91
dCBhIGxvY2ssIGJ1dCB3aG8gY2FyZXMuCisgICAgaWYgKHQgPj0gc3RhdGljX2Nhc3Q8aW50Pihr
TnVtQ2xhc3NlcykpIHsKKyAgICAgICAgd2hpbGUgKHQgPj0gc3RhdGljX2Nhc3Q8aW50PihrTnVt
Q2xhc3NlcykpCisgICAgICAgICAgICB0IC09IGtOdW1DbGFzc2VzOworICAgICAgICByYWNlQ291
bnRlciA9IHQ7CisgICAgfQorICAgIEFTU0VSVCh0ID49IDApOworICAgIEFTU0VSVCh0IDwgc3Rh
dGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOworICAgIGlmICh0ID09IHN0YXRpY19jYXN0PGlu
dD4obG9ja2VkU2l6ZUNsYXNzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBj
ZW50cmFsQ2FjaGVbdF0uU2hyaW5rQ2FjaGUoc3RhdGljX2Nhc3Q8aW50Pihsb2NrZWRTaXplQ2xh
c3MpLCBmb3JjZSk7Cit9CisKK2Jvb2wgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Ok1ha2VDYWNo
ZVNwYWNlKCkKK3sKKyAgICAvLyBJcyB0aGVyZSByb29tIGluIHRoZSBjYWNoZT8KKyAgICBpZiAo
dXNlZFNsb3RzIDwgY2FjaGVTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBDaGVj
ayBpZiB3ZSBjYW4gZXhwYW5kIHRoaXMgY2FjaGU/CisgICAgaWYgKGNhY2hlU2l6ZSA9PSBrTnVt
VHJhbnNmZXJFbnRyaWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gT2ssIHdlJ2xs
IHRyeSB0byBncmFiIGFuIGVudHJ5IGZyb20gc29tZSBvdGhlciBzaXplIGNsYXNzLgorICAgIGlm
IChFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIGZhbHNlKQorICAgICAgICB8fCBFdmlj
dFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIHRydWUpKSB7CisgICAgICAgIC8vIFN1Y2NlZWRl
ZCBpbiBldmljdGluZywgd2UncmUgZ29pbmcgdG8gbWFrZSBvdXIgY2FjaGUgbGFyZ2VyLgorICAg
ICAgICBjYWNoZVNpemUrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJhY2Vf
Y291bnRlciA9IHQ7Ci0gIH0KLSAgQVNTRVJUKHQgPj0gMCk7Ci0gIEFTU0VSVCh0IDwgc3RhdGlj
X2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOwotICBpZiAodCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGxv
Y2tlZF9zaXplX2NsYXNzKSkgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gY2VudHJhbF9jYWNoZVt0
XS5TaHJpbmtDYWNoZShzdGF0aWNfY2FzdDxpbnQ+KGxvY2tlZF9zaXplX2NsYXNzKSwgZm9yY2Up
OwotfQotCi1ib29sIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Ok1ha2VDYWNoZVNwYWNlKCkg
ewotICAvLyBJcyB0aGVyZSByb29tIGluIHRoZSBjYWNoZT8KLSAgaWYgKHVzZWRfc2xvdHNfIDwg
Y2FjaGVfc2l6ZV8pIHJldHVybiB0cnVlOwotICAvLyBDaGVjayBpZiB3ZSBjYW4gZXhwYW5kIHRo
aXMgY2FjaGU/Ci0gIGlmIChjYWNoZV9zaXplXyA9PSBrTnVtVHJhbnNmZXJFbnRyaWVzKSByZXR1
cm4gZmFsc2U7Ci0gIC8vIE9rLCB3ZSdsbCB0cnkgdG8gZ3JhYiBhbiBlbnRyeSBmcm9tIHNvbWUg
b3RoZXIgc2l6ZSBjbGFzcy4KLSAgaWYgKEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNpemVfY2xhc3Nf
LCBmYWxzZSkgfHwKLSAgICAgIEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNpemVfY2xhc3NfLCB0cnVl
KSkgewotICAgIC8vIFN1Y2NlZWRlZCBpbiBldmljdGluZywgd2UncmUgZ29pbmcgdG8gbWFrZSBv
dXIgY2FjaGUgbGFyZ2VyLgotICAgIGNhY2hlX3NpemVfKys7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLSAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogCkBAIC0yNzI2LDY0
OSArMjc5Nyw2ODIgQEAgY2xhc3MgTG9ja0ludmVydGVyIHsKIH07CiB9CiAKLWJvb2wgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50IGxvY2tlZF9zaXplX2NsYXNzLCBi
b29sIGZvcmNlKSB7Ci0gIC8vIFN0YXJ0IHdpdGggYSBxdWljayBjaGVjayB3aXRob3V0IHRha2lu
ZyBhIGxvY2suCi0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSByZXR1cm4gZmFsc2U7Ci0gIC8vIFdl
IGRvbid0IGV2aWN0IGZyb20gYSBmdWxsIGNhY2hlIHVubGVzcyB3ZSBhcmUgJ2ZvcmNpbmcnLgot
ICBpZiAoZm9yY2UgPT0gZmFsc2UgJiYgdXNlZF9zbG90c18gPT0gY2FjaGVfc2l6ZV8pIHJldHVy
biBmYWxzZTsKLQotICAvLyBHcmFiIGxvY2ssIGJ1dCBmaXJzdCByZWxlYXNlIHRoZSBvdGhlciBs
b2NrIGhlbGQgYnkgdGhpcyB0aHJlYWQuICBXZSB1c2UKLSAgLy8gdGhlIGxvY2sgaW52ZXJ0ZXIg
dG8gZW5zdXJlIHRoYXQgd2UgbmV2ZXIgaG9sZCB0d28gc2l6ZSBjbGFzcyBsb2NrcwotICAvLyBj
b25jdXJyZW50bHkuICBUaGF0IGNhbiBjcmVhdGUgYSBkZWFkbG9jayBiZWNhdXNlIHRoZXJlIGlz
IG5vIHdlbGwKLSAgLy8gZGVmaW5lZCBuZXN0aW5nIG9yZGVyLgotICBMb2NrSW52ZXJ0ZXIgbGko
JmNlbnRyYWxfY2FjaGVbbG9ja2VkX3NpemVfY2xhc3NdLmxvY2tfLCAmbG9ja18pOwotICBBU1NF
UlQodXNlZF9zbG90c18gPD0gY2FjaGVfc2l6ZV8pOwotICBBU1NFUlQoMCA8PSBjYWNoZV9zaXpl
Xyk7Ci0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSByZXR1cm4gZmFsc2U7Ci0gIGlmICh1c2VkX3Ns
b3RzXyA9PSBjYWNoZV9zaXplXykgewotICAgIGlmIChmb3JjZSA9PSBmYWxzZSkgcmV0dXJuIGZh
bHNlOwotICAgIC8vIFJlbGVhc2VMaXN0VG9TcGFucyByZWxlYXNlcyB0aGUgbG9jaywgc28gd2Ug
aGF2ZSB0byBtYWtlIGFsbCB0aGUKLSAgICAvLyB1cGRhdGVzIHRvIHRoZSBjZW50cmFsIGxpc3Qg
YmVmb3JlIGNhbGxpbmcgaXQuCi0gICAgY2FjaGVfc2l6ZV8tLTsKLSAgICB1c2VkX3Nsb3RzXy0t
OwotICAgIFJlbGVhc2VMaXN0VG9TcGFucyh0Y19zbG90c19bdXNlZF9zbG90c19dLmhlYWQpOwor
Ym9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50IGxvY2tlZFNpemVD
bGFzcywgYm9vbCBmb3JjZSkKK3sKKyAgICAvLyBTdGFydCB3aXRoIGEgcXVpY2sgY2hlY2sgd2l0
aG91dCB0YWtpbmcgYSBsb2NrLgorICAgIGlmICghY2FjaGVTaXplKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gV2UgZG9uJ3QgZXZpY3QgZnJvbSBhIGZ1bGwgY2FjaGUgdW5sZXNzIHdl
IGFyZSAnZm9yY2luZycuCisgICAgaWYgKCFmb3JjZSAmJiB1c2VkU2xvdHMgPT0gY2FjaGVTaXpl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHcmFiIGxvY2ssIGJ1dCBmaXJzdCBy
ZWxlYXNlIHRoZSBvdGhlciBsb2NrIGhlbGQgYnkgdGhpcyB0aHJlYWQuIFdlIHVzZQorICAgIC8v
IHRoZSBsb2NrIGludmVydGVyIHRvIGVuc3VyZSB0aGF0IHdlIG5ldmVyIGhvbGQgdHdvIHNpemUg
Y2xhc3MgbG9ja3MKKyAgICAvLyBjb25jdXJyZW50bHkuIFRoYXQgY2FuIGNyZWF0ZSBhIGRlYWRs
b2NrIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2VsbAorICAgIC8vIGRlZmluZWQgbmVzdGluZyBvcmRl
ci4KKyAgICBMb2NrSW52ZXJ0ZXIgbGkoJmNlbnRyYWxDYWNoZVtsb2NrZWRTaXplQ2xhc3NdLmxv
Y2ssICZsb2NrKTsKKyAgICBBU1NFUlQodXNlZFNsb3RzIDw9IGNhY2hlU2l6ZSk7CisgICAgQVNT
RVJUKDAgPD0gY2FjaGVTaXplKTsKKyAgICBpZiAoIWNhY2hlU2l6ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICh1c2VkU2xvdHMgPT0gY2FjaGVTaXplKSB7CisgICAgICAgIGlmICgh
Zm9yY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFJlbGVhc2VMaXN0
VG9TcGFucyByZWxlYXNlcyB0aGUgbG9jaywgc28gd2UgaGF2ZSB0byBtYWtlIGFsbCB0aGUKKyAg
ICAgICAgLy8gdXBkYXRlcyB0byB0aGUgY2VudHJhbCBsaXN0IGJlZm9yZSBjYWxsaW5nIGl0Lgor
ICAgICAgICBjYWNoZVNpemUtLTsKKyAgICAgICAgdXNlZFNsb3RzLS07CisgICAgICAgIFJlbGVh
c2VMaXN0VG9TcGFucyh0Y1Nsb3RzW3VzZWRTbG90c10uaGVhZCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBjYWNoZVNpemUtLTsKICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBj
YWNoZV9zaXplXy0tOwotICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUQ01hbGxvY19DZW50cmFs
X0ZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgTikgewot
ICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gIGlmIChOID09IG51bV9vYmplY3RzX3RvX21v
dmVbc2l6ZV9jbGFzc19dICYmCi0gICAgTWFrZUNhY2hlU3BhY2UoKSkgewotICAgIGludCBzbG90
ID0gdXNlZF9zbG90c18rKzsKLSAgICBBU1NFUlQoc2xvdCA+PTApOwotICAgIEFTU0VSVChzbG90
IDwga051bVRyYW5zZmVyRW50cmllcyk7Ci0gICAgVENFbnRyeSAqZW50cnkgPSAmdGNfc2xvdHNf
W3Nsb3RdOwotICAgIGVudHJ5LT5oZWFkID0gc3RhcnQ7Ci0gICAgZW50cnktPnRhaWwgPSBlbmQ7
Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJlbGVhc2VMaXN0VG9TcGFucyhzdGFydCk7Cit2b2lkIFRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5k
LCBpbnQgTikKK3sKKyAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrKTsKKyAgICBpZiAoTiA9PSBu
dW1PYmplY3RzVG9Nb3ZlW3NpemVDbGFzc10KKyAgICAgICAgJiYgTWFrZUNhY2hlU3BhY2UoKSkg
eworICAgICAgICBpbnQgc2xvdCA9IHVzZWRTbG90cysrOworICAgICAgICBBU1NFUlQoc2xvdCA+
PTApOworICAgICAgICBBU1NFUlQoc2xvdCA8IGtOdW1UcmFuc2ZlckVudHJpZXMpOworICAgICAg
ICBUQ0VudHJ5KiBlbnRyeSA9ICZ0Y1Nsb3RzW3Nsb3RdOworICAgICAgICBlbnRyeS0+aGVhZCA9
IHN0YXJ0OworICAgICAgICBlbnRyeS0+dGFpbCA9IGVuZDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSZWxlYXNlTGlzdFRvU3BhbnMoc3RhcnQpOwogfQogCi12b2lkIFRDTWFsbG9jX0Nl
bnRyYWxfRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCwgaW50
ICpOKSB7Ci0gIGludCBudW0gPSAqTjsKLSAgQVNTRVJUKG51bSA+IDApOwotCi0gIFNwaW5Mb2Nr
SG9sZGVyIGgoJmxvY2tfKTsKLSAgaWYgKG51bSA9PSBudW1fb2JqZWN0c190b19tb3ZlW3NpemVf
Y2xhc3NfXSAmJiB1c2VkX3Nsb3RzXyA+IDApIHsKLSAgICBpbnQgc2xvdCA9IC0tdXNlZF9zbG90
c187Ci0gICAgQVNTRVJUKHNsb3QgPj0gMCk7Ci0gICAgVENFbnRyeSAqZW50cnkgPSAmdGNfc2xv
dHNfW3Nsb3RdOwotICAgICpzdGFydCA9IGVudHJ5LT5oZWFkOwotICAgICplbmQgPSBlbnRyeS0+
dGFpbDsKLSAgICByZXR1cm47Ci0gIH0KK3ZvaWQgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJl
bW92ZVJhbmdlKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCwgaW50ICpOKQoreworICAgIGludCBu
dW0gPSAqTjsKKyAgICBBU1NFUlQobnVtID4gMCk7CiAKLSAgLy8gVE9ETzogUHJlZmV0Y2ggbXVs
dGlwbGUgVENFbnRyaWVzPwotICB2b2lkICp0YWlsID0gRmV0Y2hGcm9tU3BhbnNTYWZlKCk7Ci0g
IGlmICghdGFpbCkgewotICAgIC8vIFdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBtZW1vcnkuCi0g
ICAgKnN0YXJ0ID0gKmVuZCA9IE5VTEw7Ci0gICAgKk4gPSAwOwotICAgIHJldHVybjsKLSAgfQor
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAgIGlmIChudW0gPT0gbnVtT2JqZWN0c1Rv
TW92ZVtzaXplQ2xhc3NdICYmIHVzZWRTbG90cyA+IDApIHsKKyAgICAgICAgaW50IHNsb3QgPSAt
LXVzZWRTbG90czsKKyAgICAgICAgQVNTRVJUKHNsb3QgPj0gMCk7CisgICAgICAgIFRDRW50cnkq
IGVudHJ5ID0gJnRjU2xvdHNbc2xvdF07CisgICAgICAgICpzdGFydCA9IGVudHJ5LT5oZWFkOwor
ICAgICAgICAqZW5kID0gZW50cnktPnRhaWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
U0xMX1NldE5leHQodGFpbCwgTlVMTCk7Ci0gIHZvaWQgKmhlYWQgPSB0YWlsOwotICBpbnQgY291
bnQgPSAxOwotICB3aGlsZSAoY291bnQgPCBudW0pIHsKLSAgICB2b2lkICp0ID0gRmV0Y2hGcm9t
U3BhbnMoKTsKLSAgICBpZiAoIXQpIGJyZWFrOwotICAgIFNMTF9QdXNoKCZoZWFkLCB0KTsKLSAg
ICBjb3VudCsrOwotICB9Ci0gICpzdGFydCA9IGhlYWQ7Ci0gICplbmQgPSB0YWlsOwotICAqTiA9
IGNvdW50OwotfQorICAgIC8vIFRPRE86IFByZWZldGNoIG11bHRpcGxlIFRDRW50cmllcz8KKyAg
ICB2b2lkKiB0YWlsID0gRmV0Y2hGcm9tU3BhbnNTYWZlKCk7CisgICAgaWYgKCF0YWlsKSB7Cisg
ICAgICAgIC8vIFdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBtZW1vcnkuCisgICAgICAgICpzdGFy
dCA9ICplbmQgPSAwOworICAgICAgICAqTiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
KyAgICBTTExTZXROZXh0KHRhaWwsIDApOworICAgIHZvaWQqIGhlYWQgPSB0YWlsOworICAgIGlu
dCBjb3VudCA9IDE7CisgICAgd2hpbGUgKGNvdW50IDwgbnVtKSB7CisgICAgICAgIHZvaWQqIHQg
PSBGZXRjaEZyb21TcGFucygpOworICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgU0xMUHVzaCgmaGVhZCwgdCk7CisgICAgICAgIGNvdW50Kys7CisgICAgfQorICAg
ICpzdGFydCA9IGhlYWQ7CisgICAgKmVuZCA9IHRhaWw7CisgICAgKk4gPSBjb3VudDsKK30KIAot
dm9pZCogVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKCkgewot
ICB2b2lkICp0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgaWYgKCF0KSB7Ci0gICAgUG9wdWxhdGUo
KTsKLSAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgfQotICByZXR1cm4gdDsKK3ZvaWQqIFRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFuc1NhZmUoKQoreworICAgIHZvaWQq
IHQgPSBGZXRjaEZyb21TcGFucygpOworICAgIGlmICghdCkgeworICAgICAgICBQb3B1bGF0ZSgp
OworICAgICAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKKyAgICB9CisgICAgcmV0dXJuIHQ7CiB9
CiAKLXZvaWQqIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zKCkgewot
ICBpZiAoRExMX0lzRW1wdHkoJm5vbmVtcHR5XykpIHJldHVybiBOVUxMOwotICBTcGFuKiBzcGFu
ID0gbm9uZW1wdHlfLm5leHQ7Cit2b2lkKiBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RmV0Y2hG
cm9tU3BhbnMoKQoreworICAgIGlmIChETExfSXNFbXB0eSgmbm9uZW1wdHkpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBTcGFuKiBzcGFuID0gbm9uZW1wdHkubmV4dDsKIAotICBBU1NFUlQoc3Bh
bi0+b2JqZWN0cyAhPSBOVUxMKTsKLSAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pOwotICBz
cGFuLT5yZWZjb3VudCsrOwotICB2b2lkKiByZXN1bHQgPSBzcGFuLT5vYmplY3RzOwotICBzcGFu
LT5vYmplY3RzID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocmVzdWx0KSk7Ci0gIGlmIChz
cGFuLT5vYmplY3RzID09IE5VTEwpIHsKLSAgICAvLyBNb3ZlIHRvIGVtcHR5IGxpc3QKLSAgICBE
TExfUmVtb3ZlKHNwYW4pOwotICAgIERMTF9QcmVwZW5kKCZlbXB0eV8sIHNwYW4pOwotICAgIEV2
ZW50KHNwYW4sICdFJywgMCk7Ci0gIH0KLSAgY291bnRlcl8tLTsKLSAgcmV0dXJuIHJlc3VsdDsK
KyAgICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyk7CisgICAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNw
YW4pOworICAgIHNwYW4tPnJlZmNvdW50Kys7CisgICAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2Jq
ZWN0czsKKyAgICBzcGFuLT5vYmplY3RzID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocmVz
dWx0KSk7CisgICAgaWYgKCFzcGFuLT5vYmplY3RzKSB7CisgICAgICAgIC8vIE1vdmUgdG8gZW1w
dHkgbGlzdAorICAgICAgICBETExSZW1vdmUoc3Bhbik7CisgICAgICAgIERMTFByZXBlbmQoJmVt
cHR5LCBzcGFuKTsKKyAgICAgICAgRXZlbnQoc3BhbiwgJ0UnLCAwKTsKKyAgICB9CisgICAgY291
bnRlci0tOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIEZldGNoIG1lbW9yeSBmcm9tIHRo
ZSBzeXN0ZW0gYW5kIGFkZCB0byB0aGUgY2VudHJhbCBjYWNoZSBmcmVlbGlzdC4KLUFMV0FZU19J
TkxJTkUgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpQb3B1bGF0ZSgpIHsKLSAgLy8g
UmVsZWFzZSBjZW50cmFsIGxpc3QgbG9jayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKLSAg
bG9ja18uVW5sb2NrKCk7Ci0gIGNvbnN0IHNpemVfdCBucGFnZXMgPSBjbGFzc190b19wYWdlc1tz
aXplX2NsYXNzX107Ci0KLSAgU3Bhbiogc3BhbjsKLSAgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgo
JnBhZ2VoZWFwX2xvY2spOwotICAgIHNwYW4gPSBwYWdlaGVhcC0+TmV3KG5wYWdlcyk7Ci0gICAg
aWYgKHNwYW4pIHBhZ2VoZWFwLT5SZWdpc3RlclNpemVDbGFzcyhzcGFuLCBzaXplX2NsYXNzXyk7
Ci0gIH0KLSAgaWYgKHNwYW4gPT0gTlVMTCkgeworQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9j
Q2VudHJhbEZyZWVMaXN0OjpQb3B1bGF0ZSgpCit7CisgICAgLy8gUmVsZWFzZSBjZW50cmFsIGxp
c3QgbG9jayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKKyAgICBsb2NrLlVubG9jaygpOwor
ICAgIGNvbnN0IHNpemVfdCBucGFnZXMgPSBjbGFzc190b19wYWdlc1tzaXplQ2xhc3NdOworCisg
ICAgU3Bhbiogc3BhbjsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFw
TG9jayk7CisgICAgICAgIHNwYW4gPSBwYWdlaGVhcC0+TmV3KG5wYWdlcyk7CisgICAgICAgIGlm
IChzcGFuKQorICAgICAgICAgICAgcGFnZWhlYXAtPlJlZ2lzdGVyU2l6ZUNsYXNzKHNwYW4sIHNp
emVDbGFzcyk7CisgICAgfQorICAgIGlmICghc3BhbikgewogI2lmIEhBVkUoRVJSTk9fSCkKLSAg
ICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKKyAgICAgICAgTUVT
U0FHRSgiYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7CiAjZWxpZiBPUyhXSU5ET1dT
KQotICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgOjpHZXRMYXN0RXJyb3Io
KSk7CisgICAgICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgOjpHZXRMYXN0
RXJyb3IoKSk7CiAjZWxzZQotICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAg
ICAgICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogI2VuZGlmCi0gICAgbG9ja18u
TG9jaygpOwotICAgIHJldHVybjsKLSAgfQotICBBU1NFUlRfU1BBTl9DT01NSVRURUQoc3Bhbik7
Ci0gIEFTU0VSVChzcGFuLT5sZW5ndGggPT0gbnBhZ2VzKTsKLSAgLy8gQ2FjaGUgc2l6ZWNsYXNz
IGluZm8gZWFnZXJseS4gIExvY2tpbmcgaXMgbm90IG5lY2Vzc2FyeS4KLSAgLy8gKEluc3RlYWQg
b2YgYmVpbmcgZWFnZXIsIHdlIGNvdWxkIGp1c3QgcmVwbGFjZSBhbnkgc3RhbGUgaW5mbwotICAv
LyBhYm91dCB0aGlzIHNwYW4sIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIG5vIGJldHRlciBpbiBwcmFj
dGljZS4pCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKLSAgICBwYWdl
aGVhcC0+Q2FjaGVTaXplQ2xhc3Moc3Bhbi0+c3RhcnQgKyBpLCBzaXplX2NsYXNzXyk7Ci0gIH0K
LQotICAvLyBTcGxpdCB0aGUgYmxvY2sgaW50byBwaWVjZXMgYW5kIGFkZCB0byB0aGUgZnJlZS1s
aXN0Ci0gIC8vIFRPRE86IGNvbG9yaW5nIG9mIG9iamVjdHMgdG8gYXZvaWQgY2FjaGUgY29uZmxp
Y3RzPwotICB2b2lkKiogdGFpbCA9ICZzcGFuLT5vYmplY3RzOwotICBjaGFyKiBwdHIgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KTsKLSAgY2hhciog
bGltaXQgPSBwdHIgKyAobnBhZ2VzIDw8IGtQYWdlU2hpZnQpOwotICBjb25zdCBzaXplX3Qgc2l6
ZSA9IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZV9jbGFzc18pOwotICBpbnQgbnVtID0gMDsKLSAgY2hh
ciogbnB0cjsKLSAgd2hpbGUgKChucHRyID0gcHRyICsgc2l6ZSkgPD0gbGltaXQpIHsKLSAgICAq
dGFpbCA9IHB0cjsKLSAgICB0YWlsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCoqPihwdHIp
OwotICAgIHB0ciA9IG5wdHI7Ci0gICAgbnVtKys7Ci0gIH0KLSAgQVNTRVJUKHB0ciA8PSBsaW1p
dCk7Ci0gICp0YWlsID0gTlVMTDsKLSAgc3Bhbi0+cmVmY291bnQgPSAwOyAvLyBObyBzdWItb2Jq
ZWN0IGluIHVzZSB5ZXQKLQotICAvLyBBZGQgc3BhbiB0byBsaXN0IG9mIG5vbi1lbXB0eSBzcGFu
cwotICBsb2NrXy5Mb2NrKCk7Ci0gIERMTF9QcmVwZW5kKCZub25lbXB0eV8sIHNwYW4pOwotICBj
b3VudGVyXyArPSBudW07CisgICAgICAgIGxvY2suTG9jaygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFuKTsKKyAgICBBU1NFUlQoc3Bhbi0+
bGVuZ3RoID09IG5wYWdlcyk7CisgICAgLy8gQ2FjaGUgc2l6ZWNsYXNzIGluZm8gZWFnZXJseS4g
TG9ja2luZyBpcyBub3QgbmVjZXNzYXJ5LgorICAgIC8vIChJbnN0ZWFkIG9mIGJlaW5nIGVhZ2Vy
LCB3ZSBjb3VsZCBqdXN0IHJlcGxhY2UgYW55IHN0YWxlIGluZm8KKyAgICAvLyBhYm91dCB0aGlz
IHNwYW4sIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIG5vIGJldHRlciBpbiBwcmFjdGljZS4pCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBucGFnZXM7IGkrKykKKyAgICAgICAgcGFnZWhlYXAtPkNh
Y2hlU2l6ZUNsYXNzKHNwYW4tPnN0YXJ0ICsgaSwgc2l6ZUNsYXNzKTsKKworICAgIC8vIFNwbGl0
IHRoZSBibG9jayBpbnRvIHBpZWNlcyBhbmQgYWRkIHRvIHRoZSBmcmVlLWxpc3QKKyAgICAvLyBU
T0RPOiBjb2xvcmluZyBvZiBvYmplY3RzIHRvIGF2b2lkIGNhY2hlIGNvbmZsaWN0cz8KKyAgICB2
b2lkKiogdGFpbCA9ICZzcGFuLT5vYmplY3RzOworICAgIGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQpOworICAgIGNoYXIqIGxpbWl0
ID0gcHRyICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0KTsKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9
IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZUNsYXNzKTsKKyAgICBpbnQgbnVtID0gMDsKKyAgICBjaGFy
KiBucHRyOworICAgIHdoaWxlICgobnB0ciA9IHB0ciArIHNpemUpIDw9IGxpbWl0KSB7CisgICAg
ICAgICp0YWlsID0gcHRyOworICAgICAgICB0YWlsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9p
ZCoqPihwdHIpOworICAgICAgICAgcHRyID0gbnB0cjsKKyAgICAgICAgbnVtKys7CisgICAgfQor
ICAgIEFTU0VSVChwdHIgPD0gbGltaXQpOworICAgICp0YWlsID0gMDsKKyAgICBzcGFuLT5yZWZj
b3VudCA9IDA7IC8vIE5vIHN1Yi1vYmplY3QgaW4gdXNlIHlldAorCisgICAgLy8gQWRkIHNwYW4g
dG8gbGlzdCBvZiBub24tZW1wdHkgc3BhbnMKKyAgICBsb2NrLkxvY2soKTsKKyAgICBETExQcmVw
ZW5kKCZub25lbXB0eSwgc3Bhbik7CisgICAgY291bnRlciArPSBudW07CiB9CiAKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gVENNYWxsb2NfVGhyZWFkQ2FjaGUgaW1wbGVtZW50YXRpb24KKy8vIFRDTWFsbG9j
VGhyZWFkQ2FjaGUgaW1wbGVtZW50YXRpb24KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgYm9vbCBU
Q01hbGxvY19UaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlvbihzaXplX3QgaykgewotICBpZiAo
Ynl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsKLSAgICBQaWNrTmV4dFNhbXBsZShrKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBieXRlc191bnRpbF9zYW1wbGVfIC09IGs7Citp
bmxpbmUgYm9vbCBUQ01hbGxvY1RocmVhZENhY2hlOjpTYW1wbGVBbGxvY2F0aW9uKHNpemVfdCBr
KQoreworICAgIGlmIChieXRlc1VudGlsU2FtcGxlIDwgaykgeworICAgICAgICBQaWNrTmV4dFNh
bXBsZShrKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGJ5dGVzVW50aWxTYW1w
bGUgLT0gazsKICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotdm9pZCBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6SW5pdChUaHJlYWRJZGVudGlmaWVyIHRpZCkgewotICBzaXplXyA9IDA7Ci0gIG5l
eHRfID0gTlVMTDsKLSAgcHJldl8gPSBOVUxMOwotICB0aWRfICA9IHRpZDsKLSAgaW5fc2V0c3Bl
Y2lmaWNfID0gZmFsc2U7Ci0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3Nlczsg
KytjbCkgewotICAgIGxpc3RfW2NsXS5Jbml0KCk7Ci0gIH0KLQotICAvLyBJbml0aWFsaXplIFJO
RyAtLSBydW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29kIHZhbHVlcwotICBieXRlc191bnRp
bF9zYW1wbGVfID0gMDsKLSAgcm5kXyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4odGhpcykpOwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsr
KSB7Ci0gICAgUGlja05leHRTYW1wbGUoc3RhdGljX2Nhc3Q8c2l6ZV90PihGTEFHU190Y21hbGxv
Y19zYW1wbGVfcGFyYW1ldGVyICogMikpOwotICB9CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFk
Q2FjaGU6OkNsZWFudXAoKSB7Ci0gIC8vIFB1dCB1bnVzZWQgbWVtb3J5IGJhY2sgaW50byBjZW50
cmFsIGNhY2hlCi0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkg
ewotICAgIGlmIChsaXN0X1tjbF0ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICBSZWxlYXNlVG9DZW50
cmFsQ2FjaGUoY2wsIGxpc3RfW2NsXS5sZW5ndGgoKSk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQpCit7CisgICAgc2l6ZSA9IDA7CisgICAgbmV4
dCA9IDA7CisgICAgcHJldiA9IDA7CisgICAgdGlkICA9IHRpZDsKKyAgICBpblNldHNwZWNpZmlj
ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2Ns
KQorICAgICAgICBsaXN0W2NsXS5Jbml0KCk7CisKKyAgICAvLyBJbml0aWFsaXplIFJORyAtLSBy
dW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29kIHZhbHVlcworICAgIGJ5dGVzVW50aWxTYW1w
bGUgPSAwOworICAgIHJuZCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4odGhpcykpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspCisg
ICAgICAgIFBpY2tOZXh0U2FtcGxlKHN0YXRpY19jYXN0PHNpemVfdD4oRkxBR1NfdGNtYWxsb2Nf
c2FtcGxlX3BhcmFtZXRlciAqIDIpKTsKK30KKwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpD
bGVhbnVwKCkKK3sKKyAgICAvLyBQdXQgdW51c2VkIG1lbW9yeSBiYWNrIGludG8gY2VudHJhbCBj
YWNoZQorICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkKKyAg
ICAgICAgaWYgKGxpc3RbY2xdLmxlbmd0aCgpID4gMCkKKyAgICAgICAgICAgIFJlbGVhc2VUb0Nl
bnRyYWxDYWNoZShjbCwgbGlzdFtjbF0ubGVuZ3RoKCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkFsbG9jYXRlKHNpemVfdCBzaXplKQoreworICAgIEFT
U0VSVChzaXplIDw9IGtNYXhTaXplKTsKKyAgICBjb25zdCBzaXplX3QgY2wgPSBTaXplQ2xhc3Mo
c2l6ZSk7CisgICAgRnJlZUxpc3QqIHBMaXN0ID0gJmxpc3RbY2xdOworICAgIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworICAgIGlmIChwTGlzdC0+ZW1wdHko
KSkgeworICAgICAgICBGZXRjaEZyb21DZW50cmFsQ2FjaGUoY2wsIGFsbG9jYXRpb25TaXplKTsK
KyAgICAgICAgaWYgKHBMaXN0LT5lbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkFs
bG9jYXRlKHNpemVfdCBzaXplKSB7Ci0gIEFTU0VSVChzaXplIDw9IGtNYXhTaXplKTsKLSAgY29u
c3Qgc2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOwotICBGcmVlTGlzdCogbGlzdCA9ICZsaXN0
X1tjbF07Ci0gIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwot
ICBpZiAobGlzdC0+ZW1wdHkoKSkgewotICAgIEZldGNoRnJvbUNlbnRyYWxDYWNoZShjbCwgYWxs
b2NhdGlvblNpemUpOwotICAgIGlmIChsaXN0LT5lbXB0eSgpKSByZXR1cm4gTlVMTDsKLSAgfQot
ICBzaXplXyAtPSBhbGxvY2F0aW9uU2l6ZTsKLSAgcmV0dXJuIGxpc3QtPlBvcCgpOworICAgIHNp
emUgLT0gYWxsb2NhdGlvblNpemU7CisgICAgcmV0dXJuIHBMaXN0LT5Qb3AoKTsKIH0KIAotaW5s
aW5lIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXpl
X3QgY2wpIHsKLSAgc2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gIEZyZWVMaXN0KiBs
aXN0ID0gJmxpc3RfW2NsXTsKLSAgbGlzdC0+UHVzaChwdHIpOwotICAvLyBJZiBlbm91Z2ggZGF0
YSBpcyBmcmVlLCBwdXQgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKLSAgaWYgKGxpc3QtPmxlbmd0
aCgpID4ga01heEZyZWVMaXN0TGVuZ3RoKSB7Ci0gICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNs
LCBudW1fb2JqZWN0c190b19tb3ZlW2NsXSk7Ci0gIH0KLSAgaWYgKHNpemVfID49IHBlcl90aHJl
YWRfY2FjaGVfc2l6ZSkgU2NhdmVuZ2UoKTsKK2lubGluZSB2b2lkIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3QgY2wpCit7CisgICAgc2l6ZSArPSBCeXRl
U2l6ZUZvckNsYXNzKGNsKTsKKyAgICBGcmVlTGlzdCogcExpc3QgPSAmbGlzdFtjbF07CisgICAg
cExpc3QtPlB1c2gocHRyKTsKKyAgICAvLyBJZiBlbm91Z2ggZGF0YSBpcyBmcmVlLCBwdXQgYmFj
ayBpbnRvIGNlbnRyYWwgY2FjaGUKKyAgICBpZiAocExpc3QtPmxlbmd0aCgpID4ga01heEZyZWVM
aXN0TGVuZ3RoKQorICAgICAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIG51bU9iamVjdHNU
b01vdmVbY2xdKTsKKyAgICBpZiAoc2l6ZSA+PSBwZXJUaHJlYWRDYWNoZVNpemUpCisgICAgICAg
IFNjYXZlbmdlKCk7CiB9CiAKIC8vIFJlbW92ZSBzb21lIG9iamVjdHMgb2YgY2xhc3MgImNsIiBm
cm9tIGNlbnRyYWwgY2FjaGUgYW5kIGFkZCB0byB0aHJlYWQgaGVhcAotQUxXQVlTX0lOTElORSB2
b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUoc2l6ZV90IGNs
LCBzaXplX3QgYWxsb2NhdGlvblNpemUpIHsKLSAgaW50IGZldGNoX2NvdW50ID0gbnVtX29iamVj
dHNfdG9fbW92ZVtjbF07Ci0gIHZvaWQgKnN0YXJ0LCAqZW5kOwotICBjZW50cmFsX2NhY2hlW2Ns
XS5SZW1vdmVSYW5nZSgmc3RhcnQsICZlbmQsICZmZXRjaF9jb3VudCk7Ci0gIGxpc3RfW2NsXS5Q
dXNoUmFuZ2UoZmV0Y2hfY291bnQsIHN0YXJ0LCBlbmQpOwotICBzaXplXyArPSBhbGxvY2F0aW9u
U2l6ZSAqIGZldGNoX2NvdW50OworQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2wsIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSkKK3sKKyAgICBpbnQgZmV0Y2hDb3VudCA9IG51bU9iamVjdHNUb01vdmVbY2xdOworICAgIHZv
aWQqIHN0YXJ0OworICAgIHZvaWQqIGVuZDsKKyAgICBjZW50cmFsQ2FjaGVbY2xdLlJlbW92ZVJh
bmdlKCZzdGFydCwgJmVuZCwgJmZldGNoQ291bnQpOworICAgIGxpc3RbY2xdLlB1c2hSYW5nZShm
ZXRjaENvdW50LCBzdGFydCwgZW5kKTsKKyAgICBzaXplICs9IGFsbG9jYXRpb25TaXplICogZmV0
Y2hDb3VudDsKIH0KIAogLy8gUmVtb3ZlIHNvbWUgb2JqZWN0cyBvZiBjbGFzcyAiY2wiIGZyb20g
dGhyZWFkIGhlYXAgYW5kIGFkZCB0byBjZW50cmFsIGNhY2hlCi1pbmxpbmUgdm9pZCBUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgaW50IE4pIHsK
LSAgQVNTRVJUKE4gPiAwKTsKLSAgRnJlZUxpc3QqIHNyYyA9ICZsaXN0X1tjbF07Ci0gIGlmIChO
ID4gc3JjLT5sZW5ndGgoKSkgTiA9IHNyYy0+bGVuZ3RoKCk7Ci0gIHNpemVfIC09IE4qQnl0ZVNp
emVGb3JDbGFzcyhjbCk7Ci0KLSAgLy8gV2UgcmV0dXJuIHByZXBhY2thZ2VkIGNoYWlucyBvZiB0
aGUgY29ycmVjdCBzaXplIHRvIHRoZSBjZW50cmFsIGNhY2hlLgotICAvLyBUT0RPOiBVc2UgdGhl
IHNhbWUgZm9ybWF0IGludGVybmFsbHkgaW4gdGhlIHRocmVhZCBjYWNoZXM/Ci0gIGludCBiYXRj
aF9zaXplID0gbnVtX29iamVjdHNfdG9fbW92ZVtjbF07Ci0gIHdoaWxlIChOID4gYmF0Y2hfc2l6
ZSkgewotICAgIHZvaWQgKnRhaWwsICpoZWFkOwotICAgIHNyYy0+UG9wUmFuZ2UoYmF0Y2hfc2l6
ZSwgJmhlYWQsICZ0YWlsKTsKLSAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShoZWFk
LCB0YWlsLCBiYXRjaF9zaXplKTsKLSAgICBOIC09IGJhdGNoX3NpemU7Ci0gIH0KLSAgdm9pZCAq
dGFpbCwgKmhlYWQ7Ci0gIHNyYy0+UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWlsKTsKLSAgY2VudHJh
bF9jYWNoZVtjbF0uSW5zZXJ0UmFuZ2UoaGVhZCwgdGFpbCwgTik7CitpbmxpbmUgdm9pZCBUQ01h
bGxvY1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBpbnQgTikK
K3sKKyAgICBBU1NFUlQoTiA+IDApOworICAgIEZyZWVMaXN0KiBzcmMgPSAmbGlzdFtjbF07Cisg
ICAgaWYgKE4gPiBzcmMtPmxlbmd0aCgpKQorICAgICAgICBOID0gc3JjLT5sZW5ndGgoKTsKKyAg
ICBzaXplIC09IE4qQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisKKyAgICAvLyBXZSByZXR1cm4gcHJl
cGFja2FnZWQgY2hhaW5zIG9mIHRoZSBjb3JyZWN0IHNpemUgdG8gdGhlIGNlbnRyYWwgY2FjaGUu
CisgICAgLy8gVE9ETzogVXNlIHRoZSBzYW1lIGZvcm1hdCBpbnRlcm5hbGx5IGluIHRoZSB0aHJl
YWQgY2FjaGVzPworICAgIGludCBiYXRjaFNpemUgPSBudW1PYmplY3RzVG9Nb3ZlW2NsXTsKKyAg
ICB3aGlsZSAoTiA+IGJhdGNoU2l6ZSkgeworICAgICAgICB2b2lkKiB0YWlsOworICAgICAgICB2
b2lkKiBoZWFkOworICAgICAgICBzcmMtPlBvcFJhbmdlKGJhdGNoU2l6ZSwgJmhlYWQsICZ0YWls
KTsKKyAgICAgICAgY2VudHJhbENhY2hlW2NsXS5JbnNlcnRSYW5nZShoZWFkLCB0YWlsLCBiYXRj
aFNpemUpOworICAgICAgICBOIC09IGJhdGNoU2l6ZTsKKyAgICB9CisgICAgdm9pZCogdGFpbDsK
KyAgICB2b2lkKiBoZWFkOworICAgIHNyYy0+UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWlsKTsKKyAg
ICBjZW50cmFsQ2FjaGVbY2xdLkluc2VydFJhbmdlKGhlYWQsIHRhaWwsIE4pOwogfQogCiAvLyBS
ZWxlYXNlIGlkbGUgbWVtb3J5IHRvIHRoZSBjZW50cmFsIGNhY2hlCi1pbmxpbmUgdm9pZCBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6U2NhdmVuZ2UoKSB7Ci0gIC8vIElmIHRoZSBsb3ctd2F0ZXIgbWFy
ayBmb3IgdGhlIGZyZWUgbGlzdCBpcyBMLCBpdCBtZWFucyB3ZSB3b3VsZAotICAvLyBub3QgaGF2
ZSBoYWQgdG8gYWxsb2NhdGUgYW55dGhpbmcgZnJvbSB0aGUgY2VudHJhbCBjYWNoZSBldmVuIGlm
Ci0gIC8vIHdlIGhhZCByZWR1Y2VkIHRoZSBmcmVlIGxpc3Qgc2l6ZSBieSBMLiAgV2UgYWltIHRv
IGdldCBjbG9zZXIgdG8KLSAgLy8gdGhhdCBzaXR1YXRpb24gYnkgZHJvcHBpbmcgTC8yIG5vZGVz
IGZyb20gdGhlIGZyZWUgbGlzdC4gIFRoaXMKLSAgLy8gbWF5IG5vdCByZWxlYXNlIG11Y2ggbWVt
b3J5LCBidXQgaWYgc28gd2Ugd2lsbCBjYWxsIHNjYXZlbmdlIGFnYWluCi0gIC8vIHByZXR0eSBz
b29uIGFuZCB0aGUgbG93LXdhdGVyIG1hcmtzIHdpbGwgYmUgaGlnaCBvbiB0aGF0IGNhbGwuCi0g
IC8vaW50NjQgc3RhcnQgPSBDeWNsZUNsb2NrOjpOb3coKTsKLQotICBmb3IgKHNpemVfdCBjbCA9
IDA7IGNsIDwga051bUNsYXNzZXM7IGNsKyspIHsKLSAgICBGcmVlTGlzdCogbGlzdCA9ICZsaXN0
X1tjbF07Ci0gICAgY29uc3QgaW50IGxvd21hcmsgPSBsaXN0LT5sb3d3YXRlcm1hcmsoKTsKLSAg
ICBpZiAobG93bWFyayA+IDApIHsKLSAgICAgIGNvbnN0IGludCBkcm9wID0gKGxvd21hcmsgPiAx
KSA/IGxvd21hcmsvMiA6IDE7Ci0gICAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIGRyb3Ap
OwotICAgIH0KLSAgICBsaXN0LT5jbGVhcl9sb3d3YXRlcm1hcmsoKTsKLSAgfQotCi0gIC8vaW50
NjQgZmluaXNoID0gQ3ljbGVDbG9jazo6Tm93KCk7Ci0gIC8vQ3ljbGVUaW1lciBjdDsKLSAgLy9N
RVNTQUdFKCJHQzogJS4wZiBuc1xuIiwgY3QuQ3ljbGVzVG9Vc2VjKGZpbmlzaC1zdGFydCkqMTAw
MC4wKTsKLX0KLQotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUoc2l6
ZV90IGspIHsKLSAgLy8gTWFrZSBuZXh0ICJyYW5kb20iIG51bWJlcgotICAvLyB4XjMyK3heMjIr
eF4yK3heMSsxIGlzIGEgcHJpbWl0aXZlIHBvbHlub21pYWwgZm9yIHJhbmRvbSBudW1iZXJzCi0g
IHN0YXRpYyBjb25zdCB1aW50MzJfdCBrUG9seSA9ICgxIDw8IDIyKSB8ICgxIDw8IDIpIHwgKDEg
PDwgMSkgfCAoMSA8PCAwKTsKLSAgdWludDMyX3QgciA9IHJuZF87Ci0gIHJuZF8gPSAociA8PCAx
KSBeICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocikgPj4gMzEpICYga1BvbHkpOwotCi0gIC8vIE5l
eHQgcG9pbnQgaXMgInJuZF8gJSAoc2FtcGxlX3BlcmlvZCkiLiAgSS5lLiwgYXZlcmFnZQotICAv
LyBpbmNyZW1lbnQgaXMgInNhbXBsZV9wZXJpb2QvMiIuCi0gIGNvbnN0IGludCBmbGFnX3ZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyKTsKLSAg
c3RhdGljIGludCBsYXN0X2ZsYWdfdmFsdWUgPSAtMTsKLQotICBpZiAoZmxhZ192YWx1ZSAhPSBs
YXN0X2ZsYWdfdmFsdWUpIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZzYW1wbGVfcGVyaW9kX2xv
Y2spOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCAoc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YocHJpbWVzX2xpc3QpL3NpemVvZihwcmltZXNfbGlzdFswXSkpIC0gMSk7IGkrKykgewot
ICAgICAgaWYgKHByaW1lc19saXN0W2ldID49IGZsYWdfdmFsdWUpIHsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9CitpbmxpbmUgdm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpTY2F2ZW5nZSgpCit7
CisgICAgLy8gSWYgdGhlIGxvdy13YXRlciBtYXJrIGZvciB0aGUgZnJlZSBsaXN0IGlzIEwsIGl0
IG1lYW5zIHdlIHdvdWxkCisgICAgLy8gbm90IGhhdmUgaGFkIHRvIGFsbG9jYXRlIGFueXRoaW5n
IGZyb20gdGhlIGNlbnRyYWwgY2FjaGUgZXZlbiBpZgorICAgIC8vIHdlIGhhZCByZWR1Y2VkIHRo
ZSBmcmVlIGxpc3Qgc2l6ZSBieSBMLiBXZSBhaW0gdG8gZ2V0IGNsb3NlciB0bworICAgIC8vIHRo
YXQgc2l0dWF0aW9uIGJ5IGRyb3BwaW5nIEwvMiBub2RlcyBmcm9tIHRoZSBmcmVlIGxpc3QuIFRo
aXMKKyAgICAvLyBtYXkgbm90IHJlbGVhc2UgbXVjaCBtZW1vcnksIGJ1dCBpZiBzbyB3ZSB3aWxs
IGNhbGwgc2NhdmVuZ2UgYWdhaW4KKyAgICAvLyBwcmV0dHkgc29vbiBhbmQgdGhlIGxvdy13YXRl
ciBtYXJrcyB3aWxsIGJlIGhpZ2ggb24gdGhhdCBjYWxsLgorCisgICAgLy8gaW50NjQgc3RhcnQg
PSBDeWNsZUNsb2NrOjpOb3coKTsKKworICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVt
Q2xhc3NlczsgY2wrKykgeworICAgICAgICBGcmVlTGlzdCogcExpc3QgPSAmbGlzdFtjbF07Cisg
ICAgICAgIGNvbnN0IGludCBsb3dtYXJrID0gcExpc3QtPmxvd3dhdGVybWFyaygpOworICAgICAg
ICBpZiAobG93bWFyayA+IDApIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcm9wID0gKGxvd21h
cmsgPiAxKSA/IGxvd21hcmsgLyAyIDogMTsKKyAgICAgICAgICAgIFJlbGVhc2VUb0NlbnRyYWxD
YWNoZShjbCwgZHJvcCk7CisgICAgICAgIH0KKyAgICAgICAgcExpc3QtPmNsZWFyTG93d2F0ZXJt
YXJrKCk7CiAgICAgfQotICAgIHNhbXBsZV9wZXJpb2QgPSBwcmltZXNfbGlzdFtpXTsKLSAgICBs
YXN0X2ZsYWdfdmFsdWUgPSBmbGFnX3ZhbHVlOwotICB9Ci0KLSAgYnl0ZXNfdW50aWxfc2FtcGxl
XyArPSBybmRfICUgc2FtcGxlX3BlcmlvZDsKLQotICBpZiAoayA+IChzdGF0aWNfY2FzdDxzaXpl
X3Q+KC0xKSA+PiAyKSkgewotICAgIC8vIElmIHRoZSB1c2VyIGhhcyBhc2tlZCBmb3IgYSBodWdl
IGFsbG9jYXRpb24gdGhlbiBpdCBpcyBwb3NzaWJsZQotICAgIC8vIGZvciB0aGUgY29kZSBiZWxv
dyB0byBsb29wIGluZmluaXRlbHkuICBKdXN0IHJldHVybiAobm90ZSB0aGF0Ci0gICAgLy8gdGhp
cyB0aHJvd3Mgb2ZmIHRoZSBzYW1wbGluZyBhY2N1cmFjeSBzb21ld2hhdCwgYnV0IGEgdXNlciB3
aG8KLSAgICAvLyBpcyBhbGxvY2F0aW5nIG1vcmUgdGhhbiAxRyBvZiBtZW1vcnkgYXQgYSB0aW1l
IGNhbiBsaXZlIHdpdGggYQotICAgIC8vIG1pbm9yIGluYWNjdXJhY3kgaW4gcHJvZmlsaW5nIG9m
IHNtYWxsIGFsbG9jYXRpb25zLCBhbmQgYWxzbwotICAgIC8vIHdvdWxkIHJhdGhlciBub3Qgd2Fp
dCBmb3IgdGhlIGxvb3AgYmVsb3cgdG8gdGVybWluYXRlKS4KLSAgICByZXR1cm47Ci0gIH0KIAot
ICB3aGlsZSAoYnl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsKLSAgICAvLyBJbmNyZWFzZSBieXRl
c191bnRpbF9zYW1wbGVfIGJ5IGVub3VnaCBhdmVyYWdlIHNhbXBsaW5nIHBlcmlvZHMKLSAgICAv
LyAoc2FtcGxlX3BlcmlvZCA+PiAxKSB0byBhbGxvdyB1cyB0byBzYW1wbGUgcGFzdCB0aGUgY3Vy
cmVudAotICAgIC8vIGFsbG9jYXRpb24uCi0gICAgYnl0ZXNfdW50aWxfc2FtcGxlXyArPSAoc2Ft
cGxlX3BlcmlvZCA+PiAxKTsKLSAgfQotCi0gIGJ5dGVzX3VudGlsX3NhbXBsZV8gLT0gazsKLX0K
KyAgICAvLyBpbnQ2NCBmaW5pc2ggPSBDeWNsZUNsb2NrOjpOb3coKTsKKyAgICAvLyBDeWNsZVRp
bWVyIGN0OworICAgIC8vIE1FU1NBR0UoIkdDOiAlLjBmIG5zXG4iLCBjdC5DeWNsZXNUb1VzZWMo
ZmluaXNoLXN0YXJ0KSoxMDAwLjApOworfQorCit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlBp
Y2tOZXh0U2FtcGxlKHNpemVfdCBrKQoreworICAgIC8vIE1ha2UgbmV4dCAicmFuZG9tIiBudW1i
ZXIKKyAgICAvLyB4XjMyK3heMjIreF4yK3heMSsxIGlzIGEgcHJpbWl0aXZlIHBvbHlub21pYWwg
Zm9yIHJhbmRvbSBudW1iZXJzCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtQb2x5ID0gKDEg
PDwgMjIpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApOworICAgIHVpbnQzMl90IHIg
PSBybmQ7CisgICAgcm5kID0gKHIgPDwgMSkgXiAoKHN0YXRpY19jYXN0PGludDMyX3Q+KHIpID4+
IDMxKSAmIGtQb2x5KTsKKworICAgIC8vIE5leHQgcG9pbnQgaXMgInJuZCAlIChzYW1wbGVfcGVy
aW9kKSIuIEkuZS4sIGF2ZXJhZ2UKKyAgICAvLyBpbmNyZW1lbnQgaXMgInNhbXBsZV9wZXJpb2Qv
MiIuCisgICAgY29uc3QgaW50IGZsYWdWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oRkxBR1NfdGNt
YWxsb2Nfc2FtcGxlX3BhcmFtZXRlcik7CisgICAgc3RhdGljIGludCBsYXN0RmxhZ1ZhbHVlID0g
LTE7CisKKyAgICBpZiAoZmxhZ1ZhbHVlICE9IGxhc3RGbGFnVmFsdWUpIHsKKyAgICAgICAgU3Bp
bkxvY2tIb2xkZXIgaCgmc2FtcGxlX3BlcmlvZF9sb2NrKTsKKyAgICAgICAgaW50IGk7CisgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCAoc3RhdGljX2Nhc3Q8aW50PihzaXplb2YocHJpbWVzTGlzdCkg
LyBzaXplb2YocHJpbWVzTGlzdFswXSkpIC0gMSk7IGkrKykKKyAgICAgICAgICAgIGlmIChwcmlt
ZXNMaXN0W2ldID49IGZsYWdWYWx1ZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
c2FtcGxlX3BlcmlvZCA9IHByaW1lc0xpc3RbaV07CisgICAgICAgIGxhc3RGbGFnVmFsdWUgPSBm
bGFnVmFsdWU7CisgICAgfQorCisgICAgYnl0ZXNVbnRpbFNhbXBsZSArPSBybmQgJSBzYW1wbGVf
cGVyaW9kOworCisgICAgaWYgKGsgPiAoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkgPj4gMikpCisg
ICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBhc2tlZCBmb3IgYSBodWdlIGFsbG9jYXRpb24gdGhl
biBpdCBpcyBwb3NzaWJsZQorICAgICAgICAvLyBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gbG9vcCBp
bmZpbml0ZWx5LiBKdXN0IHJldHVybiAobm90ZSB0aGF0CisgICAgICAgIC8vIHRoaXMgdGhyb3dz
IG9mZiB0aGUgc2FtcGxpbmcgYWNjdXJhY3kgc29tZXdoYXQsIGJ1dCBhIHVzZXIgd2hvCisgICAg
ICAgIC8vIGlzIGFsbG9jYXRpbmcgbW9yZSB0aGFuIDFHIG9mIG1lbW9yeSBhdCBhIHRpbWUgY2Fu
IGxpdmUgd2l0aCBhCisgICAgICAgIC8vIG1pbm9yIGluYWNjdXJhY3kgaW4gcHJvZmlsaW5nIG9m
IHNtYWxsIGFsbG9jYXRpb25zLCBhbmQgYWxzbworICAgICAgICAvLyB3b3VsZCByYXRoZXIgbm90
IHdhaXQgZm9yIHRoZSBsb29wIGJlbG93IHRvIHRlcm1pbmF0ZSkuCisgICAgICAgIHJldHVybjsK
IAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpIHsKLSAgLy8gVGhlcmUg
aXMgYSBzbGlnaHQgcG90ZW50aWFsIHJhY2UgaGVyZSBiZWNhdXNlIG9mIGRvdWJsZS1jaGVja2Vk
Ci0gIC8vIGxvY2tpbmcgaWRpb20uICBIb3dldmVyLCBhcyBsb25nIGFzIHRoZSBwcm9ncmFtIGRv
ZXMgYSBzbWFsbAotICAvLyBhbGxvY2F0aW9uIGJlZm9yZSBzd2l0Y2hpbmcgdG8gbXVsdGktdGhy
ZWFkZWQgbW9kZSwgd2Ugd2lsbCBiZQotICAvLyBmaW5lLiAgV2UgaW5jcmVhc2UgdGhlIGNoYW5j
ZXMgb2YgZG9pbmcgc3VjaCBhIHNtYWxsIGFsbG9jYXRpb24KLSAgLy8gYnkgZG9pbmcgb25lIGlu
IHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgbW9kdWxlX2VudGVyX2V4aXRfaG9vawotICAvLyBvYmpl
Y3QgZGVjbGFyZWQgYmVsb3cuCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwot
ICBpZiAoIXBoaW5pdGVkKSB7CisgICAgd2hpbGUgKGJ5dGVzVW50aWxTYW1wbGUgPCBrKQorICAg
ICAgICAvLyBJbmNyZWFzZSBieXRlc1VudGlsU2FtcGxlIGJ5IGVub3VnaCBhdmVyYWdlIHNhbXBs
aW5nIHBlcmlvZHMKKyAgICAgICAgLy8gKHNhbXBsZV9wZXJpb2QgPj4gMSkgdG8gYWxsb3cgdXMg
dG8gc2FtcGxlIHBhc3QgdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gYWxsb2NhdGlvbi4KKyAgICAg
ICAgYnl0ZXNVbnRpbFNhbXBsZSArPSAoc2FtcGxlX3BlcmlvZCA+PiAxKTsKKworICAgIGJ5dGVz
VW50aWxTYW1wbGUgLT0gazsKK30KKwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0TW9k
dWxlKCkKK3sKKyAgICAvLyBUaGVyZSBpcyBhIHNsaWdodCBwb3RlbnRpYWwgcmFjZSBoZXJlIGJl
Y2F1c2Ugb2YgZG91YmxlLWNoZWNrZWQKKyAgICAvLyBsb2NraW5nIGlkaW9tLiBIb3dldmVyLCBh
cyBsb25nIGFzIHRoZSBwcm9ncmFtIGRvZXMgYSBzbWFsbAorICAgIC8vIGFsbG9jYXRpb24gYmVm
b3JlIHN3aXRjaGluZyB0byBtdWx0aS10aHJlYWRlZCBtb2RlLCB3ZSB3aWxsIGJlCisgICAgLy8g
ZmluZS4gV2UgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgZG9pbmcgc3VjaCBhIHNtYWxsIGFsbG9j
YXRpb24KKyAgICAvLyBieSBkb2luZyBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBtb2R1
bGVfZW50ZXJfZXhpdF9ob29rCisgICAgLy8gb2JqZWN0IGRlY2xhcmVkIGJlbG93LgorICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgaWYgKCFwaGluaXRlZCkgewogI2lm
ZGVmIFdURl9DSEFOR0VTCi0gICAgSW5pdFRTRCgpOworICAgICAgICBJbml0VFNEKCk7CiAjZW5k
aWYKLSAgICBJbml0U2l6ZUNsYXNzZXMoKTsKLSAgICB0aHJlYWRoZWFwX2FsbG9jYXRvci5Jbml0
KCk7Ci0gICAgc3Bhbl9hbGxvY2F0b3IuSW5pdCgpOwotICAgIHNwYW5fYWxsb2NhdG9yLk5ldygp
OyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCi0gICAgc3Bhbl9hbGxvY2F0b3IuTmV3KCk7IC8v
IFJlZHVjZSBjYWNoZSBjb25mbGljdHMKLSAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5Jbml0KCk7
Ci0gICAgRExMX0luaXQoJnNhbXBsZWRfb2JqZWN0cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrTnVtQ2xhc3NlczsgKytpKSB7Ci0gICAgICBjZW50cmFsX2NhY2hlW2ldLkluaXQoaSk7
Ci0gICAgfQotICAgIHBhZ2VoZWFwLT5pbml0KCk7Ci0gICAgcGhpbml0ZWQgPSAxOworICAgICAg
ICBJbml0U2l6ZUNsYXNzZXMoKTsKKyAgICAgICAgdGhyZWFkaGVhcEFsbG9jYXRvci5Jbml0KCk7
CisgICAgICAgIHNwYW5BbGxvY2F0b3IuSW5pdCgpOworICAgICAgICBzcGFuQWxsb2NhdG9yLk5l
dygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCisgICAgICAgIHNwYW5BbGxvY2F0b3IuTmV3
KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKKyAgICAgICAgc3RhY2t0cmFjZV9hbGxvY2F0
b3IuSW5pdCgpOworICAgICAgICBETExJbml0KCZzYW1wbGVkT2JqZWN0cyk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwga051bUNsYXNzZXM7ICsraSkKKyAgICAgICAgICAgIGNlbnRy
YWxDYWNoZVtpXS5Jbml0KGkpOworICAgICAgICBwYWdlaGVhcC0+aW5pdCgpOworICAgICAgICBw
aGluaXRlZCA9IDE7CiAjaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQotICAg
IEZhc3RNYWxsb2Nab25lOjppbml0KCk7CisgICAgICAgIEZhc3RNYWxsb2Nab25lOjppbml0KCk7
CiAjZW5kaWYKLSAgfQorICAgIH0KIH0KIAotaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBU
Q01hbGxvY19UaHJlYWRDYWNoZTo6TmV3SGVhcChUaHJlYWRJZGVudGlmaWVyIHRpZCkgewotICAv
LyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0byB0aGUgbGlua2VkIGxpc3QKLSAgVENNYWxs
b2NfVGhyZWFkQ2FjaGUgKmhlYXAgPSB0aHJlYWRoZWFwX2FsbG9jYXRvci5OZXcoKTsKLSAgaGVh
cC0+SW5pdCh0aWQpOwotICBoZWFwLT5uZXh0XyA9IHRocmVhZF9oZWFwczsKLSAgaGVhcC0+cHJl
dl8gPSBOVUxMOwotICBpZiAodGhyZWFkX2hlYXBzICE9IE5VTEwpIHRocmVhZF9oZWFwcy0+cHJl
dl8gPSBoZWFwOwotICB0aHJlYWRfaGVhcHMgPSBoZWFwOwotICB0aHJlYWRfaGVhcF9jb3VudCsr
OwotICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKLSAgcmV0dXJuIGhlYXA7CitpbmxpbmUg
VENNYWxsb2NUaHJlYWRDYWNoZSogVENNYWxsb2NUaHJlYWRDYWNoZTo6TmV3SGVhcChUaHJlYWRJ
ZGVudGlmaWVyIHRpZCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0byB0
aGUgbGlua2VkIGxpc3QKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwID0gdGhyZWFkaGVh
cEFsbG9jYXRvci5OZXcoKTsKKyAgICBoZWFwLT5Jbml0KHRpZCk7CisgICAgaGVhcC0+bmV4dCA9
IHRocmVhZEhlYXBzOworICAgIGhlYXAtPnByZXYgPSAwOworICAgIGlmICh0aHJlYWRIZWFwcykK
KyAgICAgICAgdGhyZWFkSGVhcHMtPnByZXYgPSBoZWFwOworICAgIHRocmVhZEhlYXBzID0gaGVh
cDsKKyAgICB0aHJlYWRfaGVhcF9jb3VudCsrOworICAgIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6
ZSgpOworICAgIHJldHVybiBoZWFwOwogfQogCi1pbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUq
IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRUaHJlYWRIZWFwKCkgeworaW5saW5lIFRDTWFsbG9j
VGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldFRocmVhZEhlYXAoKQorewogI2lm
ZGVmIEhBVkVfVExTCiAgICAgLy8gX190aHJlYWQgaXMgZmFzdGVyLCBidXQgb25seSB3aGVuIHRo
ZSBrZXJuZWwgc3VwcG9ydHMgaXQKLSAgaWYgKEtlcm5lbFN1cHBvcnRzVExTKCkpCi0gICAgcmV0
dXJuIHRocmVhZGxvY2FsX2hlYXA7CisgICAgaWYgKEtlcm5lbFN1cHBvcnRzVExTKCkpCisgICAg
ICAgIHJldHVybiB0aHJlYWRsb2NhbEhlYXA7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KFRsc0dldFZhbHVlKHRsc0luZGV4
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRDTWFsbG9jVGhyZWFkQ2FjaGUqPihUbHNHZXRW
YWx1ZSh0bHNJbmRleCkpOwogI2Vsc2UKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VENNYWxsb2Nf
VGhyZWFkQ2FjaGUqPihwdGhyZWFkX2dldHNwZWNpZmljKGhlYXBfa2V5KSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRDTWFsbG9jVGhyZWFkQ2FjaGUqPihwdGhyZWFkX2dldHNwZWNpZmljKGhl
YXBfa2V5KSk7CiAjZW5kaWYKIH0KIAotaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKSB7Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBw
dHIgPSBOVUxMOwotICBpZiAoIXRzZF9pbml0ZWQpIHsKLSAgICBJbml0TW9kdWxlKCk7Ci0gIH0g
ZWxzZSB7Ci0gICAgcHRyID0gR2V0VGhyZWFkSGVhcCgpOwotICB9Ci0gIGlmIChwdHIgPT0gTlVM
TCkgcHRyID0gQ3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpOwotICByZXR1cm4gcHRyOworaW5saW5l
IFRDTWFsbG9jVGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlKCkKK3sK
KyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBwdHIgPSAwOworICAgIGlmICghdHNkSW5pdGVkKQor
ICAgICAgICBJbml0TW9kdWxlKCk7CisgICAgZWxzZQorICAgICAgICBwdHIgPSBHZXRUaHJlYWRI
ZWFwKCk7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHB0ciA9IENyZWF0ZUNhY2hlSWZOZWNlc3Nh
cnkoKTsKKyAgICByZXR1cm4gcHRyOwogfQogCi0vLyBJbiBkZWxldGlvbiBwYXRocywgd2UgZG8g
bm90IHRyeSB0byBjcmVhdGUgYSB0aHJlYWQtY2FjaGUuICBUaGlzIGlzCisvLyBJbiBkZWxldGlv
biBwYXRocywgd2UgZG8gbm90IHRyeSB0byBjcmVhdGUgYSB0aHJlYWQtY2FjaGUuIFRoaXMgaXMK
IC8vIGJlY2F1c2Ugd2UgbWF5IGJlIGluIHRoZSB0aHJlYWQgZGVzdHJ1Y3Rpb24gY29kZSBhbmQg
bWF5IGhhdmUKIC8vIGFscmVhZHkgY2xlYW5lZCB1cCB0aGUgY2FjaGUgZm9yIHRoaXMgdGhyZWFk
LgotaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0
Q2FjaGVJZlByZXNlbnQoKSB7Ci0gIGlmICghdHNkX2luaXRlZCkgcmV0dXJuIE5VTEw7Ci0gIHZv
aWQqIGNvbnN0IHAgPSBHZXRUaHJlYWRIZWFwKCk7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0
PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocCk7CitpbmxpbmUgVENNYWxsb2NUaHJlYWRDYWNoZSog
VENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKQoreworICAgIGlmICghdHNk
SW5pdGVkKQorICAgICAgICByZXR1cm4gMDsKKyAgICB2b2lkKiBjb25zdCBwID0gR2V0VGhyZWFk
SGVhcCgpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRDTWFsbG9jVGhyZWFkQ2FjaGUq
PihwKTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdFRTRCgpIHsKLSAgQVNT
RVJUKCF0c2RfaW5pdGVkKTsKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6SW5pdFRTRCgpCit7
CisgICAgQVNTRVJUKCF0c2RJbml0ZWQpOwogI2lmIFVTRShQVEhSRUFEX0dFVFNQRUNJRklDX0RJ
UkVDVCkKLSAgcHRocmVhZF9rZXlfaW5pdF9ucChoZWFwX2tleSwgRGVzdHJveVRocmVhZENhY2hl
KTsKKyAgICBwdGhyZWFkX2tleV9pbml0X25wKGhlYXBfa2V5LCBEZXN0cm95VGhyZWFkQ2FjaGUp
OwogI2Vsc2UKLSAgcHRocmVhZF9rZXlfY3JlYXRlKCZoZWFwX2tleSwgRGVzdHJveVRocmVhZENh
Y2hlKTsKKyAgICBwdGhyZWFkX2tleV9jcmVhdGUoJmhlYXBfa2V5LCBEZXN0cm95VGhyZWFkQ2Fj
aGUpOwogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykKLSAgdGxzSW5kZXggPSBUbHNBbGxvYygpOwor
ICAgIHRsc0luZGV4ID0gVGxzQWxsb2MoKTsKICNlbmRpZgotICB0c2RfaW5pdGVkID0gdHJ1ZTsK
KyAgICB0c2RJbml0ZWQgPSB0cnVlOwogICAgIAogI2lmICFPUyhXSU5ET1dTKQotICAvLyBXZSBt
YXkgaGF2ZSB1c2VkIGEgZmFrZSBwdGhyZWFkX3QgZm9yIHRoZSBtYWluIHRocmVhZC4gIEZpeCBp
dC4KLSAgcHRocmVhZF90IHplcm87Ci0gIG1lbXNldCgmemVybywgMCwgc2l6ZW9mKHplcm8pKTsK
KyAgICAvLyBXZSBtYXkgaGF2ZSB1c2VkIGEgZmFrZSBwdGhyZWFkX3QgZm9yIHRoZSBtYWluIHRo
cmVhZC4gRml4IGl0LgorICAgIHB0aHJlYWRfdCB6ZXJvOworICAgIG1lbXNldCgmemVybywgMCwg
c2l6ZW9mKHplcm8pKTsKICNlbmRpZgogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBTcGluTG9ja0hv
bGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExv
Y2spOwogI2Vsc2UKLSAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VS
VChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogI2VuZGlmCi0gIGZvciAoVENNYWxsb2NfVGhyZWFk
Q2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7CisgICAg
Zm9yIChUQ01hbGxvY1RocmVhZENhY2hlKiBoID0gdGhyZWFkSGVhcHM7IGg7IGggPSBoLT5uZXh0
KQogI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKGgtPnRpZF8gPT0gMCkgewotICAgICAgaC0+dGlk
XyA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotICAgIH0KKyAgICAgICAgaWYgKCFoLT50aWQpCisg
ICAgICAgICAgICBoLT50aWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICNlbHNlCi0gICAgaWYg
KHB0aHJlYWRfZXF1YWwoaC0+dGlkXywgemVybykpIHsKLSAgICAgIGgtPnRpZF8gPSBwdGhyZWFk
X3NlbGYoKTsKLSAgICB9CisgICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGgtPnRpZCwgemVybykp
CisgICAgICAgICAgICBoLT50aWQgPSBwdGhyZWFkX3NlbGYoKTsKICNlbmRpZgotICB9CiB9CiAK
LVRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJ
Zk5lY2Vzc2FyeSgpIHsKLSAgLy8gSW5pdGlhbGl6ZSBwZXItdGhyZWFkIGRhdGEgaWYgbmVjZXNz
YXJ5Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gTlVMTDsKLSAgewotICAgIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworVENNYWxsb2NUaHJlYWRDYWNoZSogVENNYWxs
b2NUaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpCit7CisgICAgLy8gSW5pdGlh
bGl6ZSBwZXItdGhyZWFkIGRhdGEgaWYgbmVjZXNzYXJ5CisgICAgVENNYWxsb2NUaHJlYWRDYWNo
ZSogaGVhcCA9IDA7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExv
Y2spOwogCiAjaWYgT1MoV0lORE9XUykKLSAgICBEV09SRCBtZTsKLSAgICBpZiAoIXRzZF9pbml0
ZWQpIHsKLSAgICAgIG1lID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgbWUgPSBHZXRDdXJyZW50
VGhyZWFkSWQoKTsKLSAgICB9CisgICAgICAgIERXT1JEIG1lOworICAgICAgICBpZiAoIXRzZElu
aXRlZCkKKyAgICAgICAgICAgIG1lID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWUg
PSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICNlbHNlCi0gICAgLy8gRWFybHkgb24gaW4gZ2xpYmMn
cyBsaWZlLCB3ZSBjYW5ub3QgZXZlbiBjYWxsIHB0aHJlYWRfc2VsZigpCi0gICAgcHRocmVhZF90
IG1lOwotICAgIGlmICghdHNkX2luaXRlZCkgewotICAgICAgbWVtc2V0KCZtZSwgMCwgc2l6ZW9m
KG1lKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgfQor
ICAgICAgICAvLyBFYXJseSBvbiBpbiBnbGliYydzIGxpZmUsIHdlIGNhbm5vdCBldmVuIGNhbGwg
cHRocmVhZF9zZWxmKCkKKyAgICAgICAgcHRocmVhZF90IG1lOworICAgICAgICBpZiAoIXRzZElu
aXRlZCkKKyAgICAgICAgICAgIG1lbXNldCgmbWUsIDAsIHNpemVvZihtZSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtZSA9IHB0aHJlYWRfc2VsZigpOwogI2VuZGlmCiAKLSAgICAvLyBU
aGlzIG1heSBiZSBhIHJlY3Vyc2l2ZSBtYWxsb2MgY2FsbCBmcm9tIHB0aHJlYWRfc2V0c3BlY2lm
aWMoKQotICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIGhlYXAgZm9yIHRoaXMgdGhyZWFkIGhhcyBh
bHJlYWR5IGJlZW4gY3JlYXRlZAotICAgIC8vIGFuZCBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3Qu
ICBTbyB3ZSBzZWFyY2ggZm9yIHRoYXQgZmlyc3QuCi0gICAgZm9yIChUQ01hbGxvY19UaHJlYWRD
YWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAhPSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKKyAgICAg
ICAgLy8gVGhpcyBtYXkgYmUgYSByZWN1cnNpdmUgbWFsbG9jIGNhbGwgZnJvbSBwdGhyZWFkX3Nl
dHNwZWNpZmljKCkKKyAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aGUgaGVhcCBmb3IgdGhpcyB0
aHJlYWQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkCisgICAgICAgIC8vIGFuZCBhZGRlZCB0byB0
aGUgbGlua2VkIGxpc3QuIFNvIHdlIHNlYXJjaCBmb3IgdGhhdCBmaXJzdC4KKyAgICAgICAgZm9y
IChUQ01hbGxvY1RocmVhZENhY2hlKiBoID0gdGhyZWFkSGVhcHM7IGg7IGggPSBoLT5uZXh0KSB7
CiAjaWYgT1MoV0lORE9XUykKLSAgICAgIGlmIChoLT50aWRfID09IG1lKSB7CisgICAgICAgICAg
ICBpZiAoaC0+dGlkID09IG1lKSB7CiAjZWxzZQotICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaC0+
dGlkXywgbWUpKSB7CisgICAgICAgICAgICBpZiAocHRocmVhZF9lcXVhbChoLT50aWQsIG1lKSkg
ewogI2VuZGlmCi0gICAgICAgIGhlYXAgPSBoOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAg
ICB9CisgICAgICAgICAgICAgICAgaGVhcCA9IGg7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmIChoZWFwID09IE5VTEwpIGhlYXAgPSBO
ZXdIZWFwKG1lKTsKLSAgfQorICAgICAgICBpZiAoIWhlYXApCisgICAgICAgICAgICBoZWFwID0g
TmV3SGVhcChtZSk7CisgICAgfQogCi0gIC8vIFdlIGNhbGwgcHRocmVhZF9zZXRzcGVjaWZpYygp
IG91dHNpZGUgdGhlIGxvY2sgYmVjYXVzZSBpdCBtYXkKLSAgLy8gY2FsbCBtYWxsb2MoKSByZWN1
cnNpdmVseS4gIFRoZSByZWN1cnNpdmUgY2FsbCB3aWxsIG5ldmVyIGdldAotICAvLyBoZXJlIGFn
YWluIGJlY2F1c2UgaXQgd2lsbCBmaW5kIHRoZSBhbHJlYWR5IGFsbG9jYXRlZCBoZWFwIGluIHRo
ZQotICAvLyBsaW5rZWQgbGlzdCBvZiBoZWFwcy4KLSAgaWYgKCFoZWFwLT5pbl9zZXRzcGVjaWZp
Y18gJiYgdHNkX2luaXRlZCkgewotICAgIGhlYXAtPmluX3NldHNwZWNpZmljXyA9IHRydWU7Ci0g
ICAgc2V0VGhyZWFkSGVhcChoZWFwKTsKLSAgfQotICByZXR1cm4gaGVhcDsKKyAgICAvLyBXZSBj
YWxsIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBvdXRzaWRlIHRoZSBsb2NrIGJlY2F1c2UgaXQgbWF5
CisgICAgLy8gY2FsbCBtYWxsb2MoKSByZWN1cnNpdmVseS4gVGhlIHJlY3Vyc2l2ZSBjYWxsIHdp
bGwgbmV2ZXIgZ2V0CisgICAgLy8gaGVyZSBhZ2FpbiBiZWNhdXNlIGl0IHdpbGwgZmluZCB0aGUg
YWxyZWFkeSBhbGxvY2F0ZWQgaGVhcCBpbiB0aGUKKyAgICAvLyBsaW5rZWQgbGlzdCBvZiBoZWFw
cy4KKyAgICBpZiAoIWhlYXAtPmluU2V0c3BlY2lmaWMgJiYgdHNkSW5pdGVkKSB7CisgICAgICAg
IGhlYXAtPmluU2V0c3BlY2lmaWMgPSB0cnVlOworICAgICAgICBzZXRUaHJlYWRIZWFwKGhlYXAp
OworICAgIH0KKyAgICByZXR1cm4gaGVhcDsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6QmVjb21lSWRsZSgpIHsKLSAgaWYgKCF0c2RfaW5pdGVkKSByZXR1cm47ICAgICAgICAgICAg
ICAvLyBObyBjYWNoZXMgeWV0Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gR2V0VGhy
ZWFkSGVhcCgpOwotICBpZiAoaGVhcCA9PSBOVUxMKSByZXR1cm47ICAgICAgICAgICAgIC8vIE5v
IHRocmVhZCBjYWNoZSB0byByZW1vdmUKLSAgaWYgKGhlYXAtPmluX3NldHNwZWNpZmljXykgcmV0
dXJuOyAgICAvLyBEbyBub3QgZGlzdHVyYiB0aGUgYWN0aXZlIGNhbGxlcgordm9pZCBUQ01hbGxv
Y1RocmVhZENhY2hlOjpCZWNvbWVJZGxlKCkKK3sKKyAgICBpZiAoIXRzZEluaXRlZCkKKyAgICAg
ICAgcmV0dXJuOyAvLyBObyBjYWNoZXMgeWV0CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVh
cCA9IEdldFRocmVhZEhlYXAoKTsKKyAgICBpZiAoIWhlYXApCisgICAgICAgIHJldHVybjsgLy8g
Tm8gdGhyZWFkIGNhY2hlIHRvIHJlbW92ZQorICAgIGlmIChoZWFwLT5pblNldHNwZWNpZmljKQor
ICAgICAgICByZXR1cm47IC8vIERvIG5vdCBkaXN0dXJiIHRoZSBhY3RpdmUgY2FsbGVyCiAKLSAg
aGVhcC0+aW5fc2V0c3BlY2lmaWNfID0gdHJ1ZTsKLSAgc2V0VGhyZWFkSGVhcChOVUxMKTsKKyAg
ICBoZWFwLT5pblNldHNwZWNpZmljID0gdHJ1ZTsKKyAgICBzZXRUaHJlYWRIZWFwKDApOwogI2lm
ZGVmIEhBVkVfVExTCi0gIC8vIEFsc28gdXBkYXRlIHRoZSBjb3B5IGluIF9fdGhyZWFkCi0gIHRo
cmVhZGxvY2FsX2hlYXAgPSBOVUxMOworICAgIC8vIEFsc28gdXBkYXRlIHRoZSBjb3B5IGluIF9f
dGhyZWFkCisgICAgdGhyZWFkbG9jYWxIZWFwID0gMDsKICNlbmRpZgotICBoZWFwLT5pbl9zZXRz
cGVjaWZpY18gPSBmYWxzZTsKLSAgaWYgKEdldFRocmVhZEhlYXAoKSA9PSBoZWFwKSB7Ci0gICAg
Ly8gU29tZWhvdyBoZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8gbWFs
bG9jCi0gICAgLy8gZnJvbSBwdGhyZWFkX3NldHNwZWNpZmljLiAgV2UgZ2l2ZSB1cCBpbiB0aGlz
IGNhc2UuCi0gICAgcmV0dXJuOwotICB9CisgICAgaGVhcC0+aW5TZXRzcGVjaWZpYyA9IGZhbHNl
OworICAgIGlmIChHZXRUaHJlYWRIZWFwKCkgPT0gaGVhcCkKKyAgICAgICAgLy8gU29tZWhvdyBo
ZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8gbWFsbG9jCisgICAgICAg
IC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gV2UgZ2l2ZSB1cCBpbiB0aGlzIGNhc2UuCisg
ICAgICAgIHJldHVybjsKIAotICAvLyBXZSBjYW4gbm93IGdldCByaWQgb2YgdGhlIGhlYXAKLSAg
RGVsZXRlQ2FjaGUoaGVhcCk7CisgICAgLy8gV2UgY2FuIG5vdyBnZXQgcmlkIG9mIHRoZSBoZWFw
CisgICAgRGVsZXRlQ2FjaGUoaGVhcCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6
OkRlc3Ryb3lUaHJlYWRDYWNoZSh2b2lkKiBwdHIpIHsKLSAgLy8gTm90ZSB0aGF0ICJwdHIiIGNh
bm5vdCBiZSBOVUxMIHNpbmNlIHB0aHJlYWQgcHJvbWlzZXMgbm90Ci0gIC8vIHRvIGludm9rZSB0
aGUgZGVzdHJ1Y3RvciBvbiBOVUxMIHZhbHVlcywgYnV0IGZvciBzYWZldHksCi0gIC8vIHdlIGNo
ZWNrIGFueXdheS4KLSAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm47Cit2b2lkIFRDTWFsbG9jVGhy
ZWFkQ2FjaGU6OkRlc3Ryb3lUaHJlYWRDYWNoZSh2b2lkKiBwdHIpCit7CisgICAgLy8gTm90ZSB0
aGF0ICJwdHIiIGNhbm5vdCBiZSAwIHNpbmNlIHB0aHJlYWQgcHJvbWlzZXMgbm90CisgICAgLy8g
dG8gaW52b2tlIHRoZSBkZXN0cnVjdG9yIG9uIDAgdmFsdWVzLCBidXQgZm9yIHNhZmV0eSwKKyAg
ICAvLyB3ZSBjaGVjayBhbnl3YXkuCisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKICNp
ZmRlZiBIQVZFX1RMUwotICAvLyBQcmV2ZW50IGZhc3QgcGF0aCBvZiBHZXRUaHJlYWRIZWFwKCkg
ZnJvbSByZXR1cm5pbmcgaGVhcC4KLSAgdGhyZWFkbG9jYWxfaGVhcCA9IE5VTEw7CisgICAgLy8g
UHJldmVudCBmYXN0IHBhdGggb2YgR2V0VGhyZWFkSGVhcCgpIGZyb20gcmV0dXJuaW5nIGhlYXAu
CisgICAgdGhyZWFkbG9jYWxIZWFwID0gMDsKICNlbmRpZgotICBEZWxldGVDYWNoZShyZWludGVy
cHJldF9jYXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocHRyKSk7CisgICAgRGVsZXRlQ2FjaGUo
cmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY1RocmVhZENhY2hlKj4ocHRyKSk7CiB9CiAKLXZvaWQg
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlbGV0ZUNhY2hlKFRDTWFsbG9jX1RocmVhZENhY2hlKiBo
ZWFwKSB7Ci0gIC8vIFJlbW92ZSBhbGwgbWVtb3J5IGZyb20gaGVhcAotICBoZWFwLT5DbGVhbnVw
KCk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkRlbGV0ZUNhY2hlKFRDTWFsbG9jVGhyZWFk
Q2FjaGUqIGhlYXApCit7CisgICAgLy8gUmVtb3ZlIGFsbCBtZW1vcnkgZnJvbSBoZWFwCisgICAg
aGVhcC0+Q2xlYW51cCgpOwogCi0gIC8vIFJlbW92ZSBmcm9tIGxpbmtlZCBsaXN0Ci0gIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBpZiAoaGVhcC0+bmV4dF8gIT0gTlVMTCkg
aGVhcC0+bmV4dF8tPnByZXZfID0gaGVhcC0+cHJldl87Ci0gIGlmIChoZWFwLT5wcmV2XyAhPSBO
VUxMKSBoZWFwLT5wcmV2Xy0+bmV4dF8gPSBoZWFwLT5uZXh0XzsKLSAgaWYgKHRocmVhZF9oZWFw
cyA9PSBoZWFwKSB0aHJlYWRfaGVhcHMgPSBoZWFwLT5uZXh0XzsKLSAgdGhyZWFkX2hlYXBfY291
bnQtLTsKLSAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7CisgICAgLy8gUmVtb3ZlIGZyb20g
bGlua2VkIGxpc3QKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIGlm
IChoZWFwLT5uZXh0KQorICAgICAgICBoZWFwLT5uZXh0LT5wcmV2ID0gaGVhcC0+cHJldjsKKyAg
ICBpZiAoaGVhcC0+cHJldikKKyAgICAgICAgaGVhcC0+cHJldi0+bmV4dCA9IGhlYXAtPm5leHQ7
CisgICAgaWYgKHRocmVhZEhlYXBzID09IGhlYXApCisgICAgICAgIHRocmVhZEhlYXBzID0gaGVh
cC0+bmV4dDsKKyAgICB0aHJlYWRfaGVhcF9jb3VudC0tOworICAgIFJlY29tcHV0ZVRocmVhZENh
Y2hlU2l6ZSgpOwogCi0gIHRocmVhZGhlYXBfYWxsb2NhdG9yLkRlbGV0ZShoZWFwKTsKKyAgICB0
aHJlYWRoZWFwQWxsb2NhdG9yLkRlbGV0ZShoZWFwKTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCkgewotICAvLyBEaXZpZGUgYXZhaWxh
YmxlIHNwYWNlIGFjcm9zcyB0aHJlYWRzCi0gIGludCBuID0gdGhyZWFkX2hlYXBfY291bnQgPiAw
ID8gdGhyZWFkX2hlYXBfY291bnQgOiAxOwotICBzaXplX3Qgc3BhY2UgPSBvdmVyYWxsX3RocmVh
ZF9jYWNoZV9zaXplIC8gbjsKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhy
ZWFkQ2FjaGVTaXplKCkKK3sKKyAgICAvLyBEaXZpZGUgYXZhaWxhYmxlIHNwYWNlIGFjcm9zcyB0
aHJlYWRzCisgICAgaW50IG4gPSB0aHJlYWRfaGVhcF9jb3VudCA+IDAgPyB0aHJlYWRfaGVhcF9j
b3VudCA6IDE7CisgICAgc2l6ZV90IHNwYWNlID0gb3ZlcmFsbFRocmVhZENhY2hlc2l6ZSAvIG47
CiAKLSAgLy8gTGltaXQgdG8gYWxsb3dlZCByYW5nZQotICBpZiAoc3BhY2UgPCBrTWluVGhyZWFk
Q2FjaGVTaXplKSBzcGFjZSA9IGtNaW5UaHJlYWRDYWNoZVNpemU7Ci0gIGlmIChzcGFjZSA+IGtN
YXhUaHJlYWRDYWNoZVNpemUpIHNwYWNlID0ga01heFRocmVhZENhY2hlU2l6ZTsKKyAgICAvLyBM
aW1pdCB0byBhbGxvd2VkIHJhbmdlCisgICAgaWYgKHNwYWNlIDwga01pblRocmVhZENhY2hlU2l6
ZSkKKyAgICAgICAgc3BhY2UgPSBrTWluVGhyZWFkQ2FjaGVTaXplOworICAgIGlmIChzcGFjZSA+
IGtNYXhUaHJlYWRDYWNoZVNpemUpCisgICAgICAgIHNwYWNlID0ga01heFRocmVhZENhY2hlU2l6
ZTsKIAotICBwZXJfdGhyZWFkX2NhY2hlX3NpemUgPSBzcGFjZTsKKyAgICBwZXJUaHJlYWRDYWNo
ZVNpemUgPSBzcGFjZTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UHJpbnQoKSBj
b25zdCB7Ci0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewot
ICAgIE1FU1NBR0UoIiAgICAgICU1IiBQUkl1UyAiIDogJTRkIGxlbjsgJTRkIGxvXG4iLAordm9p
ZCBUQ01hbGxvY1RocmVhZENhY2hlOjpQcmludCgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
Y2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgICAgIE1FU1NBR0UoIiAgICAg
ICU1IiBQUkl1UyAiIDogJTRkIGxlbjsgJTRkIGxvXG4iLAogICAgICAgICAgICAgQnl0ZVNpemVG
b3JDbGFzcyhjbCksCi0gICAgICAgICAgICBsaXN0X1tjbF0ubGVuZ3RoKCksCi0gICAgICAgICAg
ICBsaXN0X1tjbF0ubG93d2F0ZXJtYXJrKCkpOwotICB9CisgICAgICAgICAgICBsaXN0W2NsXS5s
ZW5ndGgoKSwKKyAgICAgICAgICAgIGxpc3RbY2xdLmxvd3dhdGVybWFyaygpKTsKKyAgICB9CiB9
CiAKIC8vIEV4dHJhY3QgaW50ZXJlc3Rpbmcgc3RhdHMKIHN0cnVjdCBUQ01hbGxvY1N0YXRzIHsK
LSAgdWludDY0X3Qgc3lzdGVtX2J5dGVzOyAgICAgICAgLy8gQnl0ZXMgYWxsb2NlZCBmcm9tIHN5
c3RlbQotICB1aW50NjRfdCB0aHJlYWRfYnl0ZXM7ICAgICAgICAvLyBCeXRlcyBpbiB0aHJlYWQg
Y2FjaGVzCi0gIHVpbnQ2NF90IGNlbnRyYWxfYnl0ZXM7ICAgICAgIC8vIEJ5dGVzIGluIGNlbnRy
YWwgY2FjaGUKLSAgdWludDY0X3QgdHJhbnNmZXJfYnl0ZXM7ICAgICAgLy8gQnl0ZXMgaW4gY2Vu
dHJhbCB0cmFuc2ZlciBjYWNoZQotICB1aW50NjRfdCBwYWdlaGVhcF9ieXRlczsgICAgICAvLyBC
eXRlcyBpbiBwYWdlIGhlYXAKLSAgdWludDY0X3QgbWV0YWRhdGFfYnl0ZXM7ICAgICAgLy8gQnl0
ZXMgYWxsb2NlZCBmb3IgbWV0YWRhdGEKKyAgICB1aW50NjRfdCBzeXN0ZW1CeXRlczsgLy8gQnl0
ZXMgYWxsb2NlZCBmcm9tIHN5c3RlbQorICAgIHVpbnQ2NF90IHRocmVhZEJ5dGVzOyAvLyBCeXRl
cyBpbiB0aHJlYWQgY2FjaGVzCisgICAgdWludDY0X3QgY2VudHJhbEJ5dGVzOyAvLyBCeXRlcyBp
biBjZW50cmFsIGNhY2hlCisgICAgdWludDY0X3QgdHJhbnNmZXJCeXRlczsgLy8gQnl0ZXMgaW4g
Y2VudHJhbCB0cmFuc2ZlciBjYWNoZQorICAgIHVpbnQ2NF90IHBhZ2VoZWFwQnl0ZXM7IC8vIEJ5
dGVzIGluIHBhZ2UgaGVhcAorICAgIHVpbnQ2NF90IG1ldGFkYXRhQnl0ZXM7IC8vIEJ5dGVzIGFs
bG9jZWQgZm9yIG1ldGFkYXRhCiB9OwogCiAjaWZuZGVmIFdURl9DSEFOR0VTCi0vLyBHZXQgc3Rh
dHMgaW50byAiciIuICBBbHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMgaWYgY2xhc3NfY291
bnQgIT0gTlVMTAotc3RhdGljIHZvaWQgRXh0cmFjdFN0YXRzKFRDTWFsbG9jU3RhdHMqIHIsIHVp
bnQ2NF90KiBjbGFzc19jb3VudCkgewotICByLT5jZW50cmFsX2J5dGVzID0gMDsKLSAgci0+dHJh
bnNmZXJfYnl0ZXMgPSAwOwotICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsr
Y2wpIHsKLSAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7
Ci0gICAgY29uc3QgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRjX2xlbmd0aCgp
OwotICAgIHItPmNlbnRyYWxfYnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXpl
Rm9yQ2xhc3MoY2wpKSAqIGxlbmd0aDsKLSAgICByLT50cmFuc2Zlcl9ieXRlcyArPQotICAgICAg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRjX2xlbmd0aDsK
LSAgICBpZiAoY2xhc3NfY291bnQpIGNsYXNzX2NvdW50W2NsXSA9IGxlbmd0aCArIHRjX2xlbmd0
aDsKLSAgfQotCi0gIC8vIEFkZCBzdGF0cyBmcm9tIHBlci10aHJlYWQgaGVhcHMKLSAgci0+dGhy
ZWFkX2J5dGVzID0gMDsKLSAgeyAvLyBzY29wZQotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOwotICAgIGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVh
cHM7IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7Ci0gICAgICByLT50aHJlYWRfYnl0ZXMgKz0g
aC0+U2l6ZSgpOwotICAgICAgaWYgKGNsYXNzX2NvdW50KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICAgIGNsYXNzX2NvdW50
W2NsXSArPSBoLT5mcmVlbGlzdF9sZW5ndGgoY2wpOworLy8gR2V0IHN0YXRzIGludG8gInIiLiBB
bHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMgaWYgY2xhc3NDb3VudCAhPSAwCitzdGF0aWMg
dm9pZCBFeHRyYWN0U3RhdHMoVENNYWxsb2NTdGF0cyogciwgdWludDY0X3QqIGNsYXNzQ291bnQp
Cit7CisgICAgci0+Y2VudHJhbEJ5dGVzID0gMDsKKyAgICByLT50cmFuc2ZlckJ5dGVzID0gMDsK
KyAgICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAgICAgICAg
Y29uc3QgaW50IGxlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0ubGVuZ3RoKCk7CisgICAgICAgIGNv
bnN0IGludCB0Y0xlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0udGNMZW5ndGgoKTsKKyAgICAgICAg
ci0+Y2VudHJhbEJ5dGVzICs9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNz
KGNsKSkgKiBsZW5ndGg7CisgICAgICAgIHItPnRyYW5zZmVyQnl0ZXMgKz0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRjTGVuZ3RoOworICAgICAgICBpZiAo
Y2xhc3NDb3VudCkKKyAgICAgICAgICAgIGNsYXNzQ291bnRbY2xdID0gbGVuZ3RoICsgdGNMZW5n
dGg7CisgICAgfQorCisgICAgLy8gQWRkIHN0YXRzIGZyb20gcGVyLXRocmVhZCBoZWFwcworICAg
IHItPnRocmVhZEJ5dGVzID0gMDsKKyAgICB7IC8vIHNjb3BlCisgICAgICAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIGZvciAoVENNYWxsb2NUaHJlYWRDYWNoZSog
aCA9IHRocmVhZEhlYXBzOyBoOyBoID0gaC0+bmV4dCkgeworICAgICAgICAgICAgci0+dGhyZWFk
Qnl0ZXMgKz0gaC0+U2l6ZSgpOworICAgICAgICAgICAgaWYgKGNsYXNzQ291bnQpCisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKQorICAg
ICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSArPSBoLT5mcmVlbGlzdGxlbmd0aChjbCk7
CiAgICAgICAgIH0KLSAgICAgIH0KICAgICB9Ci0gIH0KIAotICB7IC8vc2NvcGUKLSAgICBTcGlu
TG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICByLT5zeXN0ZW1fYnl0ZXMgPSBwYWdl
aGVhcC0+U3lzdGVtQnl0ZXMoKTsKLSAgICByLT5tZXRhZGF0YV9ieXRlcyA9IG1ldGFkYXRhX3N5
c3RlbV9ieXRlczsKLSAgICByLT5wYWdlaGVhcF9ieXRlcyA9IHBhZ2VoZWFwLT5GcmVlQnl0ZXMo
KTsKLSAgfQorICAgIHsgLy8gc2NvcGUKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhl
YXBMb2NrKTsKKyAgICAgICAgci0+c3lzdGVtQnl0ZXMgPSBwYWdlaGVhcC0+U3lzdGVtQnl0ZXMo
KTsKKyAgICAgICAgci0+bWV0YWRhdGFCeXRlcyA9IG1ldGFkYXRhU3lzdGVtQnl0ZXM7CisgICAg
ICAgIHItPnBhZ2VoZWFwQnl0ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7CisgICAgfQogfQog
I2VuZGlmCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKIC8vIFdSSVRFIHN0YXRzIHRvICJvdXQiCiBz
dGF0aWMgdm9pZCBEdW1wU3RhdHMoVENNYWxsb2NfUHJpbnRlciogb3V0LCBpbnQgbGV2ZWwpIHsK
LSAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgdWludDY0X3QgY2xhc3NfY291bnRba051bUNsYXNz
ZXNdOwotICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAobGV2ZWwgPj0gMiA/IGNsYXNzX2NvdW50IDog
TlVMTCkpOworICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CisgICAgdWludDY0X3QgY2xhc3NDb3Vu
dFtrTnVtQ2xhc3Nlc107CisgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgKGxldmVsID49IDIgPyBj
bGFzc0NvdW50IDogMCkpOworCisgICAgaWYgKGxldmVsID49IDIpIHsKKyAgICAgICAgb3V0LT5w
cmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
Iik7CisgICAgICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOworICAgICAgICBmb3IgKGludCBj
bCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAgICAgICAgICAgIGlmIChjbGFzc0Nv
dW50W2NsXSA+IDApIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBjbGFzc0J5dGVzID0gY2xh
c3NDb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKKyAgICAgICAgICAgICAgICBjdW11
bGF0aXZlICs9IGNsYXNzQnl0ZXM7CisgICAgICAgICAgICAgICAgb3V0LT5wcmludGYoImNsYXNz
ICUzZCBbICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCisgICAgICAgICAgICAgICAgICAgICIlOCIg
UFJJdTY0ICIgb2JqczsgJTUuMWYgTUI7ICU1LjFmIGN1bSBNQlxuIiwKKyAgICAgICAgICAgICAg
ICAgICAgY2wsIEJ5dGVTaXplRm9yQ2xhc3MoY2wpLAorICAgICAgICAgICAgICAgICAgICBjbGFz
c0NvdW50W2NsXSwKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NCeXRlcyAvIDEwNDg1NzYuMCwK
KyAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAotICBpZiAobGV2ZWwgPj0gMikgewotICAgIG91dC0+cHJpbnRmKCIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAg
IHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOwotICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVt
Q2xhc3NlczsgKytjbCkgewotICAgICAgaWYgKGNsYXNzX2NvdW50W2NsXSA+IDApIHsKLSAgICAg
ICAgdWludDY0X3QgY2xhc3NfYnl0ZXMgPSBjbGFzc19jb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNs
YXNzKGNsKTsKLSAgICAgICAgY3VtdWxhdGl2ZSArPSBjbGFzc19ieXRlczsKLSAgICAgICAgb3V0
LT5wcmludGYoImNsYXNzICUzZCBbICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCi0gICAgICAgICAg
ICAgICAgIiU4IiBQUkl1NjQgIiBvYmpzOyAlNS4xZiBNQjsgJTUuMWYgY3VtIE1CXG4iLAotICAg
ICAgICAgICAgICAgIGNsLCBCeXRlU2l6ZUZvckNsYXNzKGNsKSwKLSAgICAgICAgICAgICAgICBj
bGFzc19jb3VudFtjbF0sCi0gICAgICAgICAgICAgICAgY2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAs
Ci0gICAgICAgICAgICAgICAgY3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7Ci0gICAgICB9CisgICAg
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIHBhZ2VoZWFwLT5E
dW1wKG91dCk7CiAgICAgfQogCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7
Ci0gICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKLSAgfQotCi0gIGNvbnN0IHVpbnQ2NF90IGJ5dGVz
X2luX3VzZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0gc3RhdHMudGhyZWFkX2J5dGVzOworICAgIGNvbnN0IHVpbnQ2NF90IGJ5dGVzSW5Vc2UgPSBz
dGF0cy5zeXN0ZW1CeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRz
LnBhZ2VoZWFwQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5j
ZW50cmFsQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy50cmFu
c2ZlckJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFk
Qnl0ZXM7CiAKLSAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIgorICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgICAgICAgIk1BTExPQzog
JTEyIiBQUkl1NjQgIiBIZWFwIHNpemVcbiIKICAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQ
Ukl1NjQgIiBCeXRlcyBpbiB1c2UgYnkgYXBwbGljYXRpb25cbiIKICAgICAgICAgICAgICAgIk1B
TExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHBhZ2UgaGVhcFxuIgpAQCAtMzM3OSwx
NSArMzQ4MywxNSBAQCBzdGF0aWMgdm9pZCBEdW1wU3RhdHMoVENNYWxsb2NfUHJpbnRlcioKICAg
ICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBUaHJlYWQgaGVhcHMgaW4gdXNlXG4i
CiAgICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgTWV0YWRhdGEgYWxsb2NhdGVk
XG4iCiAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIsCi0gICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9ieXRlcywKLSAgICAg
ICAgICAgICAgYnl0ZXNfaW5fdXNlLAotICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVhcF9ieXRl
cywKLSAgICAgICAgICAgICAgc3RhdHMuY2VudHJhbF9ieXRlcywKLSAgICAgICAgICAgICAgc3Rh
dHMudHJhbnNmZXJfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0YXRzLnRocmVhZF9ieXRlcywKLSAg
ICAgICAgICAgICAgdWludDY0X3Qoc3Bhbl9hbGxvY2F0b3IuaW51c2UoKSksCi0gICAgICAgICAg
ICAgIHVpbnQ2NF90KHRocmVhZGhlYXBfYWxsb2NhdG9yLmludXNlKCkpLAotICAgICAgICAgICAg
ICBzdGF0cy5tZXRhZGF0YV9ieXRlcyk7CisgICAgICAgICAgICAgIHN0YXRzLnN5c3RlbUJ5dGVz
LAorICAgICAgICAgICAgICBieXRlc0luVXNlLAorICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVh
cEJ5dGVzLAorICAgICAgICAgICAgICBzdGF0cy5jZW50cmFsQnl0ZXMsCisgICAgICAgICAgICAg
IHN0YXRzLnRyYW5zZmVyQnl0ZXMsCisgICAgICAgICAgICAgIHN0YXRzLnRocmVhZEJ5dGVzLAor
ICAgICAgICAgICAgICB1aW50NjRfdChzcGFuQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICAg
ICAgICB1aW50NjRfdCh0aHJlYWRoZWFwQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICAgICAg
ICBzdGF0cy5tZXRhZGF0YUJ5dGVzKTsKIH0KIAogc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQg
bGV2ZWwpIHsKQEAgLTM0MDAsNDUgKzM1MDQsNDMgQEAgc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhp
bnQgbGV2ZWwpIHsKIH0KIAogc3RhdGljIHZvaWQqKiBEdW1wU3RhY2tUcmFjZXMoKSB7Ci0gIC8v
IENvdW50IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQKLSAgaW50IG5lZWRlZF9zbG90cyA9IDA7Ci0g
IHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBmb3IgKFNwYW4q
IHMgPSBzYW1wbGVkX29iamVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZF9vYmplY3RzOyBzID0gcy0+
bmV4dCkgewotICAgICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNr
VHJhY2UqPihzLT5vYmplY3RzKTsKLSAgICAgIG5lZWRlZF9zbG90cyArPSAzICsgc3RhY2stPmRl
cHRoOworICAgIC8vIENvdW50IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQKKyAgICBpbnQgbmVlZGVk
U2xvdHMgPSAwOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2Nr
KTsKKyAgICAgICAgZm9yIChTcGFuKiBzID0gc2FtcGxlZE9iamVjdHMubmV4dDsgcyAhPSAmc2Ft
cGxlZE9iamVjdHM7IHMgPSBzLT5uZXh0KSB7CisgICAgICAgICAgICBTdGFja1RyYWNlKiBzdGFj
ayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOworICAgICAgICAg
ICAgbmVlZGVkU2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0aDsKKyAgICAgICAgfQorICAgICAgICBu
ZWVkZWRTbG90cyArPSAxMDA7IC8vIFNsb3AgaW4gY2FzZSBzYW1wbGUgZ3Jvd3MKKyAgICAgICAg
bmVlZGVkU2xvdHMgKz0gbmVlZGVkU2xvdHMgLyA4OyAvLyBBbiBleHRyYSAxMi41JSBzbG9wCiAg
ICAgfQotICAgIG5lZWRlZF9zbG90cyArPSAxMDA7ICAgICAgICAgICAgLy8gU2xvcCBpbiBjYXNl
IHNhbXBsZSBncm93cwotICAgIG5lZWRlZF9zbG90cyArPSBuZWVkZWRfc2xvdHMvODsgLy8gQW4g
ZXh0cmEgMTIuNSUgc2xvcAotICB9CiAKLSAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lkKltuZWVk
ZWRfc2xvdHNdOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICBNRVNTQUdFKCJ0Y21hbGxv
YzogY291bGQgbm90IGFsbG9jYXRlICVkIHNsb3RzIGZvciBzdGFjayB0cmFjZXNcbiIsCi0gICAg
ICAgICAgICBuZWVkZWRfc2xvdHMpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgICAgdm9pZCoq
IHJlc3VsdCA9IG5ldyB2b2lkKltuZWVkZWRTbG90c107CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgTUVTU0FHRSgidGNtYWxsb2M6IGNvdWxkIG5vdCBhbGxvY2F0ZSAlZCBzbG90cyBmb3Ig
c3RhY2sgdHJhY2VzXG4iLAorICAgICAgICAgICAgbmVlZGVkU2xvdHMpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAg
IGludCB1c2VkU2xvdHMgPSAwOworICAgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRPYmplY3RzLm5l
eHQ7IHMgIT0gJnNhbXBsZWRPYmplY3RzOyBzID0gcy0+bmV4dCkgeworICAgICAgICBBU1NFUlQo
dXNlZFNsb3RzIDwgbmVlZGVkU2xvdHMpOyAvLyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1p
bmF0b3IKKyAgICAgICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNr
VHJhY2UqPihzLT5vYmplY3RzKTsKKyAgICAgICAgaWYgKHVzZWRTbG90cyArIDMgKyBzdGFjay0+
ZGVwdGggPj0gbmVlZGVkU2xvdHMpCisgICAgICAgICAgICAvLyBObyBtb3JlIHJvb20KKyAgICAg
ICAgICAgIGJyZWFrOwogCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBp
bnQgdXNlZF9zbG90cyA9IDA7Ci0gIGZvciAoU3BhbiogcyA9IHNhbXBsZWRfb2JqZWN0cy5uZXh0
OyBzICE9ICZzYW1wbGVkX29iamVjdHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAgQVNTRVJUKHVzZWRf
c2xvdHMgPCBuZWVkZWRfc2xvdHMpOyAgLy8gTmVlZCB0byBsZWF2ZSByb29tIGZvciB0ZXJtaW5h
dG9yCi0gICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2Uq
PihzLT5vYmplY3RzKTsKLSAgICBpZiAodXNlZF9zbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0g
bmVlZGVkX3Nsb3RzKSB7Ci0gICAgICAvLyBObyBtb3JlIHJvb20KLSAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzBdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMV0gPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFjay0+c2l6ZSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xv
dHMrMl0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFjay0+ZGVwdGgpOwotICAgIGZvciAo
aW50IGQgPSAwOyBkIDwgc3RhY2stPmRlcHRoOyBkKyspIHsKLSAgICAgIHJlc3VsdFt1c2VkX3Ns
b3RzKzMrZF0gPSBzdGFjay0+c3RhY2tbZF07CisgICAgICAgIHJlc3VsdFt1c2VkU2xvdHMrMF0g
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKKyAg
ICAgICAgcmVzdWx0W3VzZWRTbG90cysxXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNr
LT5zaXplKTsKKyAgICAgICAgcmVzdWx0W3VzZWRTbG90cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHN0YWNrLT5kZXB0aCk7CisgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc3RhY2st
PmRlcHRoOyBkKyspCisgICAgICAgICAgICByZXN1bHRbdXNlZFNsb3RzKzMrZF0gPSBzdGFjay0+
c3RhY2tbZF07CisgICAgICAgIHVzZWRTbG90cyArPSAzICsgc3RhY2stPmRlcHRoOwogICAgIH0K
LSAgICB1c2VkX3Nsb3RzICs9IDMgKyBzdGFjay0+ZGVwdGg7Ci0gIH0KLSAgcmVzdWx0W3VzZWRf
c2xvdHNdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pigw
KSk7Ci0gIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0W3VzZWRTbG90c10gPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDApKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogI2VuZGlmCiAKQEAgLTM0NDYsMTAzICszNTQ4LDExMCBAQCBzdGF0aWMgdm9pZCoq
IER1bXBTdGFja1RyYWNlcygpIHsKIAogLy8gVENNYWxsb2MncyBzdXBwb3J0IGZvciBleHRyYSBt
YWxsb2MgaW50ZXJmYWNlcwogY2xhc3MgVENNYWxsb2NJbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBN
YWxsb2NFeHRlbnNpb24gewotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIq
IGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgpIHsKLSAgICBBU1NFUlQoYnVmZmVyX2xlbmd0aCA+
IDApOwotICAgIFRDTWFsbG9jX1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGJ1ZmZlcl9sZW5ndGgp
OwotCi0gICAgLy8gUHJpbnQgbGV2ZWwgb25lIHN0YXRzIHVubGVzcyBsb3RzIG9mIHNwYWNlIGlz
IGF2YWlsYWJsZQotICAgIGlmIChidWZmZXJfbGVuZ3RoIDwgMTAwMDApIHsKLSAgICAgIER1bXBT
dGF0cygmcHJpbnRlciwgMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRl
ciwgMik7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwg
aW50IGJ1ZmZlckxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChidWZmZXJMZW5ndGggPiAw
KTsKKyAgICAgICAgVENNYWxsb2NfUHJpbnRlciBwcmludGVyKGJ1ZmZlciwgYnVmZmVyTGVuZ3Ro
KTsKKworICAgICAgICAvLyBQcmludCBsZXZlbCBvbmUgc3RhdHMgdW5sZXNzIGxvdHMgb2Ygc3Bh
Y2UgaXMgYXZhaWxhYmxlCisgICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxMDAwMCkKKyAgICAg
ICAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IER1bXBTdGF0cygmcHJpbnRlciwgMik7CiAgICAgfQotICB9CiAKLSAgdmlydHVhbCB2b2lkKiog
UmVhZFN0YWNrVHJhY2VzKCkgewotICAgIHJldHVybiBEdW1wU3RhY2tUcmFjZXMoKTsKLSAgfQor
ICAgIHZpcnR1YWwgdm9pZCoqIFJlYWRTdGFja1RyYWNlcygpCisgICAgeworICAgICAgICByZXR1
cm4gRHVtcFN0YWNrVHJhY2VzKCk7CisgICAgfQogCi0gIHZpcnR1YWwgYm9vbCBHZXROdW1lcmlj
UHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkgewotICAgIEFTU0VSVChu
YW1lICE9IE5VTEwpOworICAgIHZpcnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3Qg
Y2hhciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChuYW1lKTsK
IAotICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMi
KSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFjdFN0YXRz
KCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAg
ICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAtIHN0YXRzLmNl
bnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXM7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJnZW5lcmljLmhl
YXBfc2l6ZSIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRy
YWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRl
czsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInRj
bWFsbG9jLnNsYWNrX2J5dGVzIikgPT0gMCkgewotICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnl0
ZXMgaW4gdGhlIHBhZ2UgaGVhcCBhcmUgbm90IGZyYWdtZW50ZWQgdG9vCi0gICAgICAvLyBiYWRs
eSwgYW5kIGFyZSB0aGVyZWZvcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgotICAgICAgU3Bp
bkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+
RnJlZUJ5dGVzKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21w
KG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewot
ICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBv
dmVyYWxsX3RocmVhZF9jYWNoZV9zaXplOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJlYWRfY2FjaGVf
Ynl0ZXMiKSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFj
dFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRfYnl0ZXM7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJn
ZW5lcmljLmN1cnJlbnRfYWxsb2NhdGVkX2J5dGVzIikpIHsKKyAgICAgICAgICAgIFRDTWFsbG9j
U3RhdHMgc3RhdHM7CisgICAgICAgICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKyAgICAg
ICAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbUJ5dGVzCisgICAgICAgICAgICAgICAgICAgIC0g
c3RhdHMudGhyZWFkQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5jZW50cmFsQnl0
ZXMKKyAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5wYWdlaGVhcEJ5dGVzOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQorICAg
ICAgICBpZiAoIXN0cmNtcChuYW1lLCAiZ2VuZXJpYy5oZWFwc2l6ZSIpKSB7CisgICAgICAgICAg
ICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywg
MCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1CeXRlczsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgInRj
bWFsbG9jLnNsYWNrX2J5dGVzIikpIHsKKyAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ5
dGVzIGluIHRoZSBwYWdlIGhlYXAgYXJlIG5vdCBmcmFnbWVudGVkIHRvbworICAgICAgICAgICAg
Ly8gYmFkbHksIGFuZCBhcmUgdGhlcmVmb3JlIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAg
ICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxsKCZwYWdlaGVhcExvY2spOworICAgICAgICAgICAg
KnZhbHVlID0gcGFnZWhlYXAtPkZyZWVCeXRlcygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAidGNtYWxsb2MubWF4X3Rv
dGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpKSB7CisgICAgICAgICAgICBTcGluTG9ja0hvbGRlciBs
bCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IG92ZXJhbGxUaHJlYWRDYWNo
ZXNpemU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gIHZpcnR1YWwg
Ym9vbCBTZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IHZhbHVlKSB7
Ci0gICAgQVNTRVJUKG5hbWUgIT0gTlVMTCk7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ0
Y21hbGxvYy5jdXJyZW50X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpKSB7CisgICAgICAgICAg
ICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywg
MCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRCeXRlczsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxv
Yy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewotICAgICAgLy8gQ2xpcCB0
aGUgdmFsdWUgdG8gYSByZWFzb25hYmxlIHJhbmdlCi0gICAgICBpZiAodmFsdWUgPCBrTWluVGhy
ZWFkQ2FjaGVTaXplKSB2YWx1ZSA9IGtNaW5UaHJlYWRDYWNoZVNpemU7Ci0gICAgICBpZiAodmFs
dWUgPiAoMTw8MzApKSB2YWx1ZSA9ICgxPDwzMCk7ICAgICAvLyBMaW1pdCB0byAxR0IKLQotICAg
ICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICBvdmVyYWxsX3RocmVh
ZF9jYWNoZV9zaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSk7Ci0gICAgICBUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsK
LSAgfQorICAgIHZpcnR1YWwgYm9vbCBTZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFt
ZSwgc2l6ZV90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5hbWUpOwogCi0gIHZpcnR1
YWwgdm9pZCBNYXJrVGhyZWFkSWRsZSgpIHsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6QmVj
b21lSWRsZSgpOwotICB9CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhf
dG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikpIHsKKyAgICAgICAgICAgIC8vIENsaXAgdGhlIHZh
bHVlIHRvIGEgcmVhc29uYWJsZSByYW5nZQorICAgICAgICAgICAgaWYgKHZhbHVlIDwga01pblRo
cmVhZENhY2hlU2l6ZSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGtNaW5UaHJlYWRDYWNoZVNp
emU7CisgICAgICAgICAgICBpZiAodmFsdWUgPiAoMSA8PCAzMCkpCisgICAgICAgICAgICAgICAg
dmFsdWUgPSAoMSA8PCAzMCk7IC8vIExpbWl0IHRvIDFHQgorCisgICAgICAgICAgICBTcGluTG9j
a0hvbGRlciBsbCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgICAgIG92ZXJhbGxUaHJlYWRDYWNo
ZXNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlKTsKKyAgICAgICAgICAgIFRDTWFsbG9j
VGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICB2aXJ0dWFsIHZvaWQgUmVsZWFzZUZyZWVNZW1vcnko
KSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAt
PlJlbGVhc2VGcmVlUGFnZXMoKTsKLSAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIE1hcmtUaHJlYWRJZGxlKCkKKyAgICB7CisgICAgICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
UmVsZWFzZUZyZWVNZW1vcnkoKQorICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFn
ZWhlYXBMb2NrKTsKKyAgICAgICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKKyAgICB9
CiB9OwogI2VuZGlmCiAKIC8vIFRoZSBjb25zdHJ1Y3RvciBhbGxvY2F0ZXMgYW4gb2JqZWN0IHRv
IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uCiAvLyBydW5zIGJlZm9yZSBtYWluKCksIGFuZCB0
aGVyZWZvcmUgd2UgZG8gbm90IGhhdmUgYSBjaGFuY2UgdG8gYmVjb21lCi0vLyBtdWx0aS10aHJl
YWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uICBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQot
Ly8gaGVyZS4gIFByZXN1bWFibHkgYnkgdGhlIHRpbWUgdGhpcyBjb25zdHJ1Y3RvciBydW5zLCBn
bGliYyBpcyBpbgorLy8gbXVsdGktdGhyZWFkZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLiBXZSBh
bHNvIGNyZWF0ZSB0aGUgVFNEIGtleQorLy8gaGVyZS4gUHJlc3VtYWJseSBieSB0aGUgdGltZSB0
aGlzIGNvbnN0cnVjdG9yIHJ1bnMsIGdsaWJjIGlzIGluCiAvLyBnb29kIGVub3VnaCBzaGFwZSB0
byBoYW5kbGUgcHRocmVhZF9rZXlfY3JlYXRlKCkuCiAvLwogLy8gVGhlIGNvbnN0cnVjdG9yIGFs
c28gdGFrZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHRlbGwgU1RMIHRvIHVzZQotLy8gdGNtYWxsb2Mu
ICBXZSB3YW50IHRvIGRvIHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KKy8v
IHRjbWFsbG9jLiBXZSB3YW50IHRvIGRvIHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGlt
ZSwgc28KIC8vIGFsbCB1c2VyIFNUTCBhbGxvY2F0aW9ucyBnbyB0aHJvdWdoIHRjbWFsbG9jICh3
aGljaCB3b3JrcyByZWFsbHkKIC8vIHdlbGwgZm9yIFNUTCkuCiAvLwpAQCAtMzU2MSw3ICszNjcw
LDcgQEAgY2xhc3MgVENNYWxsb2NHdWFyZCB7CiAjZW5kaWYKICNlbmRpZgogICAgIGZyZWUobWFs
bG9jKDEpKTsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdFRTRCgpOworICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkluaXRUU0QoKTsKICAgICBmcmVlKG1hbGxvYygxKSk7CiAjaWZuZGVm
IFdURl9DSEFOR0VTCiAgICAgTWFsbG9jRXh0ZW5zaW9uOjpSZWdpc3RlcihuZXcgVENNYWxsb2NJ
bXBsZW1lbnRhdGlvbik7CkBAIC0zNTcxLDcgKzM2ODAsNyBAQCBjbGFzcyBUQ01hbGxvY0d1YXJk
IHsKICNpZm5kZWYgV1RGX0NIQU5HRVMKICAgflRDTWFsbG9jR3VhcmQoKSB7CiAgICAgY29uc3Qg
Y2hhciogZW52ID0gZ2V0ZW52KCJNQUxMT0NTVEFUUyIpOwotICAgIGlmIChlbnYgIT0gTlVMTCkg
eworICAgIGlmIChlbnYpIHsKICAgICAgIGludCBsZXZlbCA9IGF0b2koZW52KTsKICAgICAgIGlm
IChsZXZlbCA8IDEpIGxldmVsID0gMTsKICAgICAgIFByaW50U3RhdHMobGV2ZWwpOwpAQCAtMzU5
NCwzMyArMzcwMywzMiBAQCBzdGF0aWMgVENNYWxsb2NHdWFyZCBtb2R1bGVfZW50ZXJfZXhpdF9o
CiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKIAotc3RhdGljIFNwYW4qIERvU2FtcGxlZEFsbG9jYXRp
b24oc2l6ZV90IHNpemUpIHsKLQotICAvLyBHcmFiIHRoZSBzdGFjayB0cmFjZSBvdXRzaWRlIHRo
ZSBoZWFwIGxvY2sKLSAgU3RhY2tUcmFjZSB0bXA7Ci0gIHRtcC5kZXB0aCA9IEdldFN0YWNrVHJh
Y2UodG1wLnN0YWNrLCBrTWF4U3RhY2tEZXB0aCwgMSk7Ci0gIHRtcC5zaXplID0gc2l6ZTsKLQot
ICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgLy8gQWxsb2NhdGUgc3Bhbgot
ICBTcGFuICpzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyhzaXplID09IDAgPyAxIDogc2l6ZSkp
OwotICBpZiAoc3BhbiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KK3N0YXRpYyBT
cGFuKiBEb1NhbXBsZWRBbGxvY2F0aW9uKHNpemVfdCBzaXplKQorewogCi0gIC8vIEFsbG9jYXRl
IHN0YWNrIHRyYWNlCi0gIFN0YWNrVHJhY2UgKnN0YWNrID0gc3RhY2t0cmFjZV9hbGxvY2F0b3Iu
TmV3KCk7Ci0gIGlmIChzdGFjayA9PSBOVUxMKSB7Ci0gICAgLy8gU2FtcGxpbmcgZmFpbGVkIGJl
Y2F1c2Ugb2YgbGFjayBvZiBtZW1vcnkKLSAgICByZXR1cm4gc3BhbjsKLSAgfQorICAgIC8vIEdy
YWIgdGhlIHN0YWNrIHRyYWNlIG91dHNpZGUgdGhlIGhlYXAgbG9jaworICAgIFN0YWNrVHJhY2Ug
dG1wOworICAgIHRtcC5kZXB0aCA9IEdldFN0YWNrVHJhY2UodG1wLnN0YWNrLCBrTWF4U3RhY2tE
ZXB0aCwgMSk7CisgICAgdG1wLnNpemUgPSBzaXplOworCisgICAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBMb2NrKTsKKyAgICAvLyBBbGxvY2F0ZSBzcGFuCisgICAgU3Bhbiogc3BhbiA9IHBh
Z2VoZWFwLT5OZXcocGFnZXMoIXNpemUgPyAxIDogc2l6ZSkpOworICAgIGlmICghc3BhbikKKyAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgKnN0YWNrID0gdG1wOwotICBzcGFuLT5zYW1wbGUgPSAxOwot
ICBzcGFuLT5vYmplY3RzID0gc3RhY2s7Ci0gIERMTF9QcmVwZW5kKCZzYW1wbGVkX29iamVjdHMs
IHNwYW4pOworICAgIC8vIEFsbG9jYXRlIHN0YWNrIHRyYWNlCisgICAgU3RhY2tUcmFjZSogc3Rh
Y2sgPSBzdGFja3RyYWNlX2FsbG9jYXRvci5OZXcoKTsKKyAgICBpZiAoIXN0YWNrKQorICAgICAg
ICAvLyBTYW1wbGluZyBmYWlsZWQgYmVjYXVzZSBvZiBsYWNrIG9mIG1lbW9yeQorICAgICAgICBy
ZXR1cm4gc3BhbjsKKworICAgICpzdGFjayA9IHRtcDsKKyAgICBzcGFuLT5zYW1wbGUgPSAxOwor
ICAgIHNwYW4tPm9iamVjdHMgPSBzdGFjazsKKyAgICBETExQcmVwZW5kKCZzYW1wbGVkT2JqZWN0
cywgc3Bhbik7CiAKLSAgcmV0dXJuIHNwYW47CisgICAgcmV0dXJuIHNwYW47CiB9CiAjZW5kaWYK
IApAQCAtMzYzNyw3ICszNzQ1LDggQEAgc3RhdGljIGlubGluZSB2b2lkKiBDaGVja2VkTWFsbG9j
UmVzdWx0KAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQqIFNwYW5U
b01hbGxvY1Jlc3VsdChTcGFuICpzcGFuKSB7CitzdGF0aWMgaW5saW5lIHZvaWQqIFNwYW5Ub01h
bGxvY1Jlc3VsdChTcGFuKiBzcGFuKQorewogICBBU1NFUlRfU1BBTl9DT01NSVRURUQoc3Bhbik7
CiAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhzcGFuLT5zdGFydCwgMCk7CiAgIHJldHVybgpA
QCAtMzY0Nyw0NyArMzc1Niw0NSBAQCBzdGF0aWMgaW5saW5lIHZvaWQqIFNwYW5Ub01hbGxvY1Jl
c3VsdChTCiAjaWZkZWYgV1RGX0NIQU5HRVMKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJl
PgogI2VuZGlmCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkKiBkb19tYWxsb2Moc2l6ZV90IHNp
emUpIHsKLSAgdm9pZCogcmV0ID0gTlVMTDsKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQqIGRv
TWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHZvaWQqIHJldCA9IDA7CiAKICNpZmRlZiBXVEZf
Q0hBTkdFUwogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4oKSk7CiAjZW5kaWYKIAotICAvLyBUaGUg
Zm9sbG93aW5nIGNhbGwgZm9yY2VzIG1vZHVsZSBpbml0aWFsaXphdGlvbgotICBUQ01hbGxvY19U
aHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOworICAg
IC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBmb3JjZXMgbW9kdWxlIGluaXRpYWxpemF0aW9uCisgICAg
VENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hl
KCk7CiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gIGlmICgoRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3Bh
cmFtZXRlciA+IDApICYmIGhlYXAtPlNhbXBsZUFsbG9jYXRpb24oc2l6ZSkpIHsKLSAgICBTcGFu
KiBzcGFuID0gRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplKTsKLSAgICBpZiAoc3BhbiAhPSBOVUxM
KSB7Ci0gICAgICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7Ci0gICAgfQotICB9IGVs
c2UKLSNlbmRpZgotICBpZiAoc2l6ZSA+IGtNYXhTaXplKSB7Ci0gICAgLy8gVXNlIHBhZ2UtbGV2
ZWwgYWxsb2NhdG9yCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAg
U3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOwotICAgIGlmIChzcGFuICE9
IE5VTEwpIHsKLSAgICAgIHJldCA9IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKLSAgICB9Ci0g
IH0gZWxzZSB7Ci0gICAgLy8gVGhlIGNvbW1vbiBjYXNlLCBhbmQgYWxzbyB0aGUgc2ltcGxlc3Qu
ICBUaGlzIGp1c3QgcG9wcyB0aGUKLSAgICAvLyBzaXplLWFwcHJvcHJpYXRlIGZyZWVsaXN0LCBh
ZmVyIHJlcGxlbmlzaGluZyBpdCBpZiBpdCdzIGVtcHR5LgotICAgIHJldCA9IENoZWNrZWRNYWxs
b2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoc2l6ZSkpOwotICB9Ci0gIGlmICghcmV0KSB7CisgICAg
aWYgKChGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyID4gMCkgJiYgaGVhcC0+U2FtcGxl
QWxsb2NhdGlvbihzaXplKSkgeworICAgICAgICBTcGFuKiBzcGFuID0gRG9TYW1wbGVkQWxsb2Nh
dGlvbihzaXplKTsKKyAgICAgICAgaWYgKHNwYW4pCisgICAgICAgICAgICByZXQgPSBTcGFuVG9N
YWxsb2NSZXN1bHQoc3Bhbik7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICBpZiAoc2l6ZSA+IGtN
YXhTaXplKSB7CisgICAgICAgIC8vIFVzZSBwYWdlLWxldmVsIGFsbG9jYXRvcgorICAgICAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICBTcGFuKiBzcGFuID0gcGFn
ZWhlYXAtPk5ldyhwYWdlcyhzaXplKSk7CisgICAgICAgIGlmIChzcGFuKQorICAgICAgICAgICAg
cmV0ID0gU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAgIH0gZWxzZQorICAgICAgICAvLyBU
aGUgY29tbW9uIGNhc2UsIGFuZCBhbHNvIHRoZSBzaW1wbGVzdC4gVGhpcyBqdXN0IHBvcHMgdGhl
CisgICAgICAgIC8vIHNpemUtYXBwcm9wcmlhdGUgZnJlZWxpc3QsIGFmZXIgcmVwbGVuaXNoaW5n
IGl0IGlmIGl0J3MgZW1wdHkuCisgICAgICAgIHJldCA9IENoZWNrZWRNYWxsb2NSZXN1bHQoaGVh
cC0+QWxsb2NhdGUoc2l6ZSkpOworICAgIGlmICghcmV0KQogI2lmZGVmIFdURl9DSEFOR0VTCi0g
ICAgaWYgKGNyYXNoT25GYWlsdXJlKSAvLyBUaGlzIGJyYW5jaCBzaG91bGQgYmUgb3B0aW1pemVk
IG91dCBieSB0aGUgY29tcGlsZXIuCi0gICAgICAgIENSQVNIKCk7CisgICAgICAgIGlmIChjcmFz
aE9uRmFpbHVyZSkgLy8gVGhpcyBicmFuY2ggc2hvdWxkIGJlIG9wdGltaXplZCBvdXQgYnkgdGhl
IGNvbXBpbGVyLgorICAgICAgICAgICAgQ1JBU0goKTsKICNlbHNlCi0gICAgZXJybm8gPSBFTk9N
RU07CisgICAgICAgIGVycm5vID0gRU5PTUVNOwogI2VuZGlmCi0gIH0KLSAgcmV0dXJuIHJldDsK
KyAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvX2ZyZWUo
dm9pZCogcHRyKSB7CitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvRnJlZSh2b2lkKiBwdHIp
Cit7CiAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuOwogICBBU1NFUlQocGFnZWhlYXAgIT0gTlVM
TCk7ICAvLyBTaG91bGQgbm90IGNhbGwgZnJlZSgpIGJlZm9yZSBtYWxsb2MoKQogICBjb25zdCBQ
YWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7
CkBAIC0zNzAzLDIxICszODEwLDIxIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZG9fZnJl
ZSh2b2lkKgogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCiAgICAgQVNTRVJUKCFwYWdlaGVh
cC0+R2V0RGVzY3JpcHRvcihwKS0+c2FtcGxlKTsKICNlbmRpZgotICAgIFRDTWFsbG9jX1RocmVh
ZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCk7
CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6Okdl
dENhY2hlSWZQcmVzZW50KCk7CiAgICAgaWYgKGhlYXAgIT0gTlVMTCkgewogICAgICAgaGVhcC0+
RGVhbGxvY2F0ZShwdHIsIGNsKTsKICAgICB9IGVsc2UgewogICAgICAgLy8gRGVsZXRlIGRpcmVj
dGx5IGludG8gY2VudHJhbCBjYWNoZQotICAgICAgU0xMX1NldE5leHQocHRyLCBOVUxMKTsKLSAg
ICAgIGNlbnRyYWxfY2FjaGVbY2xdLkluc2VydFJhbmdlKHB0ciwgcHRyLCAxKTsKKyAgICAgIFNM
TFNldE5leHQocHRyLCAwKTsKKyAgICAgIGNlbnRyYWxDYWNoZVtjbF0uSW5zZXJ0UmFuZ2UocHRy
LCBwdHIsIDEpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogICAgIEFT
U0VSVChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSAlIGtQYWdlU2l6ZSA9PSAwKTsK
ICAgICBBU1NFUlQoc3BhbiAhPSBOVUxMICYmIHNwYW4tPnN0YXJ0ID09IHApOwogI2lmbmRlZiBO
T19UQ01BTExPQ19TQU1QTEVTCiAgICAgaWYgKHNwYW4tPnNhbXBsZSkgewotICAgICAgRExMX1Jl
bW92ZShzcGFuKTsKKyAgICAgIERMTFJlbW92ZShzcGFuKTsKICAgICAgIHN0YWNrdHJhY2VfYWxs
b2NhdG9yLkRlbGV0ZShyZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzcGFuLT5vYmplY3Rz
KSk7CiAgICAgICBzcGFuLT5vYmplY3RzID0gTlVMTDsKICAgICB9CkBAIC0zNzMxLDEwOCArMzgz
OCwxMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkb19mcmVlKHZvaWQqCiAvLwogLy8g
Tm90ZTogdGhpcyBjb2RlIGNhbiBiZSBzbG93LCBhbmQgY2FuIHNpZ25pZmljYW50bHkgZnJhZ21l
bnQgbWVtb3J5LgogLy8gVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgbWVtYWxpZ24vcG9zaXhfbWVt
YWxpZ24vdmFsbG9jL3B2YWxsb2Mgd2lsbAotLy8gbm90IGJlIGludm9rZWQgdmVyeSBvZnRlbi4g
IFRoaXMgcmVxdWlyZW1lbnQgc2ltcGxpZmllcyBvdXIKKy8vIG5vdCBiZSBpbnZva2VkIHZlcnkg
b2Z0ZW4uIFRoaXMgcmVxdWlyZW1lbnQgc2ltcGxpZmllcyBvdXIKIC8vIGltcGxlbWVudGF0aW9u
IGFuZCBhbGxvd3MgdXMgdG8gdHVuZSBmb3IgZXhwZWN0ZWQgYWxsb2NhdGlvbgogLy8gcGF0dGVy
bnMuCi1zdGF0aWMgdm9pZCogZG9fbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkg
ewotICBBU1NFUlQoKGFsaWduICYgKGFsaWduIC0gMSkpID09IDApOwotICBBU1NFUlQoYWxpZ24g
PiAwKTsKLSAgaWYgKHBhZ2VoZWFwID09IE5VTEwpIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0
TW9kdWxlKCk7Ci0KLSAgLy8gQWxsb2NhdGUgYXQgbGVhc3Qgb25lIGJ5dGUgdG8gYXZvaWQgYm91
bmRhcnkgY29uZGl0aW9ucyBiZWxvdwotICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gMTsKLQotICBp
ZiAoc2l6ZSA8PSBrTWF4U2l6ZSAmJiBhbGlnbiA8IGtQYWdlU2l6ZSkgewotICAgIC8vIFNlYXJj
aCB0aHJvdWdoIGFjY2VwdGFibGUgc2l6ZSBjbGFzc2VzIGxvb2tpbmcgZm9yIG9uZSB3aXRoCi0g
ICAgLy8gZW5vdWdoIGFsaWdubWVudC4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0Ci0g
ICAgLy8gSW5pdFNpemVDbGFzc2VzKCkgY3VycmVudGx5IHByb2R1Y2VzIHNldmVyYWwgc2l6ZSBj
bGFzc2VzIHRoYXQKLSAgICAvLyBhcmUgYWxpZ25lZCBhdCBwb3dlcnMgb2YgdHdvLiAgV2Ugd2ls
bCB3YXN0ZSB0aW1lIGFuZCBzcGFjZSBpZgotICAgIC8vIHdlIG1pc3MgaW4gdGhlIHNpemUgY2xh
c3MgYXJyYXksIGJ1dCB0aGF0IGlzIGRlZW1lZCBhY2NlcHRhYmxlCi0gICAgLy8gc2luY2UgbWVt
YWxpZ24oKSBzaG91bGQgYmUgdXNlZCByYXJlbHkuCi0gICAgc2l6ZV90IGNsID0gU2l6ZUNsYXNz
KHNpemUpOwotICAgIHdoaWxlIChjbCA8IGtOdW1DbGFzc2VzICYmICgoY2xhc3NfdG9fc2l6ZVtj
bF0gJiAoYWxpZ24gLSAxKSkgIT0gMCkpIHsKLSAgICAgIGNsKys7Ci0gICAgfQotICAgIGlmIChj
bCA8IGtOdW1DbGFzc2VzKSB7Ci0gICAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCA9IFRD
TWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOwotICAgICAgcmV0dXJuIENoZWNrZWRNYWxs
b2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoY2xhc3NfdG9fc2l6ZVtjbF0pKTsKK3N0YXRpYyB2b2lk
KiBkb01lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKCEo
YWxpZ24gJiAoYWxpZ24gLSAxKSkpOworICAgIEFTU0VSVChhbGlnbiA+IDApOworICAgIGlmICgh
cGFnZWhlYXApCisgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUoKTsKKwor
ICAgIC8vIEFsbG9jYXRlIGF0IGxlYXN0IG9uZSBieXRlIHRvIGF2b2lkIGJvdW5kYXJ5IGNvbmRp
dGlvbnMgYmVsb3cKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHNpemUgPSAxOworCisgICAgaWYg
KHNpemUgPD0ga01heFNpemUgJiYgYWxpZ24gPCBrUGFnZVNpemUpIHsKKyAgICAgICAgLy8gU2Vh
cmNoIHRocm91Z2ggYWNjZXB0YWJsZSBzaXplIGNsYXNzZXMgbG9va2luZyBmb3Igb25lIHdpdGgK
KyAgICAgICAgLy8gZW5vdWdoIGFsaWdubWVudC4gVGhpcyBkZXBlbmRzIG9uIHRoZSBmYWN0IHRo
YXQKKyAgICAgICAgLy8gSW5pdFNpemVDbGFzc2VzKCkgY3VycmVudGx5IHByb2R1Y2VzIHNldmVy
YWwgc2l6ZSBjbGFzc2VzIHRoYXQKKyAgICAgICAgLy8gYXJlIGFsaWduZWQgYXQgcG93ZXJzIG9m
IHR3by4gV2Ugd2lsbCB3YXN0ZSB0aW1lIGFuZCBzcGFjZSBpZgorICAgICAgICAvLyB3ZSBtaXNz
IGluIHRoZSBzaXplIGNsYXNzIGFycmF5LCBidXQgdGhhdCBpcyBkZWVtZWQgYWNjZXB0YWJsZQor
ICAgICAgICAvLyBzaW5jZSBtZW1hbGlnbigpIHNob3VsZCBiZSB1c2VkIHJhcmVseS4KKyAgICAg
ICAgc2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOworICAgICAgICB3aGlsZSAoY2wgPCBrTnVt
Q2xhc3NlcyAmJiAoY2xhc3NUb3NpemVbY2xdICYgKGFsaWduIC0gMSkpKQorICAgICAgICBjbCsr
OworICAgICAgICBpZiAoY2wgPCBrTnVtQ2xhc3NlcykgeworICAgICAgICAgICAgVENNYWxsb2NU
aHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CisgICAg
ICAgICAgICByZXR1cm4gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShjbGFzc1Rv
c2l6ZVtjbF0pKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIC8vIFdlIHdpbGwgYWxsb2Nh
dGUgZGlyZWN0bHkgZnJvbSB0aGUgcGFnZSBoZWFwCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOworICAgIC8vIFdlIHdpbGwgYWxsb2NhdGUgZGlyZWN0bHkgZnJvbSB0aGUgcGFn
ZSBoZWFwCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKIAotICBpZiAoYWxp
Z24gPD0ga1BhZ2VTaXplKSB7Ci0gICAgLy8gQW55IHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiB3aWxs
IGJlIGZpbmUKLSAgICAvLyBUT0RPOiBXZSBjb3VsZCBwdXQgdGhlIHJlc3Qgb2YgdGhpcyBwYWdl
IGluIHRoZSBhcHByb3ByaWF0ZQotICAgIC8vIFRPRE86IGNhY2hlIGJ1dCBpdCBkb2VzIG5vdCBz
ZWVtIHdvcnRoIGl0LgotICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNpemUp
KTsKLSAgICByZXR1cm4gc3BhbiA9PSBOVUxMID8gTlVMTCA6IFNwYW5Ub01hbGxvY1Jlc3VsdChz
cGFuKTsKLSAgfQorICAgIGlmIChhbGlnbiA8PSBrUGFnZVNpemUpIHsKKyAgICAgICAgLy8gQW55
IHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiB3aWxsIGJlIGZpbmUKKyAgICAgICAgLy8gVE9ETzogV2Ug
Y291bGQgcHV0IHRoZSByZXN0IG9mIHRoaXMgcGFnZSBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgLy8gVE9ETzogY2FjaGUgYnV0IGl0IGRvZXMgbm90IHNlZW0gd29ydGggaXQuCisgICAgICAg
IFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNpemUpKTsKKyAgICAgICAgcmV0dXJu
ICFzcGFuID8gMCA6IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKKyAgICB9CiAKLSAgLy8gQWxs
b2NhdGUgZXh0cmEgcGFnZXMgYW5kIGNhcnZlIG9mZiBhbiBhbGlnbmVkIHBvcnRpb24KLSAgY29u
c3QgTGVuZ3RoIGFsbG9jID0gcGFnZXMoc2l6ZSArIGFsaWduKTsKLSAgU3Bhbiogc3BhbiA9IHBh
Z2VoZWFwLT5OZXcoYWxsb2MpOwotICBpZiAoc3BhbiA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQot
ICAvLyBTa2lwIHN0YXJ0aW5nIHBvcnRpb24gc28gdGhhdCB3ZSBlbmQgdXAgYWxpZ25lZAotICBM
ZW5ndGggc2tpcCA9IDA7Ci0gIHdoaWxlICgoKChzcGFuLT5zdGFydCtza2lwKSA8PCBrUGFnZVNo
aWZ0KSAmIChhbGlnbiAtIDEpKSAhPSAwKSB7Ci0gICAgc2tpcCsrOwotICB9Ci0gIEFTU0VSVChz
a2lwIDwgYWxsb2MpOwotICBpZiAoc2tpcCA+IDApIHsKLSAgICBTcGFuKiByZXN0ID0gcGFnZWhl
YXAtPlNwbGl0KHNwYW4sIHNraXApOwotICAgIHBhZ2VoZWFwLT5EZWxldGUoc3Bhbik7Ci0gICAg
c3BhbiA9IHJlc3Q7Ci0gIH0KKyAgICAvLyBBbGxvY2F0ZSBleHRyYSBwYWdlcyBhbmQgY2FydmUg
b2ZmIGFuIGFsaWduZWQgcG9ydGlvbgorICAgIGNvbnN0IExlbmd0aCBhbGxvYyA9IHBhZ2VzKHNp
emUgKyBhbGlnbik7CisgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcoYWxsb2MpOworICAg
IGlmICghc3BhbikKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgLy8gU2tpcCB0cmFpbGluZyBwb3J0
aW9uIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gcmV0dXJuCi0gIGNvbnN0IExlbmd0aCBuZWVkZWQg
PSBwYWdlcyhzaXplKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+PSBuZWVkZWQpOwotICBpZiAo
c3Bhbi0+bGVuZ3RoID4gbmVlZGVkKSB7Ci0gICAgU3BhbiogdHJhaWxlciA9IHBhZ2VoZWFwLT5T
cGxpdChzcGFuLCBuZWVkZWQpOwotICAgIHBhZ2VoZWFwLT5EZWxldGUodHJhaWxlcik7Ci0gIH0K
LSAgcmV0dXJuIFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKKyAgICAvLyBTa2lwIHN0YXJ0aW5n
IHBvcnRpb24gc28gdGhhdCB3ZSBlbmQgdXAgYWxpZ25lZAorICAgIExlbmd0aCBza2lwID0gMDsK
KyAgICB3aGlsZSAoKChzcGFuLT5zdGFydCtza2lwKSA8PCBrUGFnZVNoaWZ0KSAmIChhbGlnbiAt
IDEpKQorICAgICAgICBza2lwKys7CisgICAgQVNTRVJUKHNraXAgPCBhbGxvYyk7CisgICAgaWYg
KHNraXAgPiAwKSB7CisgICAgICAgIFNwYW4qIHJlc3QgPSBwYWdlaGVhcC0+U3BsaXQoc3Bhbiwg
c2tpcCk7CisgICAgICAgIHBhZ2VoZWFwLT5EZWxldGUoc3Bhbik7CisgICAgICAgIHNwYW4gPSBy
ZXN0OworICAgIH0KKworICAgIC8vIFNraXAgdHJhaWxpbmcgcG9ydGlvbiB0aGF0IHdlIGRvIG5v
dCBuZWVkIHRvIHJldHVybgorICAgIGNvbnN0IExlbmd0aCBuZWVkZWQgPSBwYWdlcyhzaXplKTsK
KyAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID49IG5lZWRlZCk7CisgICAgaWYgKHNwYW4tPmxlbmd0
aCA+IG5lZWRlZCkgeworICAgICAgICBTcGFuKiB0cmFpbGVyID0gcGFnZWhlYXAtPlNwbGl0KHNw
YW4sIG5lZWRlZCk7CisgICAgICAgIHBhZ2VoZWFwLT5EZWxldGUodHJhaWxlcik7CisgICAgfQor
ICAgIHJldHVybiBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7CiB9CiAjZW5kaWYKIAogLy8gSGVs
cGVycyBmb3IgdXNlIGJ5IGV4cG9ydGVkIHJvdXRpbmVzIGJlbG93OgogCiAjaWZuZGVmIFdURl9D
SEFOR0VTCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9fbWFsbG9jX3N0YXRzKCkgewotICBQcmludFN0
YXRzKDEpOworc3RhdGljIGlubGluZSB2b2lkIGRvTWFsbG9jU3RhdHMoKQoreworICAgIFByaW50
U3RhdHMoMSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBpbnQgZG9fbWFsbG9wdChpbnQs
IGludCkgewotICByZXR1cm4gMTsgICAgIC8vIEluZGljYXRlcyBlcnJvcgorc3RhdGljIGlubGlu
ZSBpbnQgZG9NYWxsb3B0KGludCwgaW50KQoreworICAgIHJldHVybiAxOyAvLyBJbmRpY2F0ZXMg
ZXJyb3IKIH0KIAotI2lmZGVmIEhBVkVfU1RSVUNUX01BTExJTkZPICAvLyBtYWxsaW5mbyBpc24n
dCBkZWZpbmVkIG9uIGZyZWVic2QsIGZvciBpbnN0YW5jZQotc3RhdGljIGlubGluZSBzdHJ1Y3Qg
bWFsbGluZm8gZG9fbWFsbGluZm8oKSB7Ci0gIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gIEV4dHJh
Y3RTdGF0cygmc3RhdHMsIE5VTEwpOwotCi0gIC8vIEp1c3Qgc29tZSBvZiB0aGUgZmllbGRzIGFy
ZSBmaWxsZWQgaW4uCi0gIHN0cnVjdCBtYWxsaW5mbyBpbmZvOwotICBtZW1zZXQoJmluZm8sIDAs
IHNpemVvZihpbmZvKSk7Ci0KLSAgLy8gVW5mb3J0dW5hdGVseSwgdGhlIHN0cnVjdCBjb250YWlu
cyAiaW50IiBmaWVsZCwgc28gc29tZSBvZiB0aGUKLSAgLy8gc2l6ZSB2YWx1ZXMgd2lsbCBiZSB0
cnVuY2F0ZWQuCi0gIGluZm8uYXJlbmEgICAgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0
ZW1fYnl0ZXMpOwotICBpbmZvLmZzbWJsa3MgICA9IHN0YXRpY19jYXN0PGludD4oc3RhdHMudGhy
ZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0YXRzLmNl
bnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHMu
dHJhbnNmZXJfYnl0ZXMpOwotICBpbmZvLmZvcmRibGtzICA9IHN0YXRpY19jYXN0PGludD4oc3Rh
dHMucGFnZWhlYXBfYnl0ZXMpOwotICBpbmZvLnVvcmRibGtzICA9IHN0YXRpY19jYXN0PGludD4o
c3RhdHMuc3lzdGVtX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
IHN0YXRzLnRocmVhZF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LSBzdGF0cy5jZW50cmFsX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzKTsKKyNpZmRlZiBIQVZFX1NUUlVDVF9NQUxMSU5G
TyAvLyBtYWxsaW5mbyBpc24ndCBkZWZpbmVkIG9uIGZyZWVic2QsIGZvciBpbnN0YW5jZQorc3Rh
dGljIGlubGluZSBzdHJ1Y3QgbWFsbGluZm8gZG9NYWxsaW5mbygpCit7CisgICAgVENNYWxsb2NT
dGF0cyBzdGF0czsKKyAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKworICAgIC8vIEp1c3Qg
c29tZSBvZiB0aGUgZmllbGRzIGFyZSBmaWxsZWQgaW4uCisgICAgc3RydWN0IG1hbGxpbmZvIGlu
Zm87CisgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwogCi0gIHJldHVybiBpbmZv
OworICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZSBzdHJ1Y3QgY29udGFpbnMgImludCIgZmllbGQs
IHNvIHNvbWUgb2YgdGhlCisgICAgLy8gc2l6ZSB2YWx1ZXMgd2lsbCBiZSB0cnVuY2F0ZWQuCisg
ICAgaW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnN5c3RlbUJ5dGVzKTsK
KyAgICBpbmZvLmZzbWJsa3MgICA9IHN0YXRpY19jYXN0PGludD4oc3RhdHMudGhyZWFkQnl0ZXMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHMuY2VudHJhbEJ5dGVz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0YXRzLnRyYW5zZmVyQnl0
ZXMpOworICAgIGluZm8uZm9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5wYWdlaGVh
cEJ5dGVzKTsKKyAgICBpbmZvLnVvcmRibGtzICA9IHN0YXRpY19jYXN0PGludD4oc3RhdHMuc3lz
dGVtQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhy
ZWFkQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2Vu
dHJhbEJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRy
YW5zZmVyQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMu
cGFnZWhlYXBCeXRlcyk7CisKKyAgICByZXR1cm4gaW5mbzsKIH0KICNlbmRpZgogCkBAIC0zODQ4
LDcgKzM5NjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYWxsaW5mbyBkb19tYWxsaW5mCiAj
aWZuZGVmIFdURl9DSEFOR0VTCiBleHRlcm4gIkMiIAogI2Vsc2UKLSNkZWZpbmUgZG9fbWFsbG9j
IGRvX21hbGxvYzxjcmFzaE9uRmFpbHVyZT4KKyNkZWZpbmUgZG9NYWxsb2MgZG9NYWxsb2M8Y3Jh
c2hPbkZhaWx1cmU+CiAKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lO
TElORSB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKQEAgLTM4NzAsMTkgKzM5ODIsMTkgQEAgdm9pZCog
bWFsbG9jKHNpemVfdCBzaXplKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikK
ICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVybmFsOjpW
YWxpZGF0aW9uQnVmZmVyU2l6ZSA8PSBzaXplKSAgLy8gSWYgb3ZlcmZsb3cgd291bGQgb2NjdXIu
Li4KICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKHNpemUg
KyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IGRv
TWFsbG9jKHNpemUgKyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVh
ZGVyKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KHJl
c3VsdCk7Ci0gICAgaGVhZGVyLT5tX3NpemUgPSBzaXplOworICAgIGhlYWRlci0+bXNpemUgPSBz
aXplOwogICAgIGhlYWRlci0+bV90eXBlID0gSW50ZXJuYWw6OkFsbG9jVHlwZU1hbGxvYzsKICAg
ICBoZWFkZXItPm1fcHJlZml4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEludGVybmFsOjpWYWxp
ZGF0aW9uUHJlZml4KTsKICAgICByZXN1bHQgPSBoZWFkZXIgKyAxOwogICAgICpJbnRlcm5hbDo6
ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgocmVzdWx0KSA9IEludGVybmFsOjpWYWxpZGF0aW9u
U3VmZml4OwogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2Vsc2UKLSAgICB2b2lk
KiByZXN1bHQgPSBkb19tYWxsb2Moc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gZG9NYWxsb2Mo
c2l6ZSk7CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwpAQCAtMzkwNSwxMCArNDAxNywx
MCBAQCB2b2lkIGZyZWUodm9pZCogcHRyKSB7CiAKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocHRy
KTsKICAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlciogaGVhZGVyID0gSW50ZXJuYWw6OmZh
c3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKHB0cik7Ci0gICAgbWVtc2V0KHB0ciwgMHhDQywgaGVh
ZGVyLT5tX3NpemUpOwotICAgIGRvX2ZyZWUoaGVhZGVyKTsKKyAgICBtZW1zZXQocHRyLCAweEND
LCBoZWFkZXItPm1zaXplKTsKKyAgICBkb0ZyZWUoaGVhZGVyKTsKICNlbHNlCi0gICAgZG9fZnJl
ZShwdHIpOworICAgIGRvRnJlZShwdHIpOwogI2VuZGlmCiB9CiAKQEAgLTM5MTgsMTggKzQwMzAs
MTggQEAgZXh0ZXJuICJDIgogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAKLXZvaWQqIGZhc3RDYWxsb2Mo
c2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCit2b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuLCBz
aXplX3QgZWxlbXNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jPHRydWU+KG4sIGVs
ZW1fc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jPHRydWU+KG4sIGVsZW1zaXplKTsK
ICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0
ZShyZXN1bHQpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVHJ5TWFsbG9jUmV0
dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkKK1RyeU1h
bGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtc2l6ZSkK
IHsKLSAgICB2b2lkKiByZXN1bHQgPSBjYWxsb2M8ZmFsc2U+KG4sIGVsZW1fc2l6ZSk7CisgICAg
dm9pZCogcmVzdWx0ID0gY2FsbG9jPGZhbHNlPihuLCBlbGVtc2l6ZSk7CiAjaWYgRU5BQkxFKFdU
Rl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICNl
bmRpZgpAQCAtMzkzOSwxMiArNDA1MSwxMyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0
Q2FsbG9jKHNpemVfCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KIEFMV0FZU19JTkxJ
TkUKICNlbmRpZgotdm9pZCogY2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbV9zaXplKSB7Ci0g
IHNpemVfdCB0b3RhbEJ5dGVzID0gbiAqIGVsZW1fc2l6ZTsKK3ZvaWQqIGNhbGxvYyhzaXplX3Qg
biwgc2l6ZV90IGVsZW1zaXplKQoreworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gbiAqIGVsZW1z
aXplOwogICAgIAotICAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZsb3cKLSAgaWYgKG4gPiAxICYm
IGVsZW1fc2l6ZSAmJiAodG90YWxCeXRlcyAvIGVsZW1fc2l6ZSkgIT0gbikKLSAgICByZXR1cm4g
MDsKKyAgICAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZsb3cKKyAgICBpZiAobiA+IDEgJiYgZWxl
bXNpemUgJiYgKHRvdGFsQnl0ZXMgLyBlbGVtc2l6ZSkgIT0gbikKKyAgICAgICAgcmV0dXJuIDA7
CiAKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIHZvaWQqIHJlc3VsdCA9
IG1hbGxvYzxjcmFzaE9uRmFpbHVyZT4odG90YWxCeXRlcyk7CkBAIC0zOTU0LDE2ICs0MDY3LDE1
IEBAIHZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkKICAgICBtZW1zZXQo
cmVzdWx0LCAwLCB0b3RhbEJ5dGVzKTsKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsK
ICNlbHNlCi0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKHRvdGFsQnl0ZXMpOwotICAgIGlm
IChyZXN1bHQgIT0gTlVMTCkgeworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWFsbG9jKHRvdGFsQnl0
ZXMpOworICAgIGlmIChyZXN1bHQpCiAgICAgICAgIG1lbXNldChyZXN1bHQsIDAsIHRvdGFsQnl0
ZXMpOwotICAgIH0KICNlbmRpZgogCiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gIE1hbGxvY0hvb2s6
Okludm9rZU5ld0hvb2socmVzdWx0LCB0b3RhbEJ5dGVzKTsKKyAgICBNYWxsb2NIb29rOjpJbnZv
a2VOZXdIb29rKHJlc3VsdCwgdG90YWxCeXRlcyk7CiAjZW5kaWYKLSAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBTaW5jZSBjZnJlZSBpc24ndCB1c2VkIGFueXdo
ZXJlLCB3ZSBkb24ndCBjb21waWxlIGl0IGluLgpAQCAtMzk3NSw3ICs0MDg3LDcgQEAgdm9pZCBj
ZnJlZSh2b2lkKiBwdHIpIHsKICNpZm5kZWYgV1RGX0NIQU5HRVMKICAgICBNYWxsb2NIb29rOjpJ
bnZva2VEZWxldGVIb29rKHB0cik7CiAjZW5kaWYKLSAgZG9fZnJlZShwdHIpOworICAgIGRvRnJl
ZShwdHIpOwogfQogI2VuZGlmCiAKQEAgLTM5ODUsMjQgKzQwOTcsMjQgQEAgZXh0ZXJuICJDIgog
dGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5FIHZvaWQqIHJlYWxs
b2Modm9pZCosIHNpemVfdCk7CiAKLXZvaWQqIGZhc3RSZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNp
emVfdCBuZXdfc2l6ZSkKK3ZvaWQqIGZhc3RSZWFsbG9jKHZvaWQqIG9sZHB0ciwgc2l6ZV90IG5l
d1NpemUpCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBmYXN0TWFs
bG9jVmFsaWRhdGUob2xkX3B0cik7CisgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKG9sZHB0cik7CiAj
ZW5kaWYKLSAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPHRydWU+KG9sZF9wdHIsIG5ld19zaXpl
KTsKKyAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPHRydWU+KG9sZHB0ciwgbmV3U2l6ZSk7CiAj
aWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUo
cmVzdWx0KTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRyeU1hbGxvY1JldHVy
blZhbHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBuZXdfc2l6ZSkKK1Ry
eU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQqIG9sZHB0ciwgc2l6ZV90IG5l
d1NpemUpCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBmYXN0TWFs
bG9jVmFsaWRhdGUob2xkX3B0cik7CisgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKG9sZHB0cik7CiAj
ZW5kaWYKLSAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPGZhbHNlPihvbGRfcHRyLCBuZXdfc2l6
ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzxmYWxzZT4ob2xkcHRyLCBuZXdTaXplKTsK
ICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0
ZShyZXN1bHQpOwogI2VuZGlmCkBAIC00MDEyLDEwOSArNDEyNCwxMDggQEAgVHJ5TWFsbG9jUmV0
dXJuVmFsdWUgdHJ5RmFzdFJlYWxsb2Modm9pZAogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1
cmU+CiBBTFdBWVNfSU5MSU5FCiAjZW5kaWYKLXZvaWQqIHJlYWxsb2Modm9pZCogb2xkX3B0ciwg
c2l6ZV90IG5ld19zaXplKSB7Ci0gIGlmIChvbGRfcHRyID09IE5VTEwpIHsKK3ZvaWQqIHJlYWxs
b2Modm9pZCogb2xkcHRyLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBpZiAoIW9sZHB0cikgewog
I2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgdm9pZCogcmVzdWx0ID0gbWFs
bG9jPGNyYXNoT25GYWlsdXJlPihuZXdfc2l6ZSk7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1h
bGxvYzxjcmFzaE9uRmFpbHVyZT4obmV3U2l6ZSk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9
IGRvX21hbGxvYyhuZXdfc2l6ZSk7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGRvTWFsbG9jKG5l
d1NpemUpOwogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hv
b2socmVzdWx0LCBuZXdfc2l6ZSk7CisgICAgICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2so
cmVzdWx0LCBuZXdTaXplKTsKICNlbmRpZgogI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
fQotICBpZiAobmV3X3NpemUgPT0gMCkgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICBpZiAoIW5ld1NpemUpIHsKICNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29r
OjpJbnZva2VEZWxldGVIb29rKG9sZF9wdHIpOworICAgICAgICBNYWxsb2NIb29rOjpJbnZva2VE
ZWxldGVIb29rKG9sZHB0cik7CiAjZW5kaWYKLSAgICBmcmVlKG9sZF9wdHIpOwotICAgIHJldHVy
biBOVUxMOwotICB9CisgICAgICAgIGZyZWUob2xkcHRyKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBpZiAoc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVybmFsOjpWYWxpZGF0aW9uQnVmZmVy
U2l6ZSA8PSBuZXdfc2l6ZSkgIC8vIElmIG92ZXJmbG93IHdvdWxkIG9jY3VyLi4uCisgICAgaWYg
KHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBJbnRlcm5hbDo6VmFsaWRhdGlv
bkJ1ZmZlclNpemUgPD0gbmV3U2l6ZSkgLy8gSWYgb3ZlcmZsb3cgd291bGQgb2NjdXIuLi4KICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgSW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqIGhlYWRlciA9
IEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihvbGRfcHRyKTsKLSAgICBmYXN0
TWFsbG9jVmFsaWRhdGUob2xkX3B0cik7Ci0gICAgb2xkX3B0ciA9IGhlYWRlcjsKLSAgICBoZWFk
ZXItPm1fc2l6ZSA9IG5ld19zaXplOwotICAgIG5ld19zaXplICs9IEludGVybmFsOjpWYWxpZGF0
aW9uQnVmZmVyU2l6ZTsKLSNlbmRpZgotCi0gIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2xkIGVu
dHJ5Ci0gIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9sZF9w
dHIpID4+IGtQYWdlU2hpZnQ7Ci0gIHNpemVfdCBjbCA9IHBhZ2VoZWFwLT5HZXRTaXplQ2xhc3NJ
ZkNhY2hlZChwKTsKLSAgU3BhbiAqc3BhbiA9IE5VTEw7Ci0gIHNpemVfdCBvbGRfc2l6ZTsKLSAg
aWYgKGNsID09IDApIHsKLSAgICBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3IocCk7Ci0g
ICAgY2wgPSBzcGFuLT5zaXplY2xhc3M7Ci0gICAgcGFnZWhlYXAtPkNhY2hlU2l6ZUNsYXNzKHAs
IGNsKTsKLSAgfQotICBpZiAoY2wgIT0gMCkgewotICAgIG9sZF9zaXplID0gQnl0ZVNpemVGb3JD
bGFzcyhjbCk7Ci0gIH0gZWxzZSB7Ci0gICAgQVNTRVJUKHNwYW4gIT0gTlVMTCk7Ci0gICAgb2xk
X3NpemUgPSBzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKLSAgfQotCi0gIC8vIFJlYWxsb2Nh
dGUgaWYgdGhlIG5ldyBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBvbGQgc2l6ZSwKLSAgLy8gb3Ig
aWYgdGhlIG5ldyBzaXplIGlzIHNpZ25pZmljYW50bHkgc21hbGxlciB0aGFuIHRoZSBvbGQgc2l6
ZS4KLSAgaWYgKChuZXdfc2l6ZSA+IG9sZF9zaXplKSB8fCAoQWxsb2NhdGlvblNpemUobmV3X3Np
emUpIDwgb2xkX3NpemUpKSB7Ci0gICAgLy8gTmVlZCB0byByZWFsbG9jYXRlCi0gICAgdm9pZCog
bmV3X3B0ciA9IGRvX21hbGxvYyhuZXdfc2l6ZSk7Ci0gICAgaWYgKG5ld19wdHIgPT0gTlVMTCkg
ewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVh
ZGVyKiBoZWFkZXIgPSBJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIob2xkcHRy
KTsKKyAgICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkcHRyKTsKKyAgICBvbGRwdHIgPSBoZWFkZXI7
CisgICAgaGVhZGVyLT5tc2l6ZSA9IG5ld1NpemU7CisgICAgbmV3U2l6ZSArPSBJbnRlcm5hbDo6
VmFsaWRhdGlvbkJ1ZmZlclNpemU7CisjZW5kaWYKKworICAgIC8vIEdldCB0aGUgc2l6ZSBvZiB0
aGUgb2xkIGVudHJ5CisgICAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ob2xkcHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIHNpemVfdCBjbCA9IHBhZ2VoZWFwLT5H
ZXRTaXplQ2xhc3NJZkNhY2hlZChwKTsKKyAgICBTcGFuKiBzcGFuID0gMDsKKyAgICBzaXplX3Qg
b2xkc2l6ZTsKKyAgICBpZiAoIWNsKSB7CisgICAgICAgIHNwYW4gPSBwYWdlaGVhcC0+R2V0RGVz
Y3JpcHRvcihwKTsKKyAgICAgICAgY2wgPSBzcGFuLT5zaXplY2xhc3M7CisgICAgICAgIHBhZ2Vo
ZWFwLT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7CisgICAgfQorICAgIGlmIChjbCkKKyAgICAgICAg
b2xkc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoc3Bhbik7CisgICAgICAgIG9sZHNpemUgPSBzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsK
KyAgICB9CisKKyAgICAvLyBSZWFsbG9jYXRlIGlmIHRoZSBuZXcgc2l6ZSBpcyBsYXJnZXIgdGhh
biB0aGUgb2xkIHNpemUsCisgICAgLy8gb3IgaWYgdGhlIG5ldyBzaXplIGlzIHNpZ25pZmljYW50
bHkgc21hbGxlciB0aGFuIHRoZSBvbGQgc2l6ZS4KKyAgICBpZiAoKG5ld1NpemUgPiBvbGRzaXpl
KSB8fCAoQWxsb2NhdGlvblNpemUobmV3U2l6ZSkgPCBvbGRzaXplKSkgeworICAgICAgICAvLyBO
ZWVkIHRvIHJlYWxsb2NhdGUKKyAgICAgICAgdm9pZCogbmV3cHRyID0gZG9NYWxsb2MobmV3U2l6
ZSk7CisgICAgICAgIGlmICghbmV3cHRyKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAjaWZuZGVm
IFdURl9DSEFOR0VTCi0gICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhuZXdfcHRyLCBuZXdf
c2l6ZSk7CisgICAgICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2sobmV3cHRyLCBuZXdTaXpl
KTsKICNlbmRpZgotICAgIG1lbWNweShuZXdfcHRyLCBvbGRfcHRyLCAoKG9sZF9zaXplIDwgbmV3
X3NpemUpID8gb2xkX3NpemUgOiBuZXdfc2l6ZSkpOworICAgICAgICBtZW1jcHkobmV3cHRyLCBv
bGRwdHIsICgob2xkc2l6ZSA8IG5ld1NpemUpID8gb2xkc2l6ZSA6IG5ld1NpemUpKTsKICNpZm5k
ZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZF9wdHIp
OworICAgICAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZHB0cik7CiAjZW5kaWYK
LSAgICAvLyBXZSBjb3VsZCB1c2UgYSB2YXJpYW50IG9mIGRvX2ZyZWUoKSB0aGF0IGxldmVyYWdl
cyB0aGUgZmFjdAotICAgIC8vIHRoYXQgd2UgYWxyZWFkeSBrbm93IHRoZSBzaXplY2xhc3Mgb2Yg
b2xkX3B0ci4gIFRoZSBiZW5lZml0Ci0gICAgLy8gd291bGQgYmUgc21hbGwsIHNvIGRvbid0IGJv
dGhlci4KLSAgICBkb19mcmVlKG9sZF9wdHIpOworICAgICAgICAvLyBXZSBjb3VsZCB1c2UgYSB2
YXJpYW50IG9mIGRvRnJlZSgpIHRoYXQgbGV2ZXJhZ2VzIHRoZSBmYWN0CisgICAgICAgIC8vIHRo
YXQgd2UgYWxyZWFkeSBrbm93IHRoZSBzaXplY2xhc3Mgb2Ygb2xkcHRyLiBUaGUgYmVuZWZpdAor
ICAgICAgICAvLyB3b3VsZCBiZSBzbWFsbCwgc28gZG9uJ3QgYm90aGVyLgorICAgICAgICBkb0Zy
ZWUob2xkcHRyKTsKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIG5ld19w
dHIgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KG5ld19wdHIpICsg
MTsKLSAgICAqSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uU3VmZml4KG5ld19wdHIpID0g
SW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CisgICAgICAgIG5ld3B0ciA9IHN0YXRpY19jYXN0
PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4obmV3cHRyKSArIDE7CisgICAgICAgICpJbnRl
cm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgobmV3cHRyKSA9IEludGVybmFsOjpWYWxp
ZGF0aW9uU3VmZml4OwogI2VuZGlmCi0gICAgcmV0dXJuIG5ld19wdHI7Ci0gIH0gZWxzZSB7Cisg
ICAgICAgIHJldHVybiBuZXdwdHI7CisgICAgfQogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElE
QVRJT04pCi0gICAgb2xkX3B0ciA9IHN0YXRpY19jYXN0PEludGVybmFsOjpWYWxpZGF0aW9uSGVh
ZGVyKj4ob2xkX3B0cikgKyAxOyAvLyBTZXQgb2xkX3B0ciBiYWNrIHRvIHRoZSB1c2VyIHBvaW50
ZXIuCi0gICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1ZmZpeChvbGRfcHRyKSA9
IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OworICAgIG9sZHB0ciA9IHN0YXRpY19jYXN0PElu
dGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4ob2xkcHRyKSArIDE7IC8vIFNldCBvbGRwdHIgYmFj
ayB0byB0aGUgdXNlciBwb2ludGVyLgorICAgICpJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRp
b25TdWZmaXgob2xkcHRyKSA9IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OwogI2VuZGlmCi0g
ICAgcmV0dXJuIG9sZF9wdHI7Ci0gIH0KKyAgICByZXR1cm4gb2xkcHRyOwogfQogCiAjaWZkZWYg
V1RGX0NIQU5HRVMKLSN1bmRlZiBkb19tYWxsb2MKKyN1bmRlZiBkb01hbGxvYwogI2Vsc2UKIAog
c3RhdGljIFNwaW5Mb2NrIHNldF9uZXdfaGFuZGxlcl9sb2NrID0gU1BJTkxPQ0tfSU5JVElBTEla
RVI7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCogY3BwX2FsbG9jKHNpemVfdCBzaXplLCBib29sIG5v
dGhyb3cpIHsKLSAgZm9yICg7OykgewotICAgIHZvaWQqIHAgPSBkb19tYWxsb2Moc2l6ZSk7Cisg
ICAgZm9yICg7OykgeworICAgICAgICB2b2lkKiBwID0gZG9NYWxsb2Moc2l6ZSk7CiAjaWZkZWYg
UFJFQU5TSU5FVwotICAgIHJldHVybiBwOworICAgICAgICByZXR1cm4gcDsKICNlbHNlCi0gICAg
aWYgKHAgPT0gTlVMTCkgeyAgLy8gYWxsb2NhdGlvbiBmYWlsZWQKLSAgICAgIC8vIEdldCB0aGUg
Y3VycmVudCBuZXcgaGFuZGxlci4gIE5COiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAotICAgICAgLy8g
dGhyZWFkLXNhZmUuICBXZSBtYWtlIGEgZmVlYmxlIHN0YWIgYXQgbWFraW5nIGl0IHNvIGhlcmUs
IGJ1dAotICAgICAgLy8gdGhpcyBsb2NrIG9ubHkgcHJvdGVjdHMgYWdhaW5zdCB0Y21hbGxvYyBp
bnRlcmZlcmluZyB3aXRoCi0gICAgICAvLyBpdHNlbGYsIG5vdCB3aXRoIG90aGVyIGxpYnJhcmll
cyBjYWxsaW5nIHNldF9uZXdfaGFuZGxlci4KLSAgICAgIHN0ZDo6bmV3X2hhbmRsZXIgbmg7Ci0g
ICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnNldF9uZXdfaGFuZGxlcl9sb2NrKTsK
LSAgICAgICAgbmggPSBzdGQ6OnNldF9uZXdfaGFuZGxlcigwKTsKLSAgICAgICAgKHZvaWQpIHN0
ZDo6c2V0X25ld19oYW5kbGVyKG5oKTsKLSAgICAgIH0KKyAgICAgICAgaWYgKCFwKSB7IC8vIGFs
bG9jYXRpb24gZmFpbGVkCisgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbmV3IGhhbmRs
ZXIuIE5COiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICAgICAgICAgICAgLy8gdGhyZWFkLXNhZmUu
IFdlIG1ha2UgYSBmZWVibGUgc3RhYiBhdCBtYWtpbmcgaXQgc28gaGVyZSwgYnV0CisgICAgICAg
ICAgICAvLyB0aGlzIGxvY2sgb25seSBwcm90ZWN0cyBhZ2FpbnN0IHRjbWFsbG9jIGludGVyZmVy
aW5nIHdpdGgKKyAgICAgICAgICAgIC8vIGl0c2VsZiwgbm90IHdpdGggb3RoZXIgbGlicmFyaWVz
IGNhbGxpbmcgc2V0X25ld19oYW5kbGVyLgorICAgICAgICAgICAgc3RkOjpuZXdfaGFuZGxlciBu
aDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZzZXRf
bmV3X2hhbmRsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgbmggPSBzdGQ6OnNldF9uZXdfaGFu
ZGxlcigwKTsKKyAgICAgICAgICAgICAgICAodm9pZCkgc3RkOjpzZXRfbmV3X2hhbmRsZXIobmgp
OworICAgICAgICAgICAgfQogICAgICAgLy8gSWYgbm8gbmV3X2hhbmRsZXIgaXMgZXN0YWJsaXNo
ZWQsIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4KICAgICAgIGlmICghbmgpIHsKICAgICAgICAgaWYg
KG5vdGhyb3cpIHJldHVybiAwOwpAQCAtNDEzMywxMjcgKzQyNDQsMTMwIEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCogY3BwX2FsbG9jKHNpemVfdCBzaXoKICAgICAgIHJldHVybiBwOwogICAgIH0KICNl
bmRpZgotICB9CisKKyAgICB9CiB9CiAKICNpZiBFTkFCTEUoR0xPQkFMX0ZBU1RNQUxMT0NfTkVX
KQogCiB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUpIHsKLSAgdm9pZCogcCA9IGNwcF9h
bGxvYyhzaXplLCBmYWxzZSk7Ci0gIC8vIFdlIGtlZXAgdGhpcyBuZXh0IGluc3RydWN0aW9uIG91
dCBvZiBjcHBfYWxsb2MgZm9yIGEgcmVhc29uOiB3aGVuCi0gIC8vIGl0J3MgaW4sIGFuZCBuZXcg
anVzdCBjYWxscyBjcHBfYWxsb2MsIHRoZSBvcHRpbWl6ZXIgbWF5IGZvbGQgdGhlCi0gIC8vIG5l
dyBjYWxsIGludG8gY3BwX2FsbG9jLCB3aGljaCBtZXNzZXMgdXAgb3VyIHdob2xlIHNlY3Rpb24t
YmFzZWQKLSAgLy8gc3RhY2t0cmFjaW5nIChzZWUgQVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4g
IFRoaXMgZW5zdXJlcyBjcHBfYWxsb2MKLSAgLy8gaXNuJ3QgdGhlIGxhc3QgdGhpbmcgdGhpcyBm
biBjYWxscywgYW5kIHByZXZlbnRzIHRoZSBmb2xkaW5nLgotICBNYWxsb2NIb29rOjpJbnZva2VO
ZXdIb29rKHAsIHNpemUpOwotICByZXR1cm4gcDsKKyAgICB2b2lkKiBwID0gY3BwX2FsbG9jKHNp
emUsIGZhbHNlKTsKKyAgICAvLyBXZSBrZWVwIHRoaXMgbmV4dCBpbnN0cnVjdGlvbiBvdXQgb2Yg
Y3BwX2FsbG9jIGZvciBhIHJlYXNvbjogd2hlbgorICAgIC8vIGl0J3MgaW4sIGFuZCBuZXcganVz
dCBjYWxscyBjcHBfYWxsb2MsIHRoZSBvcHRpbWl6ZXIgbWF5IGZvbGQgdGhlCisgICAgLy8gbmV3
IGNhbGwgaW50byBjcHBfYWxsb2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1i
YXNlZAorICAgIC8vIHN0YWNrdHJhY2luZyAoc2VlIEFUVFJJQlVURV9TRUNUSU9OLCBhYm92ZSku
IFRoaXMgZW5zdXJlcyBjcHBfYWxsb2MKKyAgICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlz
IGZuIGNhbGxzLCBhbmQgcHJldmVudHMgdGhlIGZvbGRpbmcuCisgICAgTWFsbG9jSG9vazo6SW52
b2tlTmV3SG9vayhwLCBzaXplKTsKKyAgICByZXR1cm4gcDsKIH0KIAogdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9fVEhST1cgewotICB2b2lk
KiBwID0gY3BwX2FsbG9jKHNpemUsIHRydWUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29r
KHAsIHNpemUpOwotICByZXR1cm4gcDsKKyAgICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIHRy
dWUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7CisgICAgcmV0dXJu
IHA7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIF9fVEhST1cgewotICBNYWxs
b2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOworICAgIE1hbGxvY0hv
b2s6Okludm9rZURlbGV0ZUhvb2socCk7CisgICAgZG9GcmVlKHApOwogfQogCiB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSh2b2lkKiBwLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9fVEhST1cgewotICBN
YWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOworICAgIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7CisgICAgZG9GcmVlKHApOwogfQogCiB2b2lkKiBv
cGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUs
IGZhbHNlKTsKLSAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9h
bGxvYyBmb3IgYSByZWFzb246IHdoZW4KLSAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxz
IGNwcF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKLSAgLy8gbmV3IGNhbGwgaW50
byBjcHBfYWxsb2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1iYXNlZAotICAv
LyBzdGFja3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiAgVGhpcyBlbnN1
cmVzIGNwcF9hbGxvYwotICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlzIGZuIGNhbGxzLCBh
bmQgcHJldmVudHMgdGhlIGZvbGRpbmcuCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwg
c2l6ZSk7Ci0gIHJldHVybiBwOworICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2Up
OworICAgIC8vIFdlIGtlZXAgdGhpcyBuZXh0IGluc3RydWN0aW9uIG91dCBvZiBjcHBfYWxsb2Mg
Zm9yIGEgcmVhc29uOiB3aGVuCisgICAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxzIGNw
cF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKKyAgICAvLyBuZXcgY2FsbCBpbnRv
IGNwcF9hbGxvYywgd2hpY2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCisgICAg
Ly8gc3RhY2t0cmFjaW5nIChzZWUgQVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4gVGhpcyBlbnN1
cmVzIGNwcF9hbGxvYworICAgIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMs
IGFuZCBwcmV2ZW50cyB0aGUgZm9sZGluZy4KKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29r
KHAsIHNpemUpOworICAgIHJldHVybiBwOwogfQogCiB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXpl
X3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgdm9pZCogcCA9IGNw
cF9hbGxvYyhzaXplLCB0cnVlKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXpl
KTsKLSAgcmV0dXJuIHA7CisgICAgdm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCB0cnVlKTsKKyAg
ICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOworICAgIHJldHVybiBwOwogfQog
CiB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHApIF9fVEhST1cgewotICBNYWxsb2NIb29r
OjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOworICAgIE1hbGxvY0hvb2s6Oklu
dm9rZURlbGV0ZUhvb2socCk7CisgICAgZG9GcmVlKHApOwogfQogCiB2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdKHZvaWQqIHAsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9v
azo6SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKICNlbmRpZgogCiBl
eHRlcm4gIkMiIHZvaWQqIG1lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpIF9fVEhS
T1cgewotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihhbGlnbiwgc2l6ZSk7Ci0gIE1hbGxv
Y0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB2b2lkKiByZXN1bHQgPSBkb01lbWFsaWduKGFsaWduLCBzaXplKTsKKyAgICBNYWxsb2NIb29r
OjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
ZXh0ZXJuICJDIiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCoqIHJlc3VsdF9wdHIsIHNpemVfdCBh
bGlnbiwgc2l6ZV90IHNpemUpCitleHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiog
cmVzdWx0cHRyLCBzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKQogICAgIF9fVEhST1cgewotICBp
ZiAoKChhbGlnbiAlIHNpemVvZih2b2lkKikpICE9IDApIHx8Ci0gICAgICAoKGFsaWduICYgKGFs
aWduIC0gMSkpICE9IDApIHx8Ci0gICAgICAoYWxpZ24gPT0gMCkpIHsKLSAgICByZXR1cm4gRUlO
VkFMOwotICB9CisgICAgaWYgKChhbGlnbiAlIHNpemVvZih2b2lkKikpCisgICAgICAgIHx8IChh
bGlnbiAmIChhbGlnbiAtIDEpKQorICAgICAgICB8fCAoIWFsaWduKSkKKyAgICAgICAgcmV0dXJu
IEVJTlZBTDsKIAotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihhbGlnbiwgc2l6ZSk7Ci0g
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgaWYgKHJlc3VsdCA9
PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVOT01FTTsKLSAgfSBlbHNlIHsKLSAgICAqcmVzdWx0X3B0
ciA9IHJlc3VsdDsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01lbWFsaWduKGFsaWduLCBzaXplKTsK
KyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHJldHVybiBFTk9NRU07CisgICAgKnJlc3VsdHB0ciA9IHJlc3VsdDsK
ICAgICByZXR1cm4gMDsKLSAgfQogfQogCiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplID0gMDsKIAog
ZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IHNpemUpIF9fVEhST1cgewotICAvLyBBbGxv
Y2F0ZSBwYWdlLWFsaWduZWQgb2JqZWN0IG9mIGxlbmd0aCA+PSBzaXplIGJ5dGVzCi0gIGlmIChw
YWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0gIHZvaWQqIHJlc3VsdCA9
IGRvX21lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAgIC8vIEFsbG9jYXRlIHBhZ2Ut
YWxpZ25lZCBvYmplY3Qgb2YgbGVuZ3RoID49IHNpemUgYnl0ZXMKKyAgICBpZiAoIXBhZ2VzaXpl
KQorICAgICAgICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgdm9pZCogcmVzdWx0ID0g
ZG9NZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGV4dGVybiAiQyIgdm9p
ZCogcHZhbGxvYyhzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIC8vIFJvdW5kIHVwIHNpemUgdG8g
YSBtdWx0aXBsZSBvZiBwYWdlc2l6ZQotICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBn
ZXRwYWdlc2l6ZSgpOwotICBzaXplID0gKHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6
ZSAtIDEpOwotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7Ci0g
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAvLyBSb3VuZCB1cCBzaXplIHRvIGEgbXVsdGlwbGUgb2YgcGFnZXNpemUKKyAgICBp
ZiAoIXBhZ2VzaXplKQorICAgICAgICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgc2l6
ZSA9IChzaXplICsgcGFnZXNpemUgLSAxKSAmIH4ocGFnZXNpemUgLSAxKTsKKyAgICB2b2lkKiBy
ZXN1bHQgPSBkb01lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKKyAgICBNYWxsb2NIb29rOjpJbnZv
a2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZXh0ZXJu
ICJDIiB2b2lkIG1hbGxvY19zdGF0cyh2b2lkKSB7Ci0gIGRvX21hbGxvY19zdGF0cygpOworZXh0
ZXJuICJDIiB2b2lkIG1hbGxvY19zdGF0cyh2b2lkKQoreworICAgIGRvTWFsbG9jU3RhdHMoKTsK
IH0KIAotZXh0ZXJuICJDIiBpbnQgbWFsbG9wdChpbnQgY21kLCBpbnQgdmFsdWUpIHsKLSAgcmV0
dXJuIGRvX21hbGxvcHQoY21kLCB2YWx1ZSk7CitleHRlcm4gIkMiIGludCBtYWxsb3B0KGludCBj
bWQsIGludCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZG9NYWxsb3B0KGNtZCwgdmFsdWUpOwogfQog
CiAjaWZkZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8KLWV4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZv
IG1hbGxpbmZvKHZvaWQpIHsKLSAgcmV0dXJuIGRvX21hbGxpbmZvKCk7CitleHRlcm4gIkMiIHN0
cnVjdCBtYWxsaW5mbyBtYWxsaW5mbyh2b2lkKQoreworICAgIHJldHVybiBkb01hbGxpbmZvKCk7
CiB9CiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBTb21lIGxpYnJhcnkgcm91dGluZXMgb24g
UmVkSGF0IDkgYWxsb2NhdGUgbWVtb3J5IHVzaW5nIG1hbGxvYygpCi0vLyBhbmQgZnJlZSBpdCB1
c2luZyBfX2xpYmNfZnJlZSgpIChvciB2aWNlLXZlcnNhKS4gIFNpbmNlIHdlIHByb3ZpZGUKKy8v
IGFuZCBmcmVlIGl0IHVzaW5nIF9fbGliY19mcmVlKCkgKG9yIHZpY2UtdmVyc2EpLiBTaW5jZSB3
ZSBwcm92aWRlCiAvLyBvdXIgb3duIGltcGxlbWVudGF0aW9ucyBvZiBtYWxsb2MvZnJlZSwgd2Ug
bmVlZCB0byBtYWtlIHN1cmUgdGhhdAogLy8gdGhlIF9fbGliY19YWFggdmFyaWFudHMgKGRlZmlu
ZWQgYXMgcGFydCBvZiBnbGliYykgYWxzbyBwb2ludCB0bwogLy8gdGhlIHNhbWUgaW1wbGVtZW50
YXRpb25zLgpAQCAtNDI5OSwxMSArNDQxMywxMCBAQCBleHRlcm4gIkMiIHsKIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIG9mIGNhbGxpbmcgTWFsbG9jSG9vayBt
ZXRob2QKIC8vIGZyb20gdGhlIHN0YWNrIGZyYW1lIG9mIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9u
OwogLy8gaGVhcC1jaGVja2VyIGhhbmRsZXMgdGhpcyBzcGVjaWFsIGNhc2UgZXhwbGljaXRseS4K
LXN0YXRpYyB2b2lkICpNZW1hbGlnbk92ZXJyaWRlKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUs
IGNvbnN0IHZvaWQgKmNhbGxlcikKLSAgICBfX1RIUk9XIHsKLSAgdm9pZCogcmVzdWx0ID0gZG9f
bWVtYWxpZ24oYWxpZ24sIHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3Vs
dCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1bHQ7CitzdGF0aWMgdm9pZCAqTWVtYWxpZ25PdmVycmlk
ZShzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplLCBjb25zdCB2b2lkICpjYWxsZXIpIF9fVEhST1cg
eworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAgIE1hbGxv
Y0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogdm9pZCAqKCpfX21lbWFsaWduX2hvb2spKHNpemVfdCwgc2l6ZV90LCBjb25zdCB2b2lkICop
ID0gTWVtYWxpZ25PdmVycmlkZTsKIApAQCAtNDMxNSwxMiArNDQyOCwxMiBAQCB2b2lkIHJlbGVh
c2VGYXN0TWFsbG9jRnJlZU1lbW9yeSgpCiAgICAgLy8gRmx1c2ggZnJlZSBwYWdlcyBpbiB0aGUg
Y3VycmVudCB0aHJlYWQgY2FjaGUgYmFjayB0byB0aGUgcGFnZSBoZWFwLgogICAgIC8vIExvdyB3
YXRlcm1hcmsgbWVjaGFuaXNtIGluIFNjYXZlbmdlKCkgcHJldmVudHMgZnVsbCByZXR1cm4gb24g
dGhlIGZpcnN0IHBhc3MuCiAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGZsdXNoZXMgZXZlcnl0aGlu
Zy4KLSAgICBpZiAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlID0gVENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkpIHsKKyAgICBpZiAoVENNYWxsb2NUaHJl
YWRDYWNoZSogdGhyZWFkQ2FjaGUgPSBUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRDYWNoZUlmUHJl
c2VudCgpKSB7CiAgICAgICAgIHRocmVhZENhY2hlLT5TY2F2ZW5nZSgpOwogICAgICAgICB0aHJl
YWRDYWNoZS0+U2NhdmVuZ2UoKTsKICAgICB9CiAKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogICAgIHBh
Z2VoZWFwLT5SZWxlYXNlRnJlZVBhZ2VzKCk7CiB9CiAgICAgCkBAIC00MzI4LDE4ICs0NDQxLDE4
IEBAIEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKIHsKICAgICBGYXN0
TWFsbG9jU3RhdGlzdGljcyBzdGF0aXN0aWNzOwogCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hv
bGRlcigmcGFnZWhlYXBfbG9jayk7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmcGFn
ZWhlYXBMb2NrKTsKICAgICBzdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlcyA9IHN0YXRpY19jYXN0
PHNpemVfdD4ocGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCkpOwogICAgIHN0YXRpc3RpY3MuY29tbWl0
dGVkVk1CeXRlcyA9IHN0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzIC0gcGFnZWhlYXAtPlJldHVy
bmVkQnl0ZXMoKTsKIAogICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyA9IDA7CiAgICAgZm9y
ICh1bnNpZ25lZCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICAgICAgY29u
c3QgaW50IGxlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOwotICAgICAgICBjb25z
dCBpbnQgdGNfbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0udGNfbGVuZ3RoKCk7CisgICAgICAg
IGNvbnN0IGludCBsZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xdLmxlbmd0aCgpOworICAgICAgICBj
b25zdCBpbnQgdGNMZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xdLnRjTGVuZ3RoKCk7CiAKLSAgICAg
ICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpICogKGxl
bmd0aCArIHRjX2xlbmd0aCk7CisgICAgICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyArPSBC
eXRlU2l6ZUZvckNsYXNzKGNsKSAqIChsZW5ndGggKyB0Y0xlbmd0aCk7CiAgICAgfQotICAgIGZv
ciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlID0gdGhyZWFkX2hlYXBzOyB0aHJl
YWRDYWNoZSA7IHRocmVhZENhY2hlID0gdGhyZWFkQ2FjaGUtPm5leHRfKQorICAgIGZvciAoVENN
YWxsb2NUaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSB0aHJlYWRIZWFwczsgdGhyZWFkQ2FjaGUg
OyB0aHJlYWRDYWNoZSA9IHRocmVhZENhY2hlLT5uZXh0KQogICAgICAgICBzdGF0aXN0aWNzLmZy
ZWVMaXN0Qnl0ZXMgKz0gdGhyZWFkQ2FjaGUtPlNpemUoKTsKIAogICAgIHJldHVybiBzdGF0aXN0
aWNzOwpAQCAtNDM0OCw3ICs0NDYxLDcgQEAgRmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxv
Y1N0YXRpc3RpYwogc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHB0cikKIHsKICNp
ZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIHJldHVybiBJbnRlcm5hbDo6ZmFz
dE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIoY29uc3RfY2FzdDx2b2lkKj4ocHRyKSktPm1fc2l6ZTsK
KyAgICByZXR1cm4gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKGNvbnN0X2Nh
c3Q8dm9pZCo+KHB0cikpLT5tc2l6ZTsKICNlbHNlCiAgICAgY29uc3QgUGFnZUlEIHAgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OwogICAgIFNwYW4qIHNw
YW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvckVuc3VyZVNhZmUocCk7CkBAIC00MzU2LDcgKzQ0
NjksNyBAQCBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCogcHRyKQogICAgIGlmICgh
c3BhbiB8fCBzcGFuLT5mcmVlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGZvciAodm9pZCog
ZnJlZSA9IHNwYW4tPm9iamVjdHM7IGZyZWUgIT0gTlVMTDsgZnJlZSA9ICooKHZvaWQqKikgZnJl
ZSkpIHsKKyAgICBmb3IgKHZvaWQqIGZyZWUgPSBzcGFuLT5vYmplY3RzOyBmcmVlOyBmcmVlID0g
Kigodm9pZCoqKSBmcmVlKSkgewogICAgICAgICBpZiAocHRyID09IGZyZWUpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC00MzgyLDEzICs0NDk1LDEzIEBAIHB1YmxpYzoKICAgICBi
b29sIGlzRnJlZU9iamVjdCh2bV9hZGRyZXNzX3QgcHRyKSBjb25zdCB7IHJldHVybiBpc0ZyZWVP
YmplY3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKSk7IH0KICAgICBzaXplX3QgZnJlZU9i
amVjdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmVlT2JqZWN0cy5zaXplKCk7IH0KIAotICAg
IHZvaWQgZmluZEZyZWVPYmplY3RzKFRDTWFsbG9jX1RocmVhZENhY2hlKiB0aHJlYWRDYWNoZSkK
KyAgICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRDYWNo
ZSkKICAgICB7Ci0gICAgICAgIGZvciAoOyB0aHJlYWRDYWNoZTsgdGhyZWFkQ2FjaGUgPSAodGhy
ZWFkQ2FjaGUtPm5leHRfID8gbV9yZWFkZXIodGhyZWFkQ2FjaGUtPm5leHRfKSA6IDApKQorICAg
ICAgICBmb3IgKDsgdGhyZWFkQ2FjaGU7IHRocmVhZENhY2hlID0gKHRocmVhZENhY2hlLT5uZXh0
ID8gbV9yZWFkZXIodGhyZWFkQ2FjaGUtPm5leHQpIDogMCkpCiAgICAgICAgICAgICB0aHJlYWRD
YWNoZS0+ZW51bWVyYXRlRnJlZU9iamVjdHMoKnRoaXMsIG1fcmVhZGVyKTsKICAgICB9CiAKLSAg
ICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiBj
ZW50cmFsRnJlZUxpc3QsIHNpemVfdCBudW1TaXplcywgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dFBhZGRlZCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQorICAgIHZvaWQgZmluZEZyZWVPYmplY3Rz
KFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKiBjZW50cmFsRnJlZUxpc3QsIHNpemVfdCBu
dW1TaXplcywgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqIHJlbW90ZUNlbnRyYWxGcmVl
TGlzdCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TaXplczsg
aSsrKQogICAgICAgICAgICAgY2VudHJhbEZyZWVMaXN0W2ldLmVudW1lcmF0ZUZyZWVPYmplY3Rz
KCp0aGlzLCBtX3JlYWRlciwgcmVtb3RlQ2VudHJhbEZyZWVMaXN0ICsgaSk7CkBAIC00NDY5LDEy
ICs0NTgyLDEyIEBAIHB1YmxpYzoKIAogICAgICAgICBWZWN0b3I8dm1fcmFuZ2VfdCwgMTAyND4g
YWxsb2NhdGVkUG9pbnRlcnM7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2Fs
ZXNjZWRTcGFucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgU3BhbiAqdGhlU3BhbiA9IG1f
Y29hbGVzY2VkU3BhbnNbaV07CisgICAgICAgICAgICBTcGFuKiB0aGVTcGFuID0gbV9jb2FsZXNj
ZWRTcGFuc1tpXTsKICAgICAgICAgICAgIGlmICh0aGVTcGFuLT5mcmVlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICB2bV9hZGRyZXNzX3Qgc3BhblN0YXJ0QWRkcmVz
cyA9IHRoZVNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQ7Ci0gICAgICAgICAgICB2bV9zaXplX3Qg
c3BhblNpemVJbkJ5dGVzID0gdGhlU3Bhbi0+bGVuZ3RoICoga1BhZ2VTaXplOworICAgICAgICAg
ICAgdm1zaXplX3Qgc3BhblNpemVJbkJ5dGVzID0gdGhlU3Bhbi0+bGVuZ3RoICoga1BhZ2VTaXpl
OwogCiAgICAgICAgICAgICBpZiAoIXRoZVNwYW4tPnNpemVjbGFzcykgewogICAgICAgICAgICAg
ICAgIC8vIElmIGl0J3MgYW4gYWxsb2NhdGVkIGxhcmdlIG9iamVjdCBzcGFuLCBtYXJrIGl0IGFz
IGluIHVzZQpAQCAtNDUxNyw3ICs0NjMwLDcgQEAgcHVibGljOgogCiAgICAgICAgIFNwYW4qIHBy
ZXZpb3VzU3BhbiA9IG1fY29hbGVzY2VkU3BhbnNbbV9jb2FsZXNjZWRTcGFucy5zaXplKCkgLSAx
XTsKICAgICAgICAgdm1fYWRkcmVzc190IHByZXZpb3VzU3BhblN0YXJ0QWRkcmVzcyA9IHByZXZp
b3VzU3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdDsKLSAgICAgICAgdm1fc2l6ZV90IHByZXZpb3Vz
U3BhblNpemVJbkJ5dGVzID0gcHJldmlvdXNTcGFuLT5sZW5ndGggKiBrUGFnZVNpemU7CisgICAg
ICAgIHZtc2l6ZV90IHByZXZpb3VzU3BhblNpemVJbkJ5dGVzID0gcHJldmlvdXNTcGFuLT5sZW5n
dGggKiBrUGFnZVNpemU7CiAKICAgICAgICAgLy8gSWYgdGhlIG5ldyBzcGFuIGlzIGFkamFjZW50
IHRvIHRoZSBwcmV2aW91cyBzcGFuLCBkbyBub3RoaW5nIGZvciBub3cuCiAgICAgICAgIHZtX2Fk
ZHJlc3NfdCBzcGFuU3RhcnRBZGRyZXNzID0gc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdDsKQEAg
LTQ1ODQsMTcgKzQ2OTcsMTcgQEAga2Vybl9yZXR1cm5fdCBGYXN0TWFsbG9jWm9uZTo6ZW51bWVy
YXRlKAogICAgIEluaXRTaXplQ2xhc3NlcygpOwogCiAgICAgRmFzdE1hbGxvY1pvbmUqIG16b25l
ID0gbWVtb3J5UmVhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8RmFzdE1hbGxvY1pvbmUqPih6b25lQWRk
cmVzcykpOwotICAgIFRDTWFsbG9jX1BhZ2VIZWFwKiBwYWdlSGVhcCA9IG1lbW9yeVJlYWRlciht
em9uZS0+bV9wYWdlSGVhcCk7Ci0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqKiB0aHJlYWRIZWFw
c1BvaW50ZXIgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fdGhyZWFkSGVhcHMpOwotICAgIFRDTWFs
bG9jX1RocmVhZENhY2hlKiB0aHJlYWRIZWFwcyA9IG1lbW9yeVJlYWRlcigqdGhyZWFkSGVhcHNQ
b2ludGVyKTsKKyAgICBUQ01hbGxvY1BhZ2VIZWFwKiBwYWdlSGVhcCA9IG1lbW9yeVJlYWRlciht
em9uZS0+bV9wYWdlSGVhcCk7CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSoqIHRocmVhZEhlYXBz
UG9pbnRlciA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV90aHJlYWRIZWFwcyk7CisgICAgVENNYWxs
b2NUaHJlYWRDYWNoZSogdGhyZWFkSGVhcHMgPSBtZW1vcnlSZWFkZXIoKnRocmVhZEhlYXBzUG9p
bnRlcik7CiAKLSAgICBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiBjZW50cmFsQ2Fj
aGVzID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX2NlbnRyYWxDYWNoZXMsIHNpemVvZihUQ01hbGxv
Y19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKSAqIGtOdW1DbGFzc2VzKTsKKyAgICBUQ01hbGxvY0Nl
bnRyYWxGcmVlTGlzdFBhZGRlZCogY2VudHJhbENhY2hlcyA9IG1lbW9yeVJlYWRlcihtem9uZS0+
bV9jZW50cmFsQ2FjaGVzLCBzaXplb2YoVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQpICog
a051bUNsYXNzZXMpOwogCiAgICAgRnJlZU9iamVjdEZpbmRlciBmaW5kZXIobWVtb3J5UmVhZGVy
KTsKICAgICBmaW5kZXIuZmluZEZyZWVPYmplY3RzKHRocmVhZEhlYXBzKTsKICAgICBmaW5kZXIu
ZmluZEZyZWVPYmplY3RzKGNlbnRyYWxDYWNoZXMsIGtOdW1DbGFzc2VzLCBtem9uZS0+bV9jZW50
cmFsQ2FjaGVzKTsKIAotICAgIFRDTWFsbG9jX1BhZ2VIZWFwOjpQYWdlTWFwKiBwYWdlTWFwID0g
JnBhZ2VIZWFwLT5wYWdlbWFwXzsKKyAgICBUQ01hbGxvY1BhZ2VIZWFwOjpQYWdlTWFwKiBwYWdl
TWFwID0gJnBhZ2VIZWFwLT5wYWdlbWFwOwogICAgIFBhZ2VNYXBGcmVlT2JqZWN0RmluZGVyIHBh
Z2VNYXBGaW5kZXIobWVtb3J5UmVhZGVyLCBmaW5kZXIpOwogICAgIHBhZ2VNYXAtPnZpc2l0VmFs
dWVzKHBhZ2VNYXBGaW5kZXIsIG1lbW9yeVJlYWRlcik7CiAKQEAgLTQ2MDYsNyArNDcxOSw3IEBA
IGtlcm5fcmV0dXJuX3QgRmFzdE1hbGxvY1pvbmU6OmVudW1lcmF0ZSgKICAgICBwYWdlTWFwLT52
aXNpdEFsbG9jYXRpb25zKGFkbWluUmVnaW9uUmVjb3JkZXIsIG1lbW9yeVJlYWRlcik7CiAKICAg
ICBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiogc3BhbkFsbG9jYXRvciA9IG1lbW9yeVJlYWRlciht
em9uZS0+bV9zcGFuQWxsb2NhdG9yKTsKLSAgICBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY19U
aHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3Bh
Z2VIZWFwQWxsb2NhdG9yKTsKKyAgICBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY1RocmVhZENh
Y2hlPiogcGFnZUhlYXBBbGxvY2F0b3IgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fcGFnZUhlYXBB
bGxvY2F0b3IpOwogCiAgICAgc3BhbkFsbG9jYXRvci0+cmVjb3JkQWRtaW5pc3RyYXRpdmVSZWdp
b25zKGFkbWluUmVnaW9uUmVjb3JkZXIsIG1lbW9yeVJlYWRlcik7CiAgICAgcGFnZUhlYXBBbGxv
Y2F0b3ItPnJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhhZG1pblJlZ2lvblJlY29yZGVyLCBt
ZW1vcnlSZWFkZXIpOwpAQCAtNDYzNCw3ICs0NzQ3LDcgQEAgdm9pZCogRmFzdE1hbGxvY1pvbmU6
OnpvbmVDYWxsb2MobWFsbG9jXwogdm9pZCBGYXN0TWFsbG9jWm9uZTo6em9uZUZyZWUobWFsbG9j
X3pvbmVfdCosIHZvaWQqIHB0cikKIHsKICAgICAvLyBEdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzU2
NzEzNTc+IHpvbmVGcmVlIG1heSBiZSBjYWxsZWQgYnkgdGhlIHN5c3RlbSBmcmVlIGV2ZW4gaWYg
dGhlIHBvaW50ZXIKLSAgICAvLyBpcyBub3QgaW4gdGhpcyB6b25lLiAgV2hlbiB0aGlzIGhhcHBl
bnMsIHRoZSBwb2ludGVyIGJlaW5nIGZyZWVkIHdhcyBub3QgYWxsb2NhdGVkIGJ5IGFueQorICAg
IC8vIGlzIG5vdCBpbiB0aGlzIHpvbmUuIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgcG9pbnRlciBi
ZWluZyBmcmVlZCB3YXMgbm90IGFsbG9jYXRlZCBieSBhbnkKICAgICAvLyB6b25lIHNvIHdlIG5l
ZWQgdG8gcHJpbnQgYSB1c2VmdWwgZXJyb3IgZm9yIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIu
CiAgICAgbWFsbG9jX3ByaW50ZigiKioqIGVycm9yIGZvciBvYmplY3QgJXA6IHBvaW50ZXIgYmVp
bmcgZnJlZWQgd2FzIG5vdCBhbGxvY2F0ZWRcbiIsIHB0cik7CiB9CkBAIC00NjY0LDcgKzQ3Nzcs
NyBAQCBtYWxsb2NfaW50cm9zcGVjdGlvbl90IGpzY29yZV9mYXN0bWFsbG9jCiAgICAgfTsKIH0K
IAotRmFzdE1hbGxvY1pvbmU6OkZhc3RNYWxsb2Nab25lKFRDTWFsbG9jX1BhZ2VIZWFwKiBwYWdl
SGVhcCwgVENNYWxsb2NfVGhyZWFkQ2FjaGUqKiB0aHJlYWRIZWFwcywgVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdFBhZGRlZCogY2VudHJhbENhY2hlcywgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4q
IHNwYW5BbGxvY2F0b3IsIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiog
cGFnZUhlYXBBbGxvY2F0b3IpCitGYXN0TWFsbG9jWm9uZTo6RmFzdE1hbGxvY1pvbmUoVENNYWxs
b2NQYWdlSGVhcCogcGFnZUhlYXAsIFRDTWFsbG9jVGhyZWFkQ2FjaGUqKiB0aHJlYWRIZWFwcywg
VENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqIGNlbnRyYWxDYWNoZXMsIFBhZ2VIZWFwQWxs
b2NhdG9yPFNwYW4+KiBzcGFuQWxsb2NhdG9yLCBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY1Ro
cmVhZENhY2hlPiogcGFnZUhlYXBBbGxvY2F0b3IpCiAgICAgOiBtX3BhZ2VIZWFwKHBhZ2VIZWFw
KQogICAgICwgbV90aHJlYWRIZWFwcyh0aHJlYWRIZWFwcykKICAgICAsIG1fY2VudHJhbENhY2hl
cyhjZW50cmFsQ2FjaGVzKQpAQCAtNDY4OCw3ICs0ODAxLDcgQEAgRmFzdE1hbGxvY1pvbmU6OkZh
c3RNYWxsb2Nab25lKFRDTWFsbG9jXwogCiB2b2lkIEZhc3RNYWxsb2Nab25lOjppbml0KCkKIHsK
LSAgICBzdGF0aWMgRmFzdE1hbGxvY1pvbmUgem9uZShwYWdlaGVhcCwgJnRocmVhZF9oZWFwcywg
c3RhdGljX2Nhc3Q8VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCo+KGNlbnRyYWxfY2Fj
aGUpLCAmc3Bhbl9hbGxvY2F0b3IsICZ0aHJlYWRoZWFwX2FsbG9jYXRvcik7CisgICAgc3RhdGlj
IEZhc3RNYWxsb2Nab25lIHpvbmUocGFnZWhlYXAsICZ0aHJlYWRIZWFwcywgc3RhdGljX2Nhc3Q8
VENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqPihjZW50cmFsQ2FjaGUpLCAmc3BhbkFsbG9j
YXRvciwgJnRocmVhZGhlYXBBbGxvY2F0b3IpOwogfQogCiAjZW5kaWYgLy8gT1MoREFSV0lOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148599</attachid>
            <date>2012-06-20 10:37:50 -0700</date>
            <delta_ts>2012-11-13 13:35:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89366-20120620113652.patch</filename>
            <type>text/plain</type>
            <size>236167</size>
            <attacher name="Alex Christensen">alex.christensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjA4MjApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1MiBAQAorMjAxMi0wNi0yMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFsZXguY2hyaXN0ZW5zZW5AZmxleHNpbS5jb20+CisKKyAgICAgICAgRmFzdE1hbGxvYy5jcHAg
bmVlZHMgdG8gYmUgcmVvcmRlcmVkIGJlZm9yZSBwYWRkaW5nIGJ1ZyBjYW4gYmUgZml4ZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MzY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRmFzdE1h
bGxvYy5jcHA6CisgICAgICAgIFJlb3JkZXJlZCBhbmQgZml4ZWQgbWFueSBzdHlsZSBwcm9ibGVt
cyAKKyAgICAgICAgKFdURjo6dHJ5RmFzdE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RD
YWxsb2MpOgorICAgICAgICAoV1RGOjpmYXN0Q2FsbG9jKToKKyAgICAgICAgKFdURjo6ZmFzdEZy
ZWUpOgorICAgICAgICAoV1RGOjp0cnlGYXN0UmVhbGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RN
YWxsb2NTaXplKToKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OkNsYXNzSW5kZXgpOgor
ICAgICAgICAoVENFbnRyeSk6CisgICAgICAgIChXVEY6OlNMTF9OZXh0KToKKyAgICAgICAgKFdU
Rjo6U0xMU2V0TmV4dCk6CisgICAgICAgIChXVEY6OlNMTFB1c2gpOgorICAgICAgICAoV1RGOjpT
TExQb3ApOgorICAgICAgICAoV1RGOjpTTExQb3BSYW5nZSk6CisgICAgICAgIChXVEY6OlNMTFB1
c2hSYW5nZSk6CisgICAgICAgIChXVEY6OlNMTFNpemUpOgorICAgICAgICAoV1RGOjpTaXplQ2xh
c3MpOgorICAgICAgICAoV1RGOjpCeXRlU2l6ZUZvckNsYXNzKToKKyAgICAgICAgKFdURjo6TnVt
TW92ZVNpemUpOgorICAgICAgICAoV1RGOjpJbml0U2l6ZUNsYXNzZXMpOgorICAgICAgICAoV1RG
OjpNZXRhRGF0YUFsbG9jKToKKyAgICAgICAgKFBhZ2VIZWFwQWxsb2NhdG9yKToKKyAgICAgICAg
KFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFs
bG9jYXRvcjo6TmV3KToKKyAgICAgICAgKFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkRlbGV0ZSk6
CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjppbnVzZSk6CisgICAgICAgIChXVEY6
OlBhZ2VIZWFwQWxsb2NhdG9yOjpyZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMpOgorICAgICAg
ICAoV1RGOjpwYWdlcyk6CisgICAgICAgIChXVEY6OkFsbG9jYXRpb25TaXplKToKKyAgICAgICAg
KFNwYW4pOgorICAgICAgICAoV1RGOjpFdmVudCk6CisgICAgICAgIChXVEY6Ok5ld1NwYW4pOgor
ICAgICAgICAoV1RGOjpEZWxldGVTcGFuKToKKyAgICAgICAgKFdURjo6RExMSW5pdCk6CisgICAg
ICAgIChXVEY6OkRMTFJlbW92ZSk6CisgICAgICAgIChXVEY6OkRMTF9Jc0VtcHR5KToKKyAgICAg
ICAgKFdURjo6RExMTGVuZ3RoKToKKyAgICAgICAgKFdURjo6RExMUHJpbnQpOgorICAgICAgICAo
V1RGOjpETExQcmVwZW5kKToKKyAgICAgICAgKFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0KToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0Ojp0Y0xlbmd0aCk6CisgICAgICAgIChXVEY6OlRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjplbnVtZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChU
Q01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCk6CisgICAgICAgIChGYXN0TWFsbG9jWm9uZSk6
CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpnb29kU2l6ZSk6CisgICAgICAgIChXVEY6
OkZhc3RNYWxsb2Nab25lOjpjaGVjayk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpw
cmludCk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpsb2cpOgorICAgICAgICAoV1RG
OjpGYXN0TWFsbG9jWm9uZTo6Zm9yY2VMb2NrKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pv
bmU6OmZvcmNlVW5sb2NrKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OnN0YXRpc3Rp
Y3MpOgorICAgICAgICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6em9uZVZhbGxvYyk6CisgICAgICAg
IChXVEY6OkZhc3RNYWxsb2Nab25lOjp6b25lRGVzdHJveSk6CisgICAgICAgIChXVEY6Oktlcm5l
bFN1cHBvcnRzVExTKToKKyAgICAgICAgKFdURjo6Q2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKToK
KyAgICAgICAgKFN0YWNrVHJhY2UpOgorICAgICAgICAoTWFwU2VsZWN0b3IpOgorICAgICAgICAo
VENNYWxsb2NQYWdlSGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OkdldERl
c2NyaXB0b3IpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpHZXREZXNjcmlwdG9y
RW5zdXJlU2FmZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlN5c3RlbUJ5dGVz
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6RnJlZUJ5dGVzKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NQYWdlSGVhcDo6R2V0U2l6ZUNsYXNzSWZDYWNoZWQpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDYWNoZVNpemVDbGFzcyk6CisgICAgICAgIChTcGFuTGlz
dCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlJlY29yZFNwYW4pOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjppbml0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQ
YWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFn
ZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdl
SGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFw
OjpyZXNjaGVkdWxlU2NhdmVuZ2VyKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
c3VzcGVuZFNjYXZlbmdlcik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNjYXZl
bmdlclRpbWVyRmlyZWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpydW5TY2F2
ZW5nZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzaWduYWxTY2F2
ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNob3VsZFNjYXZlbmdlKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NQYWdlSGVhcDo6TmV3KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVh
cDo6QWxsb2NMYXJnZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlNwbGl0KToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6Q2FydmUpOgorICAgICAgICAoV1RGOjpU
Q01hbGxvY1BhZ2VIZWFwOjpEZWxldGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFw
OjpJbmNyZW1lbnRhbFNjYXZlbmdlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
UmVnaXN0ZXJTaXplQ2xhc3MpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpSZXR1
cm5lZEJ5dGVzKToKKyAgICAgICAgKFdURjo6UGFnZXNUb01CKToKKyAgICAgICAgKFdURjo6VENN
YWxsb2NQYWdlSGVhcDo6RHVtcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6Okdy
b3dIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6Q2hlY2spOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDaGVja0xpc3QpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Bh
Z2VIZWFwOjpSZWxlYXNlRnJlZVBhZ2VzKToKKyAgICAgICAgKFRDTWFsbG9jVGhyZWFkQ2FjaGVG
cmVlTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6SW5p
dCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6bGVuZ3RoKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjplbXB0eSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6bG93d2F0ZXJtYXJrKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjpjbGVhckxvd3dhdGVybWFy
ayk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UHVzaCk6Cisg
ICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UHVzaFJhbmdlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjpQb3BSYW5nZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UG9wKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjplbnVtZXJhdGVGcmVlT2JqZWN0cyk6Cisg
ICAgICAgIChUQ01hbGxvY1RocmVhZENhY2hlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJl
YWRDYWNoZTo6ZnJlZWxpc3RsZW5ndGgpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENh
Y2hlOjpTaXplKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6ZW51bWVyYXRl
RnJlZU9iamVjdHMpOgorICAgICAgICAoV1RGOjpnZXRQYWdlSGVhcCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVuZ2UpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpzZXRUaHJlYWRI
ZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkluaXQpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJlbGVhc2VUb1NwYW5zKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkV2aWN0UmFuZG9tU2l6ZUNs
YXNzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Ok1ha2VDYWNoZVNw
YWNlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlNocmlua0NhY2hl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Okluc2VydFJhbmdlKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zU2FmZSk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFucyk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpQb3B1bGF0ZSk6CisgICAg
ICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlNhbXBsZUFsbG9jYXRpb24pOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0KToKKyAgICAgICAgKFdURjo6VENNYWxs
b2NUaHJlYWRDYWNoZTo6Q2xlYW51cCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6RGVhbGxv
Y2F0ZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkZldGNoRnJvbUNlbnRy
YWxDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlJlbGVhc2VUb0Nl
bnRyYWxDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OlNjYXZlbmdl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUpOgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0TW9kdWxlKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6TmV3SGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkdldFRocmVhZEhlYXApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Ro
cmVhZENhY2hlOjpHZXRDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkdldENhY2hlSWZQcmVzZW50KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6
SW5pdFRTRCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkNyZWF0ZUNhY2hl
SWZOZWNlc3NhcnkpOgorCiAyMDEyLTA2LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGxvb2sgYXQgZGlzYXNzZW1i
bHkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxMjA4MjApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjggKzQyLDI4IEBA
CiAvLyAgICAgVGhpcyBpcyBzYWZlIGJlY2F1c2UgZWFjaCBzdWNoIGxpc3QgaXMgb25seSBhY2Nl
c3NlZCBieSBvbmUgdGhyZWFkLgogLy8gIDIuIFdlIGhhdmUgYSBsb2NrIHBlciBjZW50cmFsIGZy
ZWUtbGlzdCwgYW5kIGhvbGQgaXQgd2hpbGUgbWFuaXB1bGF0aW5nCiAvLyAgICAgdGhlIGNlbnRy
YWwgZnJlZSBsaXN0IGZvciBhIHBhcnRpY3VsYXIgc2l6ZS4KLS8vICAzLiBUaGUgY2VudHJhbCBw
YWdlIGFsbG9jYXRvciBpcyBwcm90ZWN0ZWQgYnkgInBhZ2VoZWFwX2xvY2siLgorLy8gIDMuIFRo
ZSBjZW50cmFsIHBhZ2UgYWxsb2NhdG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBMb2NrIi4K
IC8vICA0LiBUaGUgcGFnZW1hcCAod2hpY2ggbWFwcyBmcm9tIHBhZ2UtbnVtYmVyIHRvIGRlc2Ny
aXB0b3IpLAogLy8gICAgIGNhbiBiZSByZWFkIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9ja3MsIGFu
ZCB3cml0dGVuIHdoaWxlIGhvbGRpbmcKLS8vICAgICB0aGUgInBhZ2VoZWFwX2xvY2siLgorLy8g
ICAgIHRoZSAicGFnZWhlYXBMb2NrIi4KIC8vICA1LiBUbyBpbXByb3ZlIHBlcmZvcm1hbmNlLCBh
IHN1YnNldCBvZiB0aGUgaW5mb3JtYXRpb24gb25lIGNhbiBnZXQKLS8vICAgICBmcm9tIHRoZSBw
YWdlbWFwIGlzIGNhY2hlZCBpbiBhIGRhdGEgc3RydWN0dXJlLCBwYWdlbWFwX2NhY2hlXywKLS8v
ICAgICB0aGF0IGF0b21pY2FsbHkgcmVhZHMgYW5kIHdyaXRlcyBpdHMgZW50cmllcy4gIFRoaXMg
Y2FjaGUgY2FuIGJlCisvLyAgICAgZnJvbSB0aGUgcGFnZW1hcCBpcyBjYWNoZWQgaW4gYSBkYXRh
IHN0cnVjdHVyZSwgcGFnZW1hcGNhY2hlLAorLy8gICAgIHRoYXQgYXRvbWljYWxseSByZWFkcyBh
bmQgd3JpdGVzIGl0cyBlbnRyaWVzLiBUaGlzIGNhY2hlIGNhbiBiZQogLy8gICAgIHJlYWQgYW5k
IHdyaXR0ZW4gd2l0aG91dCBsb2NraW5nLgogLy8KIC8vICAgICBUaGlzIG11bHRpLXRocmVhZGVk
IGFjY2VzcyB0byB0aGUgcGFnZW1hcCBpcyBzYWZlIGZvciBmYWlybHkKLS8vICAgICBzdWJ0bGUg
cmVhc29ucy4gIFdlIGJhc2ljYWxseSBhc3N1bWUgdGhhdCB3aGVuIGFuIG9iamVjdCBYIGlzCisv
LyAgICAgc3VidGxlIHJlYXNvbnMuIFdlIGJhc2ljYWxseSBhc3N1bWUgdGhhdCB3aGVuIGFuIG9i
amVjdCBYIGlzCiAvLyAgICAgYWxsb2NhdGVkIGJ5IHRocmVhZCBBIGFuZCBkZWFsbG9jYXRlZCBi
eSB0aHJlYWQgQiwgdGhlcmUgbXVzdAogLy8gICAgIGhhdmUgYmVlbiBhcHByb3ByaWF0ZSBzeW5j
aHJvbml6YXRpb24gaW4gdGhlIGhhbmRvZmYgb2Ygb2JqZWN0Ci0vLyAgICAgWCBmcm9tIHRocmVh
ZCBBIHRvIHRocmVhZCBCLiAgVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBwYWdlbWFwX2NhY2hl
Xy4KKy8vICAgICBYIGZyb20gdGhyZWFkIEEgdG8gdGhyZWFkIEIuIFRoZSBzYW1lIGxvZ2ljIGFw
cGxpZXMgdG8gcGFnZW1hcGNhY2hlLgogLy8KIC8vIFRIRSBQQUdFSUQtVE8tU0laRUNMQVNTIENB
Q0hFCi0vLyBIb3QgUGFnZUlELXRvLXNpemVjbGFzcyBtYXBwaW5ncyBhcmUgaGVsZCBieSBwYWdl
bWFwX2NhY2hlXy4gIElmIHRoaXMgY2FjaGUKKy8vIEhvdCBQYWdlSUQtdG8tc2l6ZWNsYXNzIG1h
cHBpbmdzIGFyZSBoZWxkIGJ5IHBhZ2VtYXBjYWNoZS4gSWYgdGhpcyBjYWNoZQogLy8gcmV0dXJu
cyAwIGZvciBhIHBhcnRpY3VsYXIgUGFnZUlEIHRoZW4gdGhhdCBtZWFucyAibm8gaW5mb3JtYXRp
b24sIiBub3QgdGhhdAotLy8gdGhlIHNpemVjbGFzcyBpcyAwLiAgVGhlIGNhY2hlIG1heSBoYXZl
IHN0YWxlIGluZm9ybWF0aW9uIGZvciBwYWdlcyB0aGF0IGRvCi0vLyBub3QgaG9sZCB0aGUgYmVn
aW5uaW5nIG9mIGFueSBmcmVlKCknYWJsZSBvYmplY3QuICBTdGFsZW5lc3MgaXMgZWxpbWluYXRl
ZAotLy8gaW4gUG9wdWxhdGUoKSBmb3IgcGFnZXMgd2l0aCBzaXplY2xhc3MgPiAwIG9iamVjdHMs
IGFuZCBpbiBkb19tYWxsb2MoKSBhbmQKLS8vIGRvX21lbWFsaWduKCkgZm9yIGFsbCBvdGhlciBy
ZWxldmFudCBwYWdlcy4KKy8vIHRoZSBzaXplY2xhc3MgaXMgMC4gVGhlIGNhY2hlIG1heSBoYXZl
IHN0YWxlIGluZm9ybWF0aW9uIGZvciBwYWdlcyB0aGF0IGRvCisvLyBub3QgaG9sZCB0aGUgYmVn
aW5uaW5nIG9mIGFueSBmcmVlKCknYWJsZSBvYmplY3QuIFN0YWxlbmVzcyBpcyBlbGltaW5hdGVk
CisvLyBpbiBQb3B1bGF0ZSgpIGZvciBwYWdlcyB3aXRoIHNpemVjbGFzcyA+IDAgb2JqZWN0cywg
YW5kIGluIGRvTWFsbG9jKCkgYW5kCisvLyBkb01lbWFsaWduKCkgZm9yIGFsbCBvdGhlciByZWxl
dmFudCBwYWdlcy4KIC8vCiAvLyBUT0RPOiBCaWFzIHJlY2xhbWF0aW9uIHRvIGxhcmdlciBhZGRy
ZXNzZXMKIC8vIFRPRE86IGltcGxlbWVudCBtYWxsaW5mby9tYWxsb3B0CkBAIC0yNDMsNyArMjQz
LDcgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdE1hbGxvYyhzaXplXwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKICAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRl
ciogaGVhZGVyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqPihyZXN1
bHQpOwotICAgIGhlYWRlci0+bV9zaXplID0gbjsKKyAgICBoZWFkZXItPm1zaXplID0gbjsKICAg
ICBoZWFkZXItPm1fdHlwZSA9IEludGVybmFsOjpBbGxvY1R5cGVNYWxsb2M7CiAgICAgaGVhZGVy
LT5tX3ByZWZpeCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbnRlcm5hbDo6VmFsaWRhdGlvblBy
ZWZpeCk7CiAgICAgcmVzdWx0ID0gaGVhZGVyICsgMTsKQEAgLTI3NCwxMyArMjc0LDEzIEBAIHZv
aWQqIGZhc3RNYWxsb2Moc2l6ZV90IG4pCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVHJ5TWFs
bG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVs
ZW1lbnRfc2l6ZSkKK1RyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG5F
bGVtZW50cywgc2l6ZV90IGVsZW1lbnRzaXplKQogewogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4o
KSk7CiAKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIHNpemVfdCB0b3Rh
bEJ5dGVzID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsKLSAgICBpZiAobl9lbGVtZW50cyA+
IDEgJiYgZWxlbWVudF9zaXplICYmICh0b3RhbEJ5dGVzIC8gZWxlbWVudF9zaXplKSAhPSBuX2Vs
ZW1lbnRzKQorICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gbkVsZW1lbnRzICogZWxlbWVudHNpemU7
CisgICAgaWYgKG5FbGVtZW50cyA+IDEgJiYgZWxlbWVudHNpemUgJiYgKHRvdGFsQnl0ZXMgLyBl
bGVtZW50c2l6ZSkgIT0gbkVsZW1lbnRzKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFRyeU1h
bGxvY1JldHVyblZhbHVlIHJldHVyblZhbHVlID0gdHJ5RmFzdE1hbGxvYyh0b3RhbEJ5dGVzKTsK
QEAgLTI5MSwyMSArMjkxLDIxIEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Mo
c2l6ZV8KICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0
OwogI2Vsc2UKLSAgICByZXR1cm4gY2FsbG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7Cisg
ICAgcmV0dXJuIGNhbGxvYyhuRWxlbWVudHMsIGVsZW1lbnRzaXplKTsKICNlbmRpZgogfQogCi12
b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQor
dm9pZCogZmFzdENhbGxvYyhzaXplX3QgbkVsZW1lbnRzLCBzaXplX3QgZWxlbWVudHNpemUpCiB7
CiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZB
TElEQVRJT04pCi0gICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0
Q2FsbG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7CisgICAgVHJ5TWFsbG9jUmV0dXJuVmFs
dWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0Q2FsbG9jKG5FbGVtZW50cywgZWxlbWVudHNpemUpOwog
ICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoIXJldHVyblZhbHVlLmdldFZhbHVlKHJlc3VsdCkp
CiAgICAgICAgIENSQVNIKCk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuX2Vs
ZW1lbnRzLCBlbGVtZW50X3NpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuRWxlbWVu
dHMsIGVsZW1lbnRzaXplKTsKICNlbmRpZgogCiAgICAgaWYgKCFyZXN1bHQpCkBAIC0zMjQsNyAr
MzI0LDcgQEAgdm9pZCBmYXN0RnJlZSh2b2lkKiBwKQogICAgIAogICAgIGZhc3RNYWxsb2NNYXRj
aFZhbGlkYXRlRnJlZShwLCBJbnRlcm5hbDo6QWxsb2NUeXBlTWFsbG9jKTsKICAgICBJbnRlcm5h
bDo6VmFsaWRhdGlvbkhlYWRlciogaGVhZGVyID0gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0
aW9uSGVhZGVyKHApOwotICAgIG1lbXNldChwLCAweENDLCBoZWFkZXItPm1fc2l6ZSk7CisgICAg
bWVtc2V0KHAsIDB4Q0MsIGhlYWRlci0+bXNpemUpOwogICAgIGZyZWUoaGVhZGVyKTsKICNlbHNl
CiAgICAgZnJlZShwKTsKQEAgLTM0Myw3ICszNDMsNyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0
cnlGYXN0UmVhbGxvYyh2b2lkCiAgICAgICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KHJlYWxsb2Mo
SW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKHApLCBuICsgSW50ZXJuYWw6OlZh
bGlkYXRpb25CdWZmZXJTaXplKSk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJlc3VsdC0+bV9zaXplID0gbjsKKyAgICAgICAgcmVzdWx0LT5t
c2l6ZSA9IG47CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIDE7CiAgICAgICAgICpmYXN0TWFs
bG9jVmFsaWRhdGlvblN1ZmZpeChyZXN1bHQpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7
CiAgICAgICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwpAQCAtMzg1LDkgKzM4NSw5IEBA
IEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKIHNpemVfdCBmYXN0TWFs
bG9jU2l6ZShjb25zdCB2b2lkKiBwKQogewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJ
T04pCi0gICAgcmV0dXJuIEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihjb25z
dF9jYXN0PHZvaWQqPihwKSktPm1fc2l6ZTsKKyAgICByZXR1cm4gSW50ZXJuYWw6OmZhc3RNYWxs
b2NWYWxpZGF0aW9uSGVhZGVyKGNvbnN0X2Nhc3Q8dm9pZCo+KHApKS0+bXNpemU7CiAjZWxpZiBP
UyhEQVJXSU4pCi0gICAgcmV0dXJuIG1hbGxvY19zaXplKHApOworICAgIHJldHVybiBtYWxsb2NT
aXplKHApOwogI2VsaWYgT1MoV0lORE9XUykKICAgICByZXR1cm4gX21zaXplKGNvbnN0X2Nhc3Q8
dm9pZCo+KHApKTsKICNlbHNlCkBAIC00NzIsMTcgKzQ3MiwxNyBAQCBzdGF0aWMgdm9pZCogKCpw
dGhyZWFkX2dldHNwZWNpZmljX2Z1bmN0CiAjZW5kaWYKIAogI2RlZmluZSBERUZJTkVfVkFSSUFC
TEUodHlwZSwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpIFwKLSAgbmFtZXNwYWNlIEZMQUdfX25hbWVz
cGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQgeyAg
XAotICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGNoYXIgRkxBR1Nfbm8jI25hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMj
dHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQorICAgIG5hbWVzcGFjZSBGTEFHX19uYW1lc3Bh
Y2VfZG9fbm90X3VzZV9kaXJlY3RseV91c2VfREVDTEFSRV8jI3R5cGUjI19pbnN0ZWFkIHsgIFwK
KyAgICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2hhciBGTEFHU19ubyMjbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNM
QVJFXyMjdHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQogICAKICNkZWZpbmUgREVGSU5FX2lu
dDY0KG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShpbnQ2NF90LCBu
YW1lLCB2YWx1ZSwgbWVhbmluZykKKyAgICBERUZJTkVfVkFSSUFCTEUoaW50NjRfdCwgbmFtZSwg
dmFsdWUsIG1lYW5pbmcpCiAgIAogI2RlZmluZSBERUZJTkVfZG91YmxlKG5hbWUsIHZhbHVlLCBt
ZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5n
KQorICAgIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKQogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtNDk0LDEwOSArNDk0LDEyIEBAIG5hbWVzcGFjZSBXVEYgewog
I2RlZmluZSBNRVNTQUdFIExPR19FUlJPUgogI2RlZmluZSBDSEVDS19DT05ESVRJT04gQVNTRVJU
CiAKLSNpZiBPUyhEQVJXSU4pCi1zdHJ1Y3QgU3BhbjsKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3RQYWRkZWQ7Ci1jbGFzcyBUQ01hbGxvY19QYWdlSGVhcDsKLWNsYXNzIFRDTWFsbG9j
X1RocmVhZENhY2hlOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhZ2VIZWFwQWxsb2Nh
dG9yOwotCi1jbGFzcyBGYXN0TWFsbG9jWm9uZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
aW5pdCgpOwotCi0gICAgc3RhdGljIGtlcm5fcmV0dXJuX3QgZW51bWVyYXRlKHRhc2tfdCwgdm9p
ZCosIHVuc2lnbmVkIHR5cGVNbWFzaywgdm1fYWRkcmVzc190IHpvbmVBZGRyZXNzLCBtZW1vcnlf
cmVhZGVyX3QsIHZtX3JhbmdlX3JlY29yZGVyX3QpOwotICAgIHN0YXRpYyBzaXplX3QgZ29vZFNp
emUobWFsbG9jX3pvbmVfdCosIHNpemVfdCBzaXplKSB7IHJldHVybiBzaXplOyB9Ci0gICAgc3Rh
dGljIGJvb2xlYW5fdCBjaGVjayhtYWxsb2Nfem9uZV90KikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHN0YXRpYyB2b2lkICBwcmludChtYWxsb2Nfem9uZV90KiwgYm9vbGVhbl90KSB7IH0KLSAgICBz
dGF0aWMgdm9pZCBsb2cobWFsbG9jX3pvbmVfdCosIHZvaWQqKSB7IH0KLSAgICBzdGF0aWMgdm9p
ZCBmb3JjZUxvY2sobWFsbG9jX3pvbmVfdCopIHsgfQotICAgIHN0YXRpYyB2b2lkIGZvcmNlVW5s
b2NrKG1hbGxvY196b25lX3QqKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBzdGF0aXN0aWNzKG1hbGxv
Y196b25lX3QqLCBtYWxsb2Nfc3RhdGlzdGljc190KiBzdGF0cykgeyBtZW1zZXQoc3RhdHMsIDAs
IHNpemVvZihtYWxsb2Nfc3RhdGlzdGljc190KSk7IH0KLQotcHJpdmF0ZToKLSAgICBGYXN0TWFs
bG9jWm9uZShUQ01hbGxvY19QYWdlSGVhcCosIFRDTWFsbG9jX1RocmVhZENhY2hlKiosIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBh
Z2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiopOwotICAgIHN0YXRpYyBzaXpl
X3Qgc2l6ZShtYWxsb2Nfem9uZV90KiwgY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyB2b2lkKiB6
b25lTWFsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QpOwotICAgIHN0YXRpYyB2b2lkKiB6b25l
Q2FsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QgbnVtSXRlbXMsIHNpemVfdCBzaXplKTsKLSAg
ICBzdGF0aWMgdm9pZCB6b25lRnJlZShtYWxsb2Nfem9uZV90Kiwgdm9pZCopOwotICAgIHN0YXRp
YyB2b2lkKiB6b25lUmVhbGxvYyhtYWxsb2Nfem9uZV90Kiwgdm9pZCosIHNpemVfdCk7Ci0gICAg
c3RhdGljIHZvaWQqIHpvbmVWYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCkgeyBMT0dfRVJS
T1IoInZhbGxvYyBpcyBub3Qgc3VwcG9ydGVkIik7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIHZv
aWQgem9uZURlc3Ryb3kobWFsbG9jX3pvbmVfdCopIHsgfQotCi0gICAgbWFsbG9jX3pvbmVfdCBt
X3pvbmU7Ci0gICAgVENNYWxsb2NfUGFnZUhlYXAqIG1fcGFnZUhlYXA7Ci0gICAgVENNYWxsb2Nf
VGhyZWFkQ2FjaGUqKiBtX3RocmVhZEhlYXBzOwotICAgIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3RQYWRkZWQqIG1fY2VudHJhbENhY2hlczsKLSAgICBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiog
bV9zcGFuQWxsb2NhdG9yOwotICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENh
Y2hlPiogbV9wYWdlSGVhcEFsbG9jYXRvcjsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKLQotI2lm
bmRlZiBXVEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBz
ZXQuICBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgotLy8geW91J3JlIHBvcnRpbmcgdG8gYSBz
eXN0ZW0gd2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQgYSBzdGFja3RyYWNlLgotI2lmZGVmIE5P
X1RDTUFMTE9DX1NBTVBMRVMKLS8vIFdlIHVzZSAjZGVmaW5lIHNvIGNvZGUgY29tcGlsZXMgZXZl
biBpZiB5b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNvbWVob3cuCi0jIGRlZmluZSBHZXRTdGFj
a1RyYWNlKHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQotI2Vsc2UKLSMgaW5jbHVkZSA8Z29vZ2xl
L3N0YWNrdHJhY2UuaD4KLSNlbmRpZgotI2VuZGlmCi0KLS8vIEV2ZW4gaWYgd2UgaGF2ZSBzdXBw
b3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0aGUgY29tcGlsZXIKLS8vIGFuZCBsaW5r
ZXIsIHRoZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuICBXZSBuZWVkIHRvIGNoZWNrIHRoYXQgYXQK
LS8vIHJ1bnRpbWUuICBSaWdodCBub3csIHdlIGhhdmUgdG8ga2VlcCBhIG1hbnVhbCBzZXQgb2Yg
ImJhZCIgT1Nlcy4KLSNpZiBkZWZpbmVkKEhBVkVfVExTKQotICBzdGF0aWMgYm9vbCBrZXJuZWxf
c3VwcG9ydHNfdGxzID0gZmFsc2U7ICAgICAgLy8gYmUgY29uc2VydmF0aXZlCi0gIHN0YXRpYyBp
bmxpbmUgYm9vbCBLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICByZXR1cm4ga2VybmVsX3N1cHBv
cnRzX3RsczsKLSAgfQotIyBpZiAhSEFWRV9ERUNMX1VOQU1FICAgLy8gaWYgdG9vIG9sZCBmb3Ig
dW5hbWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUwotICAgIHN0YXRpYyB2b2lkIENoZWNrSWZL
ZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsK
LSAgICB9Ci0jIGVsc2UKLSMgICBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAvLyBERUNMX1VO
QU1FIGNoZWNrZWQgZm9yIDxzeXMvdXRzbmFtZS5oPiB0b28KLSAgICBzdGF0aWMgdm9pZCBDaGVj
a0lmS2VybmVsU3VwcG9ydHNUTFMoKSB7Ci0gICAgICBzdHJ1Y3QgdXRzbmFtZSBidWY7Ci0gICAg
ICBpZiAodW5hbWUoJmJ1ZikgIT0gMCkgeyAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlCi0gICAg
ICAgIE1FU1NBR0UoInVuYW1lIGZhaWxlZCBhc3N1bWluZyBubyBUTFMgc3VwcG9ydCAoZXJybm89
JWQpXG4iLCBlcnJubyk7Ci0gICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKLSAg
ICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChidWYuc3lzbmFtZSwgImxpbnV4IikgPT0gMCkgewot
ICAgICAgICAvLyBUaGUgbGludXggY2FzZTogdGhlIGZpcnN0IGtlcm5lbCB0byBzdXBwb3J0IFRM
UyB3YXMgMi42LjAKLSAgICAgICAgaWYgKGJ1Zi5yZWxlYXNlWzBdIDwgJzInICYmIGJ1Zi5yZWxl
YXNlWzFdID09ICcuJykgICAgLy8gMC54IG9yIDEueAotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0
c190bHMgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYnVmLnJlbGVhc2VbMF0gPT0gJzInICYm
IGJ1Zi5yZWxlYXNlWzFdID09ICcuJyAmJgotICAgICAgICAgICAgICAgICBidWYucmVsZWFzZVsy
XSA+PSAnMCcgJiYgYnVmLnJlbGVhc2VbMl0gPCAnNicgJiYKLSAgICAgICAgICAgICAgICAgYnVm
LnJlbGVhc2VbM10gPT0gJy4nKSAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4wIC0gMi41Ci0g
ICAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IHRydWU7Ci0gICAgICB9IGVsc2UgeyAgICAgICAg
Ly8gc29tZSBvdGhlciBrZXJuZWwsIHdlJ2xsIGJlIG9wdGltaXNpdGljCi0gICAgICAgIGtlcm5l
bF9zdXBwb3J0c190bHMgPSB0cnVlOwotICAgICAgfQotICAgICAgLy8gVE9ETyhjc2lsdmVycyk6
IFZMT0coMSkgdGhlIHRscyBzdGF0dXMgb25jZSB3ZSBzdXBwb3J0IFJBV19WTE9HCi0gICAgfQot
IyAgZW5kaWYgIC8vIEhBVkVfREVDTF9VTkFNRQotI2VuZGlmICAgIC8vIEhBVkVfVExTCi0KLS8v
IF9fVEhST1cgaXMgZGVmaW5lZCBpbiBnbGliYyBzeXN0ZW1zLiAgSXQgbWVhbnMsIGNvdW50ZXIt
aW50dWl0aXZlbHksCi0vLyAiVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2Vw
dGlvbi4iICBJdCdzIGFuIG9wdGlvbmFsCi0vLyBvcHRpbWl6YXRpb24gdG9vbCwgYnV0IHdlIG1h
eSBuZWVkIHRvIHVzZSBpdCB0byBtYXRjaCBnbGliYyBwcm90b3R5cGVzLgotI2lmbmRlZiBfX1RI
Uk9XICAgIC8vIEkgZ3Vlc3Mgd2UncmUgbm90IG9uIGEgZ2xpYmMgc3lzdGVtCi0jIGRlZmluZSBf
X1RIUk9XICAgLy8gX19USFJPVyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbiwgc28gb2sgdG8gbWFr
ZSBpdCAiIgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ29uZmlndXJhdGlvbgogLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIC8vIE5vdCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIG9mIHRoZSBmb2xsb3dp
bmcgcGFyYW1ldGVycyBtYWtlCi0vLyBzZW5zZS4gIEluIHBhcnRpY3VsYXIsIGlmIGtNYXhTaXpl
IGluY3JlYXNlcywgeW91IG1heSBoYXZlIHRvCisvLyBzZW5zZS4gSW4gcGFydGljdWxhciwgaWYg
a01heFNpemUgaW5jcmVhc2VzLCB5b3UgbWF5IGhhdmUgdG8KIC8vIGluY3JlYXNlIGtOdW1DbGFz
c2VzIGFzIHdlbGwuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2hpZnQgID0gMTI7CiBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2l6ZSAgID0gMSA8PCBrUGFnZVNoaWZ0OwpAQCAtNjA5LDI0
ICs1MTIsMjQgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtQ2xhc3NlcyA9IDY4OwogLy8gMTI4
TUIKIHN0YXRpYyBjb25zdCBzaXplX3Qga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkID0g
MTI4IDw8IDIwOwogCi0vLyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBmZXRjaCBmcm9tIHN5
c3RlbSBhdCBhIHRpbWUuICBNdXN0IGJlCisvLyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBm
ZXRjaCBmcm9tIHN5c3RlbSBhdCBhIHRpbWUuIE11c3QgYmUKIC8vIHNpZ25pZmljYW50bHkgYmln
Z2VyIHRoYW4ga1BhZ2VTaXplIHRvIGFtb3J0aXplIHN5c3RlbS1jYWxsCi0vLyBvdmVyaGVhZCwg
YW5kIGFsc28gdG8gcmVkdWNlIGV4dGVybmFsIGZyYWdlbWVudGF0aW9uLiAgQWxzbywgd2UKKy8v
IG92ZXJoZWFkLCBhbmQgYWxzbyB0byByZWR1Y2UgZXh0ZXJuYWwgZnJhZ2VtZW50YXRpb24uIEFs
c28sIHdlCiAvLyBzaG91bGQga2VlcCB0aGlzIHZhbHVlIGJpZyBiZWNhdXNlIHZhcmlvdXMgaW5j
YXJuYXRpb25zIG9mIExpbnV4CiAvLyBoYXZlIHNtYWxsIGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9m
IG1tYXAoKSByZWdpb25zIHBlcgogLy8gYWRkcmVzcy1zcGFjZS4KIHN0YXRpYyBjb25zdCBzaXpl
X3Qga01pblN5c3RlbUFsbG9jID0gMSA8PCAoMjAgLSBrUGFnZVNoaWZ0KTsKIAogLy8gTnVtYmVy
IG9mIG9iamVjdHMgdG8gbW92ZSBiZXR3ZWVuIGEgcGVyLXRocmVhZCBsaXN0IGFuZCBhIGNlbnRy
YWwKLS8vIGxpc3QgaW4gb25lIHNob3QuICBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRvbyBzbWFs
bCBzbyB3ZSBjYW4KLS8vIGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nlc3Npbmcg
dGhlIGNlbnRyYWwgbGlzdC4gIE1ha2luZworLy8gbGlzdCBpbiBvbmUgc2hvdC4gV2Ugd2FudCB0
aGlzIHRvIGJlIG5vdCB0b28gc21hbGwgc28gd2UgY2FuCisvLyBhbW9ydGl6ZSB0aGUgbG9jayBv
dmVyaGVhZCBmb3IgYWNjZXNzaW5nIHRoZSBjZW50cmFsIGxpc3QuIE1ha2luZwogLy8gaXQgdG9v
IGJpZyBtYXkgdGVtcG9yYXJpbHkgY2F1c2UgdW5uZWNlc3NhcnkgbWVtb3J5IHdhc3RhZ2UgaW4g
dGhlCiAvLyBwZXItdGhyZWFkIGZyZWUgbGlzdCB1bnRpbCB0aGUgc2NhdmVuZ2VyIGNsZWFucyB1
cCB0aGUgbGlzdC4KLXN0YXRpYyBpbnQgbnVtX29iamVjdHNfdG9fbW92ZVtrTnVtQ2xhc3Nlc107
CitzdGF0aWMgaW50IG51bU9iamVjdHNUb01vdmVba051bUNsYXNzZXNdOwogCiAvLyBNYXhpbXVt
IGxlbmd0aCB3ZSBhbGxvdyBhIHBlci10aHJlYWQgZnJlZS1saXN0IHRvIGhhdmUgYmVmb3JlIHdl
Ci0vLyBtb3ZlIG9iamVjdHMgZnJvbSBpdCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGNlbnRyYWwg
ZnJlZS1saXN0LiAgV2UKLS8vIHdhbnQgdGhpcyBiaWcgdG8gYXZvaWQgbG9ja2luZyB0aGUgY2Vu
dHJhbCBmcmVlLWxpc3QgdG9vIG9mdGVuLiAgSXQKKy8vIG1vdmUgb2JqZWN0cyBmcm9tIGl0IGlu
dG8gdGhlIGNvcnJlc3BvbmRpbmcgY2VudHJhbCBmcmVlLWxpc3QuIFdlCisvLyB3YW50IHRoaXMg
YmlnIHRvIGF2b2lkIGxvY2tpbmcgdGhlIGNlbnRyYWwgZnJlZS1saXN0IHRvbyBvZnRlbi4gSXQK
IC8vIHNob3VsZCBub3QgaHVydCB0byBtYWtlIHRoaXMgbGlzdCBzb21ld2hhdCBiaWcgYmVjYXVz
ZSB0aGUKIC8vIHNjYXZlbmdpbmcgY29kZSB3aWxsIHNocmluayBpdCBkb3duIHdoZW4gaXRzIGNv
bnRlbnRzIGFyZSBub3QgaW4gdXNlLgogc3RhdGljIGNvbnN0IGludCBrTWF4RnJlZUxpc3RMZW5n
dGggPSAyNTY7CkBAIC02NDcsNyArNTUwLDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVs
dE92ZXJhbGxUaHJlYQogc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4UGFnZXMgPSBrTWluU3lzdGVt
QWxsb2M7CiAKIC8qIFRoZSBzbWFsbGVzdCBwcmltZSA+IDJebiAqLwotc3RhdGljIGludCBwcmlt
ZXNfbGlzdFtdID0geworc3RhdGljIGludCBwcmltZXNMaXN0W10gPSB7CiAgICAgLy8gU21hbGwg
dmFsdWVzIG1pZ2h0IGNhdXNlIGhpZ2ggcmF0ZXMgb2Ygc2FtcGxpbmcKICAgICAvLyBhbmQgaGVu
Y2UgY29tbWVudGVkIG91dC4KICAgICAvLyAyLCA1LCAxMSwgMTcsIDM3LCA2NywgMTMxLCAyNTcs
CkBAIC02NjUsMTAgKzU2OCw3IEBAIERFRklORV9pbnQ2NCh0Y21hbGxvY19zYW1wbGVfcGFyYW1l
dGVyLAogICAgICAgICAgICAgICJVbnVzZWQ6IGNvZGUgaXMgY29tcGlsZWQgd2l0aCBOT19UQ01B
TExPQ19TQU1QTEVTIik7CiBzdGF0aWMgc2l6ZV90IHNhbXBsZV9wZXJpb2QgPSAwOwogI2Vsc2UK
LURFRklORV9pbnQ2NCh0Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyLCAyNjIxNDcsCi0gICAgICAg
ICAiVHdpY2UgdGhlIGFwcHJveGltYXRlIGdhcCBiZXR3ZWVuIHNhbXBsaW5nIGFjdGlvbnMuIgot
ICAgICAgICAgIiBNdXN0IGJlIGEgcHJpbWUgbnVtYmVyLiBPdGhlcndpc2Ugd2lsbCBiZSByb3Vu
ZGVkIHVwIHRvIGEgIgotICAgICAgICAgIiBsYXJnZXIgcHJpbWUgbnVtYmVyIik7CitERUZJTkVf
aW50NjQodGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlciwgMjYyMTQ3LCAiVHdpY2UgdGhlIGFwcHJv
eGltYXRlIGdhcCBiZXR3ZWVuIHNhbXBsaW5nIGFjdGlvbnMuIE11c3QgYmUgYSBwcmltZSBudW1i
ZXIuIE90aGVyd2lzZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gYSBsYXJnZXIgcHJpbWUgbnVtYmVy
Iik7CiBzdGF0aWMgc2l6ZV90IHNhbXBsZV9wZXJpb2QgPSAyNjIxNDc7CiAjZW5kaWYKIApAQCAt
Njc3LDIzICs1NzcsMTggQEAgc3RhdGljIFNwaW5Mb2NrIHNhbXBsZV9wZXJpb2RfbG9jayA9IFNQ
SQogCiAvLyBQYXJhbWV0ZXJzIGZvciBjb250cm9sbGluZyBob3cgZmFzdCBtZW1vcnkgaXMgcmV0
dXJuZWQgdG8gdGhlIE9TLgogCi1ERUZJTkVfZG91YmxlKHRjbWFsbG9jX3JlbGVhc2VfcmF0ZSwg
MSwKLSAgICAgICAgICAgICAgIlJhdGUgYXQgd2hpY2ggd2UgcmVsZWFzZSB1bnVzZWQgbWVtb3J5
IHRvIHRoZSBzeXN0ZW0uICAiCi0gICAgICAgICAgICAgICJaZXJvIG1lYW5zIHdlIG5ldmVyIHJl
bGVhc2UgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbS4gICIKLSAgICAgICAgICAgICAgIkluY3Jl
YXNlIHRoaXMgZmxhZyB0byByZXR1cm4gbWVtb3J5IGZhc3RlcjsgZGVjcmVhc2UgaXQgIgotICAg
ICAgICAgICAgICAidG8gcmV0dXJuIG1lbW9yeSBzbG93ZXIuICBSZWFzb25hYmxlIHJhdGVzIGFy
ZSBpbiB0aGUgIgotICAgICAgICAgICAgICAicmFuZ2UgWzAsMTBdIik7CitERUZJTkVfZG91Ymxl
KHRjbWFsbG9jX3JlbGVhc2VfcmF0ZSwgMSwgIlJhdGUgYXQgd2hpY2ggd2UgcmVsZWFzZSB1bnVz
ZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0uIFplcm8gbWVhbnMgd2UgbmV2ZXIgcmVsZWFzZSBtZW1v
cnkgYmFjayB0byB0aGUgc3lzdGVtLiBJbmNyZWFzZSB0aGlzIGZsYWcgdG8gcmV0dXJuIG1lbW9y
eSBmYXN0ZXI7IGRlY3JlYXNlIGl0IHRvIHJldHVybiBtZW1vcnkgc2xvd2VyLiBSZWFzb25hYmxl
IHJhdGVzIGFyZSBpbiB0aGUgcmFuZ2UgWzAsMTBdIik7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFw
cGluZyBmcm9tIHNpemUgdG8gc2l6ZV9jbGFzcyBhbmQgdmljZSB2ZXJzYQorLy8gTWFwcGluZyBm
cm9tIHNpemUgdG8gc2l6ZWNsYXNzIGFuZCB2aWNlIHZlcnNhCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8g
U2l6ZXMgPD0gMTAyNCBoYXZlIGFuIGFsaWdubWVudCA+PSA4LiAgU28gZm9yIHN1Y2ggc2l6ZXMg
d2UgaGF2ZSBhbgotLy8gYXJyYXkgaW5kZXhlZCBieSBjZWlsKHNpemUvOCkuICBTaXplcyA+IDEw
MjQgaGF2ZSBhbiBhbGlnbm1lbnQgPj0gMTI4LgorLy8gU2l6ZXMgPD0gMTAyNCBoYXZlIGFuIGFs
aWdubWVudCA+PSA4LiBTbyBmb3Igc3VjaCBzaXplcyB3ZSBoYXZlIGFuCisvLyBhcnJheSBpbmRl
eGVkIGJ5IGNlaWwoc2l6ZS84KS4gU2l6ZXMgPiAxMDI0IGhhdmUgYW4gYWxpZ25tZW50ID49IDEy
OC4KIC8vIFNvIGZvciB0aGVzZSBsYXJnZXIgc2l6ZXMgd2UgaGF2ZSBhbiBhcnJheSBpbmRleGVk
IGJ5IGNlaWwoc2l6ZS8xMjgpLgogLy8KIC8vIFdlIGZsYXR0ZW4gYm90aCBsb2dpY2FsIGFycmF5
cyBpbnRvIG9uZSBwaHlzaWNhbCBhcnJheSBhbmQgdXNlCi0vLyBhcml0aG1ldGljIHRvIGNvbXB1
dGUgYW4gYXBwcm9wcmlhdGUgaW5kZXguICBUaGUgY29uc3RhbnRzIHVzZWQgYnkKKy8vIGFyaXRo
bWV0aWMgdG8gY29tcHV0ZSBhbiBhcHByb3ByaWF0ZSBpbmRleC4gVGhlIGNvbnN0YW50cyB1c2Vk
IGJ5CiAvLyBDbGFzc0luZGV4KCkgd2VyZSBzZWxlY3RlZCB0byBtYWtlIHRoZSBmbGF0dGVuaW5n
IHdvcmsuCiAvLwogLy8gRXhhbXBsZXM6CkBAIC03MDksMzAgKzYwNCwzMSBAQCBERUZJTkVfZG91
YmxlKHRjbWFsbG9jX3JlbGVhc2VfcmF0ZSwgMSwKIHN0YXRpYyBjb25zdCBzaXplX3Qga01heFNt
YWxsU2l6ZSA9IDEwMjQ7CiBzdGF0aWMgY29uc3QgaW50IHNoaWZ0X2Ftb3VudFsyXSA9IHsgMywg
NyB9OyAgLy8gRm9yIGRpdmlkZXMgYnkgOCBvciAxMjgKIHN0YXRpYyBjb25zdCBpbnQgYWRkX2Ft
b3VudFsyXSA9IHsgNywgMTI3ICsgKDEyMCA8PCA3KSB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIg
Y2xhc3NfYXJyYXlbMzc3XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYXNzQXJyYXlbMzc3XTsK
IAotLy8gQ29tcHV0ZSBpbmRleCBvZiB0aGUgY2xhc3NfYXJyYXlbXSBlbnRyeSBmb3IgYSBnaXZl
biBzaXplCi1zdGF0aWMgaW5saW5lIGludCBDbGFzc0luZGV4KHNpemVfdCBzKSB7Ci0gIGNvbnN0
IGludCBpID0gKHMgPiBrTWF4U21hbGxTaXplKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
KHMgKyBhZGRfYW1vdW50W2ldKSA+PiBzaGlmdF9hbW91bnRbaV0pOworLy8gQ29tcHV0ZSBpbmRl
eCBvZiB0aGUgY2xhc3NBcnJheVtdIGVudHJ5IGZvciBhIGdpdmVuIHNpemUKK3N0YXRpYyBpbmxp
bmUgaW50IENsYXNzSW5kZXgoc2l6ZV90IHMpCit7CisgICAgY29uc3QgaW50IGkgPSAocyA+IGtN
YXhTbWFsbFNpemUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KChzICsgYWRkX2Ftb3Vu
dFtpXSkgPj4gc2hpZnRfYW1vdW50W2ldKTsKIH0KIAogLy8gTWFwcGluZyBmcm9tIHNpemUgY2xh
c3MgdG8gbWF4IHNpemUgc3RvcmFibGUgaW4gdGhhdCBjbGFzcwotc3RhdGljIHNpemVfdCBjbGFz
c190b19zaXplW2tOdW1DbGFzc2VzXTsKK3N0YXRpYyBzaXplX3QgY2xhc3NUb3NpemVba051bUNs
YXNzZXNdOwogCiAvLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBudW1iZXIgb2YgcGFnZXMg
dG8gYWxsb2NhdGUgYXQgYSB0aW1lCiBzdGF0aWMgc2l6ZV90IGNsYXNzX3RvX3BhZ2VzW2tOdW1D
bGFzc2VzXTsKIAotLy8gVHJhbnNmZXJDYWNoZSBpcyB1c2VkIHRvIGNhY2hlIHRyYW5zZmVycyBv
ZiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NdCisvLyBUcmFuc2ZlckNhY2hlIGlzIHVz
ZWQgdG8gY2FjaGUgdHJhbnNmZXJzIG9mIG51bU9iamVjdHNUb01vdmVbc2l6ZWNsYXNzXQogLy8g
YmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aHJlYWQgY2FjaGVzIGFuZCB0aGUgY2VudHJhbCBjYWNo
ZSBmb3IgYSBnaXZlbiBzaXplCiAvLyBjbGFzcy4KIHN0cnVjdCBUQ0VudHJ5IHsKLSAgdm9pZCAq
aGVhZDsgIC8vIEhlYWQgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KLSAgdm9pZCAqdGFpbDsgIC8vIFRh
aWwgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KKyAgICB2b2lkKiBoZWFkOyAvLyBIZWFkIG9mIGNoYWlu
IG9mIG9iamVjdHMuCisgICAgdm9pZCogdGFpbDsgLy8gVGFpbCBvZiBjaGFpbiBvZiBvYmplY3Rz
LgogfTsKIC8vIEEgY2VudHJhbCBjYWNoZSBmcmVlbGlzdCBjYW4gaGF2ZSBhbnl3aGVyZSBmcm9t
IDAgdG8ga051bVRyYW5zZmVyRW50cmllcwotLy8gc2xvdHMgdG8gcHV0IGxpbmsgbGlzdCBjaGFp
bnMgaW50by4gIFRvIGtlZXAgbWVtb3J5IHVzYWdlIGJvdW5kZWQgdGhlIHRvdGFsCi0vLyBudW1i
ZXIgb2YgVENFbnRyaWVzIGFjcm9zcyBzaXplIGNsYXNzZXMgaXMgZml4ZWQuICBDdXJyZW50bHkg
ZWFjaCBzaXplCisvLyBzbG90cyB0byBwdXQgbGluayBsaXN0IGNoYWlucyBpbnRvLiBUbyBrZWVw
IG1lbW9yeSB1c2FnZSBib3VuZGVkIHRoZSB0b3RhbAorLy8gbnVtYmVyIG9mIFRDRW50cmllcyBh
Y3Jvc3Mgc2l6ZSBjbGFzc2VzIGlzIGZpeGVkLiBDdXJyZW50bHkgZWFjaCBzaXplCiAvLyBjbGFz
cyBpcyBpbml0aWFsbHkgZ2l2ZW4gb25lIFRDRW50cnkgd2hpY2ggYWxzbyBtZWFucyB0aGF0IHRo
ZSBtYXhpbXVtIGFueQogLy8gb25lIGNsYXNzIGNhbiBoYXZlIGlzIGtOdW1DbGFzc2VzLgogc3Rh
dGljIGNvbnN0IGludCBrTnVtVHJhbnNmZXJFbnRyaWVzID0ga051bUNsYXNzZXM7CkBAIC03NTYs
MzEyICs2NTIsMzI4IEBAIHN0YXRpYyBpbmxpbmUgaW50IExnRmxvb3Ioc2l6ZV90IG4pIHsKIC8v
IFNvbWUgdmVyeSBiYXNpYyBsaW5rZWQgbGlzdCBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB1
c2luZyB2b2lkICogYXMKIC8vIHN0b3JhZ2UuCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqU0xMX05l
eHQodm9pZCAqdCkgewotICByZXR1cm4gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4odCkpOwor
c3RhdGljIGlubGluZSB2b2lkICpTTExfTmV4dCh2b2lkICp0KQoreworICAgIHJldHVybiAqKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBTTExf
U2V0TmV4dCh2b2lkICp0LCB2b2lkICpuKSB7Ci0gICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KHQpKSA9IG47CitzdGF0aWMgaW5saW5lIHZvaWQgU0xMU2V0TmV4dCh2b2lkICp0LCB2b2lkICpu
KQoreworICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHQpKSA9IG47CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBTTExfUHVzaCh2b2lkICoqbGlzdCwgdm9pZCAqZWxlbWVudCkgewotICBT
TExfU2V0TmV4dChlbGVtZW50LCAqbGlzdCk7Ci0gICpsaXN0ID0gZWxlbWVudDsKK3N0YXRpYyBp
bmxpbmUgdm9pZCBTTExQdXNoKHZvaWQgKipsaXN0LCB2b2lkICplbGVtZW50KQoreworICAgIFNM
TFNldE5leHQoZWxlbWVudCwgKmxpc3QpOworICAgICpsaXN0ID0gZWxlbWVudDsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkICpTTExfUG9wKHZvaWQgKipsaXN0KSB7Ci0gIHZvaWQgKnJlc3VsdCA9
ICpsaXN0OwotICAqbGlzdCA9IFNMTF9OZXh0KCpsaXN0KTsKLSAgcmV0dXJuIHJlc3VsdDsKK3N0
YXRpYyBpbmxpbmUgdm9pZCAqU0xMUG9wKHZvaWQgKipsaXN0KQoreworICAgIHZvaWQqIHJlc3Vs
dCA9ICpsaXN0OworICAgICpsaXN0ID0gU0xMX05leHQoKmxpc3QpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAotLy8gUmVtb3ZlIE4gZWxlbWVudHMgZnJvbSBhIGxpbmtlZCBsaXN0IHRvIHdo
aWNoIGhlYWQgcG9pbnRzLiAgaGVhZCB3aWxsIGJlCi0vLyBtb2RpZmllZCB0byBwb2ludCB0byB0
aGUgbmV3IGhlYWQuICBzdGFydCBhbmQgZW5kIHdpbGwgcG9pbnQgdG8gdGhlIGZpcnN0Ci0vLyBh
bmQgbGFzdCBub2RlcyBvZiB0aGUgcmFuZ2UuICBOb3RlIHRoYXQgZW5kIHdpbGwgcG9pbnQgdG8g
TlVMTCBhZnRlciB0aGlzCisvLyBSZW1vdmUgTiBlbGVtZW50cyBmcm9tIGEgbGlua2VkIGxpc3Qg
dG8gd2hpY2ggaGVhZCBwb2ludHMuIGhlYWQgd2lsbCBiZQorLy8gbW9kaWZpZWQgdG8gcG9pbnQg
dG8gdGhlIG5ldyBoZWFkLiBzdGFydCBhbmQgZW5kIHdpbGwgcG9pbnQgdG8gdGhlIGZpcnN0Cisv
LyBhbmQgbGFzdCBub2RlcyBvZiB0aGUgcmFuZ2UuIE5vdGUgdGhhdCBlbmQgd2lsbCBwb2ludCB0
byAwIGFmdGVyIHRoaXMKIC8vIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBTTExfUG9wUmFuZ2Uodm9pZCAqKmhlYWQsIGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQgKipl
bmQpIHsKLSAgaWYgKE4gPT0gMCkgewotICAgICpzdGFydCA9IE5VTEw7Ci0gICAgKmVuZCA9IE5V
TEw7Ci0gICAgcmV0dXJuOwotICB9CitzdGF0aWMgaW5saW5lIHZvaWQgU0xMUG9wUmFuZ2Uodm9p
ZCAqKmhlYWQsIGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpCit7CisgICAgaWYgKCFO
KSB7CisgICAgICAgICpzdGFydCA9IDA7CisgICAgICAgICplbmQgPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0gIHZvaWQgKnRtcCA9ICpoZWFkOwotICBmb3IgKGludCBpID0gMTsgaSA8
IE47ICsraSkgewotICAgIHRtcCA9IFNMTF9OZXh0KHRtcCk7Ci0gIH0KKyAgICB2b2lkKiB0bXAg
PSAqaGVhZDsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IE47ICsraSkKKyAgICAgICAgdG1wID0g
U0xMX05leHQodG1wKTsKIAotICAqc3RhcnQgPSAqaGVhZDsKLSAgKmVuZCA9IHRtcDsKLSAgKmhl
YWQgPSBTTExfTmV4dCh0bXApOwotICAvLyBVbmxpbmsgcmFuZ2UgZnJvbSBsaXN0LgotICBTTExf
U2V0TmV4dCh0bXAsIE5VTEwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgU0xMX1B1c2hSYW5n
ZSh2b2lkICoqaGVhZCwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkgewotICBpZiAoIXN0YXJ0KSBy
ZXR1cm47Ci0gIFNMTF9TZXROZXh0KGVuZCwgKmhlYWQpOwotICAqaGVhZCA9IHN0YXJ0OwotfQot
Ci1zdGF0aWMgaW5saW5lIHNpemVfdCBTTExfU2l6ZSh2b2lkICpoZWFkKSB7Ci0gIGludCBjb3Vu
dCA9IDA7Ci0gIHdoaWxlIChoZWFkKSB7Ci0gICAgY291bnQrKzsKLSAgICBoZWFkID0gU0xMX05l
eHQoaGVhZCk7Ci0gIH0KLSAgcmV0dXJuIGNvdW50OworICAgICpzdGFydCA9ICpoZWFkOworICAg
ICplbmQgPSB0bXA7CisgICAgKmhlYWQgPSBTTExfTmV4dCh0bXApOworICAgIC8vIFVubGluayBy
YW5nZSBmcm9tIGxpc3QuCisgICAgU0xMU2V0TmV4dCh0bXAsIDApOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgU0xMUHVzaFJhbmdlKHZvaWQgKipoZWFkLCB2b2lkICpzdGFydCwgdm9pZCAqZW5k
KQoreworICAgIGlmICghc3RhcnQpCisgICAgICAgIHJldHVybjsKKyAgICBTTExTZXROZXh0KGVu
ZCwgKmhlYWQpOworICAgICpoZWFkID0gc3RhcnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90
IFNMTFNpemUodm9pZCAqaGVhZCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIHdoaWxlICho
ZWFkKSB7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGhlYWQgPSBTTExfTmV4dChoZWFkKTsK
KyAgICB9CisgICAgcmV0dXJuIGNvdW50OwogfQogCiAvLyBTZXR1cCBoZWxwZXIgZnVuY3Rpb25z
LgogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBzaXplX3QgU2l6ZUNsYXNzKHNpemVfdCBzaXplKSB7
Ci0gIHJldHVybiBjbGFzc19hcnJheVtDbGFzc0luZGV4KHNpemUpXTsKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIHNpemVfdCBTaXplQ2xhc3Moc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGNsYXNz
QXJyYXlbQ2xhc3NJbmRleChzaXplKV07CiB9CiAKIC8vIEdldCB0aGUgYnl0ZS1zaXplIGZvciBh
IHNwZWNpZmllZCBjbGFzcwotc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90IEJ5dGVTaXplRm9y
Q2xhc3Moc2l6ZV90IGNsKSB7Ci0gIHJldHVybiBjbGFzc190b19zaXplW2NsXTsKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIHNpemVfdCBCeXRlU2l6ZUZvckNsYXNzKHNpemVfdCBjbCkKK3sKKyAgICBy
ZXR1cm4gY2xhc3NUb3NpemVbY2xdOwogfQotc3RhdGljIGludCBOdW1Nb3ZlU2l6ZShzaXplX3Qg
c2l6ZSkgewotICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gMDsKLSAgLy8gVXNlIGFwcHJveCA2NGsg
dHJhbnNmZXJzIGJldHdlZW4gdGhyZWFkIGFuZCBjZW50cmFsIGNhY2hlcy4KLSAgaW50IG51bSA9
IHN0YXRpY19jYXN0PGludD4oNjQuMCAqIDEwMjQuMCAvIHNpemUpOwotICBpZiAobnVtIDwgMikg
bnVtID0gMjsKLSAgLy8gQ2xhbXAgd2VsbCBiZWxvdyBrTWF4RnJlZUxpc3RMZW5ndGggdG8gYXZv
aWQgcGluZyBwb25nIGJldHdlZW4gY2VudHJhbAotICAvLyBhbmQgdGhyZWFkIGNhY2hlcy4KLSAg
aWYgKG51bSA+IHN0YXRpY19jYXN0PGludD4oMC44ICoga01heEZyZWVMaXN0TGVuZ3RoKSkKLSAg
ICBudW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDAuOCAqIGtNYXhGcmVlTGlzdExlbmd0aCk7Ci0KLSAg
Ly8gQWxzbywgYXZvaWQgYnJpbmdpbmcgaW4gdG9vIG1hbnkgb2JqZWN0cyBpbnRvIHNtYWxsIG9i
amVjdCBmcmVlCi0gIC8vIGxpc3RzLiAgVGhlcmUgYXJlIGxvdHMgb2Ygc3VjaCBsaXN0cywgYW5k
IGlmIHdlIGFsbG93IGVhY2ggb25lIHRvCi0gIC8vIGZldGNoIHRvbyBtYW55IGF0IGEgdGltZSwg
d2UgZW5kIHVwIGhhdmluZyB0byBzY2F2ZW5nZSB0b28gb2Z0ZW4KLSAgLy8gKGVzcGVjaWFsbHkg
d2hlbiB0aGVyZSBhcmUgbG90cyBvZiB0aHJlYWRzIGFuZCBlYWNoIHRocmVhZCBnZXRzIGEKLSAg
Ly8gc21hbGwgYWxsb3dhbmNlIGZvciBpdHMgdGhyZWFkIGNhY2hlKS4KLSAgLy8KLSAgLy8gVE9E
TzogTWFrZSB0aHJlYWQgY2FjaGUgZnJlZSBsaXN0IHNpemVzIGR5bmFtaWMgc28gdGhhdCB3ZSBk
byBub3QKLSAgLy8gaGF2ZSB0byBlcXVhbGx5IGRpdmlkZSBhIGZpeGVkIHJlc291cmNlIGFtb25n
c3QgbG90cyBvZiB0aHJlYWRzLgotICBpZiAobnVtID4gMzIpIG51bSA9IDMyOworc3RhdGljIGlu
dCBOdW1Nb3ZlU2l6ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJl
dHVybiAwOworICAgIC8vIFVzZSBhcHByb3ggNjRrIHRyYW5zZmVycyBiZXR3ZWVuIHRocmVhZCBh
bmQgY2VudHJhbCBjYWNoZXMuCisgICAgaW50IG51bSA9IHN0YXRpY19jYXN0PGludD4oNjQuMCAq
IDEwMjQuMCAvIHNpemUpOworICAgIGlmIChudW0gPCAyKQorICAgICAgICBudW0gPSAyOworICAg
IC8vIENsYW1wIHdlbGwgYmVsb3cga01heEZyZWVMaXN0TGVuZ3RoIHRvIGF2b2lkIHBpbmcgcG9u
ZyBiZXR3ZWVuIGNlbnRyYWwKKyAgICAvLyBhbmQgdGhyZWFkIGNhY2hlcy4KKyAgICBpZiAobnVt
ID4gc3RhdGljX2Nhc3Q8aW50PigwLjggKiBrTWF4RnJlZUxpc3RMZW5ndGgpKQorICAgICAgICBu
dW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDAuOCAqIGtNYXhGcmVlTGlzdExlbmd0aCk7CisKKyAgICAv
LyBBbHNvLCBhdm9pZCBicmluZ2luZyBpbiB0b28gbWFueSBvYmplY3RzIGludG8gc21hbGwgb2Jq
ZWN0IGZyZWUKKyAgICAvLyBsaXN0cy4gVGhlcmUgYXJlIGxvdHMgb2Ygc3VjaCBsaXN0cywgYW5k
IGlmIHdlIGFsbG93IGVhY2ggb25lIHRvCisgICAgLy8gZmV0Y2ggdG9vIG1hbnkgYXQgYSB0aW1l
LCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHNjYXZlbmdlIHRvbyBvZnRlbgorICAgIC8vIChlc3BlY2lh
bGx5IHdoZW4gdGhlcmUgYXJlIGxvdHMgb2YgdGhyZWFkcyBhbmQgZWFjaCB0aHJlYWQgZ2V0cyBh
CisgICAgLy8gc21hbGwgYWxsb3dhbmNlIGZvciBpdHMgdGhyZWFkIGNhY2hlKS4KKyAgICAvLwor
ICAgIC8vIFRPRE86IE1ha2UgdGhyZWFkIGNhY2hlIGZyZWUgbGlzdCBzaXplcyBkeW5hbWljIHNv
IHRoYXQgd2UgZG8gbm90CisgICAgLy8gaGF2ZSB0byBlcXVhbGx5IGRpdmlkZSBhIGZpeGVkIHJl
c291cmNlIGFtb25nc3QgbG90cyBvZiB0aHJlYWRzLgorICAgIGlmIChudW0gPiAzMikKKyAgICAg
ICAgbnVtID0gMzI7CiAKLSAgcmV0dXJuIG51bTsKKyAgICByZXR1cm4gbnVtOwogfQogCiAvLyBJ
bml0aWFsaXplIHRoZSBtYXBwaW5nIGFycmF5cwotc3RhdGljIHZvaWQgSW5pdFNpemVDbGFzc2Vz
KCkgewotICAvLyBEbyBzb21lIHNhbml0eSBjaGVja2luZyBvbiBhZGRfYW1vdW50W10vc2hpZnRf
YW1vdW50W10vY2xhc3NfYXJyYXlbXQotICBpZiAoQ2xhc3NJbmRleCgwKSA8IDApIHsKLSAgICBN
RVNTQUdFKCJJbnZhbGlkIGNsYXNzIGluZGV4ICVkIGZvciBzaXplIDBcbiIsIENsYXNzSW5kZXgo
MCkpOwotICAgIENSQVNIKCk7Ci0gIH0KLSAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oQ2xhc3NJ
bmRleChrTWF4U2l6ZSkpID49IHNpemVvZihjbGFzc19hcnJheSkpIHsKLSAgICBNRVNTQUdFKCJJ
bnZhbGlkIGNsYXNzIGluZGV4ICVkIGZvciBrTWF4U2l6ZVxuIiwgQ2xhc3NJbmRleChrTWF4U2l6
ZSkpOwotICAgIENSQVNIKCk7Ci0gIH0KLQotICAvLyBDb21wdXRlIHRoZSBzaXplIGNsYXNzZXMg
d2Ugd2FudCB0byB1c2UKLSAgc2l6ZV90IHNjID0gMTsgICAvLyBOZXh0IHNpemUgY2xhc3MgdG8g
YXNzaWduCi0gIHVuc2lnbmVkIGNoYXIgYWxpZ25zaGlmdCA9IGtBbGlnblNoaWZ0OwotICBpbnQg
bGFzdF9sZyA9IC0xOwotICBmb3IgKHNpemVfdCBzaXplID0ga0FsaWdubWVudDsgc2l6ZSA8PSBr
TWF4U2l6ZTsgc2l6ZSArPSAoMSA8PCBhbGlnbnNoaWZ0KSkgewotICAgIGludCBsZyA9IExnRmxv
b3Ioc2l6ZSk7Ci0gICAgaWYgKGxnID4gbGFzdF9sZykgewotICAgICAgLy8gSW5jcmVhc2UgYWxp
Z25tZW50IGV2ZXJ5IHNvIG9mdGVuLgotICAgICAgLy8KLSAgICAgIC8vIFNpbmNlIHdlIGRvdWJs
ZSB0aGUgYWxpZ25tZW50IGV2ZXJ5IHRpbWUgc2l6ZSBkb3VibGVzIGFuZAotICAgICAgLy8gc2l6
ZSA+PSAxMjgsIHRoaXMgbWVhbnMgdGhhdCBzcGFjZSB3YXN0ZWQgZHVlIHRvIGFsaWdubWVudCBp
cwotICAgICAgLy8gYXQgbW9zdCAxNi8xMjggaS5lLiwgMTIuNSUuICBQbHVzIHdlIGNhcCB0aGUg
YWxpZ25tZW50IGF0IDI1NgotICAgICAgLy8gYnl0ZXMsIHNvIHRoZSBzcGFjZSB3YXN0ZWQgYXMg
YSBwZXJjZW50YWdlIHN0YXJ0cyBmYWxsaW5nIGZvcgotICAgICAgLy8gc2l6ZXMgPiAySy4KLSAg
ICAgIGlmICgobGcgPj0gNykgJiYgKGFsaWduc2hpZnQgPCA4KSkgewotICAgICAgICBhbGlnbnNo
aWZ0Kys7Ci0gICAgICB9Ci0gICAgICBsYXN0X2xnID0gbGc7CitzdGF0aWMgdm9pZCBJbml0U2l6
ZUNsYXNzZXMoKQoreworICAgIC8vIERvIHNvbWUgc2FuaXR5IGNoZWNraW5nIG9uIGFkZF9hbW91
bnRbXS9zaGlmdF9hbW91bnRbXS9jbGFzc0FycmF5W10KKyAgICBpZiAoQ2xhc3NJbmRleCgwKSA8
IDApIHsKKyAgICAgICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBmb3Igc2l6ZSAw
XG4iLCBDbGFzc0luZGV4KDApKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0KLSAgICAvLyBB
bGxvY2F0ZSBlbm91Z2ggcGFnZXMgc28gbGVmdG92ZXIgaXMgbGVzcyB0aGFuIDEvOCBvZiB0b3Rh
bC4KLSAgICAvLyBUaGlzIGJvdW5kcyB3YXN0ZWQgc3BhY2UgdG8gYXQgbW9zdCAxMi41JS4KLSAg
ICBzaXplX3QgcHNpemUgPSBrUGFnZVNpemU7Ci0gICAgd2hpbGUgKChwc2l6ZSAlIHNpemUpID4g
KHBzaXplID4+IDMpKSB7Ci0gICAgICBwc2l6ZSArPSBrUGFnZVNpemU7Ci0gICAgfQotICAgIGNv
bnN0IHNpemVfdCBteV9wYWdlcyA9IHBzaXplID4+IGtQYWdlU2hpZnQ7Ci0KLSAgICBpZiAoc2Mg
PiAxICYmIG15X3BhZ2VzID09IGNsYXNzX3RvX3BhZ2VzW3NjLTFdKSB7Ci0gICAgICAvLyBTZWUg
aWYgd2UgY2FuIG1lcmdlIHRoaXMgaW50byB0aGUgcHJldmlvdXMgY2xhc3Mgd2l0aG91dAotICAg
ICAgLy8gaW5jcmVhc2luZyB0aGUgZnJhZ21lbnRhdGlvbiBvZiB0aGUgcHJldmlvdXMgY2xhc3Mu
Ci0gICAgICBjb25zdCBzaXplX3QgbXlfb2JqZWN0cyA9IChteV9wYWdlcyA8PCBrUGFnZVNoaWZ0
KSAvIHNpemU7Ci0gICAgICBjb25zdCBzaXplX3QgcHJldl9vYmplY3RzID0gKGNsYXNzX3RvX3Bh
Z2VzW3NjLTFdIDw8IGtQYWdlU2hpZnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyBjbGFzc190b19zaXplW3NjLTFdOwotICAgICAgaWYgKG15X29iamVjdHMgPT0gcHJldl9v
YmplY3RzKSB7Ci0gICAgICAgIC8vIEFkanVzdCBsYXN0IGNsYXNzIHRvIGluY2x1ZGUgdGhpcyBz
aXplCi0gICAgICAgIGNsYXNzX3RvX3NpemVbc2MtMV0gPSBzaXplOwotICAgICAgICBjb250aW51
ZTsKLSAgICAgIH0KKyAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihDbGFzc0luZGV4KGtNYXhT
aXplKSkgPj0gc2l6ZW9mKGNsYXNzQXJyYXkpKSB7CisgICAgICAgIE1FU1NBR0UoIkludmFsaWQg
Y2xhc3MgaW5kZXggJWQgZm9yIGtNYXhTaXplXG4iLCBDbGFzc0luZGV4KGtNYXhTaXplKSk7Cisg
ICAgICAgIENSQVNIKCk7CiAgICAgfQogCi0gICAgLy8gQWRkIG5ldyBjbGFzcwotICAgIGNsYXNz
X3RvX3BhZ2VzW3NjXSA9IG15X3BhZ2VzOwotICAgIGNsYXNzX3RvX3NpemVbc2NdID0gc2l6ZTsK
LSAgICBzYysrOwotICB9Ci0gIGlmIChzYyAhPSBrTnVtQ2xhc3NlcykgewotICAgIE1FU1NBR0Uo
Indyb25nIG51bWJlciBvZiBzaXplIGNsYXNzZXM6IGZvdW5kICUiIFBSSXVTICIgaW5zdGVhZCBv
ZiAlZFxuIiwKKyAgICAvLyBDb21wdXRlIHRoZSBzaXplIGNsYXNzZXMgd2Ugd2FudCB0byB1c2UK
KyAgICBzaXplX3Qgc2MgPSAxOyAvLyBOZXh0IHNpemUgY2xhc3MgdG8gYXNzaWduCisgICAgdW5z
aWduZWQgY2hhciBhbGlnbnNoaWZ0ID0ga0FsaWduU2hpZnQ7CisgICAgaW50IGxhc3RMZyA9IC0x
OworICAgIGZvciAoc2l6ZV90IHNpemUgPSBrQWxpZ25tZW50OyBzaXplIDw9IGtNYXhTaXplOyBz
aXplICs9ICgxIDw8IGFsaWduc2hpZnQpKSB7CisgICAgICAgIGludCBsZyA9IExnRmxvb3Ioc2l6
ZSk7CisgICAgICAgIGlmIChsZyA+IGxhc3RMZykgeworICAgICAgICAgICAgLy8gSW5jcmVhc2Ug
YWxpZ25tZW50IGV2ZXJ5IHNvIG9mdGVuLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IFNpbmNlIHdlIGRvdWJsZSB0aGUgYWxpZ25tZW50IGV2ZXJ5IHRpbWUgc2l6ZSBkb3VibGVzIGFu
ZAorICAgICAgICAgICAgLy8gc2l6ZSA+PSAxMjgsIHRoaXMgbWVhbnMgdGhhdCBzcGFjZSB3YXN0
ZWQgZHVlIHRvIGFsaWdubWVudCBpcworICAgICAgICAgICAgLy8gYXQgbW9zdCAxNi8xMjggaS5l
LiwgMTIuNSUuIFBsdXMgd2UgY2FwIHRoZSBhbGlnbm1lbnQgYXQgMjU2CisgICAgICAgICAgICAv
LyBieXRlcywgc28gdGhlIHNwYWNlIHdhc3RlZCBhcyBhIHBlcmNlbnRhZ2Ugc3RhcnRzIGZhbGxp
bmcgZm9yCisgICAgICAgICAgICAvLyBzaXplcyA+IDJLLgorICAgICAgICAgICAgaWYgKChsZyA+
PSA3KSAmJiAoYWxpZ25zaGlmdCA8IDgpKQorICAgICAgICAgICAgICAgIGFsaWduc2hpZnQrKzsK
KyAgICAgICAgICAgIGxhc3RMZyA9IGxnOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb2Nh
dGUgZW5vdWdoIHBhZ2VzIHNvIGxlZnRvdmVyIGlzIGxlc3MgdGhhbiAxLzggb2YgdG90YWwuCisg
ICAgICAgIC8vIFRoaXMgYm91bmRzIHdhc3RlZCBzcGFjZSB0byBhdCBtb3N0IDEyLjUlLgorICAg
ICAgICBzaXplX3QgcHNpemUgPSBrUGFnZVNpemU7CisgICAgICAgIHdoaWxlICgocHNpemUgJSBz
aXplKSA+IChwc2l6ZSA+PiAzKSkKKyAgICAgICAgICAgIHBzaXplICs9IGtQYWdlU2l6ZTsKKyAg
ICAgICAgY29uc3Qgc2l6ZV90IG15UGFnZXMgPSBwc2l6ZSA+PiBrUGFnZVNoaWZ0OworCisgICAg
ICAgIGlmIChzYyA+IDEgJiYgbXlQYWdlcyA9PSBjbGFzc190b19wYWdlc1tzYy0xXSkgeworICAg
ICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBtZXJnZSB0aGlzIGludG8gdGhlIHByZXZpb3VzIGNs
YXNzIHdpdGhvdXQKKyAgICAgICAgICAgIC8vIGluY3JlYXNpbmcgdGhlIGZyYWdtZW50YXRpb24g
b2YgdGhlIHByZXZpb3VzIGNsYXNzLgorICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG15T2JqZWN0
cyA9IChteVBhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gc2l6ZTsKKyAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBwcmV2b2JqZWN0cyA9IChjbGFzc190b19wYWdlc1tzYy0xXSA8PCBrUGFnZVNoaWZ0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gY2xhc3NUb3NpemVbc2Mt
MV07CisgICAgICAgICAgICBpZiAobXlPYmplY3RzID09IHByZXZvYmplY3RzKSB7CisgICAgICAg
ICAgICAgICAgLy8gQWRqdXN0IGxhc3QgY2xhc3MgdG8gaW5jbHVkZSB0aGlzIHNpemUKKyAgICAg
ICAgICAgICAgICBjbGFzc1Rvc2l6ZVtzYy0xXSA9IHNpemU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgbmV3IGNs
YXNzCisgICAgICAgIGNsYXNzX3RvX3BhZ2VzW3NjXSA9IG15UGFnZXM7CisgICAgICAgIGNsYXNz
VG9zaXplW3NjXSA9IHNpemU7CisgICAgICAgIHNjKys7CisgICAgfQorICAgIGlmIChzYyAhPSBr
TnVtQ2xhc3NlcykgeworICAgICAgICBNRVNTQUdFKCJ3cm9uZyBudW1iZXIgb2Ygc2l6ZSBjbGFz
c2VzOiBmb3VuZCAlIiBQUkl1UyAiIGluc3RlYWQgb2YgJWRcbiIsCiAgICAgICAgICAgICBzYywg
aW50KGtOdW1DbGFzc2VzKSk7Ci0gICAgQ1JBU0goKTsKLSAgfQorICAgICAgICBDUkFTSCgpOwor
ICAgIH0KIAotICAvLyBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGFycmF5cwotICBpbnQgbmV4dF9z
aXplID0gMDsKLSAgZm9yICh1bnNpZ25lZCBjaGFyIGMgPSAxOyBjIDwga051bUNsYXNzZXM7IGMr
KykgewotICAgIGNvbnN0IHNpemVfdCBtYXhfc2l6ZV9pbl9jbGFzcyA9IGNsYXNzX3RvX3NpemVb
Y107Ci0gICAgZm9yIChzaXplX3QgcyA9IG5leHRfc2l6ZTsgcyA8PSBtYXhfc2l6ZV9pbl9jbGFz
czsgcyArPSBrQWxpZ25tZW50KSB7Ci0gICAgICBjbGFzc19hcnJheVtDbGFzc0luZGV4KHMpXSA9
IGM7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBhcnJheXMKKyAgICBpbnQgbmV4dHNp
emUgPSAwOworICAgIGZvciAodW5zaWduZWQgY2hhciBjID0gMTsgYyA8IGtOdW1DbGFzc2VzOyBj
KyspIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG1heFNpemVpbkNsYXNzID0gY2xhc3NUb3NpemVb
Y107CisgICAgICAgIGZvciAoc2l6ZV90IHMgPSBuZXh0c2l6ZTsgcyA8PSBtYXhTaXplaW5DbGFz
czsgcyArPSBrQWxpZ25tZW50KQorICAgICAgICAgICAgY2xhc3NBcnJheVtDbGFzc0luZGV4KHMp
XSA9IGM7CisgICAgICAgIG5leHRzaXplID0gc3RhdGljX2Nhc3Q8aW50PihtYXhTaXplaW5DbGFz
cyArIGtBbGlnbm1lbnQpOwogICAgIH0KLSAgICBuZXh0X3NpemUgPSBzdGF0aWNfY2FzdDxpbnQ+
KG1heF9zaXplX2luX2NsYXNzICsga0FsaWdubWVudCk7Ci0gIH0KIAotICAvLyBEb3VibGUtY2hl
Y2sgc2l6ZXMganVzdCB0byBiZSBzYWZlCi0gIGZvciAoc2l6ZV90IHNpemUgPSAwOyBzaXplIDw9
IGtNYXhTaXplOyBzaXplKyspIHsKLSAgICBjb25zdCBzaXplX3Qgc2MgPSBTaXplQ2xhc3Moc2l6
ZSk7Ci0gICAgaWYgKHNjID09IDApIHsKLSAgICAgIE1FU1NBR0UoIkJhZCBzaXplIGNsYXNzICUi
IFBSSXVTICIgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKLSAgICAgIENSQVNIKCk7Ci0g
ICAgfQotICAgIGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFzc190b19zaXplW3NjLTFdKSB7Ci0g
ICAgICBNRVNTQUdFKCJBbGxvY2F0aW5nIHVubmVjZXNzYXJpbHkgbGFyZ2UgY2xhc3MgJSIgUFJJ
dVMgIiBmb3IgJSIgUFJJdVMKLSAgICAgICAgICAgICAgIlxuIiwgc2MsIHNpemUpOwotICAgICAg
Q1JBU0goKTsKLSAgICB9Ci0gICAgaWYgKHNjID49IGtOdW1DbGFzc2VzKSB7Ci0gICAgICBNRVNT
QUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiXG4iLCBzYywgc2l6
ZSk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBjb25zdCBzaXplX3QgcyA9IGNsYXNzX3Rv
X3NpemVbc2NdOwotICAgIGlmIChzaXplID4gcykgewotICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAl
IiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBSSXVTICIpXG4iLCBzLCBzaXplLCBz
Yyk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBpZiAocyA9PSAwKSB7Ci0gICAgICBNRVNT
QUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBSSXVTICIp
XG4iLCBzLCBzaXplLCBzYyk7Ci0gICAgICBDUkFTSCgpOworICAgIC8vIERvdWJsZS1jaGVjayBz
aXplcyBqdXN0IHRvIGJlIHNhZmUKKyAgICBmb3IgKHNpemVfdCBzaXplID0gMDsgc2l6ZSA8PSBr
TWF4U2l6ZTsgc2l6ZSsrKSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBzYyA9IFNpemVDbGFzcyhz
aXplKTsKKyAgICAgICAgaWYgKCFzYykgeworICAgICAgICAgICAgTUVTU0FHRSgiQmFkIHNpemUg
Y2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIlxuIiwgc2MsIHNpemUpOworICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2MgPiAxICYmIHNpemUgPD0gY2xh
c3NUb3NpemVbc2MtMV0pIHsKKyAgICAgICAgICAgIE1FU1NBR0UoIkFsbG9jYXRpbmcgdW5uZWNl
c3NhcmlseSBsYXJnZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UworICAgICAgICAgICAg
ICAgICAgICAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9
CisgICAgICAgIGlmIChzYyA+PSBrTnVtQ2xhc3NlcykgeworICAgICAgICAgICAgTUVTU0FHRSgi
QmFkIHNpemUgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIlxuIiwgc2MsIHNpemUpOwor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBzaXplX3QgcyA9
IGNsYXNzVG9zaXplW3NjXTsKKyAgICAgICAgaWYgKHNpemUgPiBzKSB7CisgICAgICAgICAgICBN
RVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBSSXVT
ICIpXG4iLCBzLCBzaXplLCBzYyk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghcykgeworICAgICAgICAgICAgTUVTU0FHRSgiQmFkIHNpemUgJSIgUFJJdVMg
IiBmb3IgJSIgUFJJdVMgIiAoc2MgPSAlIiBQUkl1UyAiKVxuIiwgcywgc2l6ZSwgc2MpOworICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIC8vIEluaXRpYWxp
emUgdGhlIG51bV9vYmplY3RzX3RvX21vdmUgYXJyYXkuCi0gIGZvciAoc2l6ZV90IGNsID0gMTsg
Y2wgIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBudW1fb2JqZWN0c190b19tb3ZlW2NsXSA9
IE51bU1vdmVTaXplKEJ5dGVTaXplRm9yQ2xhc3MoY2wpKTsKLSAgfQorICAgIC8vIEluaXRpYWxp
emUgdGhlIG51bU9iamVjdHNUb01vdmUgYXJyYXkuCisgICAgZm9yIChzaXplX3QgY2wgPSAxOyBj
bCAgPCBrTnVtQ2xhc3NlczsgKytjbCkKKyAgICAgICAgbnVtT2JqZWN0c1RvTW92ZVtjbF0gPSBO
dW1Nb3ZlU2l6ZShCeXRlU2l6ZUZvckNsYXNzKGNsKSk7CiAKICNpZm5kZWYgV1RGX0NIQU5HRVMK
LSAgaWYgKGZhbHNlKSB7Ci0gICAgLy8gRHVtcCBjbGFzcyBzaXplcyBhbmQgbWF4aW11bSBleHRl
cm5hbCB3YXN0YWdlIHBlciBzaXplIGNsYXNzCi0gICAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAg
PCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgY29uc3QgaW50IGFsbG9jX3NpemUgPSBjbGFz
c190b19wYWdlc1tjbF0gPDwga1BhZ2VTaGlmdDsKLSAgICAgIGNvbnN0IGludCBhbGxvY19vYmpz
ID0gYWxsb2Nfc2l6ZSAvIGNsYXNzX3RvX3NpemVbY2xdOwotICAgICAgY29uc3QgaW50IG1pbl91
c2VkID0gKGNsYXNzX3RvX3NpemVbY2wtMV0gKyAxKSAqIGFsbG9jX29ianM7Ci0gICAgICBjb25z
dCBpbnQgbWF4X3dhc3RlID0gYWxsb2Nfc2l6ZSAtIG1pbl91c2VkOwotICAgICAgTUVTU0FHRSgi
U0MgJTNkIFsgJThkIC4uICU4ZCBdIGZyb20gJThkIDsgJTIuMGYlJSBtYXh3YXN0ZVxuIiwKLSAg
ICAgICAgICAgICAgaW50KGNsKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2wt
MV0gKyAxKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2xdKSwKLSAgICAgICAg
ICAgICAgaW50KGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAg
ICAgbWF4X3dhc3RlICogMTAwLjAgLyBhbGxvY19zaXplCi0gICAgICAgICAgICAgICk7CisgICAg
aWYgKGZhbHNlKSB7CisgICAgICAgIC8vIER1bXAgY2xhc3Mgc2l6ZXMgYW5kIG1heGltdW0gZXh0
ZXJuYWwgd2FzdGFnZSBwZXIgc2l6ZSBjbGFzcworICAgICAgICBmb3IgKHNpemVfdCBjbCA9IDE7
IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgYWxsb2NT
aXplID0gY2xhc3NfdG9fcGFnZXNbY2xdIDw8IGtQYWdlU2hpZnQ7CisgICAgICAgICAgICBjb25z
dCBpbnQgYWxsb2NPYmpzID0gYWxsb2NTaXplIC8gY2xhc3NUb3NpemVbY2xdOworICAgICAgICAg
ICAgY29uc3QgaW50IG1pblVzZWQgPSAoY2xhc3NUb3NpemVbY2wtMV0gKyAxKSAqIGFsbG9jT2Jq
czsKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhXYXN0ZSA9IGFsbG9jU2l6ZSAtIG1pblVzZWQ7
CisgICAgICAgICAgICBNRVNTQUdFKCJTQyAlM2QgWyAlOGQgLi4gJThkIF0gZnJvbSAlOGQgOyAl
Mi4wZiUlIG1heHdhc3RlXG4iLAorICAgICAgICAgICAgICAgICAgICBpbnQoY2wpLAorICAgICAg
ICAgICAgICAgICAgICBpbnQoY2xhc3NUb3NpemVbY2wtMV0gKyAxKSwKKyAgICAgICAgICAgICAg
ICAgICAgaW50KGNsYXNzVG9zaXplW2NsXSksCisgICAgICAgICAgICAgICAgICAgIGludChjbGFz
c190b19wYWdlc1tjbF0gPDwga1BhZ2VTaGlmdCksCisgICAgICAgICAgICAgICAgICAgIG1heFdh
c3RlICogMTAwLjAgLyBhbGxvY1NpemUKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
fQogICAgIH0KLSAgfQogI2VuZGlmCiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNpbXBs
ZSBhbGxvY2F0b3IgZm9yIG9iamVjdHMgb2YgYSBzcGVjaWZpZWQgdHlwZS4gIEV4dGVybmFsIGxv
Y2tpbmcKKy8vIFNpbXBsZSBhbGxvY2F0b3IgZm9yIG9iamVjdHMgb2YgYSBzcGVjaWZpZWQgdHlw
ZS4gRXh0ZXJuYWwgbG9ja2luZwogLy8gaXMgcmVxdWlyZWQgYmVmb3JlIGFjY2Vzc2luZyBvbmUg
b2YgdGhlc2Ugb2JqZWN0cy4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gTWV0YWRhdGEgYWxs
b2NhdG9yIC0tIGtlZXBzIHN0YXRzIGFib3V0IGhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZAotc3Rh
dGljIHVpbnQ2NF90IG1ldGFkYXRhX3N5c3RlbV9ieXRlcyA9IDA7Ci1zdGF0aWMgdm9pZCogTWV0
YURhdGFBbGxvYyhzaXplX3QgYnl0ZXMpIHsKLSAgdm9pZCogcmVzdWx0ID0gVENNYWxsb2NfU3lz
dGVtQWxsb2MoYnl0ZXMsIDApOwotICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICBtZXRhZGF0
YV9zeXN0ZW1fYnl0ZXMgKz0gYnl0ZXM7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyB1
aW50NjRfdCBtZXRhZGF0YVN5c3RlbUJ5dGVzID0gMDsKK3N0YXRpYyB2b2lkKiBNZXRhRGF0YUFs
bG9jKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBUQ01hbGxvY19TeXN0ZW1B
bGxvYyhieXRlcywgMCk7CisgICAgaWYgKHJlc3VsdCkgCisgICAgICAgIG1ldGFkYXRhU3lzdGVt
Qnl0ZXMgKz0gYnl0ZXM7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGUgPGNsYXNz
IFQ+CiBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvciB7Ci0gcHJpdmF0ZToKLSAgLy8gSG93IG11Y2gg
dG8gYWxsb2NhdGUgZnJvbSBzeXN0ZW0gYXQgYSB0aW1lCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qg
a0FsbG9jSW5jcmVtZW50ID0gMzIgPDwgMTA7Citwcml2YXRlOgorICAgIC8vIEhvdyBtdWNoIHRv
IGFsbG9jYXRlIGZyb20gc3lzdGVtIGF0IGEgdGltZQorICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
a0FsbG9jSW5jcmVtZW50ID0gMzIgPDwgMTA7CiAKLSAgLy8gQWxpZ25lZCBzaXplIG9mIFQKLSAg
c3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25lZFNpemUKLSAgPSAoKChzaXplb2YoVCkgKyBrQWxp
Z25tZW50IC0gMSkgLyBrQWxpZ25tZW50KSAqIGtBbGlnbm1lbnQpOworICAgIC8vIEFsaWduZWQg
c2l6ZSBvZiBUCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25lZFNpemUKKyAgICA9ICgo
KHNpemVvZihUKSArIGtBbGlnbm1lbnQgLSAxKSAvIGtBbGlnbm1lbnQpICoga0FsaWdubWVudCk7
CiAKLSAgLy8gRnJlZSBhcmVhIGZyb20gd2hpY2ggdG8gY2FydmUgbmV3IG9iamVjdHMKLSAgY2hh
ciogZnJlZV9hcmVhXzsKLSAgc2l6ZV90IGZyZWVfYXZhaWxfOworICAgIC8vIEZyZWUgYXJlYSBm
cm9tIHdoaWNoIHRvIGNhcnZlIG5ldyBvYmplY3RzCisgICAgY2hhciogZnJlZUFyZWE7CisgICAg
c2l6ZV90IGZyZWVBdmFpbDsKIAotICAvLyBMaW5rZWQgbGlzdCBvZiBhbGwgcmVnaW9ucyBhbGxv
Y2F0ZWQgYnkgdGhpcyBhbGxvY2F0b3IKLSAgdm9pZCogYWxsb2NhdGVkX3JlZ2lvbnNfOworICAg
IC8vIExpbmtlZCBsaXN0IG9mIGFsbCByZWdpb25zIGFsbG9jYXRlZCBieSB0aGlzIGFsbG9jYXRv
cgorICAgIHZvaWQqIGFsbG9jYXRlZFJlZ2lvbnM7CiAKLSAgLy8gRnJlZSBsaXN0IG9mIGFscmVh
ZHkgY2FydmVkIG9iamVjdHMKLSAgdm9pZCogZnJlZV9saXN0XzsKKyAgICAvLyBGcmVlIGxpc3Qg
b2YgYWxyZWFkeSBjYXJ2ZWQgb2JqZWN0cworICAgIHZvaWQqIGZyZWVMaXN0OwogCi0gIC8vIE51
bWJlciBvZiBhbGxvY2F0ZWQgYnV0IHVuZnJlZWQgb2JqZWN0cwotICBpbnQgaW51c2VfOworICAg
IC8vIE51bWJlciBvZiBhbGxvY2F0ZWQgYnV0IHVuZnJlZWQgb2JqZWN0cworICAgIGludCBpblVz
ZTsKIAotIHB1YmxpYzoKLSAgdm9pZCBJbml0KCkgewotICAgIEFTU0VSVChrQWxpZ25lZFNpemUg
PD0ga0FsbG9jSW5jcmVtZW50KTsKLSAgICBpbnVzZV8gPSAwOwotICAgIGFsbG9jYXRlZF9yZWdp
b25zXyA9IDA7Ci0gICAgZnJlZV9hcmVhXyA9IE5VTEw7Ci0gICAgZnJlZV9hdmFpbF8gPSAwOwot
ICAgIGZyZWVfbGlzdF8gPSBOVUxMOwotICB9CitwdWJsaWM6CisgICAgdm9pZCBJbml0KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChrQWxpZ25lZFNpemUgPD0ga0FsbG9jSW5jcmVtZW50KTsKKyAg
ICAgICAgaW5Vc2UgPSAwOworICAgICAgICBhbGxvY2F0ZWRSZWdpb25zID0gMDsKKyAgICAgICAg
ZnJlZUFyZWEgPSAwOworICAgICAgICBmcmVlQXZhaWwgPSAwOworICAgICAgICBmcmVlTGlzdCA9
IDA7CisgICAgfQogCi0gIFQqIE5ldygpIHsKLSAgICAvLyBDb25zdWx0IGZyZWUgbGlzdAotICAg
IHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoZnJlZV9saXN0XyAhPSBOVUxMKSB7Ci0gICAgICByZXN1
bHQgPSBmcmVlX2xpc3RfOwotICAgICAgZnJlZV9saXN0XyA9ICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KHJlc3VsdCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZnJlZV9hdmFpbF8gPCBr
QWxpZ25lZFNpemUpIHsKLSAgICAgICAgLy8gTmVlZCBtb3JlIHJvb20KLSAgICAgICAgY2hhciog
bmV3X2FsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihNZXRhRGF0YUFsbG9jKGtB
bGxvY0luY3JlbWVudCkpOwotICAgICAgICBpZiAoIW5ld19hbGxvY2F0aW9uKQotICAgICAgICAg
IENSQVNIKCk7Ci0KLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPHZvaWQqKj4obmV3X2Fs
bG9jYXRpb24pID0gYWxsb2NhdGVkX3JlZ2lvbnNfOwotICAgICAgICBhbGxvY2F0ZWRfcmVnaW9u
c18gPSBuZXdfYWxsb2NhdGlvbjsKLSAgICAgICAgZnJlZV9hcmVhXyA9IG5ld19hbGxvY2F0aW9u
ICsga0FsaWduZWRTaXplOwotICAgICAgICBmcmVlX2F2YWlsXyA9IGtBbGxvY0luY3JlbWVudCAt
IGtBbGlnbmVkU2l6ZTsKLSAgICAgIH0KLSAgICAgIHJlc3VsdCA9IGZyZWVfYXJlYV87Ci0gICAg
ICBmcmVlX2FyZWFfICs9IGtBbGlnbmVkU2l6ZTsKLSAgICAgIGZyZWVfYXZhaWxfIC09IGtBbGln
bmVkU2l6ZTsKKyAgICBUKiBOZXcoKQorICAgIHsKKyAgICAgICAgLy8gQ29uc3VsdCBmcmVlIGxp
c3QKKyAgICAgICAgdm9pZCogcmVzdWx0OworICAgICAgICBpZiAoZnJlZUxpc3QpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGZyZWVMaXN0OworICAgICAgICAgICAgZnJlZUxpc3QgPSAqKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPihyZXN1bHQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChmcmVlQXZhaWwgPCBrQWxpZ25lZFNpemUpIHsKKyAgICAgICAgICAgICAgICAvLyBO
ZWVkIG1vcmUgcm9vbQorICAgICAgICAgICAgICAgIGNoYXIqIG5ld2FsbG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihNZXRhRGF0YUFsbG9jKGtBbGxvY0luY3JlbWVudCkpOworICAg
ICAgICAgICAgICAgIGlmICghbmV3YWxsb2NhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgQ1JB
U0goKTsKKworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KG5l
d2FsbG9jYXRpb24pID0gYWxsb2NhdGVkUmVnaW9uczsKKyAgICAgICAgICAgICAgICAgYWxsb2Nh
dGVkUmVnaW9ucyA9IG5ld2FsbG9jYXRpb247CisgICAgICAgICAgICAgICAgZnJlZUFyZWEgPSBu
ZXdhbGxvY2F0aW9uICsga0FsaWduZWRTaXplOworICAgICAgICAgICAgICAgIGZyZWVBdmFpbCA9
IGtBbGxvY0luY3JlbWVudCAtIGtBbGlnbmVkU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJlc3VsdCA9IGZyZWVBcmVhOworICAgICAgICAgICAgZnJlZUFyZWEgKz0ga0FsaWduZWRT
aXplOworICAgICAgICAgICAgZnJlZUF2YWlsIC09IGtBbGlnbmVkU2l6ZTsKKyAgICAgICAgfQor
ICAgICAgICBpblVzZSsrOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVz
dWx0KTsKICAgICB9Ci0gICAgaW51c2VfKys7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KHJlc3VsdCk7Ci0gIH0KIAotICB2b2lkIERlbGV0ZShUKiBwKSB7Ci0gICAgKihyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4ocCkpID0gZnJlZV9saXN0XzsKLSAgICBmcmVlX2xpc3RfID0gcDsK
LSAgICBpbnVzZV8tLTsKLSAgfQorICAgIHZvaWQgRGVsZXRlKFQqIHApCisgICAgeworICAgICAg
ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBmcmVlTGlzdDsKKyAgICAgICAgZnJl
ZUxpc3QgPSBwOworICAgICAgICBpblVzZS0tOworICAgIH0KIAotICBpbnQgaW51c2UoKSBjb25z
dCB7IHJldHVybiBpbnVzZV87IH0KKyAgICBpbnQgaW51c2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluVXNlOworICAgIH0KIAogI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9T
KERBUldJTikKLSAgdGVtcGxhdGUgPGNsYXNzIFJlY29yZGVyPgotICB2b2lkIHJlY29yZEFkbWlu
aXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYgcmVjb3JkZXIsIGNvbnN0IFJlbW90ZU1lbW9yeVJl
YWRlciYgcmVhZGVyKQotICB7Ci0gICAgICBmb3IgKHZvaWQqIGFkbWluQWxsb2NhdGlvbiA9IGFs
bG9jYXRlZF9yZWdpb25zXzsgYWRtaW5BbGxvY2F0aW9uOyBhZG1pbkFsbG9jYXRpb24gPSByZWFk
ZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFs
bG9jYXRpb24pKSkKLSAgICAgICAgICByZWNvcmRlci5yZWNvcmRSZWdpb24ocmVpbnRlcnByZXRf
Y2FzdDx2bV9hZGRyZXNzX3Q+KGFkbWluQWxsb2NhdGlvbiksIGtBbGxvY0luY3JlbWVudCk7Ci0g
IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgUmVjb3JkZXI+CisgICAgdm9pZCByZWNvcmRBZG1pbmlz
dHJhdGl2ZVJlZ2lvbnMoUmVjb3JkZXImIHJlY29yZGVyLCBjb25zdCBSZW1vdGVNZW1vcnlSZWFk
ZXImIHJlYWRlcikKKyAgICB7CisgICAgICAgIGZvciAodm9pZCogYWRtaW5BbGxvY2F0aW9uID0g
YWxsb2NhdGVkUmVnaW9uczsgYWRtaW5BbGxvY2F0aW9uOyBhZG1pbkFsbG9jYXRpb24gPSByZWFk
ZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhZG1pbkFs
bG9jYXRpb24pKSkKKyAgICAgICAgICAgIHJlY29yZGVyLnJlY29yZFJlZ2lvbihyZWludGVycHJl
dF9jYXN0PHZtX2FkZHJlc3NfdD4oYWRtaW5BbGxvY2F0aW9uKSwga0FsbG9jSW5jcmVtZW50KTsK
KyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTEwNzcsMTQ2ICs5ODksMzgzIEBAIHR5cGVkZWYgdWlu
dHB0cl90IExlbmd0aDsKIAogc3RhdGljIGNvbnN0IExlbmd0aCBrTWF4VmFsaWRQYWdlcyA9ICh+
c3RhdGljX2Nhc3Q8TGVuZ3RoPigwKSkgPj4ga1BhZ2VTaGlmdDsKIAotLy8gQ29udmVydCBieXRl
IHNpemUgaW50byBwYWdlcy4gIFRoaXMgd29uJ3Qgb3ZlcmZsb3csIGJ1dCBtYXkgcmV0dXJuCisv
LyBDb252ZXJ0IGJ5dGUgc2l6ZSBpbnRvIHBhZ2VzLiBUaGlzIHdvbid0IG92ZXJmbG93LCBidXQg
bWF5IHJldHVybgogLy8gYW4gdW5yZWFzb25hYmx5IGxhcmdlIHZhbHVlIGlmIGJ5dGVzIGlzIGh1
Z2UgZW5vdWdoLgotc3RhdGljIGlubGluZSBMZW5ndGggcGFnZXMoc2l6ZV90IGJ5dGVzKSB7Ci0g
IHJldHVybiAoYnl0ZXMgPj4ga1BhZ2VTaGlmdCkgKwotICAgICAgKChieXRlcyAmIChrUGFnZVNp
emUgLSAxKSkgPiAwID8gMSA6IDApOworc3RhdGljIGlubGluZSBMZW5ndGggcGFnZXMoc2l6ZV90
IGJ5dGVzKQoreworICAgIHJldHVybiAoYnl0ZXMgPj4ga1BhZ2VTaGlmdCkgKyAoKGJ5dGVzICYg
KGtQYWdlU2l6ZSAtIDEpKSA+IDAgPyAxIDogMCk7CiB9CiAKIC8vIENvbnZlcnQgYSB1c2VyIHNp
emUgaW50byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBhY3R1YWxseSBiZQogLy8gYWxs
b2NhdGVkCi1zdGF0aWMgc2l6ZV90IEFsbG9jYXRpb25TaXplKHNpemVfdCBieXRlcykgewotICBp
ZiAoYnl0ZXMgPiBrTWF4U2l6ZSkgewotICAgIC8vIExhcmdlIG9iamVjdDogd2UgYWxsb2NhdGUg
YW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzCi0gICAgQVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFs
aWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgcmV0dXJuIHBhZ2VzKGJ5dGVzKSA8PCBrUGFn
ZVNoaWZ0OwotICB9IGVsc2Ugeworc3RhdGljIHNpemVfdCBBbGxvY2F0aW9uU2l6ZShzaXplX3Qg
Ynl0ZXMpCit7CisgICAgaWYgKGJ5dGVzID4ga01heFNpemUpIHsKKyAgICAgICAgLy8gTGFyZ2Ug
b2JqZWN0OiB3ZSBhbGxvY2F0ZSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMKKyAgICAgICAg
QVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFsaWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7CisgICAgICAg
IHJldHVybiBwYWdlcyhieXRlcykgPDwga1BhZ2VTaGlmdDsKKyAgICB9CiAgICAgLy8gU21hbGwg
b2JqZWN0OiBmaW5kIHRoZSBzaXplIGNsYXNzIHRvIHdoaWNoIGl0IGJlbG9uZ3MKICAgICByZXR1
cm4gQnl0ZVNpemVGb3JDbGFzcyhTaXplQ2xhc3MoYnl0ZXMpKTsKLSAgfQogfQogCiAvLyBJbmZv
cm1hdGlvbiBrZXB0IGZvciBhIHNwYW4gKGEgY29udGlndW91cyBydW4gb2YgcGFnZXMpLgogc3Ry
dWN0IFNwYW4gewotICBQYWdlSUQgICAgICAgIHN0YXJ0OyAgICAgICAgICAvLyBTdGFydGluZyBw
YWdlIG51bWJlcgotICBMZW5ndGggICAgICAgIGxlbmd0aDsgICAgICAgICAvLyBOdW1iZXIgb2Yg
cGFnZXMgaW4gc3BhbgotICBTcGFuKiAgICAgICAgIG5leHQ7ICAgICAgICAgICAvLyBVc2VkIHdo
ZW4gaW4gbGluayBsaXN0Ci0gIFNwYW4qICAgICAgICAgcHJldjsgICAgICAgICAgIC8vIFVzZWQg
d2hlbiBpbiBsaW5rIGxpc3QKLSAgdm9pZCogICAgICAgICBvYmplY3RzOyAgICAgICAgLy8gTGlu
a2VkIGxpc3Qgb2YgZnJlZSBvYmplY3RzCi0gIHVuc2lnbmVkIGludCAgZnJlZSA6IDE7ICAgICAg
IC8vIElzIHRoZSBzcGFuIGZyZWUKKyAgICBQYWdlSUQgc3RhcnQ7IC8vIFN0YXJ0aW5nIHBhZ2Ug
bnVtYmVyCisgICAgTGVuZ3RoIGxlbmd0aDsgLy8gTnVtYmVyIG9mIHBhZ2VzIGluIHNwYW4KKyAg
ICBTcGFuKiBuZXh0OyAvLyBVc2VkIHdoZW4gaW4gbGluayBsaXN0CisgICAgU3BhbiogcHJldjsg
Ly8gVXNlZCB3aGVuIGluIGxpbmsgbGlzdAorICAgIHZvaWQqIG9iamVjdHM7IC8vIExpbmtlZCBs
aXN0IG9mIGZyZWUgb2JqZWN0cworICAgIHVuc2lnbmVkIGludCBmcmVlIDogMTsgLy8gSXMgdGhl
IHNwYW4gZnJlZQogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCi0gIHVuc2lnbmVkIGludCAg
c2FtcGxlIDogMTsgICAgIC8vIFNhbXBsZWQgb2JqZWN0PworICAgIHVuc2lnbmVkIGludCBzYW1w
bGUgOiAxOyAvLyBTYW1wbGVkIG9iamVjdD8KICNlbmRpZgotICB1bnNpZ25lZCBpbnQgIHNpemVj
bGFzcyA6IDg7ICAvLyBTaXplLWNsYXNzIGZvciBzbWFsbCBvYmplY3RzIChvciAwKQotICB1bnNp
Z25lZCBpbnQgIHJlZmNvdW50IDogMTE7ICAvLyBOdW1iZXIgb2Ygbm9uLWZyZWUgb2JqZWN0cwot
ICBib29sIGRlY29tbWl0dGVkIDogMTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZWNsYXNzIDogODsg
Ly8gU2l6ZS1jbGFzcyBmb3Igc21hbGwgb2JqZWN0cyAob3IgMCkKKyAgICB1bnNpZ25lZCBpbnQg
cmVmY291bnQgOiAxMTsgLy8gTnVtYmVyIG9mIG5vbi1mcmVlIG9iamVjdHMKKyAgICBib29sIGRl
Y29tbWl0dGVkIDogMTsKIAogI3VuZGVmIFNQQU5fSElTVE9SWQogI2lmZGVmIFNQQU5fSElTVE9S
WQotICAvLyBGb3IgZGVidWdnaW5nLCB3ZSBjYW4ga2VlcCBhIGxvZyBldmVudHMgcGVyIHNwYW4K
LSAgaW50IG5leHRoaXN0b3J5OwotICBjaGFyIGhpc3RvcnlbNjRdOwotICBpbnQgdmFsdWVbNjRd
OworICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHdlIGNhbiBrZWVwIGEgbG9nIGV2ZW50cyBwZXIgc3Bh
bgorICAgIGludCBuZXh0aGlzdG9yeTsKKyAgICBjaGFyIGhpc3RvcnlbNjRdOworICAgIGludCB2
YWx1ZVs2NF07CiAjZW5kaWYKIH07CiAKICNkZWZpbmUgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNw
YW4pIEFTU0VSVCghc3Bhbi0+ZGVjb21taXR0ZWQpCiAKICNpZmRlZiBTUEFOX0hJU1RPUlkKLXZv
aWQgRXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50IHYgPSAwKSB7Ci0gIHNwYW4tPmhpc3Rv
cnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7Ci0gIHNwYW4tPnZhbHVlW3NwYW4tPm5leHRoaXN0
b3J5XSA9IHY7Ci0gIHNwYW4tPm5leHRoaXN0b3J5Kys7Ci0gIGlmIChzcGFuLT5uZXh0aGlzdG9y
eSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9yeSkpIHNwYW4tPm5leHRoaXN0b3J5ID0gMDsKK3ZvaWQg
RXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50IHYgPSAwKQoreworICAgIHNwYW4tPmhpc3Rv
cnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7CisgICAgc3Bhbi0+dmFsdWVbc3Bhbi0+bmV4dGhp
c3RvcnldID0gdjsKKyAgICBzcGFuLT5uZXh0aGlzdG9yeSsrOworICAgIGlmIChzcGFuLT5uZXh0
aGlzdG9yeSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9yeSkpCisgICAgICAgIHNwYW4tPm5leHRoaXN0
b3J5ID0gMDsKIH0KICNlbHNlCiAjZGVmaW5lIEV2ZW50KHMsbyx2KSAoKHZvaWQpIDApCiAjZW5k
aWYKIAogLy8gQWxsb2NhdG9yL2RlYWxsb2NhdG9yIGZvciBzcGFucwotc3RhdGljIFBhZ2VIZWFw
QWxsb2NhdG9yPFNwYW4+IHNwYW5fYWxsb2NhdG9yOwotc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFn
ZUlEIHAsIExlbmd0aCBsZW4pIHsKLSAgU3BhbiogcmVzdWx0ID0gc3Bhbl9hbGxvY2F0b3IuTmV3
KCk7Ci0gIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7Ci0gIHJlc3VsdC0+c3Rh
cnQgPSBwOwotICByZXN1bHQtPmxlbmd0aCA9IGxlbjsKK3N0YXRpYyBQYWdlSGVhcEFsbG9jYXRv
cjxTcGFuPiBzcGFuQWxsb2NhdG9yOworc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExl
bmd0aCBsZW4pCit7CisgICAgU3BhbiogcmVzdWx0ID0gc3BhbkFsbG9jYXRvci5OZXcoKTsKKyAg
ICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOworICAgIHJlc3VsdC0+c3RhcnQg
PSBwOworICAgIHJlc3VsdC0+bGVuZ3RoID0gbGVuOwogI2lmZGVmIFNQQU5fSElTVE9SWQotICBy
ZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKKyAgICByZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKICNl
bmRpZgotICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNwYW4pIHsKK3N0YXRpYyBpbmxpbmUgdm9pZCBE
ZWxldGVTcGFuKFNwYW4qIHNwYW4pCit7CiAjaWZuZGVmIE5ERUJVRwotICAvLyBJbiBkZWJ1ZyBt
b2RlLCB0cmFzaCB0aGUgY29udGVudHMgb2YgZGVsZXRlZCBTcGFucwotICBtZW1zZXQoc3Bhbiwg
MHgzZiwgc2l6ZW9mKCpzcGFuKSk7CisgICAgLy8gSW4gZGVidWcgbW9kZSwgdHJhc2ggdGhlIGNv
bnRlbnRzIG9mIGRlbGV0ZWQgU3BhbnMKKyAgICBtZW1zZXQoc3BhbiwgMHgzZiwgc2l6ZW9mKCpz
cGFuKSk7CiAjZW5kaWYKLSAgc3Bhbl9hbGxvY2F0b3IuRGVsZXRlKHNwYW4pOworICAgIHNwYW5B
bGxvY2F0b3IuRGVsZXRlKHNwYW4pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBEb3Vi
bHkgbGlua2VkIGxpc3Qgb2Ygc3BhbnMuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBETExfSW5pdChTcGFuKiBsaXN0KSB7Ci0gIGxpc3QtPm5leHQgPSBsaXN0Owot
ICBsaXN0LT5wcmV2ID0gbGlzdDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBETExJbml0KFNwYW4qIGxp
c3QpCit7CisgICAgbGlzdC0+bmV4dCA9IGxpc3Q7CisgICAgbGlzdC0+cHJldiA9IGxpc3Q7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfUmVtb3ZlKFNwYW4qIHNwYW4pIHsKLSAgc3Bhbi0+
cHJldi0+bmV4dCA9IHNwYW4tPm5leHQ7Ci0gIHNwYW4tPm5leHQtPnByZXYgPSBzcGFuLT5wcmV2
OwotICBzcGFuLT5wcmV2ID0gTlVMTDsKLSAgc3Bhbi0+bmV4dCA9IE5VTEw7CitzdGF0aWMgaW5s
aW5lIHZvaWQgRExMUmVtb3ZlKFNwYW4qIHNwYW4pCit7CisgICAgc3Bhbi0+cHJldi0+bmV4dCA9
IHNwYW4tPm5leHQ7CisgICAgc3Bhbi0+bmV4dC0+cHJldiA9IHNwYW4tPnByZXY7CisgICAgc3Bh
bi0+cHJldiA9IDA7CisgICAgc3Bhbi0+bmV4dCA9IDA7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5M
SU5FIGJvb2wgRExMX0lzRW1wdHkoY29uc3QgU3BhbiogbGlzdCkgewotICByZXR1cm4gbGlzdC0+
bmV4dCA9PSBsaXN0Oworc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBETExfSXNFbXB0eShjb25z
dCBTcGFuKiBsaXN0KQoreworICAgIHJldHVybiBsaXN0LT5uZXh0ID09IGxpc3Q7CiB9CiAKLXN0
YXRpYyBpbnQgRExMX0xlbmd0aChjb25zdCBTcGFuKiBsaXN0KSB7Ci0gIGludCByZXN1bHQgPSAw
OwotICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KSB7
Ci0gICAgcmVzdWx0Kys7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyBpbnQgRExMTGVu
Z3RoKGNvbnN0IFNwYW4qIGxpc3QpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgZm9yIChT
cGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkKKyAgICAgICAgcmVz
dWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmIDAgLyogTm90IG5lZWRlZCBhdCB0
aGUgbW9tZW50IC0tIGNhdXNlcyBjb21waWxlciB3YXJuaW5ncyBpZiBub3QgdXNlZCAqLwotc3Rh
dGljIHZvaWQgRExMX1ByaW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KSB7
Ci0gIE1FU1NBR0UoIiUtMTBzICVwOiIsIGxhYmVsLCBsaXN0KTsKLSAgZm9yIChjb25zdCBTcGFu
KiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewotICAgIE1FU1NBR0Uo
IiA8JXAsJXUsJXU+Iiwgcywgcy0+c3RhcnQsIHMtPmxlbmd0aCk7Ci0gIH0KLSAgTUVTU0FHRSgi
XG4iKTsKK3N0YXRpYyB2b2lkIERMTFByaW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFu
KiBsaXN0KQoreworICAgIE1FU1NBR0UoIiUtMTBzICVwOiIsIGxhYmVsLCBsaXN0KTsKKyAgICBm
b3IgKGNvbnN0IFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KQor
ICAgICAgICBNRVNTQUdFKCIgPCVwLCV1LCV1PiIsIHMsIHMtPnN0YXJ0LCBzLT5sZW5ndGgpOwor
ICAgIE1FU1NBR0UoIlxuIik7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIERMTF9Q
cmVwZW5kKFNwYW4qIGxpc3QsIFNwYW4qIHNwYW4pIHsKLSAgQVNTRVJUKHNwYW4tPm5leHQgPT0g
TlVMTCk7Ci0gIEFTU0VSVChzcGFuLT5wcmV2ID09IE5VTEwpOwotICBzcGFuLT5uZXh0ID0gbGlz
dC0+bmV4dDsKLSAgc3Bhbi0+cHJldiA9IGxpc3Q7Ci0gIGxpc3QtPm5leHQtPnByZXYgPSBzcGFu
OwotICBsaXN0LT5uZXh0ID0gc3BhbjsKK3N0YXRpYyBpbmxpbmUgdm9pZCBETExQcmVwZW5kKFNw
YW4qIGxpc3QsIFNwYW4qIHNwYW4pCit7CisgICAgQVNTRVJUKCFzcGFuLT5uZXh0KTsKKyAgICBB
U1NFUlQoIXNwYW4tPnByZXYpOworICAgIHNwYW4tPm5leHQgPSBsaXN0LT5uZXh0OworICAgIHNw
YW4tPnByZXYgPSBsaXN0OworICAgIGxpc3QtPm5leHQtPnByZXYgPSBzcGFuOworICAgIGxpc3Qt
Pm5leHQgPSBzcGFuOwogfQogCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEga2VwdCBwZXIgc2l6ZS1j
bGFzcyBpbiBjZW50cmFsIGNhY2hlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVENNYWxsb2NDZW50
cmFsRnJlZUxpc3QgeworcHVibGljOgorICAgIHZvaWQgSW5pdChzaXplX3QgY2wpOworCisgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhbGwgZG8gaW50ZXJuYWwgbG9ja2luZy4KKworICAgIC8vIEluc2Vy
dCB0aGUgc3BlY2lmaWVkIHJhbmdlIGludG8gdGhlIGNlbnRyYWwgZnJlZWxpc3QuIE4gaXMgdGhl
IG51bWJlciBvZgorICAgIC8vIGVsZW1lbnRzIGluIHRoZSByYW5nZS4KKyAgICB2b2lkIEluc2Vy
dFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBhY3R1YWwgbnVtYmVyIG9mIGZldGNoZWQgZWxlbWVudHMgaW50byBOLgorICAgIHZvaWQgUmVt
b3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQqKTsKKworICAgIC8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCisgICAgc2l6ZV90IGxlbmd0
aCgpCisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrKTsKKyAgICAgICAgcmV0
dXJuIGNvdW50ZXI7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyZWUg
b2JqZWN0cyBpbiB0aGUgdHJhbnNmZXIgY2FjaGUuCisgICAgaW50IHRjTGVuZ3RoKCkKKyAgICB7
CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAgICAgICByZXR1cm4gdXNlZFNs
b3RzICogbnVtT2JqZWN0c1RvTW92ZVtzaXplQ2xhc3NdOworICAgIH0KKworI2lmZGVmIFdURl9D
SEFOR0VTCisgICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZv
aWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVh
ZGVyLCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQorICAg
IHsKKyAgICAgICAgZm9yIChTcGFuKiBzcGFuID0gJmVtcHR5OyBzcGFuICYmIHNwYW4gIT0gJmVt
cHR5OyBzcGFuID0gKHNwYW4tPm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkKKyAgICAg
ICAgICAgIEFTU0VSVCghc3Bhbi0+b2JqZWN0cyk7CisKKyAgICAgICAgQVNTRVJUKCFub25lbXB0
eS5vYmplY3RzKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHB0cmRpZmZfdCBub25lbXB0eU9mZnNl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZub25lbXB0eSkgLSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzKTsKKworICAgICAgICBTcGFuKiByZW1vdGVOb25lbXB0
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlbW90
ZUNlbnRyYWxGcmVlTGlzdCkgKyBub25lbXB0eU9mZnNldCk7CisgICAgICAgIFNwYW4qIHJlbW90
ZVNwYW4gPSBub25lbXB0eS5uZXh0OworCisgICAgICAgIGZvciAoU3Bhbiogc3BhbiA9IHJlYWRl
cihyZW1vdGVTcGFuKTsgc3BhbiAmJiByZW1vdGVTcGFuICE9IHJlbW90ZU5vbmVtcHR5OyByZW1v
dGVTcGFuID0gc3Bhbi0+bmV4dCwgc3BhbiA9IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4tPm5l
eHQpIDogMCkpIHsKKyAgICAgICAgICAgIGZvciAodm9pZCogbmV4dE9iamVjdCA9IHNwYW4tPm9i
amVjdHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRM
aXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCisgICAgICAgICAgICAg
ICAgZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFJlbW92ZSBv
YmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgorICAgIC8vIFJldHVybiAwIGlmIG5vIGZyZWUg
ZW50cmllcyBpbiBjYWNoZS4KKyAgICB2b2lkKiBGZXRjaEZyb21TcGFucygpOworCisgICAgLy8g
UkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFJlbW92ZSBvYmplY3QgZnJvbSBjYWNoZSBh
bmQgcmV0dXJuLiBGZXRjaGVzCisgICAgLy8gZnJvbSBwYWdlaGVhcCBpZiBjYWNoZSBpcyBlbXB0
eS4gT25seSByZXR1cm5zCisgICAgLy8gMCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCisgICAgdm9p
ZCogRmV0Y2hGcm9tU3BhbnNTYWZlKCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxk
CisgICAgLy8gUmVsZWFzZSBhIGxpbmtlZCBsaXN0IG9mIG9iamVjdHMgdG8gc3BhbnMuCisgICAg
Ly8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9jay4KKyAgICB2b2lkIFJlbGVhc2VMaXN0VG9T
cGFucyh2b2lkICpzdGFydCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkCisgICAg
Ly8gUmVsZWFzZSBhbiBvYmplY3QgdG8gc3BhbnMuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IHJl
bGVhc2UgbG9jay4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgUmVsZWFzZVRvU3BhbnModm9pZCop
OworCisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFBvcHVsYXRlIGNhY2hl
IGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVhcC4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkg
cmVsZWFzZSBsb2NrLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBQb3B1bGF0ZSgpOworCisgICAg
Ly8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZC4KKyAgICAvLyBUcmllcyB0byBtYWtlIHJvb20gZm9y
IGEgVENFbnRyeS4gSWYgdGhlIGNhY2hlIGlzIGZ1bGwgaXQgd2lsbCB0cnkgdG8KKyAgICAvLyBl
eHBhbmQgaXQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBvdGhlciBjYWNoZSBzaXplLiBSZXR1cm4gZmFs
c2UgaWYgdGhlcmUgaXMKKyAgICAvLyBubyBzcGFjZS4KKyAgICBib29sIE1ha2VDYWNoZVNwYWNl
KCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBmb3IgbG9ja2VkU2l6ZUNsYXNzIGlzIGhlbGQu
CisgICAgLy8gUGlja3MgYSAicmFuZG9tIiBzaXplIGNsYXNzIHRvIHN0ZWFsIFRDRW50cnkgc2xv
dCBmcm9tLiBJbiByZWFsaXR5IGl0CisgICAgLy8ganVzdCBpdGVyYXRlcyBvdmVyIHRoZSBzaXpl
Y2xhc3NlcyBidXQgZG9lcyBzbyB3aXRob3V0IHRha2luZyBhIGxvY2suCisgICAgLy8gUmV0dXJu
cyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IGxvY2sgYSAicmFuZG9t
IiBzaXplIGNsYXNzLgorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRXZpY3RSYW5kb21T
aXplQ2xhc3Moc2l6ZV90IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSk7CisKKyAgICAvLyBS
RVFVSVJFUzogbG9jayBpcyAqbm90KiBoZWxkLgorICAgIC8vIFRyaWVzIHRvIHNocmluayB0aGUg
Q2FjaGUuIElmIGZvcmNlIGlzIHRydWUgaXQgd2lsbCByZWxhc2Ugb2JqZWN0cyB0bworICAgIC8v
IHNwYW5zIGlmIGl0IGFsbG93cyBpdCB0byBzaHJpbmsgdGhlIGNhY2hlLiBSZXR1cm4gZmFsc2Ug
aWYgaXQgZmFpbGVkIHRvCisgICAgLy8gc2hyaW5rIHRoZSBjYWNoZS4gRGVjcmVtZW50cyBjYWNo
ZVNpemUgb24gc3VjY2Vlc3MuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IHRha2UgbG9jay4gSWYg
aXQgdGFrZXMgbG9jaywgdGhlIGxvY2tlZFNpemVDbGFzcworICAgIC8vIGxvY2sgaXMgcmVsZWFz
ZWQgdG8gdGhlIHRocmVhZCBmcm9tIGhvbGRpbmcgdHdvIHNpemUgY2xhc3MgbG9ja3MKKyAgICAv
LyBjb25jdXJyZW50bHkgd2hpY2ggY291bGQgbGVhZCB0byBhIGRlYWRsb2NrLgorICAgIGJvb2wg
U2hyaW5rQ2FjaGUoaW50IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSk7CisKKyAgICAvLyBU
aGlzIGxvY2sgcHJvdGVjdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuIGNhY2hlZF9lbnRyaWVzIGFu
ZCBjYWNoZVNpemUKKyAgICAvLyBtYXkgYmUgbG9va2VkIGF0IHdpdGhvdXQgaG9sZGluZyB0aGUg
bG9jay4KKyAgICBTcGluTG9jayBsb2NrOworCisgICAgLy8gV2Uga2VlcCBsaW5rZWQgbGlzdHMg
b2YgZW1wdHkgYW5kIG5vbi1lbXB0eSBzcGFucy4KKyAgICBzaXplX3Qgc2l6ZUNsYXNzOyAvLyBN
eSBzaXplIGNsYXNzCisgICAgU3BhbiBlbXB0eTsgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0IG9m
IGVtcHR5IHNwYW5zCisgICAgU3BhbiBub25lbXB0eTsgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0
IG9mIG5vbi1lbXB0eSBzcGFucworICAgIHNpemVfdCBjb3VudGVyOyAvLyBOdW1iZXIgb2YgZnJl
ZSBvYmplY3RzIGluIGNhY2hlIGVudHJ5CisKKyAgICAvLyBIZXJlIHdlIHJlc2VydmUgc3BhY2Ug
Zm9yIFRDRW50cnkgY2FjaGUgc2xvdHMuIFNpbmNlIG9uZSBzaXplIGNsYXNzIGNhbgorICAgIC8v
IGVuZCB1cCBnZXR0aW5nIGFsbCB0aGUgVENFbnRyaWVzIHF1b3RhIGluIHRoZSBzeXN0ZW0gd2Ug
anVzdCBwcmVhbGxvY2F0ZQorICAgIC8vIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGVudHJpZXMgaGVy
ZS4KKyAgICBUQ0VudHJ5IHRjU2xvdHNba051bVRyYW5zZmVyRW50cmllc107CisKKyAgICAvLyBO
dW1iZXIgb2YgY3VycmVudGx5IHVzZWQgY2FjaGVkIGVudHJpZXMgaW4gdGNTbG90cy4gVGhpcyB2
YXJpYWJsZSBpcworICAgIC8vIHVwZGF0ZWQgdW5kZXIgYSBsb2NrIGJ1dCBjYW4gYmUgcmVhZCB3
aXRob3V0IG9uZS4KKyAgICBpbnQzMl90IHVzZWRTbG90czsKKyAgICAvLyBUaGUgY3VycmVudCBu
dW1iZXIgb2Ygc2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4gVGhpcyBpcyBhbgorICAgIC8vIGFk
YXB0aXZlIHZhbHVlIHRoYXQgaXMgaW5jcmVhc2VkIGlmIHRoZXJlIGlzIGxvdHMgb2YgdHJhZmZp
YworICAgIC8vIG9uIGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KKyAgICBpbnQzMl90IGNhY2hlU2l6ZTsK
K307CisKKy8vIFBhZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVsdGlwbGUgb2YgNjQg
Ynl0ZXMKK2NsYXNzIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkIDogcHVibGljIFRDTWFs
bG9jQ2VudHJhbEZyZWVMaXN0IHsKK3ByaXZhdGU6CisgICAgY2hhciBwYWRbKDY0IC0gKHNpemVv
ZihUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCkgJSA2NCkpICUgNjRdOworfTsKKworI2lmIE9TKERB
UldJTikKK3N0cnVjdCBTcGFuOworY2xhc3MgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQ7
CitjbGFzcyBUQ01hbGxvY1BhZ2VIZWFwOworY2xhc3MgVENNYWxsb2NUaHJlYWRDYWNoZTsKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYWdlSGVhcEFsbG9jYXRvcjsKKworY2xhc3MgRmFz
dE1hbGxvY1pvbmUgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKKworICAgIHN0
YXRpYyBrZXJuX3JldHVybl90IGVudW1lcmF0ZSh0YXNrX3QsIHZvaWQqLCB1bnNpZ25lZCB0eXBl
TW1hc2ssIHZtX2FkZHJlc3NfdCB6b25lQWRkcmVzcywgbWVtb3J5X3JlYWRlcl90LCB2bV9yYW5n
ZV9yZWNvcmRlcl90KTsKKyAgICBzdGF0aWMgc2l6ZV90IGdvb2RTaXplKG1hbGxvY196b25lX3Qq
LCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gc2l6ZTsgfQorICAgIHN0YXRpYyBib29sZWFuX3QgY2hl
Y2sobWFsbG9jX3pvbmVfdCopIHsgcmV0dXJuIHRydWU7IH0KKyAgICBzdGF0aWMgdm9pZCAgcHJp
bnQobWFsbG9jX3pvbmVfdCosIGJvb2xlYW5fdCkgeyB9CisgICAgc3RhdGljIHZvaWQgbG9nKG1h
bGxvY196b25lX3QqLCB2b2lkKikgeyB9CisgICAgc3RhdGljIHZvaWQgZm9yY2VMb2NrKG1hbGxv
Y196b25lX3QqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBmb3JjZVVubG9jayhtYWxsb2Nfem9uZV90
KikgeyB9CisgICAgc3RhdGljIHZvaWQgc3RhdGlzdGljcyhtYWxsb2Nfem9uZV90KiwgbWFsbG9j
X3N0YXRpc3RpY3NfdCogc3RhdHMpIHsgbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YobWFsbG9jX3N0
YXRpc3RpY3NfdCkpOyB9CisKK3ByaXZhdGU6CisgICAgRmFzdE1hbGxvY1pvbmUoVENNYWxsb2NQ
YWdlSGVhcCosIFRDTWFsbG9jVGhyZWFkQ2FjaGUqKiwgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQ
YWRkZWQqLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFs
bG9jVGhyZWFkQ2FjaGU+Kik7CisgICAgc3RhdGljIHNpemVfdCBzaXplKG1hbGxvY196b25lX3Qq
LCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQqIHpvbmVNYWxsb2MobWFsbG9jX3pvbmVf
dCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHpvbmVDYWxsb2MobWFsbG9jX3pvbmVfdCos
IHNpemVfdCBudW1JdGVtcywgc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCB6b25lRnJlZShtYWxs
b2Nfem9uZV90Kiwgdm9pZCopOworICAgIHN0YXRpYyB2b2lkKiB6b25lUmVhbGxvYyhtYWxsb2Nf
em9uZV90Kiwgdm9pZCosIHNpemVfdCk7CisgICAgc3RhdGljIHZvaWQqIHpvbmVWYWxsb2MobWFs
bG9jX3pvbmVfdCosIHNpemVfdCkgeyBMT0dfRVJST1IoInZhbGxvYyBpcyBub3Qgc3VwcG9ydGVk
Iik7IHJldHVybiAwOyB9CisgICAgc3RhdGljIHZvaWQgem9uZURlc3Ryb3kobWFsbG9jX3pvbmVf
dCopIHsgfQorCisgICAgbWFsbG9jX3pvbmVfdCBtX3pvbmU7CisgICAgVENNYWxsb2NQYWdlSGVh
cCogbV9wYWdlSGVhcDsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiogbV90aHJlYWRIZWFwczsK
KyAgICBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCogbV9jZW50cmFsQ2FjaGVzOworICAg
IFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBtX3NwYW5BbGxvY2F0b3I7CisgICAgUGFnZUhlYXBB
bGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIG1fcGFnZUhlYXBBbGxvY2F0b3I7Cit9Owor
CisjZW5kaWYKKworI2VuZGlmCisKKyNpZm5kZWYgV1RGX0NIQU5HRVMKKy8vIFRoaXMgI2lmZGVm
IHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgc2V0LiBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgor
Ly8geW91J3JlIHBvcnRpbmcgdG8gYSBzeXN0ZW0gd2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQg
YSBzdGFja3RyYWNlLgorI2lmZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKKy8vIFdlIHVzZSAjZGVm
aW5lIHNvIGNvZGUgY29tcGlsZXMgZXZlbiBpZiB5b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNv
bWVob3cuCisjIGRlZmluZSBHZXRTdGFja1RyYWNlKHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQor
I2Vsc2UKKyMgaW5jbHVkZSA8Z29vZ2xlL3N0YWNrdHJhY2UuaD4KKyNlbmRpZgorI2VuZGlmCisK
Ky8vIEV2ZW4gaWYgd2UgaGF2ZSBzdXBwb3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0
aGUgY29tcGlsZXIKKy8vIGFuZCBsaW5rZXIsIHRoZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuIFdl
IG5lZWQgdG8gY2hlY2sgdGhhdCBhdAorLy8gcnVudGltZS4gUmlnaHQgbm93LCB3ZSBoYXZlIHRv
IGtlZXAgYSBtYW51YWwgc2V0IG9mICJiYWQiIE9TZXMuCisjaWYgZGVmaW5lZChIQVZFX1RMUykK
K3N0YXRpYyBib29sIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7IC8vIGJlIGNvbnNlcnZhdGl2
ZQorc3RhdGljIGlubGluZSBib29sIEtlcm5lbFN1cHBvcnRzVExTKCkKK3sKKyAgICByZXR1cm4g
a2VybmVsU3VwcG9ydHNUbHM7Cit9CisjIGlmICFIQVZFX0RFQ0xfVU5BTUUgLy8gaWYgdG9vIG9s
ZCBmb3IgdW5hbWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUworc3RhdGljIHZvaWQgQ2hlY2tJ
Zktlcm5lbFN1cHBvcnRzVExTKCkKK3sKKyAgICBrZXJuZWxTdXBwb3J0c1RscyA9IGZhbHNlOwor
fQorIyBlbHNlCisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+IC8vIERFQ0xfVU5BTUUgY2hlY2tl
ZCBmb3IgPHN5cy91dHNuYW1lLmg+IHRvbworc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBv
cnRzVExTKCkKK3sKKyAgICBzdHJ1Y3QgdXRzbmFtZSBidWY7CisgICAgaWYgKHVuYW1lKCZidWYp
KSB7IC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlCisgICAgICAgIE1FU1NBR0UoInVuYW1lIGZhaWxl
ZCBhc3N1bWluZyBubyBUTFMgc3VwcG9ydCAoZXJybm89JWQpXG4iLCBlcnJubyk7CisgICAgICAg
IGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7CisgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChi
dWYuc3lzbmFtZSwgImxpbnV4IikpIHsKKyAgICAgICAgLy8gVGhlIGxpbnV4IGNhc2U6IHRoZSBm
aXJzdCBrZXJuZWwgdG8gc3VwcG9ydCBUTFMgd2FzIDIuNi4wCisgICAgICAgIGlmIChidWYucmVs
ZWFzZVswXSA8ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicpIC8vIDAueCBvciAxLngKKyAg
ICAgICAgICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGJ1
Zi5yZWxlYXNlWzBdID09ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicKKyAgICAgICAgICAg
ICAgICAmJiBidWYucmVsZWFzZVsyXSA+PSAnMCcgJiYgYnVmLnJlbGVhc2VbMl0gPCAnNicKKyAg
ICAgICAgICAgICAgICAmJiBidWYucmVsZWFzZVszXSA9PSAnLicpIC8vIDIuMCAtIDIuNQorICAg
ICAgICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSB0cnVlOworICAgIH0gZWxzZSAvLyBzb21lIG90aGVy
IGtlcm5lbCwgd2UnbGwgYmUgb3B0aW1pc2l0aWMKKyAgICAgICAga2VybmVsU3VwcG9ydHNUbHMg
PSB0cnVlOworICAgIC8vIFRPRE8oY3NpbHZlcnMpOiBWTE9HKDEpIHRoZSB0bHMgc3RhdHVzIG9u
Y2Ugd2Ugc3VwcG9ydCBSQVdfVkxPRworfQorI2VuZGlmIC8vIEhBVkVfREVDTF9VTkFNRQorI2Vu
ZGlmIC8vIEhBVkVfVExTCisKKy8vIF9fVEhST1cgaXMgZGVmaW5lZCBpbiBnbGliYyBzeXN0ZW1z
LiBJdCBtZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKKy8vICJUaGlzIGZ1bmN0aW9uIHdpbGwg
bmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uLiIgSXQncyBhbiBvcHRpb25hbAorLy8gb3B0aW1pemF0
aW9uIHRvb2wsIGJ1dCB3ZSBtYXkgbmVlZCB0byB1c2UgaXQgdG8gbWF0Y2ggZ2xpYmMgcHJvdG90
eXBlcy4KKyNpZm5kZWYgX19USFJPVyAvLyBJIGd1ZXNzIHdlJ3JlIG5vdCBvbiBhIGdsaWJjIHN5
c3RlbQorI2RlZmluZSBfX1RIUk9XIC8vIF9fVEhST1cgaXMganVzdCBhbiBvcHRpbWl6YXRpb24s
IHNvIG9rIHRvIG1ha2UgaXQgIiIKKyNlbmRpZgorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBT
dGFjayB0cmFjZXMga2VwdCBmb3Igc2FtcGxlZCBhbGxvY2F0aW9ucwotLy8gICBUaGUgZm9sbG93
aW5nIHN0YXRlIGlzIHByb3RlY3RlZCBieSBwYWdlaGVhcF9sb2NrXy4KKy8vICAgVGhlIGZvbGxv
d2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFnZWhlYXBMb2NrLgogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiAvLyBzaXplL2RlcHRoIGFyZSBtYWRlIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVy
IHNvIHRoYXQgc29tZSBnZW5lcmljCiAvLyBjb2RlIGJlbG93IGNhbiBjb252ZW5pZW50bHkgY2Fz
dCB0aGVtIGJhY2sgYW5kIGZvcnRoIHRvIHZvaWQqLgogc3RhdGljIGNvbnN0IGludCBrTWF4U3Rh
Y2tEZXB0aCA9IDMxOwogc3RydWN0IFN0YWNrVHJhY2UgewotICB1aW50cHRyX3Qgc2l6ZTsgICAg
ICAgICAgLy8gU2l6ZSBvZiBvYmplY3QKLSAgdWludHB0cl90IGRlcHRoOyAgICAgICAgIC8vIE51
bWJlciBvZiBQQyB2YWx1ZXMgc3RvcmVkIGluIGFycmF5IGJlbG93Ci0gIHZvaWQqICAgICBzdGFj
a1trTWF4U3RhY2tEZXB0aF07CisgICAgdWludHB0cl90IHNpemU7IC8vIFNpemUgb2Ygb2JqZWN0
CisgICAgdWludHB0cl90IGRlcHRoOyAvLyBOdW1iZXIgb2YgUEMgdmFsdWVzIHN0b3JlZCBpbiBh
cnJheSBiZWxvdworICAgIHZvaWQqIHN0YWNrW2tNYXhTdGFja0RlcHRoXTsKIH07CiBzdGF0aWMg
UGFnZUhlYXBBbGxvY2F0b3I8U3RhY2tUcmFjZT4gc3RhY2t0cmFjZV9hbGxvY2F0b3I7Ci1zdGF0
aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CitzdGF0aWMgU3BhbiBzYW1wbGVkT2JqZWN0czsKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTWFwIGZyb20gcGFnZS1pZCB0byBwZXItcGFnZSBkYXRh
CkBAIC0xMjI4LDkgKzEzNzcsOSBAQCBzdGF0aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CiAKIC8v
IFNlbGVjdG9yIGNsYXNzIC0tIGdlbmVyYWwgc2VsZWN0b3IgdXNlcyAzLWxldmVsIG1hcAogdGVt
cGxhdGUgPGludCBCSVRTPiBjbGFzcyBNYXBTZWxlY3RvciB7Ci0gcHVibGljOgotICB0eXBlZGVm
IFRDTWFsbG9jX1BhZ2VNYXAzPEJJVFMta1BhZ2VTaGlmdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNr
ZWRDYWNoZTxCSVRTLCB1aW50NjRfdD4gQ2FjaGVUeXBlOworcHVibGljOgorICAgIHR5cGVkZWYg
VENNYWxsb2NfUGFnZU1hcDM8QklUUy1rUGFnZVNoaWZ0PiBUeXBlOworICAgIHR5cGVkZWYgUGFj
a2VkQ2FjaGU8QklUUywgdWludDY0X3Q+IENhY2hlVHlwZTsKIH07CiAKICNpZiBkZWZpbmVkKFdU
Rl9DSEFOR0VTKQpAQCAtMTI0NiwyNCArMTM5NSwyNCBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IGtC
aXRzVW51c2VkT242NEJpdCA9CiAKIC8vIEEgdGhyZWUtbGV2ZWwgbWFwIGZvciA2NC1iaXQgbWFj
aGluZXMKIHRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDY0PiB7Ci0gcHVibGljOgotICB0
eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPDY0IC0ga1BhZ2VTaGlmdCAtIGtCaXRzVW51c2VkT242
NEJpdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNrZWRDYWNoZTw2NCwgdWludDY0X3Q+IENhY2hlVHlw
ZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPDY0IC0ga1BhZ2VTaGlm
dCAtIGtCaXRzVW51c2VkT242NEJpdD4gVHlwZTsKKyAgICB0eXBlZGVmIFBhY2tlZENhY2hlPDY0
LCB1aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsKICNlbmRpZgogCiAvLyBBIHR3by1sZXZlbCBtYXAg
Zm9yIDMyLWJpdCBtYWNoaW5lcwogdGVtcGxhdGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8MzI+IHsK
LSBwdWJsaWM6Ci0gIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDI8MzIgLSBrUGFnZVNoaWZ0PiBU
eXBlOwotICB0eXBlZGVmIFBhY2tlZENhY2hlPDMyIC0ga1BhZ2VTaGlmdCwgdWludDE2X3Q+IENh
Y2hlVHlwZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAyPDMyIC0ga1Bh
Z2VTaGlmdD4gVHlwZTsKKyAgICB0eXBlZGVmIFBhY2tlZENhY2hlPDMyIC0ga1BhZ2VTaGlmdCwg
dWludDE2X3Q+IENhY2hlVHlwZTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBhZ2Ut
bGV2ZWwgYWxsb2NhdG9yCiAvLyAgKiBFYWdlciBjb2FsZXNjaW5nCiAvLwotLy8gSGVhcCBmb3Ig
cGFnZS1sZXZlbCBhbGxvY2F0aW9uLiAgV2UgYWxsb3cgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBh
CisvLyBIZWFwIGZvciBwYWdlLWxldmVsIGFsbG9jYXRpb24uIFdlIGFsbG93IGFsbG9jYXRpbmcg
YW5kIGZyZWVpbmcgYQogLy8gY29udGlndW91cyBydW5zIG9mIHBhZ2VzIChjYWxsZWQgYSAic3Bh
biIpLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMjcyLDEyICsxNDIxLDEyIEBAIHRlbXBs
YXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDMyPiB7CiAvLyB0aGUgY2VudHJhbCBjYWNoZSBvciBh
bnkgdGhyZWFkIGNhY2hlcy4gV2UgdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgdG8KIC8vIHBlcmlv
ZGljYWxseSBzY2FuIHRoZSBmcmVlIGxpc3QgYW5kIHJlbGVhc2UgYSBwZXJjZW50YWdlIG9mIGl0
IGJhY2sgdG8gdGhlIE9TLgogCi0vLyBJZiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gZXhjZWVkcyBr
TWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQsIHRoZQorLy8gSWYgZnJlZUNvbW1pdHRlZFBh
Z2VzIGV4Y2VlZHMga01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCB0aGUKIC8vIGJhY2tn
cm91bmQgdGhyZWFkOgogLy8gICAgIC0gd2FrZXMgdXAKIC8vICAgICAtIHBhdXNlcyBmb3Iga1Nj
YXZlbmdlRGVsYXlJblNlY29uZHMKIC8vICAgICAtIHJldHVybnMgdG8gdGhlIE9TIGEgcGVyY2Vu
dGFnZSBvZiB0aGUgbWVtb3J5IHRoYXQgcmVtYWluZWQgdW51c2VkIGR1cmluZwotLy8gICAgICAg
dGhhdCBwYXVzZSAoa1NjYXZlbmdlUGVyY2VudGFnZSAqIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdl
c19zaW5jZV9sYXN0X3NjYXZlbmdlXykKKy8vICAgICAgIHRoYXQgcGF1c2UgKGtTY2F2ZW5nZVBl
cmNlbnRhZ2UgKiBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkKIC8vIFRo
ZSBnb2FsIG9mIHRoaXMgc3RyYXRlZ3kgaXMgdG8gcmVkdWNlIG1lbW9yeSBwcmVzc3VyZSBpbiBh
IHRpbWVseSBmYXNoaW9uCiAvLyB3aGlsZSBhdm9pZGluZyB0aHJhc2hpbmcgdGhlIE9TIGFsbG9j
YXRvci4KIApAQCAtMTI5MiwyMzIgKzE0NDEsMjQxIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBrU2Nh
dmVuZ2VQZXJjZW50YWdlID0KIC8vIG51bWJlciBvZiBzcGFuIGxpc3RzIHRvIGtlZXAgc3BhbnMg
aW4gd2hlbiBtZW1vcnkgaXMgcmV0dXJuZWQuCiBzdGF0aWMgY29uc3QgaW50IGtNaW5TcGFuTGlz
dHNXaXRoU3BhbnMgPSAzMjsKIAotLy8gTnVtYmVyIG9mIGZyZWUgY29tbWl0dGVkIHBhZ2VzIHRo
YXQgd2Ugd2FudCB0byBrZWVwIGFyb3VuZC4gIFRoZSBtaW5pbXVtIG51bWJlciBvZiBwYWdlcyB1
c2VkIHdoZW4gdGhlcmUKLS8vIGlzIDEgc3BhbiBpbiBlYWNoIG9mIHRoZSBmaXJzdCBrTWluU3Bh
bkxpc3RzV2l0aFNwYW5zIHNwYW5saXN0cy4gIEN1cnJlbnRseSA1MjggcGFnZXMuCisvLyBOdW1i
ZXIgb2YgZnJlZSBjb21taXR0ZWQgcGFnZXMgdGhhdCB3ZSB3YW50IHRvIGtlZXAgYXJvdW5kLiBU
aGUgbWluaW11bSBudW1iZXIgb2YgcGFnZXMgdXNlZCB3aGVuIHRoZXJlCisvLyBpcyAxIHNwYW4g
aW4gZWFjaCBvZiB0aGUgZmlyc3Qga01pblNwYW5MaXN0c1dpdGhTcGFucyBzcGFubGlzdHMuIEN1
cnJlbnRseSA1MjggcGFnZXMuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNaW5pbXVtRnJlZUNvbW1p
dHRlZFBhZ2VDb3VudCA9IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgKiAoKDEuMGYra01pblNwYW5M
aXN0c1dpdGhTcGFucykgLyAyLjBmKTsKIAogI2VuZGlmCiAKLXN0YXRpYyBTcGluTG9jayBwYWdl
aGVhcF9sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CitzdGF0aWMgU3BpbkxvY2sgcGFnZWhl
YXBMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CiAKLWNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFw
IHsKLSBwdWJsaWM6Ci0gIHZvaWQgaW5pdCgpOworY2xhc3MgVENNYWxsb2NQYWdlSGVhcCB7Citw
dWJsaWM6CisgICAgdm9pZCBpbml0KCk7CiAKLSAgLy8gQWxsb2NhdGUgYSBydW4gb2YgIm4iIHBh
Z2VzLiAgUmV0dXJucyB6ZXJvIGlmIG91dCBvZiBtZW1vcnkuCi0gIFNwYW4qIE5ldyhMZW5ndGgg
bik7CisgICAgLy8gQWxsb2NhdGUgYSBydW4gb2YgIm4iIHBhZ2VzLiBSZXR1cm5zIHplcm8gaWYg
b3V0IG9mIG1lbW9yeS4KKyAgICBTcGFuKiBOZXcoTGVuZ3RoKTsKIAotICAvLyBEZWxldGUgdGhl
IHNwYW4gIltwLCBwK24tMV0iLgotICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkg
ZWFybGllciBjYWxsIHRvIE5ldygpIGFuZAotICAvLyAgICAgICAgICAgaGFzIG5vdCB5ZXQgYmVl
biBkZWxldGVkLgotICB2b2lkIERlbGV0ZShTcGFuKiBzcGFuKTsKLQotICAvLyBNYXJrIGFuIGFs
bG9jYXRlZCBzcGFuIGFzIGJlaW5nIHVzZWQgZm9yIHNtYWxsIG9iamVjdHMgb2YgdGhlCi0gIC8v
IHNwZWNpZmllZCBzaXplLWNsYXNzLgotICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQg
YnkgYW4gZWFybGllciBjYWxsIHRvIE5ldygpCi0gIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5
ZXQgYmVlbiBkZWxldGVkLgotICB2b2lkIFJlZ2lzdGVyU2l6ZUNsYXNzKFNwYW4qIHNwYW4sIHNp
emVfdCBzYyk7Ci0KLSAgLy8gU3BsaXQgYW4gYWxsb2NhdGVkIHNwYW4gaW50byB0d28gc3BhbnM6
IG9uZSBvZiBsZW5ndGggIm4iIHBhZ2VzCi0gIC8vIGZvbGxvd2VkIGJ5IGFub3RoZXIgc3BhbiBv
ZiBsZW5ndGggInNwYW4tPmxlbmd0aCAtIG4iIHBhZ2VzLgotICAvLyBNb2RpZmllcyAiKnNwYW4i
IHRvIHBvaW50IHRvIHRoZSBmaXJzdCBzcGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCi0gIC8vIFJl
dHVybnMgYSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgc3Bhbi4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6
ICIwIDwgbiA8IHNwYW4tPmxlbmd0aCIKLSAgLy8gUkVRVUlSRVM6ICFzcGFuLT5mcmVlCi0gIC8v
IFJFUVVJUkVTOiBzcGFuLT5zaXplY2xhc3MgPT0gMAotICBTcGFuKiBTcGxpdChTcGFuKiBzcGFu
LCBMZW5ndGggbik7Ci0KLSAgLy8gUmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgc3BlY2lm
aWVkIHBhZ2UuCi0gIGlubGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJRCBwKSBjb25zdCB7
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHBhZ2VtYXBfLmdldChwKSk7Ci0g
IH0KKyAgICAvLyBEZWxldGUgdGhlIHNwYW4gIltwLCBwK24tMV0iLgorICAgIC8vIFJFUVVJUkVT
OiBzcGFuIHdhcyByZXR1cm5lZCBieSBlYXJsaWVyIGNhbGwgdG8gTmV3KCkgYW5kCisgICAgLy8g
ICAgICAgICAgIGhhcyBub3QgeWV0IGJlZW4gZGVsZXRlZC4KKyAgICB2b2lkIERlbGV0ZShTcGFu
Kik7CisKKyAgICAvLyBNYXJrIGFuIGFsbG9jYXRlZCBzcGFuIGFzIGJlaW5nIHVzZWQgZm9yIHNt
YWxsIG9iamVjdHMgb2YgdGhlCisgICAgLy8gc3BlY2lmaWVkIHNpemUtY2xhc3MuCisgICAgLy8g
UkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgY2FsbCB0byBOZXcoKQor
ICAgIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgorICAgIHZvaWQg
UmVnaXN0ZXJTaXplQ2xhc3MoU3BhbiosIHNpemVfdCBzYyk7CisKKyAgICAvLyBTcGxpdCBhbiBh
bGxvY2F0ZWQgc3BhbiBpbnRvIHR3byBzcGFuczogb25lIG9mIGxlbmd0aCAibiIgcGFnZXMKKyAg
ICAvLyBmb2xsb3dlZCBieSBhbm90aGVyIHNwYW4gb2YgbGVuZ3RoICJzcGFuLT5sZW5ndGggLSBu
IiBwYWdlcy4KKyAgICAvLyBNb2RpZmllcyAiKnNwYW4iIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBz
cGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCisgICAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
IHNlY29uZCBzcGFuLgorICAgIC8vCisgICAgLy8gUkVRVUlSRVM6ICIwIDwgbiA8IHNwYW4tPmxl
bmd0aCIKKyAgICAvLyBSRVFVSVJFUzogIXNwYW4tPmZyZWUKKyAgICAvLyBSRVFVSVJFUzogc3Bh
bi0+c2l6ZWNsYXNzID09IDAKKyAgICBTcGFuKiBTcGxpdChTcGFuKiwgTGVuZ3RoKTsKKworICAg
IC8vIFJldHVybiB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBwYWdlLgorICAgIGlu
bGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJRCBwKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHBhZ2VtYXAuZ2V0KHApKTsKKyAgICB9CiAK
ICNpZmRlZiBXVEZfQ0hBTkdFUwotICBpbmxpbmUgU3BhbiogR2V0RGVzY3JpcHRvckVuc3VyZVNh
ZmUoUGFnZUlEIHApCi0gIHsKLSAgICAgIHBhZ2VtYXBfLkVuc3VyZShwLCAxKTsKLSAgICAgIHJl
dHVybiBHZXREZXNjcmlwdG9yKHApOwotICB9CisgICAgaW5saW5lIFNwYW4qIEdldERlc2NyaXB0
b3JFbnN1cmVTYWZlKFBhZ2VJRCBwKQorICAgIHsKKyAgICAgICAgcGFnZW1hcC5FbnN1cmUocCwg
MSk7CisgICAgICAgIHJldHVybiBHZXREZXNjcmlwdG9yKHApOworICAgIH0KICAgICAKLSAgc2l6
ZV90IFJldHVybmVkQnl0ZXMoKSBjb25zdDsKKyAgICBzaXplX3QgUmV0dXJuZWRCeXRlcygpIGNv
bnN0OwogI2VuZGlmCiAKLSAgLy8gRHVtcCBzdGF0ZSB0byBzdGRlcnIKKyAgICAvLyBEdW1wIHN0
YXRlIHRvIHN0ZGVycgogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICB2b2lkIER1bXAoVENNYWxsb2Nf
UHJpbnRlciogb3V0KTsKKyAgICB2b2lkIER1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KTsKICNl
bmRpZgogCi0gIC8vIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVt
Ci0gIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRlcygpIGNvbnN0IHsgcmV0dXJuIHN5c3RlbV9i
eXRlc187IH0KKyAgICAvLyBSZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5
c3RlbQorICAgIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRlcygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gc3lzdGVtQnl0ZXM7CisgICAgfQogCi0gIC8vIFJldHVybiBudW1iZXIgb2Yg
ZnJlZSBieXRlcyBpbiBoZWFwCi0gIHVpbnQ2NF90IEZyZWVCeXRlcygpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmcmVlX3BhZ2VzXykgPDwga1BhZ2VTaGlmdCk7
Ci0gIH0KKyAgICAvLyBSZXR1cm4gbnVtYmVyIG9mIGZyZWUgYnl0ZXMgaW4gaGVhcAorICAgIHVp
bnQ2NF90IEZyZWVCeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihmcmVlUGFnZXMpIDw8IGtQYWdlU2hpZnQpOworICAgIH0KIAotICBib29s
IENoZWNrKCk7Ci0gIHNpemVfdCBDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdl
cywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCk7CisgICAgYm9vbCBDaGVjaygp
OworICAgIHNpemVfdCBDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pblBhZ2VzLCBMZW5n
dGggbWF4UGFnZXMsIGJvb2wgZGVjb21taXR0ZWQpOwogCi0gIC8vIFJlbGVhc2UgYWxsIHBhZ2Vz
IG9uIHRoZSBmcmVlIGxpc3QgZm9yIHJldXNlIGJ5IHRoZSBPUzoKLSAgdm9pZCBSZWxlYXNlRnJl
ZVBhZ2VzKCk7Ci0gIHZvaWQgUmVsZWFzZUZyZWVMaXN0KFNwYW4qLCBTcGFuKik7Ci0KLSAgLy8g
UmV0dXJuIDAgaWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiwgb3IgZWxzZSB0aGUgY29ycmVjdCBz
aXplY2xhc3MgZm9yIHAuCi0gIC8vIFJlYWRzIGFuZCB3cml0ZXMgdG8gcGFnZW1hcF9jYWNoZV8g
ZG8gbm90IHJlcXVpcmUgbG9ja2luZy4KLSAgLy8gVGhlIGVudHJpZXMgYXJlIDY0IGJpdHMgb24g
NjQtYml0IGhhcmR3YXJlIGFuZCAxNiBiaXRzIG9uCi0gIC8vIDMyLWJpdCBoYXJkd2FyZSwgYW5k
IHdlIGRvbid0IG1pbmQgcmFjaW5lc3MgYXMgbG9uZyBhcyBlYWNoIHJlYWQgb2YKLSAgLy8gYW4g
ZW50cnkgeWllbGRzIGEgdmFsaWQgZW50cnksIG5vdCBhIHBhcnRpYWxseSB1cGRhdGVkIGVudHJ5
LgotICBzaXplX3QgR2V0U2l6ZUNsYXNzSWZDYWNoZWQoUGFnZUlEIHApIGNvbnN0IHsKLSAgICBy
ZXR1cm4gcGFnZW1hcF9jYWNoZV8uR2V0T3JEZWZhdWx0KHAsIDApOwotICB9Ci0gIHZvaWQgQ2Fj
aGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNpemVfdCBjbCkgY29uc3QgeyBwYWdlbWFwX2NhY2hlXy5Q
dXQocCwgY2wpOyB9CisgICAgLy8gUmVsZWFzZSBhbGwgcGFnZXMgb24gdGhlIGZyZWUgbGlzdCBm
b3IgcmV1c2UgYnkgdGhlIE9TOgorICAgIHZvaWQgUmVsZWFzZUZyZWVQYWdlcygpOworICAgIHZv
aWQgUmVsZWFzZUZyZWVMaXN0KFNwYW4qLCBTcGFuKik7CisKKyAgICAvLyBSZXR1cm4gMCBpZiB3
ZSBoYXZlIG5vIGluZm9ybWF0aW9uLCBvciBlbHNlIHRoZSBjb3JyZWN0IHNpemVjbGFzcyBmb3Ig
cC4KKyAgICAvLyBSZWFkcyBhbmQgd3JpdGVzIHRvIHBhZ2VtYXBjYWNoZSBkbyBub3QgcmVxdWly
ZSBsb2NraW5nLgorICAgIC8vIFRoZSBlbnRyaWVzIGFyZSA2NCBiaXRzIG9uIDY0LWJpdCBoYXJk
d2FyZSBhbmQgMTYgYml0cyBvbgorICAgIC8vIDMyLWJpdCBoYXJkd2FyZSwgYW5kIHdlIGRvbid0
IG1pbmQgcmFjaW5lc3MgYXMgbG9uZyBhcyBlYWNoIHJlYWQgb2YKKyAgICAvLyBhbiBlbnRyeSB5
aWVsZHMgYSB2YWxpZCBlbnRyeSwgbm90IGEgcGFydGlhbGx5IHVwZGF0ZWQgZW50cnkuCisgICAg
c2l6ZV90IEdldFNpemVDbGFzc0lmQ2FjaGVkKFBhZ2VJRCBwKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHBhZ2VtYXBjYWNoZS5HZXRPckRlZmF1bHQocCwgMCk7CisgICAgfQorICAgIHZv
aWQgQ2FjaGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNpemVfdCBjbCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHBhZ2VtYXBjYWNoZS5QdXQocCwgY2wpOworICAgIH0KIAotIHByaXZhdGU6Ci0gIC8vIFBp
Y2sgdGhlIGFwcHJvcHJpYXRlIG1hcCBhbmQgY2FjaGUgdHlwZXMgYmFzZWQgb24gcG9pbnRlciBz
aXplCi0gIHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpzaXplb2YodWludHB0cl90KT46OlR5cGUgUGFn
ZU1hcDsKLSAgdHlwZWRlZiBNYXBTZWxlY3Rvcjw4KnNpemVvZih1aW50cHRyX3QpPjo6Q2FjaGVU
eXBlIFBhZ2VNYXBDYWNoZTsKLSAgUGFnZU1hcCBwYWdlbWFwXzsKLSAgbXV0YWJsZSBQYWdlTWFw
Q2FjaGUgcGFnZW1hcF9jYWNoZV87Ci0KLSAgLy8gV2Ugc2VncmVnYXRlIHNwYW5zIG9mIGEgZ2l2
ZW4gc2l6ZSBpbnRvIHR3byBjaXJjdWxhciBsaW5rZWQKLSAgLy8gbGlzdHM6IG9uZSBmb3Igbm9y
bWFsIHNwYW5zLCBhbmQgb25lIGZvciBzcGFucyB3aG9zZSBtZW1vcnkKLSAgLy8gaGFzIGJlZW4g
cmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KLSAgc3RydWN0IFNwYW5MaXN0IHsKLSAgICBTcGFuICAg
ICAgICBub3JtYWw7Ci0gICAgU3BhbiAgICAgICAgcmV0dXJuZWQ7Ci0gIH07Ci0KLSAgLy8gTGlz
dCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBrTWF4UGFnZXMKLSAgU3Bhbkxpc3QgbGFyZ2Vf
OworcHJpdmF0ZToKKyAgICAvLyBQaWNrIHRoZSBhcHByb3ByaWF0ZSBtYXAgYW5kIGNhY2hlIHR5
cGVzIGJhc2VkIG9uIHBvaW50ZXIgc2l6ZQorICAgIHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpzaXpl
b2YodWludHB0cl90KT46OlR5cGUgUGFnZU1hcDsKKyAgICB0eXBlZGVmIE1hcFNlbGVjdG9yPDgq
c2l6ZW9mKHVpbnRwdHJfdCk+OjpDYWNoZVR5cGUgUGFnZU1hcENhY2hlOworICAgIFBhZ2VNYXAg
cGFnZW1hcDsKKyAgICBtdXRhYmxlIFBhZ2VNYXBDYWNoZSBwYWdlbWFwY2FjaGU7CisKKyAgICAv
LyBXZSBzZWdyZWdhdGUgc3BhbnMgb2YgYSBnaXZlbiBzaXplIGludG8gdHdvIGNpcmN1bGFyIGxp
bmtlZAorICAgIC8vIGxpc3RzOiBvbmUgZm9yIG5vcm1hbCBzcGFucywgYW5kIG9uZSBmb3Igc3Bh
bnMgd2hvc2UgbWVtb3J5CisgICAgLy8gaGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4K
KyAgICBzdHJ1Y3QgU3Bhbkxpc3QgeworICAgICAgICBTcGFuIG5vcm1hbDsKKyAgICAgICAgU3Bh
biByZXR1cm5lZDsKKyAgICB9OworCisgICAgLy8gTGlzdCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0
aCA+PSBrTWF4UGFnZXMKKyAgICBTcGFuTGlzdCBsYXJnZTsKIAotICAvLyBBcnJheSBtYXBwaW5n
IGZyb20gc3BhbiBsZW5ndGggdG8gYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBzcGFucwot
ICBTcGFuTGlzdCBmcmVlX1trTWF4UGFnZXNdOworICAgIC8vIEFycmF5IG1hcHBpbmcgZnJvbSBz
cGFuIGxlbmd0aCB0byBhIGRvdWJseSBsaW5rZWQgbGlzdCBvZiBmcmVlIHNwYW5zCisgICAgU3Bh
bkxpc3QgZnJlZVNwYW5MaXN0W2tNYXhQYWdlc107CiAKLSAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtl
cHQgaW4gZnJlZSBsaXN0cwotICB1aW50cHRyX3QgZnJlZV9wYWdlc187CisgICAgLy8gTnVtYmVy
IG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cworICAgIHVpbnRwdHJfdCBmcmVlUGFnZXM7CiAK
LSAgLy8gQnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCi0gIHVpbnQ2NF90IHN5c3RlbV9ieXRl
c187CisgICAgLy8gQnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgICAgdWludDY0X3Qgc3lz
dGVtQnl0ZXM7CiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZ
Ci0gIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlzdHMgdGhhdCBhcmUgc3RpbGwg
Y29tbWl0dGVkLgotICBMZW5ndGggZnJlZV9jb21taXR0ZWRfcGFnZXNfOworICAgIC8vIE51bWJl
ciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlzdHMgdGhhdCBhcmUgc3RpbGwgY29tbWl0dGVkLgor
ICAgIExlbmd0aCBmcmVlQ29tbWl0dGVkUGFnZXM7CiAKLSAgLy8gTWluaW11bSBudW1iZXIgb2Yg
ZnJlZSBjb21taXR0ZWQgcGFnZXMgc2luY2UgbGFzdCBzY2F2ZW5nZS4gKENhbiBiZSAwIGlmCi0g
IC8vIHdlJ3ZlIGNvbW1pdHRlZCBuZXcgcGFnZXMgc2luY2UgdGhlIGxhc3Qgc2NhdmVuZ2UuKQot
ICBMZW5ndGggbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfOwot
I2VuZGlmCi0KLSAgYm9vbCBHcm93SGVhcChMZW5ndGggbik7Ci0KLSAgLy8gUkVRVUlSRVMgICBz
cGFuLT5sZW5ndGggPj0gbgotICAvLyBSZW1vdmUgc3BhbiBmcm9tIGl0cyBmcmVlIGxpc3QsIGFu
ZCBtb3ZlIGFueSBsZWZ0b3ZlciBwYXJ0IG9mCi0gIC8vIHNwYW4gaW50byBhcHByb3ByaWF0ZSBm
cmVlIGxpc3RzLiAgQWxzbyB1cGRhdGUgInNwYW4iIHRvIGhhdmUKLSAgLy8gbGVuZ3RoIGV4YWN0
bHkgIm4iIGFuZCBtYXJrIGl0IGFzIG5vbi1mcmVlIHNvIGl0IGNhbiBiZSByZXR1cm5lZAotICAv
LyB0byB0aGUgY2xpZW50LgotICAvLwotICAvLyAicmVsZWFzZWQiIGlzIHRydWUgaWZmICJzcGFu
IiB3YXMgZm91bmQgb24gYSAicmV0dXJuZWQiIGxpc3QuCi0gIHZvaWQgQ2FydmUoU3Bhbiogc3Bh
biwgTGVuZ3RoIG4sIGJvb2wgcmVsZWFzZWQpOwotCi0gIHZvaWQgUmVjb3JkU3BhbihTcGFuKiBz
cGFuKSB7Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0LCBzcGFuKTsKLSAgICBpZiAoc3Bh
bi0+bGVuZ3RoID4gMSkgewotICAgICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+
bGVuZ3RoIC0gMSwgc3Bhbik7CisgICAgLy8gTWluaW11bSBudW1iZXIgb2YgZnJlZSBjb21taXR0
ZWQgcGFnZXMgc2luY2UgbGFzdCBzY2F2ZW5nZS4gKENhbiBiZSAwIGlmCisgICAgLy8gd2UndmUg
Y29tbWl0dGVkIG5ldyBwYWdlcyBzaW5jZSB0aGUgbGFzdCBzY2F2ZW5nZS4pCisgICAgTGVuZ3Ro
IG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlOworI2VuZGlmCisKKyAgICBi
b29sIEdyb3dIZWFwKExlbmd0aCk7CisKKyAgICAvLyBSRVFVSVJFUyAgIHNwYW4tPmxlbmd0aCA+
PSBuCisgICAgLy8gUmVtb3ZlIHNwYW4gZnJvbSBpdHMgZnJlZSBsaXN0LCBhbmQgbW92ZSBhbnkg
bGVmdG92ZXIgcGFydCBvZgorICAgIC8vIHNwYW4gaW50byBhcHByb3ByaWF0ZSBmcmVlIGxpc3Rz
LiBBbHNvIHVwZGF0ZSAic3BhbiIgdG8gaGF2ZQorICAgIC8vIGxlbmd0aCBleGFjdGx5ICJuIiBh
bmQgbWFyayBpdCBhcyBub24tZnJlZSBzbyBpdCBjYW4gYmUgcmV0dXJuZWQKKyAgICAvLyB0byB0
aGUgY2xpZW50LgorICAgIC8vCisgICAgLy8gInJlbGVhc2VkIiBpcyB0cnVlIGlmZiAic3BhbiIg
d2FzIGZvdW5kIG9uIGEgInJldHVybmVkIiBsaXN0LgorICAgIHZvaWQgQ2FydmUoU3BhbiosIExl
bmd0aCwgYm9vbCByZWxlYXNlZCk7CisKKyAgICB2b2lkIFJlY29yZFNwYW4oU3Bhbiogc3BhbikK
KyAgICB7CisgICAgICAgIHBhZ2VtYXAuc2V0KHNwYW4tPnN0YXJ0LCBzcGFuKTsKKyAgICAgICAg
aWYgKHNwYW4tPmxlbmd0aCA+IDEpCisgICAgICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFy
dCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOwogICAgIH0KLSAgfQogICAKLSAgICAvLyBBbGxv
Y2F0ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09IG4uICBJZiBzdWNjZXNzZnVsLCByZXR1cm5z
IGEKLSAgLy8gc3BhbiBvZiBleGFjdGx5IHRoZSBzcGVjaWZpZWQgbGVuZ3RoLiAgRWxzZSwgcmV0
dXJucyBOVUxMLgotICBTcGFuKiBBbGxvY0xhcmdlKExlbmd0aCBuKTsKKyAgICAvLyBBbGxvY2F0
ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09IG4uIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgYQor
ICAgIC8vIHNwYW4gb2YgZXhhY3RseSB0aGUgc3BlY2lmaWVkIGxlbmd0aC4gRWxzZSwgcmV0dXJu
cyAwLgorICAgIFNwYW4qIEFsbG9jTGFyZ2UoTGVuZ3RoKTsKIAogI2lmICFVU0VfQkFDS0dST1VO
RF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIC8vIEluY3JlbWVudGFsbHkgcmVsZWFzZSBz
b21lIG1lbW9yeSB0byB0aGUgc3lzdGVtLgotICAvLyBJbmNyZW1lbnRhbFNjYXZlbmdlKG4pIGlz
IGNhbGxlZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBmcmVlZC4KLSAgdm9pZCBJbmNyZW1lbnRhbFNj
YXZlbmdlKExlbmd0aCBuKTsKKyAgICAvLyBJbmNyZW1lbnRhbGx5IHJlbGVhc2Ugc29tZSBtZW1v
cnkgdG8gdGhlIHN5c3RlbS4KKyAgICAvLyBJbmNyZW1lbnRhbFNjYXZlbmdlKG4pIGlzIGNhbGxl
ZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBmcmVlZC4KKyAgICB2b2lkIEluY3JlbWVudGFsU2NhdmVu
Z2UoTGVuZ3RoKTsKICNlbmRpZgogCi0gIC8vIE51bWJlciBvZiBwYWdlcyB0byBkZWFsbG9jYXRl
IGJlZm9yZSBkb2luZyBtb3JlIHNjYXZlbmdpbmcKLSAgaW50NjRfdCBzY2F2ZW5nZV9jb3VudGVy
XzsKKyAgICAvLyBOdW1iZXIgb2YgcGFnZXMgdG8gZGVhbGxvY2F0ZSBiZWZvcmUgZG9pbmcgbW9y
ZSBzY2F2ZW5naW5nCisgICAgaW50NjRfdCBzY2F2ZW5nZUNvdW50ZXI7CiAKLSAgLy8gSW5kZXgg
b2YgbGFzdCBmcmVlIGxpc3Qgd2Ugc2NhdmVuZ2VkCi0gIHNpemVfdCBzY2F2ZW5nZV9pbmRleF87
CisgICAgLy8gSW5kZXggb2YgbGFzdCBmcmVlIGxpc3Qgd2Ugc2NhdmVuZ2VkCisgICAgc2l6ZV90
IHNjYXZlbmdlSW5kZXg7CiAgIAogI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9TKERBUldJ
TikKLSAgZnJpZW5kIGNsYXNzIEZhc3RNYWxsb2Nab25lOworICAgIGZyaWVuZCBjbGFzcyBGYXN0
TWFsbG9jWm9uZTsKICNlbmRpZgogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZF
TkdFX01FTU9SWQotICB2b2lkIGluaXRpYWxpemVTY2F2ZW5nZXIoKTsKLSAgQUxXQVlTX0lOTElO
RSB2b2lkIHNpZ25hbFNjYXZlbmdlcigpOwotICB2b2lkIHNjYXZlbmdlKCk7Ci0gIEFMV0FZU19J
TkxJTkUgYm9vbCBzaG91bGRTY2F2ZW5nZSgpIGNvbnN0OworICAgIHZvaWQgaW5pdGlhbGl6ZVNj
YXZlbmdlcigpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzaWduYWxTY2F2ZW5nZXIoKTsKKyAg
ICB2b2lkIHNjYXZlbmdlKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZFNjYXZlbmdl
KCkgY29uc3Q7CiAKICNpZiBIQVZFKERJU1BBVENIX0gpIHx8IE9TKFdJTkRPV1MpCi0gIHZvaWQg
cGVyaW9kaWNTY2F2ZW5nZSgpOwotICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNTY2F2ZW5nZXJTdXNw
ZW5kZWQoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHNjaGVkdWxlU2NhdmVuZ2VyKCk7Ci0gIEFM
V0FZU19JTkxJTkUgdm9pZCByZXNjaGVkdWxlU2NhdmVuZ2VyKCk7Ci0gIEFMV0FZU19JTkxJTkUg
dm9pZCBzdXNwZW5kU2NhdmVuZ2VyKCk7CisgICAgdm9pZCBwZXJpb2RpY1NjYXZlbmdlKCk7Cisg
ICAgQUxXQVlTX0lOTElORSBib29sIGlzU2NhdmVuZ2VyU3VzcGVuZGVkKCk7CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHNjaGVkdWxlU2NhdmVuZ2VyKCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHJlc2NoZWR1bGVTY2F2ZW5nZXIoKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3VzcGVuZFNj
YXZlbmdlcigpOwogI2VuZGlmCiAKICNpZiBIQVZFKERJU1BBVENIX0gpCi0gIGRpc3BhdGNoX3F1
ZXVlX3QgbV9zY2F2ZW5nZVF1ZXVlOwotICBkaXNwYXRjaF9zb3VyY2VfdCBtX3NjYXZlbmdlVGlt
ZXI7Ci0gIGJvb2wgbV9zY2F2ZW5naW5nU3VzcGVuZGVkOworICAgIGRpc3BhdGNoX3F1ZXVlX3Qg
bV9zY2F2ZW5nZVF1ZXVlOworICAgIGRpc3BhdGNoX3NvdXJjZV90IG1fc2NhdmVuZ2VUaW1lcjsK
KyAgICBib29sIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZDsKICNlbGlmIE9TKFdJTkRPV1MpCi0gIHN0
YXRpYyB2b2lkIENBTExCQUNLIHNjYXZlbmdlclRpbWVyRmlyZWQodm9pZCosIEJPT0xFQU4pOwot
ICBIQU5ETEUgbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CisgICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sg
c2NhdmVuZ2VyVGltZXJGaXJlZCh2b2lkKiwgQk9PTEVBTik7CisgICAgSEFORExFIG1fc2NhdmVu
Z2VRdWV1ZVRpbWVyOwogI2Vsc2UgCi0gIHN0YXRpYyBOT19SRVRVUk5fV0lUSF9WQUxVRSB2b2lk
KiBydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCopOwotICBOT19SRVRVUk4gdm9pZCBzY2F2ZW5nZXJU
aHJlYWQoKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX1dJVEhfVkFMVUUgdm9pZCogcnVuU2NhdmVu
Z2VyVGhyZWFkKHZvaWQqKTsKKyAgICBOT19SRVRVUk4gdm9pZCBzY2F2ZW5nZXJUaHJlYWQoKTsK
IAotICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBpcyBh
Y3RpdmVseSBzY2F2ZW5naW5nIG1lbW9yeSBldmVyeSBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcywg
b3IKLSAgLy8gaXQncyBibG9ja2VkIHdhaXRpbmcgZm9yIG1vcmUgcGFnZXMgdG8gYmUgZGVsZXRl
ZC4KLSAgYm9vbCBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlOworICAgIC8vIEtlZXBzIHRyYWNrIG9m
IHdoZXRoZXIgdGhlIGJhY2tncm91bmQgdGhyZWFkIGlzIGFjdGl2ZWx5IHNjYXZlbmdpbmcgbWVt
b3J5IGV2ZXJ5IGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzLCBvcgorICAgIC8vIGl0J3MgYmxvY2tl
ZCB3YWl0aW5nIGZvciBtb3JlIHBhZ2VzIHRvIGJlIGRlbGV0ZWQuCisgICAgYm9vbCBtX3NjYXZl
bmdlVGhyZWFkQWN0aXZlOwogCi0gIHB0aHJlYWRfbXV0ZXhfdCBtX3NjYXZlbmdlTXV0ZXg7Ci0g
IHB0aHJlYWRfY29uZF90IG1fc2NhdmVuZ2VDb25kaXRpb247CisgICAgcHRocmVhZF9tdXRleF90
IG1fc2NhdmVuZ2VNdXRleDsKKyAgICBwdGhyZWFkX2NvbmRfdCBtX3NjYXZlbmdlQ29uZGl0aW9u
OwogI2VuZGlmCiAKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdF
X01FTU9SWQorI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1P
UlkKIH07CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXQoKQordm9pZCBUQ01hbGxvY1Bh
Z2VIZWFwOjppbml0KCkKIHsKLSAgcGFnZW1hcF8uaW5pdChNZXRhRGF0YUFsbG9jKTsKLSAgcGFn
ZW1hcF9jYWNoZV8gPSBQYWdlTWFwQ2FjaGUoMCk7Ci0gIGZyZWVfcGFnZXNfID0gMDsKLSAgc3lz
dGVtX2J5dGVzXyA9IDA7CisgICAgcGFnZW1hcC5pbml0KE1ldGFEYXRhQWxsb2MpOworICAgIHBh
Z2VtYXBjYWNoZSA9IFBhZ2VNYXBDYWNoZSgwKTsKKyAgICBmcmVlUGFnZXMgPSAwOworICAgIHN5
c3RlbUJ5dGVzID0gMDsKIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9N
RU1PUlkKLSAgZnJlZV9jb21taXR0ZWRfcGFnZXNfID0gMDsKLSAgbWluX2ZyZWVfY29tbWl0dGVk
X3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gMDsKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9V
TkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotCi0gIHNjYXZlbmdlX2NvdW50ZXJfID0gMDsK
LSAgLy8gU3RhcnQgc2NhdmVuZ2luZyBhdCBrTWF4UGFnZXMgbGlzdAotICBzY2F2ZW5nZV9pbmRl
eF8gPSBrTWF4UGFnZXMtMTsKLSAgQ09NUElMRV9BU1NFUlQoa051bUNsYXNzZXMgPD0gKDEgPDwg
UGFnZU1hcENhY2hlOjprVmFsdWViaXRzKSwgdmFsdWViaXRzKTsKLSAgRExMX0luaXQoJmxhcmdl
Xy5ub3JtYWwpOwotICBETExfSW5pdCgmbGFyZ2VfLnJldHVybmVkKTsKLSAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrTWF4UGFnZXM7IGkrKykgewotICAgIERMTF9Jbml0KCZmcmVlX1tpXS5ub3Jt
YWwpOwotICAgIERMTF9Jbml0KCZmcmVlX1tpXS5yZXR1cm5lZCk7Ci0gIH0KKyAgICBmcmVlQ29t
bWl0dGVkUGFnZXMgPSAwOworICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZl
bmdlID0gMDsKKyNlbmRpZiAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVN
T1JZCisKKyAgICBzY2F2ZW5nZUNvdW50ZXIgPSAwOworICAgIC8vIFN0YXJ0IHNjYXZlbmdpbmcg
YXQga01heFBhZ2VzIGxpc3QKKyAgICBzY2F2ZW5nZUluZGV4ID0ga01heFBhZ2VzLTE7CisgICAg
Q09NUElMRV9BU1NFUlQoa051bUNsYXNzZXMgPD0gKDEgPDwgUGFnZU1hcENhY2hlOjprVmFsdWVi
aXRzKSwgdmFsdWViaXRzKTsKKyAgICBETExJbml0KCZsYXJnZS5ub3JtYWwpOworICAgIERMTElu
aXQoJmxhcmdlLnJldHVybmVkKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdl
czsgaSsrKSB7CisgICAgICAgIERMTEluaXQoJmZyZWVTcGFuTGlzdFtpXS5ub3JtYWwpOworICAg
ICAgICBETExJbml0KCZmcmVlU3Bhbkxpc3RbaV0ucmV0dXJuZWQpOworICAgIH0KIAogI2lmIFVT
RV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgaW5pdGlhbGl6ZVNjYXZl
bmdlcigpOwotI2VuZGlmICAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVN
T1JZCisgICAgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOworI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5E
X1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIH0KIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVB
RF9UT19TQ0FWRU5HRV9NRU1PUlkKIAogI2lmIEhBVkUoRElTUEFUQ0hfSCkKIAotdm9pZCBUQ01h
bGxvY19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCit2b2lkIFRDTWFsbG9jUGFnZUhl
YXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQogewotICAgIG1fc2NhdmVuZ2VRdWV1ZSA9IGRpc3Bh
dGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlLkZhc3RNYWxsb2NTYXZl
bmdlciIsIE5VTEwpOworICAgIG1fc2NhdmVuZ2VRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0
ZSgiY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlLkZhc3RNYWxsb2NTYXZlbmdlciIsIDApOwogICAg
IG1fc2NhdmVuZ2VUaW1lciA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNF
X1RZUEVfVElNRVIsIDAsIDAsIG1fc2NhdmVuZ2VRdWV1ZSk7CiAgICAgZGlzcGF0Y2hfdGltZV90
IHN0YXJ0VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIGtTY2F2ZW5nZURl
bGF5SW5TZWNvbmRzICogTlNFQ19QRVJfU0VDKTsKICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X3Rp
bWVyKG1fc2NhdmVuZ2VUaW1lciwgc3RhcnRUaW1lLCBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyAq
IE5TRUNfUEVSX1NFQywgMTAwMCAqIE5TRUNfUEVSX1VTRUMpOwpAQCAtMTUyNSw2NyArMTY4Myw2
NyBAQCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuCiAgICAgbV9zY2F2
ZW5naW5nU3VzcGVuZGVkID0gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9j
X1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRlZCgpCitBTFdBWVNfSU5MSU5FIGJvb2wgVENN
YWxsb2NQYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNwZW5kZWQoKQogewotICAgIEFTU0VSVChwYWdl
aGVhcF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NFUlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsK
ICAgICByZXR1cm4gbV9zY2F2ZW5naW5nU3VzcGVuZGVkOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2hlZHVsZVNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJU
KHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxk
KCkpOwogICAgIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZCA9IGZhbHNlOwogICAgIGRpc3BhdGNoX3Jl
c3VtZShtX3NjYXZlbmdlVGltZXIpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2Nf
UGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5nZXIoKQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFs
bG9jUGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5nZXIoKQogewogICAgIC8vIE5vdGhpbmcgdG8g
ZG8gaGVyZSBmb3IgbGliZGlzcGF0Y2guCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxv
Y19QYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxs
b2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJUKHBhZ2VoZWFwX2xv
Y2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogICAgIG1f
c2NhdmVuZ2luZ1N1c3BlbmRlZCA9IHRydWU7CiAgICAgZGlzcGF0Y2hfc3VzcGVuZChtX3NjYXZl
bmdlVGltZXIpOwogfQogCiAjZWxpZiBPUyhXSU5ET1dTKQogCi12b2lkIFRDTWFsbG9jX1BhZ2VI
ZWFwOjpzY2F2ZW5nZXJUaW1lckZpcmVkKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4pCit2b2lkIFRD
TWFsbG9jUGFnZUhlYXA6OnNjYXZlbmdlclRpbWVyRmlyZWQodm9pZCogY29udGV4dCwgQk9PTEVB
TikKIHsKLSAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY19QYWdlSGVhcCo+KGNvbnRleHQpLT5wZXJp
b2RpY1NjYXZlbmdlKCk7CisgICAgc3RhdGljX2Nhc3Q8VENNYWxsb2NQYWdlSGVhcCo+KGNvbnRl
eHQpLT5wZXJpb2RpY1NjYXZlbmdlKCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6Omlu
aXRpYWxpemVTY2F2ZW5nZXIoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjppbml0aWFsaXplU2Nh
dmVuZ2VyKCkKIHsKICAgICBtX3NjYXZlbmdlUXVldWVUaW1lciA9IDA7CiB9CiAKLUFMV0FZU19J
TkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNwZW5kZWQoKQorQUxX
QVlTX0lOTElORSBib29sIFRDTWFsbG9jUGFnZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKCkK
IHsKLSAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFwX2xvY2spKTsKKyAgICBBU1NFUlQoSXNIZWxk
KHBhZ2VoZWFwTG9jaykpOwogICAgIHJldHVybiAhbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIo
KQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2Vy
KCkKIHsKICAgICAvLyBXZSBuZWVkIHRvIHVzZSBXVF9FWEVDVVRFT05MWU9OQ0UgaGVyZSBhbmQg
cmVzY2hlZHVsZSB0aGUgdGltZXIsIGJlY2F1c2UKICAgICAvLyBXaW5kb3dzIHdpbGwgZmlyZSB0
aGUgdGltZXIgZXZlbnQgZXZlbiB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbHJlYWR5IHJ1bm5pbmcu
Ci0gICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9sb2NrKSk7CisgICAgQVNTRVJUKElzSGVsZChw
YWdlaGVhcExvY2spKTsKICAgICBDcmVhdGVUaW1lclF1ZXVlVGltZXIoJm1fc2NhdmVuZ2VRdWV1
ZVRpbWVyLCAwLCBzY2F2ZW5nZXJUaW1lckZpcmVkLCB0aGlzLCBrU2NhdmVuZ2VEZWxheUluU2Vj
b25kcyAqIDEwMDAsIDAsIFdUX0VYRUNVVEVPTkxZT05DRSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCitBTFdBWVNfSU5M
SU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCiB7CiAgICAg
Ly8gV2UgbXVzdCBkZWxldGUgdGhlIHRpbWVyIGFuZCBjcmVhdGUgaXQgYWdhaW4sIGJlY2F1c2Ug
aXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZ2dlciBhIHRpbWVyIG9uIFdpbmRvd3MuCiAgICAg
c3VzcGVuZFNjYXZlbmdlcigpOwogICAgIHNjaGVkdWxlU2NhdmVuZ2VyKCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCitBTFdB
WVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCiB7Ci0g
ICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9sb2NrKSk7CisgICAgQVNTRVJUKElzSGVsZChwYWdl
aGVhcExvY2spKTsKICAgICBIQU5ETEUgc2NhdmVuZ2VRdWV1ZVRpbWVyID0gbV9zY2F2ZW5nZVF1
ZXVlVGltZXI7CiAgICAgbV9zY2F2ZW5nZVF1ZXVlVGltZXIgPSAwOwogICAgIERlbGV0ZVRpbWVy
UXVldWVUaW1lcigwLCBzY2F2ZW5nZVF1ZXVlVGltZXIsIDApOwpAQCAtMTU5Myw3ICsxNzUxLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzdQogCiAjZWxzZQogCi12
b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKK3ZvaWQgVENNYWxs
b2NQYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gQ3JlYXRlIGEgbm9u
LXJlY3Vyc2l2ZSBtdXRleC4KICNpZiAhZGVmaW5lZChQVEhSRUFEX01VVEVYX05PUk1BTCkgfHwg
UFRIUkVBRF9NVVRFWF9OT1JNQUwgPT0gUFRIUkVBRF9NVVRFWF9ERUZBVUxUCkBAIC0xNjE0LDE2
ICsxNzcyLDE2IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW4KICAg
ICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCAwLCBydW5TY2F2ZW5nZXJUaHJlYWQsIHRoaXMpOwog
fQogCi12b2lkKiBUQ01hbGxvY19QYWdlSGVhcDo6cnVuU2NhdmVuZ2VyVGhyZWFkKHZvaWQqIGNv
bnRleHQpCit2b2lkKiBUQ01hbGxvY1BhZ2VIZWFwOjpydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCog
Y29udGV4dCkKIHsKLSAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY19QYWdlSGVhcCo+KGNvbnRleHQp
LT5zY2F2ZW5nZXJUaHJlYWQoKTsKKyAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY1BhZ2VIZWFwKj4o
Y29udGV4dCktPnNjYXZlbmdlclRocmVhZCgpOwogI2lmIChDT01QSUxFUihNU1ZDKSB8fCBDT01Q
SUxFUihTVU5DQykpCiAgICAgLy8gV2l0aG91dCB0aGlzLCBWaXN1YWwgU3R1ZGlvIGFuZCBTdW4g
U3R1ZGlvIHdpbGwgY29tcGxhaW4gdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSB2
YWx1ZS4KICAgICByZXR1cm4gMDsKICNlbmRpZgogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENN
YWxsb2NfUGFnZUhlYXA6OnNpZ25hbFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENN
YWxsb2NQYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2VyKCkKIHsKICAgICAvLyBtX3NjYXZlbmdlTXV0
ZXggc2hvdWxkIGJlIGhlbGQgYmVmb3JlIGFjY2Vzc2luZyBtX3NjYXZlbmdlVGhyZWFkQWN0aXZl
LgogICAgIEFTU0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2sobV9zY2F2ZW5nZU11dGV4KSk7CkBA
IC0xNjMzLDIwMSArMTc5MSwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VI
ZWFwOjpzaQogCiAjZW5kaWYKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVuZ2UoKQor
dm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZSgpCiB7Ci0gICAgc2l6ZV90IHBhZ2VzVG9S
ZWxlYXNlID0gbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfICog
a1NjYXZlbmdlUGVyY2VudGFnZTsKLSAgICBzaXplX3QgdGFyZ2V0UGFnZUNvdW50ID0gc3RkOjpt
YXg8c2l6ZV90PihrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQsIGZyZWVfY29tbWl0dGVk
X3BhZ2VzXyAtIHBhZ2VzVG9SZWxlYXNlKTsKKyAgICBzaXplX3QgcGFnZXNUb1JlbGVhc2UgPSBt
aW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSAqIGtTY2F2ZW5nZVBlcmNlbnRh
Z2U7CisgICAgc2l6ZV90IHRhcmdldFBhZ2VDb3VudCA9IHN0ZDo6bWF4PHNpemVfdD4oa01pbmlt
dW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCBmcmVlQ29tbWl0dGVkUGFnZXMgLSBwYWdlc1RvUmVs
ZWFzZSk7CiAKLSAgICBMZW5ndGggbGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVfY29tbWl0
dGVkX3BhZ2VzXzsKLSAgICB3aGlsZSAoZnJlZV9jb21taXR0ZWRfcGFnZXNfID4gdGFyZ2V0UGFn
ZUNvdW50KSB7CisgICAgTGVuZ3RoIGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPSBmcmVlQ29tbWl0
dGVkUGFnZXM7CisgICAgd2hpbGUgKGZyZWVDb21taXR0ZWRQYWdlcyA+IHRhcmdldFBhZ2VDb3Vu
dCkgewogICAgICAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBrTWF4
UGFnZXM7IGkgPiAwICYmIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+PSB0YXJnZXRQYWdlQ291bnQ7
IGktLSkgewotICAgICAgICAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRpY19jYXN0PHNpemVf
dD4oaSkgPT0ga01heFBhZ2VzKSA/ICZsYXJnZV8gOiAmZnJlZV9baV07Ci0gICAgICAgICAgICAv
LyBJZiB0aGUgc3BhbiBzaXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMg
cGFnZXMgcmV0dXJuIGFsbCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2UgcmV0dXJuIGFsbCBi
dXQgMSBzcGFuLiAgCisgICAgICAgIGZvciAoaW50IGkgPSBrTWF4UGFnZXM7IGkgPiAwICYmIGZy
ZWVDb21taXR0ZWRQYWdlcyA+PSB0YXJnZXRQYWdlQ291bnQ7IGktLSkgeworICAgICAgICAgICAg
U3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRpY19jYXN0PHNpemVfdD4oaSkgPT0ga01heFBhZ2VzKSA/
ICZsYXJnZSA6ICZmcmVlU3Bhbkxpc3RbaV07CisgICAgICAgICAgICAvLyBJZiB0aGUgc3BhbiBz
aXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgcGFnZXMgcmV0dXJuIGFs
bCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2UgcmV0dXJuIGFsbCBidXQgMSBzcGFuLiAKICAg
ICAgICAgICAgIC8vIFJldHVybiBvbmx5IDUwJSBvZiBhIHNwYW5saXN0IGF0IGEgdGltZSBzbyBz
cGFucyBvZiBzaXplIDEgYXJlIG5vdCB0aGUgb25seSBvbmVzIGxlZnQuCi0gICAgICAgICAgICBz
aXplX3QgbGVuZ3RoID0gRExMX0xlbmd0aCgmc2xpc3QtPm5vcm1hbCk7CisgICAgICAgICAgICBz
aXplX3QgbGVuZ3RoID0gRExMTGVuZ3RoKCZzbGlzdC0+bm9ybWFsKTsKICAgICAgICAgICAgIHNp
emVfdCBudW1TcGFuc1RvUmV0dXJuID0gKGkgPiBrTWluU3Bhbkxpc3RzV2l0aFNwYW5zKSA/IGxl
bmd0aCA6IGxlbmd0aCAvIDI7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgc3RhdGljX2Nh
c3Q8c2l6ZV90PihqKSA8IG51bVNwYW5zVG9SZXR1cm4gJiYgIURMTF9Jc0VtcHR5KCZzbGlzdC0+
bm9ybWFsKSAmJiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiB0YXJnZXRQYWdlQ291bnQ7IGorKykg
eworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IHN0YXRpY19jYXN0PHNpemVfdD4oaikgPCBu
dW1TcGFuc1RvUmV0dXJuICYmICFETExfSXNFbXB0eSgmc2xpc3QtPm5vcm1hbCkgJiYgZnJlZUNv
bW1pdHRlZFBhZ2VzID4gdGFyZ2V0UGFnZUNvdW50OyBqKyspIHsKICAgICAgICAgICAgICAgICBT
cGFuKiBzID0gc2xpc3QtPm5vcm1hbC5wcmV2OyAKLSAgICAgICAgICAgICAgICBETExfUmVtb3Zl
KHMpOworICAgICAgICAgICAgICAgIERMTFJlbW92ZShzKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQoIXMtPmRlY29tbWl0dGVkKTsKICAgICAgICAgICAgICAgICBpZiAoIXMtPmRlY29tbWl0dGVk
KSB7CiAgICAgICAgICAgICAgICAgICAgIFRDTWFsbG9jX1N5c3RlbVJlbGVhc2UocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocy0+c3RhcnQgPDwga1BhZ2VTaGlmdCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGgg
PDwga1BhZ2VTaGlmdCkpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZnJlZV9jb21taXR0
ZWRfcGFnZXNfID49IHMtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWVfY29tbWl0
dGVkX3BhZ2VzXyAtPSBzLT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmcmVl
Q29tbWl0dGVkUGFnZXMgPj0gcy0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZUNv
bW1pdHRlZFBhZ2VzIC09IHMtPmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgcy0+ZGVjb21t
aXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBETExfUHJl
cGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKKyAgICAgICAgICAgICAgICBETExQcmVwZW5kKCZz
bGlzdC0+cmV0dXJuZWQsIHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPT0gZnJlZV9jb21taXR0ZWRfcGFnZXNfKQorICAg
ICAgICBpZiAobGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9PSBmcmVlQ29tbWl0dGVkUGFnZXMpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVf
Y29tbWl0dGVkX3BhZ2VzXzsKKyAgICAgICAgbGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVD
b21taXR0ZWRQYWdlczsKICAgICB9CiAKLSAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2lu
Y2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAgbWluRnJlZUNv
bW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6c2hvdWxkU2NhdmVuZ2UoKSBj
b25zdCAKK0FMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY1BhZ2VIZWFwOjpzaG91bGRTY2F2ZW5n
ZSgpIGNvbnN0IAogewotICAgIHJldHVybiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiBrTWluaW11
bUZyZWVDb21taXR0ZWRQYWdlQ291bnQ7IAorICAgIHJldHVybiBmcmVlQ29tbWl0dGVkUGFnZXMg
PiBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQ7IAogfQogCiAjZW5kaWYgIC8vIFVTRV9C
QUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIAotaW5saW5lIFNwYW4qIFRDTWFs
bG9jX1BhZ2VIZWFwOjpOZXcoTGVuZ3RoIG4pIHsKLSAgQVNTRVJUKENoZWNrKCkpOwotICBBU1NF
UlQobiA+IDApOwotCi0gIC8vIEZpbmQgZmlyc3Qgc2l6ZSA+PSBuIHRoYXQgaGFzIGEgbm9uLWVt
cHR5IGxpc3QKLSAgZm9yIChMZW5ndGggcyA9IG47IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAg
IFNwYW4qIGxsID0gTlVMTDsKLSAgICBib29sIHJlbGVhc2VkID0gZmFsc2U7Ci0gICAgaWYgKCFE
TExfSXNFbXB0eSgmZnJlZV9bc10ubm9ybWFsKSkgewotICAgICAgLy8gRm91bmQgbm9ybWFsIHNw
YW4KLSAgICAgIGxsID0gJmZyZWVfW3NdLm5vcm1hbDsKLSAgICB9IGVsc2UgaWYgKCFETExfSXNF
bXB0eSgmZnJlZV9bc10ucmV0dXJuZWQpKSB7Ci0gICAgICAvLyBGb3VuZCByZXR1cm5lZCBzcGFu
OyByZWFsbG9jYXRlIGl0Ci0gICAgICBsbCA9ICZmcmVlX1tzXS5yZXR1cm5lZDsKLSAgICAgIHJl
bGVhc2VkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gS2VlcCBsb29raW5nIGluIGxh
cmdlciBjbGFzc2VzCi0gICAgICBjb250aW51ZTsKLSAgICB9CitpbmxpbmUgU3BhbiogVENNYWxs
b2NQYWdlSGVhcDo6TmV3KExlbmd0aCBuKQoreworICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICBB
U1NFUlQobiA+IDApOworCisgICAgLy8gRmluZCBmaXJzdCBzaXplID49IG4gdGhhdCBoYXMgYSBu
b24tZW1wdHkgbGlzdAorICAgIGZvciAoTGVuZ3RoIHMgPSBuOyBzIDwga01heFBhZ2VzOyBzKysp
IHsKKyAgICAgICAgU3BhbiogbGwgPSAwOworICAgICAgICBib29sIHJlbGVhc2VkID0gZmFsc2U7
CisgICAgICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwpKSB7Cisg
ICAgICAgICAgICAvLyBGb3VuZCBub3JtYWwgc3BhbgorICAgICAgICAgICAgbGwgPSAmZnJlZVNw
YW5MaXN0W3NdLm5vcm1hbDsKKyAgICAgICAgfSBlbHNlIGlmICghRExMX0lzRW1wdHkoJmZyZWVT
cGFuTGlzdFtzXS5yZXR1cm5lZCkpIHsKKyAgICAgICAgICAgIC8vIEZvdW5kIHJldHVybmVkIHNw
YW47IHJlYWxsb2NhdGUgaXQKKyAgICAgICAgICAgIGxsID0gJmZyZWVTcGFuTGlzdFtzXS5yZXR1
cm5lZDsKKyAgICAgICAgICAgIHJlbGVhc2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAvLyBLZWVwIGxvb2tpbmcgaW4gbGFyZ2VyIGNsYXNzZXMKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgU3BhbiogcmVzdWx0ID0gbGwtPm5leHQ7Ci0gICAgQ2FydmUocmVzdWx0
LCBuLCByZWxlYXNlZCk7CisgICAgICAgIFNwYW4qIHJlc3VsdCA9IGxsLT5uZXh0OworICAgICAg
ICBDYXJ2ZShyZXN1bHQsIG4sIHJlbGVhc2VkKTsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURf
VE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgLy8gVGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMg
ZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3JtYWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1p
dHRlZCkuICBVcGRhdGUgdGhlCi0gICAgLy8gZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCi0g
ICAgQVNTRVJUKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+PSBuKTsKLSAgICBmcmVlX2NvbW1pdHRl
ZF9wYWdlc18gLT0gbjsKLSAgICBpZiAoZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVf
Y29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKSAKLSAgICAgIG1pbl9mcmVlX2Nv
bW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0dGVkX3BhZ2Vz
XzsKKyAgICAgICAgLy8gVGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJvbSBhIHNwYW4g
dGhhdCdzIGluIHRoZSBub3JtYWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1pdHRlZCkuIFVwZGF0
ZSB0aGUKKyAgICAgICAgLy8gZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCisgICAgICAgIEFT
U0VSVChmcmVlQ29tbWl0dGVkUGFnZXMgPj0gbik7CisgICAgICAgIGZyZWVDb21taXR0ZWRQYWdl
cyAtPSBuOworICAgICAgICBpZiAoZnJlZUNvbW1pdHRlZFBhZ2VzIDwgbWluRnJlZUNvbW1pdHRl
ZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UpIAorICAgICAgICAgICAgbWluRnJlZUNvbW1pdHRlZFBh
Z2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CiAjZW5kaWYgIC8vIFVT
RV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICBBU1NFUlQoQ2hlY2so
KSk7Ci0gICAgZnJlZV9wYWdlc18gLT0gbjsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9CisgICAg
ICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICAgICAgZnJlZVBhZ2VzIC09IG47CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQogCi0gIFNwYW4qIHJlc3VsdCA9IEFsbG9jTGFyZ2Uobik7Ci0g
IGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHJlc3Vs
dCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICB9CisgICAgU3BhbiogcmVzdWx0ID0gQWxsb2NM
YXJnZShuKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIEFTU0VSVF9TUEFOX0NPTU1JVFRF
RChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAvLyBHcm93IHRo
ZSBoZWFwIGFuZCB0cnkgYWdhaW4KLSAgaWYgKCFHcm93SGVhcChuKSkgewotICAgIEFTU0VSVChD
aGVjaygpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICAgIC8vIEdyb3cgdGhlIGhlYXAgYW5k
IHRyeSBhZ2FpbgorICAgIGlmICghR3Jvd0hlYXAobikpIHsKKyAgICAgICAgQVNTRVJUKENoZWNr
KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgcmV0dXJuIE5ldyhuKTsKKyAgICBy
ZXR1cm4gTmV3KG4pOwogfQogCi1TcGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6QWxsb2NMYXJnZShM
ZW5ndGggbikgewotICAvLyBmaW5kIHRoZSBiZXN0IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXpl
KS4KLSAgLy8gVGhlIGZvbGxvd2luZyBsb29wcyBpbXBsZW1lbnRzIGFkZHJlc3Mtb3JkZXJlZCBi
ZXN0LWZpdC4KLSAgYm9vbCBmcm9tX3JlbGVhc2VkID0gZmFsc2U7Ci0gIFNwYW4gKmJlc3QgPSBO
VUxMOwotCi0gIC8vIFNlYXJjaCB0aHJvdWdoIG5vcm1hbCBsaXN0Ci0gIGZvciAoU3Bhbiogc3Bh
biA9IGxhcmdlXy5ub3JtYWwubmV4dDsKLSAgICAgICBzcGFuICE9ICZsYXJnZV8ubm9ybWFsOwot
ICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KSB7Ci0gICAgaWYgKHNwYW4tPmxlbmd0aCA+PSBuKSB7
Ci0gICAgICBpZiAoKGJlc3QgPT0gTlVMTCkKLSAgICAgICAgICB8fCAoc3Bhbi0+bGVuZ3RoIDwg
YmVzdC0+bGVuZ3RoKQotICAgICAgICAgIHx8ICgoc3Bhbi0+bGVuZ3RoID09IGJlc3QtPmxlbmd0
aCkgJiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQpKSkgewotICAgICAgICBiZXN0ID0gc3Bh
bjsKLSAgICAgICAgZnJvbV9yZWxlYXNlZCA9IGZhbHNlOwotICAgICAgfQorU3BhbiogVENNYWxs
b2NQYWdlSGVhcDo6QWxsb2NMYXJnZShMZW5ndGggbikKK3sKKyAgICAvLyBmaW5kIHRoZSBiZXN0
IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXplKS4KKyAgICAvLyBUaGUgZm9sbG93aW5nIGxvb3Bz
IGltcGxlbWVudHMgYWRkcmVzcy1vcmRlcmVkIGJlc3QtZml0LgorICAgIGJvb2wgZnJvbVJlbGVh
c2VkID0gZmFsc2U7CisgICAgU3BhbiogYmVzdCA9IDA7CisKKyAgICAvLyBTZWFyY2ggdGhyb3Vn
aCBub3JtYWwgbGlzdAorICAgIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlLm5vcm1hbC5uZXh0Owor
ICAgICAgICAgICAgc3BhbiAhPSAmbGFyZ2Uubm9ybWFsOworICAgICAgICAgICAgc3BhbiA9IHNw
YW4tPm5leHQpIHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA+PSBuKSB7CisgICAgICAgICAg
ICBpZiAoIWJlc3QKKyAgICAgICAgICAgICAgICB8fCAoc3Bhbi0+bGVuZ3RoIDwgYmVzdC0+bGVu
Z3RoKQorICAgICAgICAgICAgICAgIHx8ICgoc3Bhbi0+bGVuZ3RoID09IGJlc3QtPmxlbmd0aCkg
JiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQpKSkgeworICAgICAgICAgICAgICAgIGJlc3Qg
PSBzcGFuOworICAgICAgICAgICAgICAgZnJvbVJlbGVhc2VkID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAotICAvLyBTZWFyY2ggdGhyb3VnaCByZWxlYXNl
ZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAotICBmb3IgKFNwYW4qIHNwYW4gPSBs
YXJnZV8ucmV0dXJuZWQubmV4dDsKLSAgICAgICBzcGFuICE9ICZsYXJnZV8ucmV0dXJuZWQ7Ci0g
ICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4pIHsK
LSAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQotICAgICAgICAgIHx8IChzcGFuLT5sZW5ndGggPCBi
ZXN0LT5sZW5ndGgpCi0gICAgICAgICAgfHwgKChzcGFuLT5sZW5ndGggPT0gYmVzdC0+bGVuZ3Ro
KSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7Ci0gICAgICAgIGJlc3QgPSBzcGFu
OwotICAgICAgICBmcm9tX3JlbGVhc2VkID0gdHJ1ZTsKLSAgICAgIH0KKyAgICAvLyBTZWFyY2gg
dGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAorICAgIGZv
ciAoU3Bhbiogc3BhbiA9IGxhcmdlLnJldHVybmVkLm5leHQ7CisgICAgICAgICAgICBzcGFuICE9
ICZsYXJnZS5yZXR1cm5lZDsKKyAgICAgICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KSB7CisgICAg
ICAgIGlmIChzcGFuLT5sZW5ndGggPj0gbikgeworICAgICAgICAgICAgaWYgKCFiZXN0CisgICAg
ICAgICAgICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkKKyAgICAgICAgICAg
ICAgICB8fCAoKHNwYW4tPmxlbmd0aCA9PSBiZXN0LT5sZW5ndGgpICYmIChzcGFuLT5zdGFydCA8
IGJlc3QtPnN0YXJ0KSkpIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gc3BhbjsKKyAgICAgICAg
ICAgICAgICBmcm9tUmVsZWFzZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQotICB9CiAKLSAgaWYgKGJlc3QgIT0gTlVMTCkgewotICAgIENhcnZlKGJlc3QsIG4sIGZy
b21fcmVsZWFzZWQpOworICAgIGlmIChiZXN0KSB7CisgICAgICAgIENhcnZlKGJlc3QsIG4sIGZy
b21SZWxlYXNlZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9S
WQotICAgIC8vIFRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyb20gYSBzcGFuIHRoYXQn
cyBpbiB0aGUgbm9ybWFsIHNwYW4gbGlzdCAoYWxyZWFkeSBjb21taXR0ZWQpLiAgVXBkYXRlIHRo
ZQotICAgIC8vIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgIEFTU0VSVChmcmVlX2Nv
bW1pdHRlZF9wYWdlc18gPj0gbik7Ci0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IG47Ci0g
ICAgaWYgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA8IG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19z
aW5jZV9sYXN0X3NjYXZlbmdlXykKLSAgICAgIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5j
ZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKLSNlbmRpZiAgLy8gVVNF
X0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIEFTU0VSVChDaGVjaygp
KTsKLSAgICBmcmVlX3BhZ2VzXyAtPSBuOwotICAgIHJldHVybiBiZXN0OwotICB9Ci0gIHJldHVy
biBOVUxMOworICAgICAgICAvLyBUaGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEg
c3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFuIGxpc3QgKGFscmVhZHkgY29tbWl0dGVkKS4g
VXBkYXRlIHRoZQorICAgICAgICAvLyBmcmVlIGNvbW1pdHRlZCBwYWdlcyBjb3VudC4KKyAgICAg
ICAgQVNTRVJUKGZyZWVDb21taXR0ZWRQYWdlcyA+PSBuKTsKKyAgICAgICAgZnJlZUNvbW1pdHRl
ZFBhZ2VzIC09IG47CisgICAgICAgIGlmIChmcmVlQ29tbWl0dGVkUGFnZXMgPCBtaW5GcmVlQ29t
bWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkKKyAgICAgICAgICAgIG1pbkZyZWVDb21taXR0
ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJlZUNvbW1pdHRlZFBhZ2VzOworI2VuZGlmIC8v
IFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKKyAgICAgICAgQVNTRVJU
KENoZWNrKCkpOworICAgICAgICBmcmVlUGFnZXMgLT0gbjsKKyAgICAgICAgcmV0dXJuIGJlc3Q7
CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1TcGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6U3Bs
aXQoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pIHsKLSAgQVNTRVJUKDAgPCBuKTsKLSAgQVNTRVJUKG4g
PCBzcGFuLT5sZW5ndGgpOwotICBBU1NFUlQoIXNwYW4tPmZyZWUpOwotICBBU1NFUlQoc3Bhbi0+
c2l6ZWNsYXNzID09IDApOwotICBFdmVudChzcGFuLCAnVCcsIG4pOwotCi0gIGNvbnN0IExlbmd0
aCBleHRyYSA9IHNwYW4tPmxlbmd0aCAtIG47Ci0gIFNwYW4qIGxlZnRvdmVyID0gTmV3U3Bhbihz
cGFuLT5zdGFydCArIG4sIGV4dHJhKTsKLSAgRXZlbnQobGVmdG92ZXIsICdVJywgZXh0cmEpOwot
ICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKLSAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgbiAt
IDEsIHNwYW4pOyAvLyBVcGRhdGUgbWFwIGZyb20gcGFnZWlkIHRvIHNwYW4KLSAgc3Bhbi0+bGVu
Z3RoID0gbjsKLQotICByZXR1cm4gbGVmdG92ZXI7Ci19Ci0KLWlubGluZSB2b2lkIFRDTWFsbG9j
X1BhZ2VIZWFwOjpDYXJ2ZShTcGFuKiBzcGFuLCBMZW5ndGggbiwgYm9vbCByZWxlYXNlZCkgewot
ICBBU1NFUlQobiA+IDApOwotICBETExfUmVtb3ZlKHNwYW4pOwotICBzcGFuLT5mcmVlID0gMDsK
LSAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKLQotICBpZiAocmVsZWFzZWQpIHsKLSAgICAvLyBJZiB0
aGUgc3BhbiBjaG9zZW4gdG8gY2FydmUgZnJvbSBpcyBkZWNvbW1pdGVkLCBjb21taXQgdGhlIGVu
dGlyZSBzcGFuIGF0IG9uY2UgdG8gYXZvaWQgY29tbWl0dGluZyBzcGFucyAxIHBhZ2UgYXQgYSB0
aW1lLgotICAgIEFTU0VSVChzcGFuLT5kZWNvbW1pdHRlZCk7Ci0gICAgVENNYWxsb2NfU3lzdGVt
Q29tbWl0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAg
c3Bhbi0+ZGVjb21taXR0ZWQgPSBmYWxzZTsKLSNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfICs9IHNwYW4tPmxlbmd0
aDsKLSNlbmRpZgotICB9Ci0gIAotICBjb25zdCBpbnQgZXh0cmEgPSBzdGF0aWNfY2FzdDxpbnQ+
KHNwYW4tPmxlbmd0aCAtIG4pOwotICBBU1NFUlQoZXh0cmEgPj0gMCk7Ci0gIGlmIChleHRyYSA+
IDApIHsKK1NwYW4qIFRDTWFsbG9jUGFnZUhlYXA6OlNwbGl0KFNwYW4qIHNwYW4sIExlbmd0aCBu
KQoreworICAgIEFTU0VSVCgwIDwgbik7CisgICAgQVNTRVJUKG4gPCBzcGFuLT5sZW5ndGgpOwor
ICAgIEFTU0VSVCghc3Bhbi0+ZnJlZSk7CisgICAgQVNTRVJUKCFzcGFuLT5zaXplY2xhc3MpOwor
ICAgIEV2ZW50KHNwYW4sICdUJywgbik7CisKKyAgICBjb25zdCBMZW5ndGggZXh0cmEgPSBzcGFu
LT5sZW5ndGggLSBuOwogICAgIFNwYW4qIGxlZnRvdmVyID0gTmV3U3BhbihzcGFuLT5zdGFydCAr
IG4sIGV4dHJhKTsKLSAgICBsZWZ0b3Zlci0+ZnJlZSA9IDE7Ci0gICAgbGVmdG92ZXItPmRlY29t
bWl0dGVkID0gZmFsc2U7Ci0gICAgRXZlbnQobGVmdG92ZXIsICdTJywgZXh0cmEpOworICAgIEV2
ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKICAgICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKKyAg
ICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsgLy8gVXBkYXRlIG1hcCBm
cm9tIHBhZ2VpZCB0byBzcGFuCisgICAgc3Bhbi0+bGVuZ3RoID0gbjsKIAotICAgIC8vIFBsYWNl
IGxlZnRvdmVyIHNwYW4gb24gYXBwcm9wcmlhdGUgZnJlZSBsaXN0Ci0gICAgU3Bhbkxpc3QqIGxp
c3RwYWlyID0gKHN0YXRpY19jYXN0PHNpemVfdD4oZXh0cmEpIDwga01heFBhZ2VzKSA/ICZmcmVl
X1tleHRyYV0gOiAmbGFyZ2VfOwotICAgIFNwYW4qIGRzdCA9ICZsaXN0cGFpci0+bm9ybWFsOwot
ICAgIERMTF9QcmVwZW5kKGRzdCwgbGVmdG92ZXIpOworICAgIHJldHVybiBsZWZ0b3ZlcjsKK30K
IAotICAgIHNwYW4tPmxlbmd0aCA9IG47Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsg
biAtIDEsIHNwYW4pOwotICB9CitpbmxpbmUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpDYXJ2ZShT
cGFuKiBzcGFuLCBMZW5ndGggbiwgYm9vbCByZWxlYXNlZCkKK3sKKyAgICBBU1NFUlQobiA+IDAp
OworICAgIERMTFJlbW92ZShzcGFuKTsKKyAgICBzcGFuLT5mcmVlID0gMDsKKyAgICBFdmVudChz
cGFuLCAnQScsIG4pOworCisgICAgaWYgKHJlbGVhc2VkKSB7CisgICAgICAgIC8vIElmIHRoZSBz
cGFuIGNob3NlbiB0byBjYXJ2ZSBmcm9tIGlzIGRlY29tbWl0ZWQsIGNvbW1pdCB0aGUgZW50aXJl
IHNwYW4gYXQgb25jZSB0byBhdm9pZCBjb21taXR0aW5nIHNwYW5zIDEgcGFnZSBhdCBhIHRpbWUu
CisgICAgICAgIEFTU0VSVChzcGFuLT5kZWNvbW1pdHRlZCk7CisgICAgICAgIFRDTWFsbG9jX1N5
c3RlbUNvbW1pdChyZWludGVycHJldF9jYXN0PHZvaWQqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNo
aWZ0KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwor
ICAgICAgICBzcGFuLT5kZWNvbW1pdHRlZCA9IGZhbHNlOworI2lmIFVTRV9CQUNLR1JPVU5EX1RI
UkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKKyAgICAgICAgZnJlZUNvbW1pdHRlZFBhZ2VzICs9IHNw
YW4tPmxlbmd0aDsKKyNlbmRpZgorICAgIH0KKyAgCisgICAgY29uc3QgaW50IGV4dHJhID0gc3Rh
dGljX2Nhc3Q8aW50PihzcGFuLT5sZW5ndGggLSBuKTsKKyAgICBBU1NFUlQoZXh0cmEgPj0gMCk7
CisgICAgaWYgKGV4dHJhID4gMCkgeworICAgICAgICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4o
c3Bhbi0+c3RhcnQgKyBuLCBleHRyYSk7CisgICAgICAgIGxlZnRvdmVyLT5mcmVlID0gMTsKKyAg
ICAgICAgbGVmdG92ZXItPmRlY29tbWl0dGVkID0gZmFsc2U7CisgICAgICAgIEV2ZW50KGxlZnRv
dmVyLCAnUycsIGV4dHJhKTsKKyAgICAgICAgUmVjb3JkU3BhbihsZWZ0b3Zlcik7CisKKyAgICAg
ICAgLy8gUGxhY2UgbGVmdG92ZXIgc3BhbiBvbiBhcHByb3ByaWF0ZSBmcmVlIGxpc3QKKyAgICAg
ICAgU3Bhbkxpc3QqIGxpc3RwYWlyID0gKHN0YXRpY19jYXN0PHNpemVfdD4oZXh0cmEpIDwga01h
eFBhZ2VzKSA/ICZmcmVlU3Bhbkxpc3RbZXh0cmFdIDogJmxhcmdlOworICAgICAgICBTcGFuKiBk
c3QgPSAmbGlzdHBhaXItPm5vcm1hbDsKKyAgICAgICAgRExMUHJlcGVuZChkc3QsIGxlZnRvdmVy
KTsKKworICAgICAgICBzcGFuLT5sZW5ndGggPSBuOworICAgICAgICBwYWdlbWFwLnNldChzcGFu
LT5zdGFydCArIG4gLSAxLCBzcGFuKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhTcGFuKiBkZXN0aW5hdGlvbiwgU3Bhbiogb3Ro
ZXIpCkBAIC0xODQyLDQzMiArMjAwMyw0NTggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBt
ZXJnZURlY29tbWl0dAogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6
OkRlbGV0ZShTcGFuKiBzcGFuKSB7Ci0gIEFTU0VSVChDaGVjaygpKTsKLSAgQVNTRVJUKCFzcGFu
LT5mcmVlKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+IDApOwotICBBU1NFUlQoR2V0RGVzY3Jp
cHRvcihzcGFuLT5zdGFydCkgPT0gc3Bhbik7Ci0gIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4t
PnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7Ci0gIHNwYW4tPnNpemVjbGFzcyA9
IDA7CitpbmxpbmUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpEZWxldGUoU3Bhbiogc3BhbikKK3sK
KyAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKKyAgICBBU1NF
UlQoc3Bhbi0+bGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3Rh
cnQpID09IHNwYW4pOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0ICsgc3Bh
bi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7CisgICAgc3Bhbi0+c2l6ZWNsYXNzID0gMDsKICNpZm5k
ZWYgTk9fVENNQUxMT0NfU0FNUExFUwotICBzcGFuLT5zYW1wbGUgPSAwOworICAgIHNwYW4tPnNh
bXBsZSA9IDA7CiAjZW5kaWYKIAotICAvLyBDb2FsZXNjZSAtLSB3ZSBndWFyYW50ZWUgdGhhdCAi
cCIgIT0gMCwgc28gbm8gYm91bmRzIGNoZWNraW5nCi0gIC8vIG5lY2Vzc2FyeS4gIFdlIGRvIG5v
dCBib3RoZXIgcmVzZXR0aW5nIHRoZSBzdGFsZSBwYWdlbWFwCi0gIC8vIGVudHJpZXMgZm9yIHRo
ZSBwaWVjZXMgd2UgYXJlIG1lcmdpbmcgdG9nZXRoZXIgYmVjYXVzZSB3ZSBvbmx5Ci0gIC8vIGNh
cmUgYWJvdXQgdGhlIHBhZ2VtYXAgZW50cmllcyBmb3IgdGhlIGJvdW5kYXJpZXMuCisgICAgLy8g
Q29hbGVzY2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQgInAiICE9IDAsIHNvIG5vIGJvdW5kcyBjaGVj
a2luZworICAgIC8vIG5lY2Vzc2FyeS4gV2UgZG8gbm90IGJvdGhlciByZXNldHRpbmcgdGhlIHN0
YWxlIHBhZ2VtYXAKKyAgICAvLyBlbnRyaWVzIGZvciB0aGUgcGllY2VzIHdlIGFyZSBtZXJnaW5n
IHRvZ2V0aGVyIGJlY2F1c2Ugd2Ugb25seQorICAgIC8vIGNhcmUgYWJvdXQgdGhlIHBhZ2VtYXAg
ZW50cmllcyBmb3IgdGhlIGJvdW5kYXJpZXMuCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RP
X1NDQVZFTkdFX01FTU9SWQotICAvLyBUcmFjayB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmVpZ2hi
b3JpbmcgZnJlZSBzcGFucyB0aGF0IGFyZSBjb21taXR0ZWQuCi0gIExlbmd0aCBuZWlnaGJvcmlu
Z0NvbW1pdHRlZFNwYW5zTGVuZ3RoID0gMDsKKyAgICAvLyBUcmFjayB0aGUgdG90YWwgc2l6ZSBv
ZiB0aGUgbmVpZ2hib3JpbmcgZnJlZSBzcGFucyB0aGF0IGFyZSBjb21taXR0ZWQuCisgICAgTGVu
Z3RoIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGggPSAwOwogI2VuZGlmCi0gIGNvbnN0
IFBhZ2VJRCBwID0gc3Bhbi0+c3RhcnQ7Ci0gIGNvbnN0IExlbmd0aCBuID0gc3Bhbi0+bGVuZ3Ro
OwotICBTcGFuKiBwcmV2ID0gR2V0RGVzY3JpcHRvcihwLTEpOwotICBpZiAocHJldiAhPSBOVUxM
ICYmIHByZXYtPmZyZWUpIHsKLSAgICAvLyBNZXJnZSBwcmVjZWRpbmcgc3BhbiBpbnRvIHRoaXMg
c3BhbgotICAgIEFTU0VSVChwcmV2LT5zdGFydCArIHByZXYtPmxlbmd0aCA9PSBwKTsKLSAgICBj
b25zdCBMZW5ndGggbGVuID0gcHJldi0+bGVuZ3RoOworICAgIGNvbnN0IFBhZ2VJRCBwID0gc3Bh
bi0+c3RhcnQ7CisgICAgY29uc3QgTGVuZ3RoIG4gPSBzcGFuLT5sZW5ndGg7CisgICAgU3Bhbiog
cHJldiA9IEdldERlc2NyaXB0b3IocC0xKTsKKyAgICBpZiAocHJldiAmJiBwcmV2LT5mcmVlKSB7
CisgICAgICAgIC8vIE1lcmdlIHByZWNlZGluZyBzcGFuIGludG8gdGhpcyBzcGFuCisgICAgICAg
IEFTU0VSVChwcmV2LT5zdGFydCArIHByZXYtPmxlbmd0aCA9PSBwKTsKKyAgICAgICAgY29uc3Qg
TGVuZ3RoIGxlbiA9IHByZXYtPmxlbmd0aDsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCi0gICAgaWYgKCFwcmV2LT5kZWNvbW1pdHRlZCkKLSAgICAgICAgbmVp
Z2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47CisgICAgICAgIGlmICghcHJldi0+
ZGVjb21taXR0ZWQpCisgICAgICAgICAgICBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3Ro
ICs9IGxlbjsKICNlbmRpZgotICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgcHJldik7
Ci0gICAgRExMX1JlbW92ZShwcmV2KTsKLSAgICBEZWxldGVTcGFuKHByZXYpOwotICAgIHNwYW4t
PnN0YXJ0IC09IGxlbjsKLSAgICBzcGFuLT5sZW5ndGggKz0gbGVuOwotICAgIHBhZ2VtYXBfLnNl
dChzcGFuLT5zdGFydCwgc3Bhbik7Ci0gICAgRXZlbnQoc3BhbiwgJ0wnLCBsZW4pOwotICB9Ci0g
IFNwYW4qIG5leHQgPSBHZXREZXNjcmlwdG9yKHArbik7Ci0gIGlmIChuZXh0ICE9IE5VTEwgJiYg
bmV4dC0+ZnJlZSkgewotICAgIC8vIE1lcmdlIG5leHQgc3BhbiBpbnRvIHRoaXMgc3BhbgotICAg
IEFTU0VSVChuZXh0LT5zdGFydCA9PSBwK24pOwotICAgIGNvbnN0IExlbmd0aCBsZW4gPSBuZXh0
LT5sZW5ndGg7CisgICAgICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgcHJldik7Cisg
ICAgICAgIERMTFJlbW92ZShwcmV2KTsKKyAgICAgICAgRGVsZXRlU3BhbihwcmV2KTsKKyAgICAg
ICAgc3Bhbi0+c3RhcnQgLT0gbGVuOworICAgICAgICBzcGFuLT5sZW5ndGggKz0gbGVuOworICAg
ICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCwgc3Bhbik7CisgICAgICAgIEV2ZW50KHNwYW4s
ICdMJywgbGVuKTsKKyAgICB9CisgICAgU3BhbiogbmV4dCA9IEdldERlc2NyaXB0b3IocCtuKTsK
KyAgICBpZiAobmV4dCAmJiBuZXh0LT5mcmVlKSB7CisgICAgICAgIC8vIE1lcmdlIG5leHQgc3Bh
biBpbnRvIHRoaXMgc3BhbgorICAgICAgICBBU1NFUlQobmV4dC0+c3RhcnQgPT0gcCtuKTsKKyAg
ICAgICAgY29uc3QgTGVuZ3RoIGxlbiA9IG5leHQtPmxlbmd0aDsKICNpZiBVU0VfQkFDS0dST1VO
RF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgaWYgKCFuZXh0LT5kZWNvbW1pdHRlZCkK
LSAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47CisgICAgICAg
IGlmICghbmV4dC0+ZGVjb21taXR0ZWQpCisgICAgICAgICAgICBuZWlnaGJvcmluZ0NvbW1pdHRl
ZFNwYW5zTGVuZ3RoICs9IGxlbjsKICNlbmRpZgotICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMo
c3BhbiwgbmV4dCk7Ci0gICAgRExMX1JlbW92ZShuZXh0KTsKLSAgICBEZWxldGVTcGFuKG5leHQp
OwotICAgIHNwYW4tPmxlbmd0aCArPSBsZW47Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0
ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7Ci0gICAgRXZlbnQoc3BhbiwgJ1InLCBsZW4pOwot
ICB9Ci0KLSAgRXZlbnQoc3BhbiwgJ0QnLCBzcGFuLT5sZW5ndGgpOwotICBzcGFuLT5mcmVlID0g
MTsKLSAgaWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7Ci0gICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtN
YXhQYWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tzcGFuLT5sZW5ndGhdLnJldHVybmVk
LCBzcGFuKTsKLSAgICBlbHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLnJldHVybmVkLCBz
cGFuKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKQotICAg
ICAgRExMX1ByZXBlbmQoJmZyZWVfW3NwYW4tPmxlbmd0aF0ubm9ybWFsLCBzcGFuKTsKLSAgICBl
bHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLm5vcm1hbCwgc3Bhbik7Ci0gIH0KLSAgZnJl
ZV9wYWdlc18gKz0gbjsKKyAgICAgICAgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhzcGFuLCBuZXh0
KTsKKyAgICAgICAgRExMUmVtb3ZlKG5leHQpOworICAgICAgICBEZWxldGVTcGFuKG5leHQpOwor
ICAgICAgICBzcGFuLT5sZW5ndGggKz0gbGVuOworICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5z
dGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOworICAgICAgICBFdmVudChzcGFuLCAnUics
IGxlbik7CisgICAgfQorCisgICAgRXZlbnQoc3BhbiwgJ0QnLCBzcGFuLT5sZW5ndGgpOworICAg
IHNwYW4tPmZyZWUgPSAxOworICAgIGlmIChzcGFuLT5kZWNvbW1pdHRlZCkgeworICAgICAgICBp
ZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKQorICAgICAgICAgICAgRExMUHJlcGVuZCgmZnJl
ZVNwYW5MaXN0W3NwYW4tPmxlbmd0aF0ucmV0dXJuZWQsIHNwYW4pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBETExQcmVwZW5kKCZsYXJnZS5yZXR1cm5lZCwgc3Bhbik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykKKyAgICAgICAgICAgIERM
TFByZXBlbmQoJmZyZWVTcGFuTGlzdFtzcGFuLT5sZW5ndGhdLm5vcm1hbCwgc3Bhbik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIERMTFByZXBlbmQoJmxhcmdlLm5vcm1hbCwgc3Bhbik7Cisg
ICAgfQorICAgIGZyZWVQYWdlcyArPSBuOwogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RP
X1NDQVZFTkdFX01FTU9SWQotICBpZiAoc3Bhbi0+ZGVjb21taXR0ZWQpIHsKLSAgICAgIC8vIElm
IHRoZSBtZXJnZWQgc3BhbiBpcyBkZWNvbW1pdHRlZCwgdGhhdCBtZWFucyB3ZSBkZWNvbW1pdHRl
ZCBhbnkgbmVpZ2hib3Jpbmcgc3BhbnMgdGhhdCB3ZXJlCi0gICAgICAvLyBjb21taXR0ZWQuICBV
cGRhdGUgdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgICAgZnJlZV9jb21taXR0
ZWRfcGFnZXNfIC09IG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGg7Ci0gICAgICBpZiAo
ZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xh
c3Rfc2NhdmVuZ2VfKQotICAgICAgICAgICAgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNl
X2xhc3Rfc2NhdmVuZ2VfID0gZnJlZV9jb21taXR0ZWRfcGFnZXNfOwotICB9IGVsc2UgewotICAg
ICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIHJlbWFpbnMgY29tbWl0dGVkLCBhZGQgdGhlIGRlbGV0
ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgICAg
ZnJlZV9jb21taXR0ZWRfcGFnZXNfICs9IG47Ci0gIH0KKyAgICBpZiAoc3Bhbi0+ZGVjb21taXR0
ZWQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIGlzIGRlY29tbWl0dGVkLCB0aGF0
IG1lYW5zIHdlIGRlY29tbWl0dGVkIGFueSBuZWlnaGJvcmluZyBzcGFucyB0aGF0IHdlcmUKKyAg
ICAgICAgLy8gY29tbWl0dGVkLiBVcGRhdGUgdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50
LgorICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgLT0gbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFu
c0xlbmd0aDsKKyAgICAgICAgaWYgKGZyZWVDb21taXR0ZWRQYWdlcyA8IG1pbkZyZWVDb21taXR0
ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlKQorICAgICAgICAgICAgbWluRnJlZUNvbW1pdHRlZFBh
Z2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIHJlbWFpbnMgY29tbWl0dGVkLCBhZGQgdGhl
IGRlbGV0ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50Lgor
ICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgKz0gbjsKKyAgICB9CiAKLSAgLy8gTWFrZSBzdXJl
IHRoZSBzY2F2ZW5nZSB0aHJlYWQgYmVjb21lcyBhY3RpdmUgaWYgd2UgaGF2ZSBlbm91Z2ggZnJl
ZWQgcGFnZXMgdG8gcmVsZWFzZSBzb21lIGJhY2sgdG8gdGhlIHN5c3RlbS4KLSAgc2lnbmFsU2Nh
dmVuZ2VyKCk7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2F2ZW5nZSB0aHJlYWQgYmVjb21lcyBh
Y3RpdmUgaWYgd2UgaGF2ZSBlbm91Z2ggZnJlZWQgcGFnZXMgdG8gcmVsZWFzZSBzb21lIGJhY2sg
dG8gdGhlIHN5c3RlbS4KKyAgICBzaWduYWxTY2F2ZW5nZXIoKTsKICNlbHNlCi0gIEluY3JlbWVu
dGFsU2NhdmVuZ2Uobik7CisgICAgSW5jcmVtZW50YWxTY2F2ZW5nZShuKTsKICNlbmRpZgogCi0g
IEFTU0VSVChDaGVjaygpKTsKKyAgICBBU1NFUlQoQ2hlY2soKSk7CiB9CiAKICNpZiAhVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotdm9pZCBUQ01hbGxvY19QYWdlSGVh
cDo6SW5jcmVtZW50YWxTY2F2ZW5nZShMZW5ndGggbikgewotICAvLyBGYXN0IHBhdGg7IG5vdCB5
ZXQgdGltZSB0byByZWxlYXNlIG1lbW9yeQotICBzY2F2ZW5nZV9jb3VudGVyXyAtPSBuOwotICBp
ZiAoc2NhdmVuZ2VfY291bnRlcl8gPj0gMCkgcmV0dXJuOyAgLy8gTm90IHlldCB0aW1lIHRvIHNj
YXZlbmdlCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OkluY3JlbWVudGFsU2NhdmVuZ2UoTGVuZ3Ro
IG4pCit7CisgICAgLy8gRmFzdCBwYXRoOyBub3QgeWV0IHRpbWUgdG8gcmVsZWFzZSBtZW1vcnkK
KyAgICBzY2F2ZW5nZUNvdW50ZXIgLT0gbjsKKyAgICBpZiAoc2NhdmVuZ2VDb3VudGVyID49IDAp
CisgICAgICAgIHJldHVybjsgLy8gTm90IHlldCB0aW1lIHRvIHNjYXZlbmdlCiAKICNpZiBQTEFU
Rk9STShJT1MpCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qga0RlZmF1bHRSZWxlYXNlRGVsYXkgPSA2
NDsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZhdWx0UmVsZWFzZURlbGF5ID0gNjQ7CiAj
ZWxzZQotICAvLyBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbGVhc2UsIHdhaXQgZm9yIHNvIG1h
bnkgcGFnZXMgYmVmb3JlCi0gIC8vIHNjYXZlbmdpbmcgYWdhaW4uICBXaXRoIDRLIHBhZ2VzLCB0
aGlzIGNvbWVzIHRvIDE2TUIgb2YgbWVtb3J5LgotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZh
dWx0UmVsZWFzZURlbGF5ID0gMSA8PCA4OwotI2VuZGlmCi0KLSAgLy8gRmluZCBpbmRleCBvZiBm
cmVlIGxpc3QgdG8gc2NhdmVuZ2UKLSAgc2l6ZV90IGluZGV4ID0gc2NhdmVuZ2VfaW5kZXhfICsg
MTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4UGFnZXMrMTsgaSsrKSB7Ci0gICAgaWYg
KGluZGV4ID4ga01heFBhZ2VzKSBpbmRleCA9IDA7Ci0gICAgU3Bhbkxpc3QqIHNsaXN0ID0gKGlu
ZGV4ID09IGtNYXhQYWdlcykgPyAmbGFyZ2VfIDogJmZyZWVfW2luZGV4XTsKLSAgICBpZiAoIURM
TF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSkgewotICAgICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBz
cGFuIG9uIHRoZSBub3JtYWwgcG9ydGlvbiBvZiB0aGlzIGxpc3QKLSAgICAgIFNwYW4qIHMgPSBz
bGlzdC0+bm9ybWFsLnByZXY7Ci0gICAgICBETExfUmVtb3ZlKHMpOwotICAgICAgVENNYWxsb2Nf
U3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNo
aWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
LT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAgICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwot
ICAgICAgRExMX1ByZXBlbmQoJnNsaXN0LT5yZXR1cm5lZCwgcyk7CisgICAgLy8gSWYgdGhlcmUg
aXMgbm90aGluZyB0byByZWxlYXNlLCB3YWl0IGZvciBzbyBtYW55IHBhZ2VzIGJlZm9yZQorICAg
IC8vIHNjYXZlbmdpbmcgYWdhaW4uIFdpdGggNEsgcGFnZXMsIHRoaXMgY29tZXMgdG8gMTZNQiBv
ZiBtZW1vcnkuCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVsdFJlbGVhc2VEZWxheSA9
IDEgPDwgODsKKyNlbmRpZgorCisgICAgLy8gRmluZCBpbmRleCBvZiBmcmVlIGxpc3QgdG8gc2Nh
dmVuZ2UKKyAgICBzaXplX3QgaW5kZXggPSBzY2F2ZW5nZUluZGV4ICsgMTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtNYXhQYWdlcysxOyBpKyspIHsKKyAgICAgICAgaWYgKGluZGV4ID4g
a01heFBhZ2VzKQorICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICBTcGFuTGlzdCogc2xp
c3QgPSAoaW5kZXggPT0ga01heFBhZ2VzKSA/ICZsYXJnZSA6ICZmcmVlU3Bhbkxpc3RbaW5kZXhd
OworICAgICAgICBpZiAoIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSkgeworICAgICAgICAg
ICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBzcGFuIG9uIHRoZSBub3JtYWwgcG9ydGlvbiBvZiB0aGlz
IGxpc3QKKyAgICAgICAgICAgIFNwYW4qIHMgPSBzbGlzdC0+bm9ybWFsLnByZXY7CisgICAgICAg
ICAgICBETExSZW1vdmUocyk7CisgICAgICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGgg
PDwga1BhZ2VTaGlmdCkpOworICAgICAgICAgICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgRExMUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKIAogI2lmIFBMQVRGT1JN
KElPUykKLSAgICAgIHNjYXZlbmdlX2NvdW50ZXJfID0gc3RkOjptYXg8c2l6ZV90PigxNlVMLCBz
dGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxh
eSAtIChmcmVlX3BhZ2VzXyAvIGtEZWZhdWx0UmVsZWFzZURlbGF5KSkpOworICAgICAgICAgICAg
c2NhdmVuZ2VDb3VudGVyID0gc3RkOjptYXg8c2l6ZV90PigxNlVMLCBzdGQ6Om1pbjxzaXplX3Q+
KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxheSAtIChmcmVlUGFnZXMg
LyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKICNlbHNlCi0gICAgICBzY2F2ZW5nZV9jb3VudGVy
XyA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90PihrRGVmYXVsdFJlbGVh
c2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkgLSAoZnJlZV9wYWdlc18gLyBrRGVmYXVsdFJl
bGVhc2VEZWxheSkpKTsKKyAgICAgICAgICAgIHNjYXZlbmdlQ291bnRlciA9IHN0ZDo6bWF4PHNp
emVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90PihrRGVmYXVsdFJlbGVhc2VEZWxheSwga0RlZmF1
bHRSZWxlYXNlRGVsYXkgLSAoZnJlZVBhZ2VzIC8ga0RlZmF1bHRSZWxlYXNlRGVsYXkpKSk7CiAj
ZW5kaWYKIAotICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdlcyAmJiAhRExMX0lzRW1wdHkoJnNs
aXN0LT5ub3JtYWwpKQotICAgICAgICBzY2F2ZW5nZV9pbmRleF8gPSBpbmRleCAtIDE7Ci0gICAg
ICBlbHNlCi0gICAgICAgIHNjYXZlbmdlX2luZGV4XyA9IGluZGV4OwotICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdlcyAmJiAhRExMX0lzRW1wdHkoJnNsaXN0
LT5ub3JtYWwpKQorICAgICAgICAgICAgICAgIHNjYXZlbmdlSW5kZXggPSBpbmRleCAtIDE7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2NhdmVuZ2VJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGluZGV4Kys7CiAgICAgfQot
ICAgIGluZGV4Kys7Ci0gIH0KIAotICAvLyBOb3RoaW5nIHRvIHNjYXZlbmdlLCBkZWxheSBmb3Ig
YSB3aGlsZQotICBzY2F2ZW5nZV9jb3VudGVyXyA9IGtEZWZhdWx0UmVsZWFzZURlbGF5OworICAg
IC8vIE5vdGhpbmcgdG8gc2NhdmVuZ2UsIGRlbGF5IGZvciBhIHdoaWxlCisgICAgc2NhdmVuZ2VD
b3VudGVyID0ga0RlZmF1bHRSZWxlYXNlRGVsYXk7CiB9CiAjZW5kaWYKIAotdm9pZCBUQ01hbGxv
Y19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3MoU3Bhbiogc3Bhbiwgc2l6ZV90IHNjKSB7Ci0g
IC8vIEFzc29jaWF0ZSBzcGFuIG9iamVjdCB3aXRoIGFsbCBpbnRlcmlvciBwYWdlcyBhcyB3ZWxs
Ci0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0
YXJ0KSA9PSBzcGFuKTsKLSAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQrc3Bhbi0+
bGVuZ3RoLTEpID09IHNwYW4pOwotICBFdmVudChzcGFuLCAnQycsIHNjKTsKLSAgc3Bhbi0+c2l6
ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzYyk7Ci0gIGZvciAoTGVuZ3RoIGkg
PSAxOyBpIDwgc3Bhbi0+bGVuZ3RoLTE7IGkrKykgewotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5z
dGFydCtpLCBzcGFuKTsKLSAgfQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpSZWdpc3RlclNpemVD
bGFzcyhTcGFuKiBzcGFuLCBzaXplX3Qgc2MpCit7CisgICAgLy8gQXNzb2NpYXRlIHNwYW4gb2Jq
ZWN0IHdpdGggYWxsIGludGVyaW9yIHBhZ2VzIGFzIHdlbGwKKyAgICBBU1NFUlQoIXNwYW4tPmZy
ZWUpOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKKyAg
ICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCtzcGFuLT5sZW5ndGgtMSkgPT0gc3Bh
bik7CisgICAgRXZlbnQoc3BhbiwgJ0MnLCBzYyk7CisgICAgc3Bhbi0+c2l6ZWNsYXNzID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PihzYyk7CisgICAgZm9yIChMZW5ndGggaSA9IDE7IGkgPCBz
cGFuLT5sZW5ndGgtMTsgaSsrKQorICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCtpLCBz
cGFuKTsKIH0KICAgICAKICNpZmRlZiBXVEZfQ0hBTkdFUwotc2l6ZV90IFRDTWFsbG9jX1BhZ2VI
ZWFwOjpSZXR1cm5lZEJ5dGVzKCkgY29uc3Qgeworc2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6OlJl
dHVybmVkQnl0ZXMoKSBjb25zdAorewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAo
dW5zaWduZWQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgICAgICBjb25zdCBpbnQg
cl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5yZXR1cm5lZCk7Ci0gICAgICAgIHVuc2ln
bmVkIHJfcGFnZXMgPSBzICogcl9sZW5ndGg7Ci0gICAgICAgIHJlc3VsdCArPSByX3BhZ2VzIDw8
IGtQYWdlU2hpZnQ7CisgICAgICAgIGNvbnN0IGludCByTGVuZ3RoID0gRExMTGVuZ3RoKCZmcmVl
U3Bhbkxpc3Rbc10ucmV0dXJuZWQpOworICAgICAgICB1bnNpZ25lZCByUGFnZXMgPSBzICogckxl
bmd0aDsKKyAgICAgICAgcmVzdWx0ICs9IHJQYWdlcyA8PCBrUGFnZVNoaWZ0OwogICAgIH0KICAg
ICAKLSAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZV8ucmV0dXJuZWQubmV4dDsgcyAhPSAmbGFyZ2Vf
LnJldHVybmVkOyBzID0gcy0+bmV4dCkKKyAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZS5yZXR1cm5l
ZC5uZXh0OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsgcyA9IHMtPm5leHQpCiAgICAgICAgIHJlc3Vs
dCArPSBzLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2Vu
ZGlmCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyBkb3VibGUgUGFnZXNUb01CKHVpbnQ2
NF90IHBhZ2VzKSB7CitzdGF0aWMgZG91YmxlIFBhZ2VzVG9NQih1aW50NjRfdCBwYWdlcykKK3sK
ICAgcmV0dXJuIChwYWdlcyA8PCBrUGFnZVNoaWZ0KSAvIDEwNDg1NzYuMDsKIH0KIAotdm9pZCBU
Q01hbGxvY19QYWdlSGVhcDo6RHVtcChUQ01hbGxvY19QcmludGVyKiBvdXQpIHsKLSAgaW50IG5v
bmVtcHR5X3NpemVzID0gMDsKLSAgZm9yIChpbnQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykg
ewotICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLm5vcm1hbCkgfHwgIURMTF9Jc0VtcHR5
KCZmcmVlX1tzXS5yZXR1cm5lZCkpIHsKLSAgICAgIG5vbmVtcHR5X3NpemVzKys7Ci0gICAgfQot
ICB9Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIpOwotICBvdXQtPnByaW50ZigiUGFnZUhlYXA6ICVkIHNpemVzOyAlNi4x
ZiBNQiBmcmVlXG4iLAotICAgICAgICAgICAgICBub25lbXB0eV9zaXplcywgUGFnZXNUb01CKGZy
ZWVfcGFnZXNfKSk7Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICB1aW50NjRfdCB0b3RhbF9ub3JtYWwgPSAwOwot
ICB1aW50NjRfdCB0b3RhbF9yZXR1cm5lZCA9IDA7Ci0gIGZvciAoaW50IHMgPSAwOyBzIDwga01h
eFBhZ2VzOyBzKyspIHsKLSAgICBjb25zdCBpbnQgbl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVl
X1tzXS5ub3JtYWwpOwotICAgIGNvbnN0IGludCByX2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVf
W3NdLnJldHVybmVkKTsKLSAgICBpZiAobl9sZW5ndGggKyByX2xlbmd0aCA+IDApIHsKLSAgICAg
IHVpbnQ2NF90IG5fcGFnZXMgPSBzICogbl9sZW5ndGg7Ci0gICAgICB1aW50NjRfdCByX3BhZ2Vz
ID0gcyAqIHJfbGVuZ3RoOwotICAgICAgdG90YWxfbm9ybWFsICs9IG5fcGFnZXM7Ci0gICAgICB0
b3RhbF9yZXR1cm5lZCArPSByX3BhZ2VzOwotICAgICAgb3V0LT5wcmludGYoIiU2dSBwYWdlcyAq
ICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0iCi0gICAgICAgICAgICAgICAgICAi
OyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1CIGN1bVxuIiwKLSAgICAgICAgICAgICAgICAg
IHMsCi0gICAgICAgICAgICAgICAgICAobl9sZW5ndGggKyByX2xlbmd0aCksCi0gICAgICAgICAg
ICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJfcGFnZXMpLAotICAgICAgICAgICAgICAgICAg
UGFnZXNUb01CKHRvdGFsX25vcm1hbCArIHRvdGFsX3JldHVybmVkKSwKLSAgICAgICAgICAgICAg
ICAgIFBhZ2VzVG9NQihyX3BhZ2VzKSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3Rh
bF9yZXR1cm5lZCkpOwordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpEdW1wKFRDTWFsbG9jX1ByaW50
ZXIqIG91dCkKK3sKKyAgICBpbnQgbm9uZW1wdHlTaXplcyA9IDA7CisgICAgZm9yIChpbnQgcyA9
IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykKKyAgICAgICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZVNw
YW5MaXN0W3NdLm5vcm1hbCkgfHwgIURMTF9Jc0VtcHR5KCZmcmVlU3Bhbkxpc3Rbc10ucmV0dXJu
ZWQpKQorICAgICAgICAgICAgbm9uZW1wdHlTaXplcysrOworICAgIG91dC0+cHJpbnRmKCItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgIG91
dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQgc2l6ZXM7ICU2LjFmIE1CIGZyZWVcbiIsCisgICAgICAg
ICAgICAgICAgbm9uZW1wdHlTaXplcywgUGFnZXNUb01CKGZyZWVQYWdlcykpOworICAgIG91dC0+
cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c
biIpOworICAgIHVpbnQ2NF90IHRvdGFsTm9ybWFsID0gMDsKKyAgICB1aW50NjRfdCB0b3RhbFJl
dHVybmVkID0gMDsKKyAgICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Cisg
ICAgICAgIGNvbnN0IGludCBuTGVuZ3RoID0gRExMTGVuZ3RoKCZmcmVlU3Bhbkxpc3Rbc10ubm9y
bWFsKTsKKyAgICAgICAgY29uc3QgaW50IHJMZW5ndGggPSBETExMZW5ndGgoJmZyZWVTcGFuTGlz
dFtzXS5yZXR1cm5lZCk7CisgICAgICAgIGlmIChuTGVuZ3RoICsgckxlbmd0aCA+IDApIHsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IG5QYWdlcyA9IHMgKiBuTGVuZ3RoOworICAgICAgICAgICAgdWlu
dDY0X3QgclBhZ2VzID0gcyAqIHJMZW5ndGg7CisgICAgICAgICAgICB0b3RhbE5vcm1hbCArPSBu
UGFnZXM7CisgICAgICAgICAgICB0b3RhbFJldHVybmVkICs9IHJQYWdlczsKKyAgICAgICAgICAg
IG91dC0+cHJpbnRmKCIlNnUgcGFnZXMgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIg
Y3VtIgorICAgICAgICAgICAgICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAlNi4x
ZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgKG5MZW5ndGggKyByTGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBh
Z2VzVG9NQihuUGFnZXMgKyByUGFnZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFnZXNU
b01CKHRvdGFsTm9ybWFsICsgdG90YWxSZXR1cm5lZCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBQYWdlc1RvTUIoclBhZ2VzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQih0
b3RhbFJldHVybmVkKSk7CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAotICB1aW50NjRfdCBuX3Bh
Z2VzID0gMDsKLSAgdWludDY0X3Qgcl9wYWdlcyA9IDA7Ci0gIGludCBuX3NwYW5zID0gMDsKLSAg
aW50IHJfc3BhbnMgPSAwOwotICBvdXQtPnByaW50ZigiTm9ybWFsIGxhcmdlIHNwYW5zOlxuIik7
Ci0gIGZvciAoU3BhbiogcyA9IGxhcmdlXy5ub3JtYWwubmV4dDsgcyAhPSAmbGFyZ2VfLm5vcm1h
bDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdl
cyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMt
Pmxlbmd0aCkpOwotICAgIG5fcGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIG5fc3BhbnMrKzsKLSAg
fQotICBvdXQtPnByaW50ZigiVW5tYXBwZWQgbGFyZ2Ugc3BhbnM6XG4iKTsKLSAgZm9yIChTcGFu
KiBzID0gbGFyZ2VfLnJldHVybmVkLm5leHQ7IHMgIT0gJmxhcmdlXy5yZXR1cm5lZDsgcyA9IHMt
Pm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFm
IE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkp
OwotICAgIHJfcGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIHJfc3BhbnMrKzsKLSAgfQotICB0b3Rh
bF9ub3JtYWwgKz0gbl9wYWdlczsKLSAgdG90YWxfcmV0dXJuZWQgKz0gcl9wYWdlczsKLSAgb3V0
LT5wcmludGYoIj4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBj
dW0iCi0gICAgICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4i
LAotICAgICAgICAgICAgICAobl9zcGFucyArIHJfc3BhbnMpLAotICAgICAgICAgICAgICBQYWdl
c1RvTUIobl9wYWdlcyArIHJfcGFnZXMpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxf
bm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIocl9wYWdl
cyksCi0gICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOworICAgIHVpbnQ2
NF90IG5QYWdlcyA9IDA7CisgICAgdWludDY0X3QgclBhZ2VzID0gMDsKKyAgICBpbnQgblNwYW5z
ID0gMDsKKyAgICBpbnQgclNwYW5zID0gMDsKKyAgICBvdXQtPnByaW50ZigiTm9ybWFsIGxhcmdl
IHNwYW5zOlxuIik7CisgICAgZm9yIChTcGFuKiBzID0gbGFyZ2Uubm9ybWFsLm5leHQ7IHMgIT0g
JmxhcmdlLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgb3V0LT5wcmludGYoIiAgIFsg
JTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxuIiwKKyAgICAgICAgICAgICAgICAgICAgcy0+
bGVuZ3RoLCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7CisgICAgICAgIG5QYWdlcyArPSBzLT5sZW5n
dGg7CisgICAgICAgIG5TcGFucysrOworICAgIH0KKyAgICBvdXQtPnByaW50ZigiVW5tYXBwZWQg
bGFyZ2Ugc3BhbnM6XG4iKTsKKyAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZS5yZXR1cm5lZC5uZXh0
OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgb3V0LT5wcmlu
dGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxuIiwKKyAgICAgICAgICAgICAg
ICAgICAgcy0+bGVuZ3RoLCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7CisgICAgICAgIHJQYWdlcyAr
PSBzLT5sZW5ndGg7CisgICAgICAgIHJTcGFucysrOworICAgIH0KKyAgICB0b3RhbE5vcm1hbCAr
PSBuUGFnZXM7CisgICAgdG90YWxSZXR1cm5lZCArPSByUGFnZXM7CisgICAgb3V0LT5wcmludGYo
Ij4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0iCisgICAg
ICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAlNi4xZiBNQiBjdW1cbiIsCisgICAg
ICAgICAgICAgICAgKG5TcGFucyArIHJTcGFucyksCisgICAgICAgICAgICAgICAgUGFnZXNUb01C
KG5QYWdlcyArIHJQYWdlcyksCisgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsTm9ybWFs
ICsgdG90YWxSZXR1cm5lZCksCisgICAgICAgICAgICAgICAgUGFnZXNUb01CKHJQYWdlcyksCisg
ICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsUmV0dXJuZWQpKTsKIH0KICNlbmRpZgogCi1i
b29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpHcm93SGVhcChMZW5ndGggbikgewotICBBU1NFUlQoa01h
eFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxvYyk7Ci0gIGlmIChuID4ga01heFZhbGlkUGFnZXMpIHJl
dHVybiBmYWxzZTsKLSAgTGVuZ3RoIGFzayA9IChuPmtNaW5TeXN0ZW1BbGxvYykgPyBuIDogc3Rh
dGljX2Nhc3Q8TGVuZ3RoPihrTWluU3lzdGVtQWxsb2MpOwotICBzaXplX3QgYWN0dWFsX3NpemU7
Ci0gIHZvaWQqIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAm
YWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Ci0gIGlmIChwdHIgPT0gTlVMTCkgewotICAgIGlmIChu
IDwgYXNrKSB7Ci0gICAgICAvLyBUcnkgZ3Jvd2luZyBqdXN0ICJuIiBwYWdlcwotICAgICAgYXNr
ID0gbjsKLSAgICAgIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0
LCAmYWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Citib29sIFRDTWFsbG9jUGFnZUhlYXA6Okdyb3dI
ZWFwKExlbmd0aCBuKQoreworICAgIEFTU0VSVChrTWF4UGFnZXMgPj0ga01pblN5c3RlbUFsbG9j
KTsKKyAgICBpZiAobiA+IGtNYXhWYWxpZFBhZ2VzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgTGVuZ3RoIGFzayA9IChuPmtNaW5TeXN0ZW1BbGxvYykgPyBuIDogc3RhdGljX2Nhc3Q8TGVu
Z3RoPihrTWluU3lzdGVtQWxsb2MpOworICAgIHNpemVfdCBhY3R1YWxTaXplOworICAgIHZvaWQq
IHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsU2l6
ZSwga1BhZ2VTaXplKTsKKyAgICBpZiAoIXB0cikgeworICAgICAgICBpZiAobiA8IGFzaykgewor
ICAgICAgICAgICAgLy8gVHJ5IGdyb3dpbmcganVzdCAibiIgcGFnZXMKKyAgICAgICAgICAgIGFz
ayA9IG47CisgICAgICAgICAgICBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhhc2sgPDwga1Bh
Z2VTaGlmdCwgJmFjdHVhbFNpemUsIGtQYWdlU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChwdHIgPT0g
TlVMTCkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGFzayA9IGFjdHVhbF9zaXplID4+IGtQYWdlU2hp
ZnQ7CisgICAgYXNrID0gYWN0dWFsU2l6ZSA+PiBrUGFnZVNoaWZ0OwogCi0gIHVpbnQ2NF90IG9s
ZF9zeXN0ZW1fYnl0ZXMgPSBzeXN0ZW1fYnl0ZXNfOwotICBzeXN0ZW1fYnl0ZXNfICs9IChhc2sg
PDwga1BhZ2VTaGlmdCk7Ci0gIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHB0cikgPj4ga1BhZ2VTaGlmdDsKLSAgQVNTRVJUKHAgPiAwKTsKKyAgICB1aW50NjRf
dCBvbGRTeXN0ZW1CeXRlcyA9IHN5c3RlbUJ5dGVzOworICAgIHN5c3RlbUJ5dGVzICs9IChhc2sg
PDwga1BhZ2VTaGlmdCk7CisgICAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIEFTU0VSVChwID4gMCk7CiAKLSAgLy8g
SWYgd2UgaGF2ZSBhbHJlYWR5IGEgbG90IG9mIHBhZ2VzIGFsbG9jYXRlZCwganVzdCBwcmUgYWxs
b2NhdGUgYSBidW5jaCBvZgotICAvLyBtZW1vcnkgZm9yIHRoZSBwYWdlIG1hcC4gVGhpcyBwcmV2
ZW50cyBmcmFnbWVudGF0aW9uIGJ5IHBhZ2VtYXAgbWV0YWRhdGEKLSAgLy8gd2hlbiBhIHByb2dy
YW0ga2VlcHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJnZSBibG9ja3MuCi0KLSAgaWYgKG9s
ZF9zeXN0ZW1fYnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQKLSAgICAgICYm
IHN5c3RlbV9ieXRlc18gPj0ga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkKSB7Ci0gICAg
cGFnZW1hcF8uUHJlYWxsb2NhdGVNb3JlTWVtb3J5KCk7Ci0gIH0KKyAgICAvLyBJZiB3ZSBoYXZl
IGFscmVhZHkgYSBsb3Qgb2YgcGFnZXMgYWxsb2NhdGVkLCBqdXN0IHByZSBhbGxvY2F0ZSBhIGJ1
bmNoIG9mCisgICAgLy8gbWVtb3J5IGZvciB0aGUgcGFnZSBtYXAuIFRoaXMgcHJldmVudHMgZnJh
Z21lbnRhdGlvbiBieSBwYWdlbWFwIG1ldGFkYXRhCisgICAgLy8gd2hlbiBhIHByb2dyYW0ga2Vl
cHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJnZSBibG9ja3MuCisKKyAgICBpZiAob2xkU3lz
dGVtQnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQKKyAgICAgICAgJiYgc3lz
dGVtQnl0ZXMgPj0ga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkKQorICAgICAgICBwYWdl
bWFwLlByZWFsbG9jYXRlTW9yZU1lbW9yeSgpOworCisgICAgLy8gTWFrZSBzdXJlIHBhZ2VtYXAg
aGFzIGVudHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3IHBhZ2VzLgorICAgIC8vIFBsdXMgZW5zdXJl
IG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciBzbyBjb2FsZXNjaW5nIGNvZGUKKyAgICAvLyBkb2Vz
IG5vdCBuZWVkIGJvdW5kcy1jaGVja2luZy4KKyAgICBpZiAocGFnZW1hcC5FbnN1cmUocC0xLCBh
c2srMikpIHsKKyAgICAgICAgLy8gUHJldGVuZCB0aGUgbmV3IGFyZWEgaXMgYWxsb2NhdGVkIGFu
ZCB0aGVuIERlbGV0ZSgpIGl0IHRvCisgICAgICAgIC8vIGNhdXNlIGFueSBuZWNlc3NhcnkgY29h
bGVzY2luZyB0byBvY2N1ci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgZG8gbm90IGFkanVz
dCBmcmVlUGFnZXMgaGVyZSBzaW5jZSBEZWxldGUoKSB3aWxsIGRvIGl0IGZvciB1cy4KKyAgICAg
ICAgU3Bhbiogc3BhbiA9IE5ld1NwYW4ocCwgYXNrKTsKKyAgICAgICAgUmVjb3JkU3BhbihzcGFu
KTsKKyAgICAgICAgRGVsZXRlKHNwYW4pOworICAgICAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAvLyBNYWtlIHN1cmUgcGFnZW1hcF8gaGFzIGVu
dHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3IHBhZ2VzLgotICAvLyBQbHVzIGVuc3VyZSBvbmUgYmVm
b3JlIGFuZCBvbmUgYWZ0ZXIgc28gY29hbGVzY2luZyBjb2RlCi0gIC8vIGRvZXMgbm90IG5lZWQg
Ym91bmRzLWNoZWNraW5nLgotICBpZiAocGFnZW1hcF8uRW5zdXJlKHAtMSwgYXNrKzIpKSB7Ci0g
ICAgLy8gUHJldGVuZCB0aGUgbmV3IGFyZWEgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIERlbGV0ZSgp
IGl0IHRvCi0gICAgLy8gY2F1c2UgYW55IG5lY2Vzc2FyeSBjb2FsZXNjaW5nIHRvIG9jY3VyLgot
ICAgIC8vCi0gICAgLy8gV2UgZG8gbm90IGFkanVzdCBmcmVlX3BhZ2VzXyBoZXJlIHNpbmNlIERl
bGV0ZSgpIHdpbGwgZG8gaXQgZm9yIHVzLgotICAgIFNwYW4qIHNwYW4gPSBOZXdTcGFuKHAsIGFz
ayk7Ci0gICAgUmVjb3JkU3BhbihzcGFuKTsKLSAgICBEZWxldGUoc3Bhbik7Ci0gICAgQVNTRVJU
KENoZWNrKCkpOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIC8vIFdlIGNvdWxk
IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2l0aGluICJwYWdlbWFwXyIKKyAgICAvLyBXZSBjb3VsZCBu
b3QgYWxsb2NhdGUgbWVtb3J5IHdpdGhpbiAicGFnZW1hcCIKICAgICAvLyBUT0RPOiBPbmNlIHdl
IGNhbiByZXR1cm4gbWVtb3J5IHRvIHRoZSBzeXN0ZW0sIHJldHVybiB0aGUgbmV3IHNwYW4KICAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KIH0KIAotYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6Q2hlY2so
KSB7Citib29sIFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrKCkKK3sKICNpZiBVU0VfQkFDS0dST1VO
RF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIHNpemVfdCB0b3RhbEZyZWVDb21taXR0ZWQg
PSAwOworICAgIHNpemVfdCB0b3RhbEZyZWVDb21taXR0ZWQgPSAwOwogI2VuZGlmCi0gIEFTU0VS
VChmcmVlX1swXS5ub3JtYWwubmV4dCA9PSAmZnJlZV9bMF0ubm9ybWFsKTsKLSAgQVNTRVJUKGZy
ZWVfWzBdLnJldHVybmVkLm5leHQgPT0gJmZyZWVfWzBdLnJldHVybmVkKTsKKyAgICBBU1NFUlQo
ZnJlZVNwYW5MaXN0WzBdLm5vcm1hbC5uZXh0ID09ICZmcmVlU3Bhbkxpc3RbMF0ubm9ybWFsKTsK
KyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLnJldHVybmVkLm5leHQgPT0gJmZyZWVTcGFuTGlz
dFswXS5yZXR1cm5lZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01F
TU9SWQotICB0b3RhbEZyZWVDb21taXR0ZWQgPSBDaGVja0xpc3QoJmxhcmdlXy5ub3JtYWwsIGtN
YXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOworICAgIHRvdGFsRnJlZUNvbW1pdHRlZCA9IENo
ZWNrTGlzdCgmbGFyZ2Uubm9ybWFsLCBrTWF4UGFnZXMsIDEwMDAwMDAwMDAsIGZhbHNlKTsKICNl
bHNlCi0gIENoZWNrTGlzdCgmbGFyZ2VfLm5vcm1hbCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCBm
YWxzZSk7CisgICAgQ2hlY2tMaXN0KCZsYXJnZS5ub3JtYWwsIGtNYXhQYWdlcywgMTAwMDAwMDAw
MCwgZmFsc2UpOwogI2VuZGlmCi0gICAgQ2hlY2tMaXN0KCZsYXJnZV8ucmV0dXJuZWQsIGtNYXhQ
YWdlcywgMTAwMDAwMDAwMCwgdHJ1ZSk7Ci0gIGZvciAoTGVuZ3RoIHMgPSAxOyBzIDwga01heFBh
Z2VzOyBzKyspIHsKKyAgICBDaGVja0xpc3QoJmxhcmdlLnJldHVybmVkLCBrTWF4UGFnZXMsIDEw
MDAwMDAwMDAsIHRydWUpOworICAgIGZvciAoTGVuZ3RoIHMgPSAxOyBzIDwga01heFBhZ2VzOyBz
KyspIHsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAg
dG90YWxGcmVlQ29tbWl0dGVkICs9IENoZWNrTGlzdCgmZnJlZV9bc10ubm9ybWFsLCBzLCBzLCBm
YWxzZSk7CisgICAgICAgIHRvdGFsRnJlZUNvbW1pdHRlZCArPSBDaGVja0xpc3QoJmZyZWVTcGFu
TGlzdFtzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKICNlbHNlCi0gICAgQ2hlY2tMaXN0KCZmcmVl
X1tzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKKyAgICAgICAgQ2hlY2tMaXN0KCZmcmVlU3Bhbkxp
c3Rbc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CiAjZW5kaWYKLSAgICBDaGVja0xpc3QoJmZyZWVf
W3NdLnJldHVybmVkLCBzLCBzLCB0cnVlKTsKLSAgfQorICAgICAgICBDaGVja0xpc3QoJmZyZWVT
cGFuTGlzdFtzXS5yZXR1cm5lZCwgcywgcywgdHJ1ZSk7CisgICAgfQogI2lmIFVTRV9CQUNLR1JP
VU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgQVNTRVJUKHRvdGFsRnJlZUNvbW1pdHRl
ZCA9PSBmcmVlX2NvbW1pdHRlZF9wYWdlc18pOworICAgIEFTU0VSVCh0b3RhbEZyZWVDb21taXR0
ZWQgPT0gZnJlZUNvbW1pdHRlZFBhZ2VzKTsKICNlbmRpZgotICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIEFTU0VSVF9ESVNBQkxFRAotc2l6ZV90IFRDTWFsbG9jX1Bh
Z2VIZWFwOjpDaGVja0xpc3QoU3BhbiosIExlbmd0aCwgTGVuZ3RoLCBib29sKSB7Ci0gIHJldHVy
biAwOworc2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrTGlzdChTcGFuKiwgTGVuZ3RoLCBM
ZW5ndGgsIGJvb2wpCit7CisgICAgcmV0dXJuIDA7CiB9CiAjZWxzZQotc2l6ZV90IFRDTWFsbG9j
X1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3Ro
IG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCkgewotICBzaXplX3QgZnJlZUNvdW50ID0gMDsK
LSAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewot
ICAgIENIRUNLX0NPTkRJVElPTihzLT5mcmVlKTsKLSAgICBDSEVDS19DT05ESVRJT04ocy0+bGVu
Z3RoID49IG1pbl9wYWdlcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0aCA8PSBtYXhf
cGFnZXMpOwotICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0KSA9PSBz
KTsKLSAgICBDSEVDS19DT05ESVRJT04oR2V0RGVzY3JpcHRvcihzLT5zdGFydCtzLT5sZW5ndGgt
MSkgPT0gcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmRlY29tbWl0dGVkID09IGRlY29tbWl0
dGVkKTsKLSAgICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOwotICB9Ci0gIHJldHVybiBmcmVlQ291
bnQ7CitzaXplX3QgVENNYWxsb2NQYWdlSGVhcDo6Q2hlY2tMaXN0KFNwYW4qIGxpc3QsIExlbmd0
aCBtaW5QYWdlcywgTGVuZ3RoIG1heFBhZ2VzLCBib29sIGRlY29tbWl0dGVkKQoreworICAgIHNp
emVfdCBmcmVlQ291bnQgPSAwOworICAgIGZvciAoU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0g
bGlzdDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOwor
ICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoID49IG1pblBhZ2VzKTsKKyAgICAgICAg
Q0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0aCA8PSBtYXhQYWdlcyk7CisgICAgICAgIENIRUNLX0NP
TkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0KSA9PSBzKTsKKyAgICAgICAgQ0hFQ0tfQ09O
RElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQrcy0+bGVuZ3RoLTEpID09IHMpOworICAgICAg
ICBDSEVDS19DT05ESVRJT04ocy0+ZGVjb21taXR0ZWQgPT0gZGVjb21taXR0ZWQpOworICAgICAg
ICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gZnJlZUNvdW50Owog
fQogI2VuZGlmCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlTGlzdChTcGFu
KiBsaXN0LCBTcGFuKiByZXR1cm5lZCkgewotICAvLyBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIGxp
c3Qgc28gdGhhdCB3aGVuIHdlIHB1c2ggdGhlc2UKLSAgLy8gc3BhbnMgb24gdGhlICJyZXR1cm5l
ZCIgbGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpS
ZWxlYXNlRnJlZUxpc3QoU3BhbiogbGlzdCwgU3BhbiogcmV0dXJuZWQpCit7CisgICAgLy8gV2Fs
ayBiYWNrd2FyZHMgdGhyb3VnaCBsaXN0IHNvIHRoYXQgd2hlbiB3ZSBwdXNoIHRoZXNlCisgICAg
Ly8gc3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgog
I2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgc2l6ZV90IGZy
ZWVQYWdlUmVkdWN0aW9uID0gMDsKKyAgICBzaXplX3QgZnJlZVBhZ2VSZWR1Y3Rpb24gPSAwOwog
I2VuZGlmCiAKLSAgd2hpbGUgKCFETExfSXNFbXB0eShsaXN0KSkgewotICAgIFNwYW4qIHMgPSBs
aXN0LT5wcmV2OworICAgIHdoaWxlICghRExMX0lzRW1wdHkobGlzdCkpIHsKKyAgICAgICAgU3Bh
biogcyA9IGxpc3QtPnByZXY7CiAKLSAgICBETExfUmVtb3ZlKHMpOwotICAgIHMtPmRlY29tbWl0
dGVkID0gdHJ1ZTsKLSAgICBETExfUHJlcGVuZChyZXR1cm5lZCwgcyk7Ci0gICAgVENNYWxsb2Nf
U3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNo
aWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+
bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAgICAgRExMUmVtb3ZlKHMpOworICAgICAgICBz
LT5kZWNvbW1pdHRlZCA9IHRydWU7CisgICAgICAgIERMTFByZXBlbmQocmV0dXJuZWQsIHMpOwor
ICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMt
PnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxzaXplX3Q+KHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7CiAjaWYgVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIGZyZWVQYWdlUmVkdWN0aW9u
ICs9IHMtPmxlbmd0aDsKKyAgICAgICAgZnJlZVBhZ2VSZWR1Y3Rpb24gKz0gcy0+bGVuZ3RoOwog
I2VuZGlmCi0gIH0KKyAgICB9CiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVO
R0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IGZyZWVQYWdlUmVkdWN0aW9u
OwotICAgIGlmIChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPCBtaW5fZnJlZV9jb21taXR0ZWRfcGFn
ZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pIAotICAgICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFn
ZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAgZnJl
ZUNvbW1pdHRlZFBhZ2VzIC09IGZyZWVQYWdlUmVkdWN0aW9uOworICAgIGlmIChmcmVlQ29tbWl0
dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkgCisgICAg
ICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJlZUNvbW1pdHRl
ZFBhZ2VzOwogI2VuZGlmCiB9CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVl
UGFnZXMoKSB7Ci0gIGZvciAoTGVuZ3RoIHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAg
ICBSZWxlYXNlRnJlZUxpc3QoJmZyZWVfW3NdLm5vcm1hbCwgJmZyZWVfW3NdLnJldHVybmVkKTsK
LSAgfQotICBSZWxlYXNlRnJlZUxpc3QoJmxhcmdlXy5ub3JtYWwsICZsYXJnZV8ucmV0dXJuZWQp
OwotICBBU1NFUlQoQ2hlY2soKSk7Cit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OlJlbGVhc2VGcmVl
UGFnZXMoKQoreworICAgIGZvciAoTGVuZ3RoIHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspCisg
ICAgICAgIFJlbGVhc2VGcmVlTGlzdCgmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbCwgJmZyZWVTcGFu
TGlzdFtzXS5yZXR1cm5lZCk7CisgICAgUmVsZWFzZUZyZWVMaXN0KCZsYXJnZS5ub3JtYWwsICZs
YXJnZS5yZXR1cm5lZCk7CisgICAgQVNTRVJUKENoZWNrKCkpOwogfQogCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IC8vIEZyZWUgbGlzdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hl
X0ZyZWVMaXN0IHsKLSBwcml2YXRlOgotICB2b2lkKiAgICBsaXN0XzsgICAgICAgLy8gTGlua2Vk
IGxpc3Qgb2Ygbm9kZXMKLSAgdWludDE2X3QgbGVuZ3RoXzsgICAgIC8vIEN1cnJlbnQgbGVuZ3Ro
Ci0gIHVpbnQxNl90IGxvd2F0ZXJfOyAgICAvLyBMb3cgd2F0ZXIgbWFyayBmb3IgbGlzdCBsZW5n
dGgKK2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdCB7Citwcml2YXRlOgorICAgIHZv
aWQqIGxpc3Q7IC8vIExpbmtlZCBsaXN0IG9mIG5vZGVzCisgICAgdWludDE2X3QgY3VycmVudExl
bmd0aDsgLy8gQ3VycmVudCBsZW5ndGgKKyAgICB1aW50MTZfdCBsb3dhdGVyOyAvLyBMb3cgd2F0
ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKIAotIHB1YmxpYzoKLSAgdm9pZCBJbml0KCkgewotICAg
IGxpc3RfID0gTlVMTDsKLSAgICBsZW5ndGhfID0gMDsKLSAgICBsb3dhdGVyXyA9IDA7Ci0gIH0K
K3B1YmxpYzoKKyAgICB2b2lkIEluaXQoKQorICAgIHsKKyAgICAgICAgbGlzdCA9IDA7CisgICAg
ICAgIGN1cnJlbnRMZW5ndGggPSAwOworICAgICAgICBsb3dhdGVyID0gMDsKKyAgICB9CiAKLSAg
Ly8gUmV0dXJuIGN1cnJlbnQgbGVuZ3RoIG9mIGxpc3QKLSAgaW50IGxlbmd0aCgpIGNvbnN0IHsK
LSAgICByZXR1cm4gbGVuZ3RoXzsKLSAgfQorICAgIC8vIFJldHVybiBjdXJyZW50IGxlbmd0aCBv
ZiBsaXN0CisgICAgaW50IGxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY3Vy
cmVudExlbmd0aDsKKyAgICB9CiAKLSAgLy8gSXMgbGlzdCBlbXB0eT8KLSAgYm9vbCBlbXB0eSgp
IGNvbnN0IHsKLSAgICByZXR1cm4gbGlzdF8gPT0gTlVMTDsKLSAgfQorICAgIC8vIElzIGxpc3Qg
ZW1wdHk/CisgICAgYm9vbCBlbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWxp
c3Q7CisgICAgfQogCi0gIC8vIExvdy13YXRlciBtYXJrIG1hbmFnZW1lbnQKLSAgaW50IGxvd3dh
dGVybWFyaygpIGNvbnN0IHsgcmV0dXJuIGxvd2F0ZXJfOyB9Ci0gIHZvaWQgY2xlYXJfbG93d2F0
ZXJtYXJrKCkgeyBsb3dhdGVyXyA9IGxlbmd0aF87IH0KLQotICBBTFdBWVNfSU5MSU5FIHZvaWQg
UHVzaCh2b2lkKiBwdHIpIHsKLSAgICBTTExfUHVzaCgmbGlzdF8sIHB0cik7Ci0gICAgbGVuZ3Ro
XysrOwotICB9CisgICAgLy8gTG93LXdhdGVyIG1hcmsgbWFuYWdlbWVudAorICAgIGludCBsb3d3
YXRlcm1hcmsoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvd2F0ZXI7CisgICAgfQor
ICAgIHZvaWQgY2xlYXJMb3d3YXRlcm1hcmsoKQorICAgIHsKKyAgICAgICAgbG93YXRlciA9IGN1
cnJlbnRMZW5ndGg7CisgICAgfQogCi0gIHZvaWQgUHVzaFJhbmdlKGludCBOLCB2b2lkICpzdGFy
dCwgdm9pZCAqZW5kKSB7Ci0gICAgU0xMX1B1c2hSYW5nZSgmbGlzdF8sIHN0YXJ0LCBlbmQpOwot
ICAgIGxlbmd0aF8gPSBsZW5ndGhfICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOwotICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIFB1c2godm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgU0xM
UHVzaCgmbGlzdCwgcHRyKTsKKyAgICAgICAgY3VycmVudExlbmd0aCsrOworICAgIH0KIAotICB2
b2lkIFBvcFJhbmdlKGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpIHsKLSAgICBTTExf
UG9wUmFuZ2UoJmxpc3RfLCBOLCBzdGFydCwgZW5kKTsKLSAgICBBU1NFUlQobGVuZ3RoXyA+PSBO
KTsKLSAgICBsZW5ndGhfID0gbGVuZ3RoXyAtIHN0YXRpY19jYXN0PHVpbnQxNl90PihOKTsKLSAg
ICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dhdGVyXyA9IGxlbmd0aF87Ci0gIH0KKyAgICB2
b2lkIFB1c2hSYW5nZShpbnQgTiwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKKyAgICB7CisgICAg
ICAgIFNMTFB1c2hSYW5nZSgmbGlzdCwgc3RhcnQsIGVuZCk7CisgICAgICAgIGN1cnJlbnRMZW5n
dGggPSBjdXJyZW50TGVuZ3RoICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOworICAgIH0KIAot
ICBBTFdBWVNfSU5MSU5FIHZvaWQqIFBvcCgpIHsKLSAgICBBU1NFUlQobGlzdF8gIT0gTlVMTCk7
Ci0gICAgbGVuZ3RoXy0tOwotICAgIGlmIChsZW5ndGhfIDwgbG93YXRlcl8pIGxvd2F0ZXJfID0g
bGVuZ3RoXzsKLSAgICByZXR1cm4gU0xMX1BvcCgmbGlzdF8pOwotICB9CisgICAgdm9pZCBQb3BS
YW5nZShpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKQorICAgIHsKKyAgICAgICAgU0xM
UG9wUmFuZ2UoJmxpc3QsIE4sIHN0YXJ0LCBlbmQpOworICAgICAgICBBU1NFUlQoY3VycmVudExl
bmd0aCA+PSBOKTsKKyAgICAgICAgY3VycmVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGggLSBzdGF0
aWNfY2FzdDx1aW50MTZfdD4oTik7CisgICAgICAgIGlmIChjdXJyZW50TGVuZ3RoIDwgbG93YXRl
cikKKyAgICAgICAgICAgIGxvd2F0ZXIgPSBjdXJyZW50TGVuZ3RoOworICAgIH0KKworICAgIEFM
V0FZU19JTkxJTkUgdm9pZCogUG9wKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsaXN0KTsKKyAg
ICAgICAgY3VycmVudExlbmd0aC0tOworICAgICAgICBpZiAoY3VycmVudExlbmd0aCA8IGxvd2F0
ZXIpCisgICAgICAgICAgICBsb3dhdGVyID0gY3VycmVudExlbmd0aDsKKyAgICAgICAgcmV0dXJu
IFNMTFBvcCgmbGlzdCk7CisgICAgfQogCiAjaWZkZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUg
PGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgotICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3Rz
KEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKLSAgewotICAgICAgZm9yICh2
b2lkKiBuZXh0T2JqZWN0ID0gbGlzdF87IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIu
bmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0
KSkpCi0gICAgICAgICAgZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOwotICB9CisgICAgdGVtcGxh
dGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZvaWQgZW51bWVyYXRlRnJlZU9i
amVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAg
ICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlzdDsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9
IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG5l
eHRPYmplY3QpKSkKKyAgICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICB9
CiAjZW5kaWYKIH07CiAKQEAgLTIyNzUsMjA0ICsyNDYyLDgyIEBAIGNsYXNzIFRDTWFsbG9jX1Ro
cmVhZENhY2hlX0ZyZWVMaXN0IHsKIC8vIERhdGEga2VwdCBwZXIgdGhyZWFkCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGUgewotIHByaXZhdGU6Ci0gIHR5cGVkZWYg
VENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3QgRnJlZUxpc3Q7CitjbGFzcyBUQ01hbGxvY1Ro
cmVhZENhY2hlIHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUQ01hbGxvY1RocmVhZENhY2hlRnJl
ZUxpc3QgRnJlZUxpc3Q7CiAjaWYgT1MoV0lORE9XUykKLSAgdHlwZWRlZiBEV09SRCBUaHJlYWRJ
ZGVudGlmaWVyOworICAgIHR5cGVkZWYgRFdPUkQgVGhyZWFkSWRlbnRpZmllcjsKICNlbHNlCi0g
IHR5cGVkZWYgcHRocmVhZF90IFRocmVhZElkZW50aWZpZXI7CisgICAgdHlwZWRlZiBwdGhyZWFk
X3QgVGhyZWFkSWRlbnRpZmllcjsKICNlbmRpZgogCi0gIHNpemVfdCAgICAgICAgc2l6ZV87ICAg
ICAgICAgICAgICAgICAgLy8gQ29tYmluZWQgc2l6ZSBvZiBkYXRhCi0gIFRocmVhZElkZW50aWZp
ZXIgdGlkXzsgICAgICAgICAgICAgICAgLy8gV2hpY2ggdGhyZWFkIG93bnMgaXQKLSAgYm9vbCAg
ICAgICAgICBpbl9zZXRzcGVjaWZpY187ICAgICAgICAgICAvLyBDYWxsZWQgcHRocmVhZF9zZXRz
cGVjaWZpYz8KLSAgRnJlZUxpc3QgICAgICBsaXN0X1trTnVtQ2xhc3Nlc107ICAgICAvLyBBcnJh
eSBpbmRleGVkIGJ5IHNpemUtY2xhc3MKLQotICAvLyBXZSBzYW1wbGUgYWxsb2NhdGlvbnMsIGJp
YXNlZCBieSB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICB1aW50MzJfdCAgICAgIHJuZF87
ICAgICAgICAgICAgICAgICAgIC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0gIHNp
emVfdCAgICAgICAgYnl0ZXNfdW50aWxfc2FtcGxlXzsgICAgLy8gQnl0ZXMgdW50aWwgd2Ugc2Ft
cGxlIG5leHQKKyAgICBzaXplX3Qgc2l6ZTsgLy8gQ29tYmluZWQgc2l6ZSBvZiBkYXRhCisgICAg
VGhyZWFkSWRlbnRpZmllciB0aWQ7IC8vIFdoaWNoIHRocmVhZCBvd25zIGl0CisgICAgYm9vbCBp
blNldHNwZWNpZmljOyAvLyBDYWxsZWQgcHRocmVhZF9zZXRzcGVjaWZpYz8KKyAgICBGcmVlTGlz
dCBsaXN0W2tOdW1DbGFzc2VzXTsgLy8gQXJyYXkgaW5kZXhlZCBieSBzaXplLWNsYXNzCiAKLSAg
Ly8gQWxsb2NhdGUgYSBuZXcgaGVhcC4gUkVRVUlSRVM6IHBhZ2VoZWFwX2xvY2sgaXMgaGVsZC4K
LSAgc3RhdGljIGlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNoZSogTmV3SGVhcChUaHJlYWRJZGVu
dGlmaWVyIHRpZCk7Ci0KLSAgLy8gVXNlIG9ubHkgYXMgcHRocmVhZCB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvciBmdW5jdGlvbi4KLSAgc3RhdGljIHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZv
aWQqIHB0cik7Ci0gcHVibGljOgotICAvLyBBbGwgVGhyZWFkQ2FjaGUgb2JqZWN0cyBhcmUga2Vw
dCBpbiBhIGxpbmtlZCBsaXN0IChmb3Igc3RhdHMgY29sbGVjdGlvbikKLSAgVENNYWxsb2NfVGhy
ZWFkQ2FjaGUqIG5leHRfOwotICBUQ01hbGxvY19UaHJlYWRDYWNoZSogcHJldl87Ci0KLSAgdm9p
ZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkKTsKLSAgdm9pZCBDbGVhbnVwKCk7Ci0KLSAgLy8g
QWNjZXNzb3JzIChtb3N0bHkganVzdCBmb3IgcHJpbnRpbmcgc3RhdHMpCi0gIGludCBmcmVlbGlz
dF9sZW5ndGgoc2l6ZV90IGNsKSBjb25zdCB7IHJldHVybiBsaXN0X1tjbF0ubGVuZ3RoKCk7IH0K
LQotICAvLyBUb3RhbCBieXRlIHNpemUgaW4gY2FjaGUKLSAgc2l6ZV90IFNpemUoKSBjb25zdCB7
IHJldHVybiBzaXplXzsgfQotCi0gIEFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdGUoc2l6ZV90
IHNpemUpOwotICB2b2lkIERlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3Qgc2l6ZV9jbGFzcyk7
Ci0KLSAgQUxXQVlTX0lOTElORSB2b2lkIEZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2ws
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSk7Ci0gIHZvaWQgUmVsZWFzZVRvQ2VudHJhbENhY2hlKHNp
emVfdCBjbCwgaW50IE4pOwotICB2b2lkIFNjYXZlbmdlKCk7Ci0gIHZvaWQgUHJpbnQoKSBjb25z
dDsKLQotICAvLyBSZWNvcmQgYWxsb2NhdGlvbiBvZiAiayIgYnl0ZXMuICBSZXR1cm4gdHJ1ZSBp
ZmYgYWxsb2NhdGlvbgotICAvLyBzaG91bGQgYmUgc2FtcGxlZAotICBib29sIFNhbXBsZUFsbG9j
YXRpb24oc2l6ZV90IGspOwotCi0gIC8vIFBpY2sgbmV4dCBzYW1wbGluZyBwb2ludAotICB2b2lk
IFBpY2tOZXh0U2FtcGxlKHNpemVfdCBrKTsKLQotICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAg
ICAgIEluaXRNb2R1bGUoKTsKLSAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBJbml0VFNE
KCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogR2V0VGhyZWFkSGVhcCgpOwotICBz
dGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIEdldENhY2hlKCk7Ci0gIHN0YXRpYyBUQ01hbGxv
Y19UaHJlYWRDYWNoZSogR2V0Q2FjaGVJZlByZXNlbnQoKTsKLSAgc3RhdGljIFRDTWFsbG9jX1Ro
cmVhZENhY2hlKiBDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCk7Ci0gIHN0YXRpYyB2b2lkICAgICAg
ICAgICAgICAgICAgRGVsZXRlQ2FjaGUoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXApOwotICBz
dGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEJlY29tZUlkbGUoKTsKLSAgc3RhdGljIHZvaWQg
ICAgICAgICAgICAgICAgICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKLQotI2lmZGVmIFdU
Rl9DSEFOR0VTCi0gIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KLSAgdm9p
ZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFk
ZXIpCi0gIHsKLSAgICAgIGZvciAodW5zaWduZWQgc2l6ZUNsYXNzID0gMDsgc2l6ZUNsYXNzIDwg
a051bUNsYXNzZXM7IHNpemVDbGFzcysrKQotICAgICAgICAgIGxpc3RfW3NpemVDbGFzc10uZW51
bWVyYXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFkZXIpOwotICB9Ci0jZW5kaWYKLX07CisgICAg
Ly8gV2Ugc2FtcGxlIGFsbG9jYXRpb25zLCBiaWFzZWQgYnkgdGhlIHNpemUgb2YgdGhlIGFsbG9j
YXRpb24KKyAgICB1aW50MzJfdCBybmQ7IC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9y
CisgICAgc2l6ZV90IGJ5dGVzVW50aWxTYW1wbGU7IC8vIEJ5dGVzIHVudGlsIHdlIHNhbXBsZSBu
ZXh0CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBrZXB0IHBlciBzaXplLWNsYXNzIGluIGNlbnRy
YWwgY2FjaGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEFsbG9jYXRlIGEgbmV3IGhlYXAuIFJFUVVJ
UkVTOiBwYWdlaGVhcExvY2sgaXMgaGVsZC4KKyAgICBzdGF0aWMgaW5saW5lIFRDTWFsbG9jVGhy
ZWFkQ2FjaGUqIE5ld0hlYXAoVGhyZWFkSWRlbnRpZmllciB0aWQpOwogCi1jbGFzcyBUQ01hbGxv
Y19DZW50cmFsX0ZyZWVMaXN0IHsKLSBwdWJsaWM6Ci0gIHZvaWQgSW5pdChzaXplX3QgY2wpOwor
ICAgIC8vIFVzZSBvbmx5IGFzIHB0aHJlYWQgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgZnVu
Y3Rpb24uCisgICAgc3RhdGljIHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZvaWQqIHB0cik7Citw
dWJsaWM6CisgICAgLy8gQWxsIFRocmVhZENhY2hlIG9iamVjdHMgYXJlIGtlcHQgaW4gYSBsaW5r
ZWQgbGlzdCAoZm9yIHN0YXRzIGNvbGxlY3Rpb24pCisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSog
bmV4dDsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBwcmV2OwogCi0gIC8vIFRoZXNlIG1ldGhv
ZHMgYWxsIGRvIGludGVybmFsIGxvY2tpbmcuCisgICAgdm9pZCBJbml0KFRocmVhZElkZW50aWZp
ZXIgdGlkKTsKKyAgICB2b2lkIENsZWFudXAoKTsKIAotICAvLyBJbnNlcnQgdGhlIHNwZWNpZmll
ZCByYW5nZSBpbnRvIHRoZSBjZW50cmFsIGZyZWVsaXN0LiAgTiBpcyB0aGUgbnVtYmVyIG9mCi0g
IC8vIGVsZW1lbnRzIGluIHRoZSByYW5nZS4KLSAgdm9pZCBJbnNlcnRSYW5nZSh2b2lkICpzdGFy
dCwgdm9pZCAqZW5kLCBpbnQgTik7CisgICAgLy8gQWNjZXNzb3JzIChtb3N0bHkganVzdCBmb3Ig
cHJpbnRpbmcgc3RhdHMpCisgICAgaW50IGZyZWVsaXN0bGVuZ3RoKHNpemVfdCBjbCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBsaXN0W2NsXS5sZW5ndGgoKTsKKyAgICB9CiAKLSAgLy8g
UmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRzIGludG8gTi4KLSAg
dm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCAqTik7CisgICAg
Ly8gVG90YWwgYnl0ZSBzaXplIGluIGNhY2hlCisgICAgc2l6ZV90IFNpemUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQogCi0gIC8vIFJldHVybnMgdGhlIG51bWJl
ciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCi0gIHNpemVfdCBsZW5ndGgoKSB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICAgIHJldHVybiBjb3VudGVyXzsKLSAgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkIERlYWxsb2NhdGUo
dm9pZCogcHRyLCBzaXplX3Qgc2l6ZWNsYXNzKTsKIAotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgZnJlZSBvYmplY3RzIGluIHRoZSB0cmFuc2ZlciBjYWNoZS4KLSAgaW50IHRjX2xlbmd0aCgp
IHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gICAgcmV0dXJuIHVzZWRfc2xvdHNf
ICogbnVtX29iamVjdHNfdG9fbW92ZVtzaXplX2NsYXNzX107Ci0gIH0KKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgc2l6ZV90IGFsbG9jYXRp
b25TaXplKTsKKyAgICB2b2lkIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShzaXplX3QgY2wsIGludCk7
CisgICAgdm9pZCBTY2F2ZW5nZSgpOworICAgIHZvaWQgUHJpbnQoKSBjb25zdDsKKworICAgIC8v
IFJlY29yZCBhbGxvY2F0aW9uIG9mICJrIiBieXRlcy4gUmV0dXJuIHRydWUgaWZmIGFsbG9jYXRp
b24KKyAgICAvLyBzaG91bGQgYmUgc2FtcGxlZAorICAgIGJvb2wgU2FtcGxlQWxsb2NhdGlvbihz
aXplX3Qgayk7CisKKyAgICAvLyBQaWNrIG5leHQgc2FtcGxpbmcgcG9pbnQKKyAgICB2b2lkIFBp
Y2tOZXh0U2FtcGxlKHNpemVfdCBrKTsKKworICAgIHN0YXRpYyB2b2lkIEluaXRNb2R1bGUoKTsK
KyAgICBzdGF0aWMgdm9pZCBJbml0VFNEKCk7CisgICAgc3RhdGljIFRDTWFsbG9jVGhyZWFkQ2Fj
aGUqIEdldFRocmVhZEhlYXAoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogR2V0
Q2FjaGUoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogR2V0Q2FjaGVJZlByZXNl
bnQoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogQ3JlYXRlQ2FjaGVJZk5lY2Vz
c2FyeSgpOworICAgIHN0YXRpYyB2b2lkIERlbGV0ZUNhY2hlKFRDTWFsbG9jVGhyZWFkQ2FjaGUq
IGhlYXApOworICAgIHN0YXRpYyB2b2lkIEJlY29tZUlkbGUoKTsKKyAgICBzdGF0aWMgdm9pZCBS
ZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKIAogI2lmZGVmIFdURl9DSEFOR0VTCi0gIHRlbXBs
YXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KLSAgdm9pZCBlbnVtZXJhdGVGcmVlT2Jq
ZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIsIFRDTWFsbG9jX0NlbnRy
YWxfRnJlZUxpc3QqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkKLSAgewotICAgIGZvciAoU3Bhbiog
c3BhbiA9ICZlbXB0eV87IHNwYW4gJiYgc3BhbiAhPSAmZW1wdHlfOyBzcGFuID0gKHNwYW4tPm5l
eHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkKLSAgICAgIEFTU0VSVCghc3Bhbi0+b2JqZWN0
cyk7Ci0KLSAgICBBU1NFUlQoIW5vbmVtcHR5Xy5vYmplY3RzKTsKLSAgICBzdGF0aWMgY29uc3Qg
cHRyZGlmZl90IG5vbmVtcHR5T2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
Jm5vbmVtcHR5XykgLSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzKTsKLQotICAg
IFNwYW4qIHJlbW90ZU5vbmVtcHR5ID0gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2VudHJhbEZyZWVMaXN0KSArIG5vbmVtcHR5T2Zmc2V0KTsK
LSAgICBTcGFuKiByZW1vdGVTcGFuID0gbm9uZW1wdHlfLm5leHQ7Ci0KLSAgICBmb3IgKFNwYW4q
IHNwYW4gPSByZWFkZXIocmVtb3RlU3Bhbik7IHNwYW4gJiYgcmVtb3RlU3BhbiAhPSByZW1vdGVO
b25lbXB0eTsgcmVtb3RlU3BhbiA9IHNwYW4tPm5leHQsIHNwYW4gPSAoc3Bhbi0+bmV4dCA/IHJl
YWRlcihzcGFuLT5uZXh0KSA6IDApKSB7Ci0gICAgICBmb3IgKHZvaWQqIG5leHRPYmplY3QgPSBz
cGFuLT5vYmplY3RzOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0ID0gcmVhZGVyLm5leHRFbnRyeUlu
TGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQotICAgICAg
ICBmaW5kZXIudmlzaXQobmV4dE9iamVjdCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwg
Y2xhc3MgUmVhZGVyPgorICAgIHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5k
ZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBz
aXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBrTnVtQ2xhc3Nlczsgc2l6ZUNsYXNzKyspCisgICAg
ICAgICAgICBsaXN0W3NpemVDbGFzc10uZW51bWVyYXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFk
ZXIpOwogICAgIH0KLSAgfQogI2VuZGlmCi0KLSBwcml2YXRlOgotICAvLyBSRVFVSVJFUzogbG9j
a18gaXMgaGVsZAotICAvLyBSZW1vdmUgb2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4KLSAg
Ly8gUmV0dXJuIE5VTEwgaWYgbm8gZnJlZSBlbnRyaWVzIGluIGNhY2hlLgotICB2b2lkKiBGZXRj
aEZyb21TcGFucygpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFJlbW92
ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLiAgRmV0Y2hlcwotICAvLyBmcm9tIHBhZ2Vo
ZWFwIGlmIGNhY2hlIGlzIGVtcHR5LiAgT25seSByZXR1cm5zCi0gIC8vIE5VTEwgb24gYWxsb2Nh
dGlvbiBmYWlsdXJlLgotICB2b2lkKiBGZXRjaEZyb21TcGFuc1NhZmUoKTsKLQotICAvLyBSRVFV
SVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBSZWxlYXNlIGEgbGlua2VkIGxpc3Qgb2Ygb2JqZWN0
cyB0byBzcGFucy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIHZvaWQg
UmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0YXJ0KTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18g
aXMgaGVsZAotICAvLyBSZWxlYXNlIGFuIG9iamVjdCB0byBzcGFucy4KLSAgLy8gTWF5IHRlbXBv
cmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19JTkxJTkUgdm9pZCBSZWxlYXNlVG9TcGFu
cyh2b2lkKiBvYmplY3QpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFBv
cHVsYXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVhcC4KLSAgLy8gTWF5IHRl
bXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19JTkxJTkUgdm9pZCBQb3B1bGF0ZSgp
OwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQuCi0gIC8vIFRyaWVzIHRvIG1ha2Ugcm9v
bSBmb3IgYSBUQ0VudHJ5LiAgSWYgdGhlIGNhY2hlIGlzIGZ1bGwgaXQgd2lsbCB0cnkgdG8KLSAg
Ly8gZXhwYW5kIGl0IGF0IHRoZSBjb3N0IG9mIHNvbWUgb3RoZXIgY2FjaGUgc2l6ZS4gIFJldHVy
biBmYWxzZSBpZiB0aGVyZSBpcwotICAvLyBubyBzcGFjZS4KLSAgYm9vbCBNYWtlQ2FjaGVTcGFj
ZSgpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBmb3IgbG9ja2VkX3NpemVfY2xhc3MgaXMgaGVs
ZC4KLSAgLy8gUGlja3MgYSAicmFuZG9tIiBzaXplIGNsYXNzIHRvIHN0ZWFsIFRDRW50cnkgc2xv
dCBmcm9tLiAgSW4gcmVhbGl0eSBpdAotICAvLyBqdXN0IGl0ZXJhdGVzIG92ZXIgdGhlIHNpemVj
bGFzc2VzIGJ1dCBkb2VzIHNvIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KLSAgLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3MuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSBsb2NrIGEgInJhbmRvbSIgc2l6
ZSBjbGFzcy4KLSAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBFdmljdFJhbmRvbVNpemVDbGFz
cyhzaXplX3QgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpOwotCi0gIC8vIFJFUVVJUkVT
OiBsb2NrXyBpcyAqbm90KiBoZWxkLgotICAvLyBUcmllcyB0byBzaHJpbmsgdGhlIENhY2hlLiAg
SWYgZm9yY2UgaXMgdHJ1ZSBpdCB3aWxsIHJlbGFzZSBvYmplY3RzIHRvCi0gIC8vIHNwYW5zIGlm
IGl0IGFsbG93cyBpdCB0byBzaHJpbmsgdGhlIGNhY2hlLiAgUmV0dXJuIGZhbHNlIGlmIGl0IGZh
aWxlZCB0bwotICAvLyBzaHJpbmsgdGhlIGNhY2hlLiAgRGVjcmVtZW50cyBjYWNoZV9zaXplXyBv
biBzdWNjZWVzcy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHRha2UgbG9ja18uICBJZiBpdCB0YWtl
cyBsb2NrXywgdGhlIGxvY2tlZF9zaXplX2NsYXNzCi0gIC8vIGxvY2sgaXMgcmVsZWFzZWQgdG8g
dGhlIHRocmVhZCBmcm9tIGhvbGRpbmcgdHdvIHNpemUgY2xhc3MgbG9ja3MKLSAgLy8gY29uY3Vy
cmVudGx5IHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBkZWFkbG9jay4KLSAgYm9vbCBTaHJpbmtDYWNo
ZShpbnQgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpOwotCi0gIC8vIFRoaXMgbG9jayBw
cm90ZWN0cyBhbGwgdGhlIGRhdGEgbWVtYmVycy4gIGNhY2hlZF9lbnRyaWVzIGFuZCBjYWNoZV9z
aXplXwotICAvLyBtYXkgYmUgbG9va2VkIGF0IHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4KLSAg
U3BpbkxvY2sgbG9ja187Ci0KLSAgLy8gV2Uga2VlcCBsaW5rZWQgbGlzdHMgb2YgZW1wdHkgYW5k
IG5vbi1lbXB0eSBzcGFucy4KLSAgc2l6ZV90ICAgc2l6ZV9jbGFzc187ICAgICAvLyBNeSBzaXpl
IGNsYXNzCi0gIFNwYW4gICAgIGVtcHR5XzsgICAgICAgICAgLy8gRHVtbXkgaGVhZGVyIGZvciBs
aXN0IG9mIGVtcHR5IHNwYW5zCi0gIFNwYW4gICAgIG5vbmVtcHR5XzsgICAgICAgLy8gRHVtbXkg
aGVhZGVyIGZvciBsaXN0IG9mIG5vbi1lbXB0eSBzcGFucwotICBzaXplX3QgICBjb3VudGVyXzsg
ICAgICAgIC8vIE51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUgZW50cnkKLQotICAvLyBI
ZXJlIHdlIHJlc2VydmUgc3BhY2UgZm9yIFRDRW50cnkgY2FjaGUgc2xvdHMuICBTaW5jZSBvbmUg
c2l6ZSBjbGFzcyBjYW4KLSAgLy8gZW5kIHVwIGdldHRpbmcgYWxsIHRoZSBUQ0VudHJpZXMgcXVv
dGEgaW4gdGhlIHN5c3RlbSB3ZSBqdXN0IHByZWFsbG9jYXRlCi0gIC8vIHN1ZmZpY2llbnQgbnVt
YmVyIG9mIGVudHJpZXMgaGVyZS4KLSAgVENFbnRyeSB0Y19zbG90c19ba051bVRyYW5zZmVyRW50
cmllc107Ci0KLSAgLy8gTnVtYmVyIG9mIGN1cnJlbnRseSB1c2VkIGNhY2hlZCBlbnRyaWVzIGlu
IHRjX3Nsb3RzXy4gIFRoaXMgdmFyaWFibGUgaXMKLSAgLy8gdXBkYXRlZCB1bmRlciBhIGxvY2sg
YnV0IGNhbiBiZSByZWFkIHdpdGhvdXQgb25lLgotICBpbnQzMl90IHVzZWRfc2xvdHNfOwotICAv
LyBUaGUgY3VycmVudCBudW1iZXIgb2Ygc2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4gIFRoaXMg
aXMgYW4KLSAgLy8gYWRhcHRpdmUgdmFsdWUgdGhhdCBpcyBpbmNyZWFzZWQgaWYgdGhlcmUgaXMg
bG90cyBvZiB0cmFmZmljCi0gIC8vIG9uIGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KLSAgaW50MzJfdCBj
YWNoZV9zaXplXzsKLX07Ci0KLS8vIFBhZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVs
dGlwbGUgb2YgNjQgYnl0ZXMKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQg
OiBwdWJsaWMgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7Ci0gcHJpdmF0ZToKLSAgY2hhciBw
YWRfWyg2NCAtIChzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCkgJSA2NCkpICUgNjRd
OwogfTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDgxLDIyICsyNTQ2LDIyIEBAIGNsYXNzIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgOgogCiAvLyBDZW50cmFsIGNhY2hlIC0tIGEgY29s
bGVjdGlvbiBvZiBmcmVlLWxpc3RzLCBvbmUgcGVyIHNpemUtY2xhc3MuCiAvLyBXZSBoYXZlIGEg
c2VwYXJhdGUgbG9jayBwZXIgZnJlZS1saXN0IHRvIHJlZHVjZSBjb250ZW50aW9uLgotc3RhdGlj
IFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgY2VudHJhbF9jYWNoZVtrTnVtQ2xhc3Nl
c107CitzdGF0aWMgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQgY2VudHJhbENhY2hlW2tO
dW1DbGFzc2VzXTsKIAogLy8gUGFnZS1sZXZlbCBhbGxvY2F0b3IKLXN0YXRpYyBBbGxvY0FsaWdu
bWVudEludGVnZXIgcGFnZWhlYXBfbWVtb3J5WyhzaXplb2YoVENNYWxsb2NfUGFnZUhlYXApICsg
c2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdlcikgLSAxKSAvIHNpemVvZihBbGxvY0FsaWdubWVu
dEludGVnZXIpXTsKK3N0YXRpYyBBbGxvY0FsaWdubWVudEludGVnZXIgcGFnZWhlYXBNZW1vcnlb
KHNpemVvZihUQ01hbGxvY1BhZ2VIZWFwKSArIHNpemVvZihBbGxvY0FsaWdubWVudEludGVnZXIp
IC0gMSkgLyBzaXplb2YoQWxsb2NBbGlnbm1lbnRJbnRlZ2VyKV07CiBzdGF0aWMgYm9vbCBwaGlu
aXRlZCA9IGZhbHNlOwogCiAvLyBBdm9pZCBleHRyYSBsZXZlbCBvZiBpbmRpcmVjdGlvbiBieSBt
YWtpbmcgInBhZ2VoZWFwIiBiZSBqdXN0IGFuIGFsaWFzCi0vLyBvZiBwYWdlaGVhcF9tZW1vcnku
CisvLyBvZiBwYWdlaGVhcE1lbW9yeS4KIHR5cGVkZWYgdW5pb24gewogICAgIHZvaWQqIG1fbWVt
b3J5OwotICAgIFRDTWFsbG9jX1BhZ2VIZWFwKiBtX3BhZ2VIZWFwOworICAgIFRDTWFsbG9jUGFn
ZUhlYXAqIG1fcGFnZUhlYXA7CiB9IFBhZ2VIZWFwVW5pb247CiAKLXN0YXRpYyBpbmxpbmUgVENN
YWxsb2NfUGFnZUhlYXAqIGdldFBhZ2VIZWFwKCkKK3N0YXRpYyBpbmxpbmUgVENNYWxsb2NQYWdl
SGVhcCogZ2V0UGFnZUhlYXAoKQogewotICAgIFBhZ2VIZWFwVW5pb24gdSA9IHsgJnBhZ2VoZWFw
X21lbW9yeVswXSB9OworICAgIFBhZ2VIZWFwVW5pb24gdSA9IHsgJnBhZ2VoZWFwTWVtb3J5WzBd
IH07CiAgICAgcmV0dXJuIHUubV9wYWdlSGVhcDsKIH0KIApAQCAtMjUwNiw5ICsyNTcxLDkgQEAg
c3RhdGljIGlubGluZSBUQ01hbGxvY19QYWdlSGVhcCogZ2V0UGFnZQogCiAjaWYgSEFWRShESVNQ
QVRDSF9IKSB8fCBPUyhXSU5ET1dTKQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpwZXJpb2Rp
Y1NjYXZlbmdlKCkKK3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6cGVyaW9kaWNTY2F2ZW5nZSgpCiB7
Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBMb2NrKTsKICAgICBwYWdlaGVhcC0+c2NhdmVuZ2UoKTsKIAogICAgIGlm
IChzaG91bGRTY2F2ZW5nZSgpKSB7CkBAIC0yNTE5LDM2ICsyNTg0LDM2IEBAIHZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVuZ2UKICAgICBzdXNwZW5kU2NhdmVuZ2VyKCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2Vy
KCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzaWduYWxTY2F2ZW5nZXIo
KQogewotICAgIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NFUlQocGFn
ZWhlYXBMb2NrLklzSGVsZCgpKTsKICAgICBpZiAoaXNTY2F2ZW5nZXJTdXNwZW5kZWQoKSAmJiBz
aG91bGRTY2F2ZW5nZSgpKQogICAgICAgICBzY2hlZHVsZVNjYXZlbmdlcigpOwogfQogCiAjZWxz
ZQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoKQordm9pZCBUQ01h
bGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVRO
QU1FX05QKQotICBwdGhyZWFkX3NldG5hbWVfbnAoIkphdmFTY3JpcHRDb3JlOiBGYXN0TWFsbG9j
IHNjYXZlbmdlciIpOworICAgIHB0aHJlYWRfc2V0bmFtZV9ucCgiSmF2YVNjcmlwdENvcmU6IEZh
c3RNYWxsb2Mgc2NhdmVuZ2VyIik7CiAjZW5kaWYKIAotICB3aGlsZSAoMSkgewotICAgICAgaWYg
KCFzaG91bGRTY2F2ZW5nZSgpKSB7Ci0gICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtX3Nj
YXZlbmdlTXV0ZXgpOwotICAgICAgICAgIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmUgPSBmYWxzZTsK
LSAgICAgICAgICAvLyBCbG9jayB1bnRpbCB0aGVyZSBhcmUgZW5vdWdoIGZyZWUgY29tbWl0dGVk
IHBhZ2VzIHRvIHJlbGVhc2UgYmFjayB0byB0aGUgc3lzdGVtLgotICAgICAgICAgIHB0aHJlYWRf
Y29uZF93YWl0KCZtX3NjYXZlbmdlQ29uZGl0aW9uLCAmbV9zY2F2ZW5nZU11dGV4KTsKLSAgICAg
ICAgICBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICBwdGhyZWFkX211
dGV4X3VubG9jaygmbV9zY2F2ZW5nZU11dGV4KTsKLSAgICAgIH0KLSAgICAgIHNsZWVwKGtTY2F2
ZW5nZURlbGF5SW5TZWNvbmRzKTsKLSAgICAgIHsKLSAgICAgICAgICBTcGluTG9ja0hvbGRlciBo
KCZwYWdlaGVhcF9sb2NrKTsKLSAgICAgICAgICBwYWdlaGVhcC0+c2NhdmVuZ2UoKTsKLSAgICAg
IH0KLSAgfQorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghc2hvdWxkU2NhdmVuZ2UoKSkg
eworICAgICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtX3NjYXZlbmdlTXV0ZXgpOworICAg
ICAgICAgICAgbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgLy8g
QmxvY2sgdW50aWwgdGhlcmUgYXJlIGVub3VnaCBmcmVlIGNvbW1pdHRlZCBwYWdlcyB0byByZWxl
YXNlIGJhY2sgdG8gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZt
X3NjYXZlbmdlQ29uZGl0aW9uLCAmbV9zY2F2ZW5nZU11dGV4KTsKKyAgICAgICAgICAgIG1fc2Nh
dmVuZ2VUaHJlYWRBY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxv
Y2soJm1fc2NhdmVuZ2VNdXRleCk7CisgICAgICAgIH0KKyAgICAgICAgc2xlZXAoa1NjYXZlbmdl
RGVsYXlJblNlY29uZHMpOworICAgICAgICB7CisgICAgICAgICAgICBTcGluTG9ja0hvbGRlciBo
KCZwYWdlaGVhcExvY2spOworICAgICAgICAgICAgcGFnZWhlYXAtPnNjYXZlbmdlKCk7CisgICAg
ICAgIH0KKyAgICB9CiB9CiAKICNlbmRpZgpAQCAtMjU1OCwxOSArMjYyMywxOSBAQCB2b2lkIFRD
TWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoCiAvLyBJZiBUTFMgaXMgYXZhaWxhYmxl
LCB3ZSBhbHNvIHN0b3JlIGEgY29weQogLy8gb2YgdGhlIHBlci10aHJlYWQgb2JqZWN0IGluIGEg
X190aHJlYWQgdmFyaWFibGUKIC8vIHNpbmNlIF9fdGhyZWFkIHZhcmlhYmxlcyBhcmUgZmFzdGVy
IHRvIHJlYWQKLS8vIHRoYW4gcHRocmVhZF9nZXRzcGVjaWZpYygpLiAgV2Ugc3RpbGwgbmVlZAor
Ly8gdGhhbiBwdGhyZWFkX2dldHNwZWNpZmljKCkuIFdlIHN0aWxsIG5lZWQKIC8vIHB0aHJlYWRf
c2V0c3BlY2lmaWMoKSBiZWNhdXNlIF9fdGhyZWFkCiAvLyB2YXJpYWJsZXMgcHJvdmlkZSBubyB3
YXkgdG8gcnVuIGNsZWFudXAKIC8vIGNvZGUgd2hlbiBhIHRocmVhZCBpcyBkZXN0cm95ZWQuCiAj
aWZkZWYgSEFWRV9UTFMKLXN0YXRpYyBfX3RocmVhZCBUQ01hbGxvY19UaHJlYWRDYWNoZSAqdGhy
ZWFkbG9jYWxfaGVhcDsKK3N0YXRpYyBfX3RocmVhZCBUQ01hbGxvY1RocmVhZENhY2hlICp0aHJl
YWRsb2NhbEhlYXA7CiAjZW5kaWYKLS8vIFRocmVhZC1zcGVjaWZpYyBrZXkuICBJbml0aWFsaXph
dGlvbiBoZXJlIGlzIHNvbWV3aGF0IHRyaWNreQorLy8gVGhyZWFkLXNwZWNpZmljIGtleS4gSW5p
dGlhbGl6YXRpb24gaGVyZSBpcyBzb21ld2hhdCB0cmlja3kKIC8vIGJlY2F1c2Ugc29tZSBMaW51
eCBzdGFydHVwIGNvZGUgaW52b2tlcyBtYWxsb2MoKSBiZWZvcmUgaXQKIC8vIGlzIGluIGEgZ29v
ZCBlbm91Z2ggc3RhdGUgdG8gaGFuZGxlIHB0aHJlYWRfa2V5Y3JlYXRlKCkuCi0vLyBUaGVyZWZv
cmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZF9pbml0ZWQgaXMgc2V0IHRvIHRydWUu
CisvLyBUaGVyZWZvcmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZEluaXRlZCBpcyBz
ZXQgdG8gdHJ1ZS4KIC8vIFVudGlsIHRoZW4sIHdlIHVzZSBhIHNsb3cgcGF0aCB0byBnZXQgdGhl
IGhlYXAgb2JqZWN0Lgotc3RhdGljIGJvb2wgdHNkX2luaXRlZCA9IGZhbHNlOworc3RhdGljIGJv
b2wgdHNkSW5pdGVkID0gZmFsc2U7CiAjaWYgVVNFKFBUSFJFQURfR0VUU1BFQ0lGSUNfRElSRUNU
KQogc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgaGVhcF9rZXkgPSBfX1BUS19GUkFNRVdPUktf
SkFWQVNDUklQVENPUkVfS0VZMDsKICNlbHNlCkBAIC0yNTgwLDcgKzI2NDUsNyBAQCBzdGF0aWMg
cHRocmVhZF9rZXlfdCBoZWFwX2tleTsKIERXT1JEIHRsc0luZGV4ID0gVExTX09VVF9PRl9JTkRF
WEVTOwogI2VuZGlmCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VGhyZWFkSGVhcChU
Q01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
VGhyZWFkSGVhcChUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwKQogewogI2lmIFVTRShQVEhSRUFE
X0dFVFNQRUNJRklDX0RJUkVDVCkKICAgICAvLyBDYW4ndCBoYXZlIHR3byBsaWJyYXJpZXMgYm90
aCBkb2luZyB0aGlzIGluIHRoZSBzYW1lIHByb2Nlc3MsCkBAIC0yNTk5LDExOSArMjY2NCwxMjUg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUaHJlYWRIZWFwKAogfQogCiAvLyBBbGxv
Y2F0b3IgZm9yIHRocmVhZCBoZWFwcwotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9j
X1RocmVhZENhY2hlPiB0aHJlYWRoZWFwX2FsbG9jYXRvcjsKK3N0YXRpYyBQYWdlSGVhcEFsbG9j
YXRvcjxUQ01hbGxvY1RocmVhZENhY2hlPiB0aHJlYWRoZWFwQWxsb2NhdG9yOwogCi0vLyBMaW5r
ZWQgbGlzdCBvZiBoZWFwIG9iamVjdHMuICBQcm90ZWN0ZWQgYnkgcGFnZWhlYXBfbG9jay4KLXN0
YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkX2hlYXBzID0gTlVMTDsKKy8vIExpbmtl
ZCBsaXN0IG9mIGhlYXAgb2JqZWN0cy4gUHJvdGVjdGVkIGJ5IHBhZ2VoZWFwTG9jay4KK3N0YXRp
YyBUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRIZWFwcyA9IDA7CiBzdGF0aWMgaW50IHRocmVh
ZF9oZWFwX2NvdW50ID0gMDsKIAotLy8gT3ZlcmFsbCB0aHJlYWQgY2FjaGUgc2l6ZS4gIFByb3Rl
Y3RlZCBieSBwYWdlaGVhcF9sb2NrLgotc3RhdGljIHNpemVfdCBvdmVyYWxsX3RocmVhZF9jYWNo
ZV9zaXplID0ga0RlZmF1bHRPdmVyYWxsVGhyZWFkQ2FjaGVTaXplOworLy8gT3ZlcmFsbCB0aHJl
YWQgY2FjaGUgc2l6ZS4gUHJvdGVjdGVkIGJ5IHBhZ2VoZWFwTG9jay4KK3N0YXRpYyBzaXplX3Qg
b3ZlcmFsbFRocmVhZENhY2hlc2l6ZSA9IGtEZWZhdWx0T3ZlcmFsbFRocmVhZENhY2hlU2l6ZTsK
IAotLy8gR2xvYmFsIHBlci10aHJlYWQgY2FjaGUgc2l6ZS4gIFdyaXRlcyBhcmUgcHJvdGVjdGVk
IGJ5Ci0vLyBwYWdlaGVhcF9sb2NrLiAgUmVhZHMgYXJlIGRvbmUgd2l0aG91dCBhbnkgbG9ja2lu
Zywgd2hpY2ggc2hvdWxkIGJlCisvLyBHbG9iYWwgcGVyLXRocmVhZCBjYWNoZSBzaXplLiBXcml0
ZXMgYXJlIHByb3RlY3RlZCBieQorLy8gcGFnZWhlYXBMb2NrLiBSZWFkcyBhcmUgZG9uZSB3aXRo
b3V0IGFueSBsb2NraW5nLCB3aGljaCBzaG91bGQgYmUKIC8vIGZpbmUgYXMgbG9uZyBhcyBzaXpl
X3QgY2FuIGJlIHdyaXR0ZW4gYXRvbWljYWxseSBhbmQgd2UgZG9uJ3QgcGxhY2UKIC8vIGludmFy
aWFudHMgYmV0d2VlbiB0aGlzIHZhcmlhYmxlIGFuZCBvdGhlciBwaWVjZXMgb2Ygc3RhdGUuCi1z
dGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBlcl90aHJlYWRfY2FjaGVfc2l6ZSA9IGtNYXhUaHJlYWRD
YWNoZVNpemU7CitzdGF0aWMgdm9sYXRpbGUgc2l6ZV90IHBlclRocmVhZENhY2hlU2l6ZSA9IGtN
YXhUaHJlYWRDYWNoZVNpemU7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ2VudHJhbCBjYWNoZSBpbXBs
ZW1lbnRhdGlvbgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dDo6SW5pdChzaXplX3QgY2wpIHsKLSAgbG9ja18uSW5pdCgpOwotICBzaXplX2NsYXNzXyA9IGNs
OwotICBETExfSW5pdCgmZW1wdHlfKTsKLSAgRExMX0luaXQoJm5vbmVtcHR5Xyk7Ci0gIGNvdW50
ZXJfID0gMDsKLQotICBjYWNoZV9zaXplXyA9IDE7Ci0gIHVzZWRfc2xvdHNfID0gMDsKLSAgQVNT
RVJUKGNhY2hlX3NpemVfIDw9IGtOdW1UcmFuc2ZlckVudHJpZXMpOwotfQotCi12b2lkIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbGVhc2VMaXN0VG9TcGFucyh2b2lkKiBzdGFydCkgewot
ICB3aGlsZSAoc3RhcnQpIHsKLSAgICB2b2lkICpuZXh0ID0gU0xMX05leHQoc3RhcnQpOwotICAg
IFJlbGVhc2VUb1NwYW5zKHN0YXJ0KTsKLSAgICBzdGFydCA9IG5leHQ7Ci0gIH0KK3ZvaWQgVENN
YWxsb2NDZW50cmFsRnJlZUxpc3Q6OkluaXQoc2l6ZV90IGNsKQoreworICAgIGxvY2suSW5pdCgp
OworICAgIHNpemVDbGFzcyA9IGNsOworICAgIERMTEluaXQoJmVtcHR5KTsKKyAgICBETExJbml0
KCZub25lbXB0eSk7CisgICAgY291bnRlciA9IDA7CisKKyAgICBjYWNoZVNpemUgPSAxOworICAg
IHVzZWRTbG90cyA9IDA7CisgICAgQVNTRVJUKGNhY2hlU2l6ZSA8PSBrTnVtVHJhbnNmZXJFbnRy
aWVzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6
OlJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCkgewotICBjb25zdCBQYWdlSUQgcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYmplY3QpID4+IGtQYWdlU2hpZnQ7Ci0gIFNwYW4qIHNw
YW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKLSAgQVNTRVJUKHNwYW4gIT0gTlVMTCk7
Ci0gIEFTU0VSVChzcGFuLT5yZWZjb3VudCA+IDApOwotCi0gIC8vIElmIHNwYW4gaXMgZW1wdHks
IG1vdmUgaXQgdG8gbm9uLWVtcHR5IGxpc3QKLSAgaWYgKHNwYW4tPm9iamVjdHMgPT0gTlVMTCkg
ewotICAgIERMTF9SZW1vdmUoc3Bhbik7Ci0gICAgRExMX1ByZXBlbmQoJm5vbmVtcHR5Xywgc3Bh
bik7Ci0gICAgRXZlbnQoc3BhbiwgJ04nLCAwKTsKLSAgfQordm9pZCBUQ01hbGxvY0NlbnRyYWxG
cmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQqIHN0YXJ0KQoreworICAgIHdoaWxlIChz
dGFydCkgeworICAgICAgICB2b2lkKiBuZXh0ID0gU0xMX05leHQoc3RhcnQpOworICAgICAgICBS
ZWxlYXNlVG9TcGFucyhzdGFydCk7CisgICAgICAgIHN0YXJ0ID0gbmV4dDsKKyAgICB9Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZVRvU3Bh
bnModm9pZCogb2JqZWN0KQoreworICAgIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG9iamVjdCkgPj4ga1BhZ2VTaGlmdDsKKyAgICBTcGFuKiBzcGFuID0gcGFn
ZWhlYXAtPkdldERlc2NyaXB0b3IocCk7CisgICAgQVNTRVJUKHNwYW4pOworICAgIEFTU0VSVChz
cGFuLT5yZWZjb3VudCA+IDApOwogCi0gIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgZXhwZW5z
aXZlLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Ci0gIGlmIChmYWxzZSkgewotICAgIC8v
IENoZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9jY3VyIGluIGxpc3QKLSAgICB1bnNpZ25lZCBn
b3QgPSAwOwotICAgIGZvciAodm9pZCogcCA9IHNwYW4tPm9iamVjdHM7IHAgIT0gTlVMTDsgcCA9
ICooKHZvaWQqKikgcCkpIHsKLSAgICAgIEFTU0VSVChwICE9IG9iamVjdCk7Ci0gICAgICBnb3Qr
KzsKKyAgICAvLyBJZiBzcGFuIGlzIGVtcHR5LCBtb3ZlIGl0IHRvIG5vbi1lbXB0eSBsaXN0Cisg
ICAgaWYgKCFzcGFuLT5vYmplY3RzKSB7CisgICAgICAgIERMTFJlbW92ZShzcGFuKTsKKyAgICAg
ICAgRExMUHJlcGVuZCgmbm9uZW1wdHksIHNwYW4pOworICAgICAgICBFdmVudChzcGFuLCAnTics
IDApOwogICAgIH0KLSAgICBBU1NFUlQoZ290ICsgc3Bhbi0+cmVmY291bnQgPT0KLSAgICAgICAg
ICAgKHNwYW4tPmxlbmd0aDw8a1BhZ2VTaGlmdCkvQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5zaXpl
Y2xhc3MpKTsKLSAgfQogCi0gIGNvdW50ZXJfKys7Ci0gIHNwYW4tPnJlZmNvdW50LS07Ci0gIGlm
IChzcGFuLT5yZWZjb3VudCA9PSAwKSB7Ci0gICAgRXZlbnQoc3BhbiwgJyMnLCAwKTsKLSAgICBj
b3VudGVyXyAtPSAoc3Bhbi0+bGVuZ3RoPDxrUGFnZVNoaWZ0KSAvIEJ5dGVTaXplRm9yQ2xhc3Mo
c3Bhbi0+c2l6ZWNsYXNzKTsKLSAgICBETExfUmVtb3ZlKHNwYW4pOworICAgIC8vIFRoZSBmb2xs
b3dpbmcgY2hlY2sgaXMgZXhwZW5zaXZlLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Cisg
ICAgaWYgKGZhbHNlKSB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgb2JqZWN0IGRvZXMgbm90IG9j
Y3VyIGluIGxpc3QKKyAgICAgICAgdW5zaWduZWQgZ290ID0gMDsKKyAgICAgICAgZm9yICh2b2lk
KiBwID0gc3Bhbi0+b2JqZWN0czsgcDsgcCA9ICooKHZvaWQqKikgcCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVChwICE9IG9iamVjdCk7CisgICAgICAgICAgICBnb3QrKzsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoZ290ICsgc3Bhbi0+cmVmY291bnQgPT0KKyAgICAgICAgICAgICAgICAoc3Bh
bi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5zaXplY2xh
c3MpKTsKKyAgICB9CiAKLSAgICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9w
ZXJhdGluZyBvbiBwYWdlaGVhcAotICAgIGxvY2tfLlVubG9jaygpOwotICAgIHsKLSAgICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgICAgcGFnZWhlYXAtPkRlbGV0ZShz
cGFuKTsKKyAgICBjb3VudGVyKys7CisgICAgc3Bhbi0+cmVmY291bnQtLTsKKyAgICBpZiAoIXNw
YW4tPnJlZmNvdW50KSB7CisgICAgICAgIEV2ZW50KHNwYW4sICcjJywgMCk7CisgICAgICAgIGNv
dW50ZXIgLT0gKHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSAvIEJ5dGVTaXplRm9yQ2xhc3Mo
c3Bhbi0+c2l6ZWNsYXNzKTsKKyAgICAgICAgRExMUmVtb3ZlKHNwYW4pOworCisgICAgICAgIC8v
IFJlbGVhc2UgY2VudHJhbCBsaXN0IGxvY2sgd2hpbGUgb3BlcmF0aW5nIG9uIHBhZ2VoZWFwCisg
ICAgICAgIGxvY2suVW5sb2NrKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgICAgICBwYWdlaGVhcC0+RGVsZXRlKHNwYW4p
OworICAgICAgICB9CisgICAgICAgIGxvY2suTG9jaygpOworICAgIH0gZWxzZSB7CisgICAgICAg
ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0gc3Bhbi0+b2JqZWN0czsKKyAg
ICAgICAgc3Bhbi0+b2JqZWN0cyA9IG9iamVjdDsKICAgICB9Ci0gICAgbG9ja18uTG9jaygpOwot
ICB9IGVsc2UgewotICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0gc3Bh
bi0+b2JqZWN0czsKLSAgICBzcGFuLT5vYmplY3RzID0gb2JqZWN0OwotICB9CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpFdmljdFJhbmRvbVNpemVD
bGFzcygKLSAgICBzaXplX3QgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpIHsKLSAgc3Rh
dGljIGludCByYWNlX2NvdW50ZXIgPSAwOwotICBpbnQgdCA9IHJhY2VfY291bnRlcisrOyAgLy8g
VXBkYXRlZCB3aXRob3V0IGEgbG9jaywgYnV0IHdobyBjYXJlcy4KLSAgaWYgKHQgPj0gc3RhdGlj
X2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKLSAgICB3aGlsZSAodCA+PSBzdGF0aWNfY2FzdDxp
bnQ+KGtOdW1DbGFzc2VzKSkgewotICAgICAgdCAtPSBrTnVtQ2xhc3NlczsKK0FMV0FZU19JTkxJ
TkUgYm9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6
ZV90IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSkKK3sKKyAgICBzdGF0aWMgaW50IHJhY2VD
b3VudGVyID0gMDsKKyAgICBpbnQgdCA9IHJhY2VDb3VudGVyKys7IC8vIFVwZGF0ZWQgd2l0aG91
dCBhIGxvY2ssIGJ1dCB3aG8gY2FyZXMuCisgICAgaWYgKHQgPj0gc3RhdGljX2Nhc3Q8aW50Pihr
TnVtQ2xhc3NlcykpIHsKKyAgICAgICAgd2hpbGUgKHQgPj0gc3RhdGljX2Nhc3Q8aW50PihrTnVt
Q2xhc3NlcykpCisgICAgICAgICAgICB0IC09IGtOdW1DbGFzc2VzOworICAgICAgICByYWNlQ291
bnRlciA9IHQ7CisgICAgfQorICAgIEFTU0VSVCh0ID49IDApOworICAgIEFTU0VSVCh0IDwgc3Rh
dGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOworICAgIGlmICh0ID09IHN0YXRpY19jYXN0PGlu
dD4obG9ja2VkU2l6ZUNsYXNzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBj
ZW50cmFsQ2FjaGVbdF0uU2hyaW5rQ2FjaGUoc3RhdGljX2Nhc3Q8aW50Pihsb2NrZWRTaXplQ2xh
c3MpLCBmb3JjZSk7Cit9CisKK2Jvb2wgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Ok1ha2VDYWNo
ZVNwYWNlKCkKK3sKKyAgICAvLyBJcyB0aGVyZSByb29tIGluIHRoZSBjYWNoZT8KKyAgICBpZiAo
dXNlZFNsb3RzIDwgY2FjaGVTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBDaGVj
ayBpZiB3ZSBjYW4gZXhwYW5kIHRoaXMgY2FjaGU/CisgICAgaWYgKGNhY2hlU2l6ZSA9PSBrTnVt
VHJhbnNmZXJFbnRyaWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gT2ssIHdlJ2xs
IHRyeSB0byBncmFiIGFuIGVudHJ5IGZyb20gc29tZSBvdGhlciBzaXplIGNsYXNzLgorICAgIGlm
IChFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIGZhbHNlKQorICAgICAgICB8fCBFdmlj
dFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIHRydWUpKSB7CisgICAgICAgIC8vIFN1Y2NlZWRl
ZCBpbiBldmljdGluZywgd2UncmUgZ29pbmcgdG8gbWFrZSBvdXIgY2FjaGUgbGFyZ2VyLgorICAg
ICAgICBjYWNoZVNpemUrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJhY2Vf
Y291bnRlciA9IHQ7Ci0gIH0KLSAgQVNTRVJUKHQgPj0gMCk7Ci0gIEFTU0VSVCh0IDwgc3RhdGlj
X2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOwotICBpZiAodCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGxv
Y2tlZF9zaXplX2NsYXNzKSkgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gY2VudHJhbF9jYWNoZVt0
XS5TaHJpbmtDYWNoZShzdGF0aWNfY2FzdDxpbnQ+KGxvY2tlZF9zaXplX2NsYXNzKSwgZm9yY2Up
OwotfQotCi1ib29sIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Ok1ha2VDYWNoZVNwYWNlKCkg
ewotICAvLyBJcyB0aGVyZSByb29tIGluIHRoZSBjYWNoZT8KLSAgaWYgKHVzZWRfc2xvdHNfIDwg
Y2FjaGVfc2l6ZV8pIHJldHVybiB0cnVlOwotICAvLyBDaGVjayBpZiB3ZSBjYW4gZXhwYW5kIHRo
aXMgY2FjaGU/Ci0gIGlmIChjYWNoZV9zaXplXyA9PSBrTnVtVHJhbnNmZXJFbnRyaWVzKSByZXR1
cm4gZmFsc2U7Ci0gIC8vIE9rLCB3ZSdsbCB0cnkgdG8gZ3JhYiBhbiBlbnRyeSBmcm9tIHNvbWUg
b3RoZXIgc2l6ZSBjbGFzcy4KLSAgaWYgKEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNpemVfY2xhc3Nf
LCBmYWxzZSkgfHwKLSAgICAgIEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNpemVfY2xhc3NfLCB0cnVl
KSkgewotICAgIC8vIFN1Y2NlZWRlZCBpbiBldmljdGluZywgd2UncmUgZ29pbmcgdG8gbWFrZSBv
dXIgY2FjaGUgbGFyZ2VyLgotICAgIGNhY2hlX3NpemVfKys7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLSAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogCkBAIC0yNzI2LDY0
OSArMjc5Nyw2ODIgQEAgY2xhc3MgTG9ja0ludmVydGVyIHsKIH07CiB9CiAKLWJvb2wgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50IGxvY2tlZF9zaXplX2NsYXNzLCBi
b29sIGZvcmNlKSB7Ci0gIC8vIFN0YXJ0IHdpdGggYSBxdWljayBjaGVjayB3aXRob3V0IHRha2lu
ZyBhIGxvY2suCi0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSByZXR1cm4gZmFsc2U7Ci0gIC8vIFdl
IGRvbid0IGV2aWN0IGZyb20gYSBmdWxsIGNhY2hlIHVubGVzcyB3ZSBhcmUgJ2ZvcmNpbmcnLgot
ICBpZiAoZm9yY2UgPT0gZmFsc2UgJiYgdXNlZF9zbG90c18gPT0gY2FjaGVfc2l6ZV8pIHJldHVy
biBmYWxzZTsKLQotICAvLyBHcmFiIGxvY2ssIGJ1dCBmaXJzdCByZWxlYXNlIHRoZSBvdGhlciBs
b2NrIGhlbGQgYnkgdGhpcyB0aHJlYWQuICBXZSB1c2UKLSAgLy8gdGhlIGxvY2sgaW52ZXJ0ZXIg
dG8gZW5zdXJlIHRoYXQgd2UgbmV2ZXIgaG9sZCB0d28gc2l6ZSBjbGFzcyBsb2NrcwotICAvLyBj
b25jdXJyZW50bHkuICBUaGF0IGNhbiBjcmVhdGUgYSBkZWFkbG9jayBiZWNhdXNlIHRoZXJlIGlz
IG5vIHdlbGwKLSAgLy8gZGVmaW5lZCBuZXN0aW5nIG9yZGVyLgotICBMb2NrSW52ZXJ0ZXIgbGko
JmNlbnRyYWxfY2FjaGVbbG9ja2VkX3NpemVfY2xhc3NdLmxvY2tfLCAmbG9ja18pOwotICBBU1NF
UlQodXNlZF9zbG90c18gPD0gY2FjaGVfc2l6ZV8pOwotICBBU1NFUlQoMCA8PSBjYWNoZV9zaXpl
Xyk7Ci0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSByZXR1cm4gZmFsc2U7Ci0gIGlmICh1c2VkX3Ns
b3RzXyA9PSBjYWNoZV9zaXplXykgewotICAgIGlmIChmb3JjZSA9PSBmYWxzZSkgcmV0dXJuIGZh
bHNlOwotICAgIC8vIFJlbGVhc2VMaXN0VG9TcGFucyByZWxlYXNlcyB0aGUgbG9jaywgc28gd2Ug
aGF2ZSB0byBtYWtlIGFsbCB0aGUKLSAgICAvLyB1cGRhdGVzIHRvIHRoZSBjZW50cmFsIGxpc3Qg
YmVmb3JlIGNhbGxpbmcgaXQuCi0gICAgY2FjaGVfc2l6ZV8tLTsKLSAgICB1c2VkX3Nsb3RzXy0t
OwotICAgIFJlbGVhc2VMaXN0VG9TcGFucyh0Y19zbG90c19bdXNlZF9zbG90c19dLmhlYWQpOwor
Ym9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50IGxvY2tlZFNpemVD
bGFzcywgYm9vbCBmb3JjZSkKK3sKKyAgICAvLyBTdGFydCB3aXRoIGEgcXVpY2sgY2hlY2sgd2l0
aG91dCB0YWtpbmcgYSBsb2NrLgorICAgIGlmICghY2FjaGVTaXplKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gV2UgZG9uJ3QgZXZpY3QgZnJvbSBhIGZ1bGwgY2FjaGUgdW5sZXNzIHdl
IGFyZSAnZm9yY2luZycuCisgICAgaWYgKCFmb3JjZSAmJiB1c2VkU2xvdHMgPT0gY2FjaGVTaXpl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHcmFiIGxvY2ssIGJ1dCBmaXJzdCBy
ZWxlYXNlIHRoZSBvdGhlciBsb2NrIGhlbGQgYnkgdGhpcyB0aHJlYWQuIFdlIHVzZQorICAgIC8v
IHRoZSBsb2NrIGludmVydGVyIHRvIGVuc3VyZSB0aGF0IHdlIG5ldmVyIGhvbGQgdHdvIHNpemUg
Y2xhc3MgbG9ja3MKKyAgICAvLyBjb25jdXJyZW50bHkuIFRoYXQgY2FuIGNyZWF0ZSBhIGRlYWRs
b2NrIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2VsbAorICAgIC8vIGRlZmluZWQgbmVzdGluZyBvcmRl
ci4KKyAgICBMb2NrSW52ZXJ0ZXIgbGkoJmNlbnRyYWxDYWNoZVtsb2NrZWRTaXplQ2xhc3NdLmxv
Y2ssICZsb2NrKTsKKyAgICBBU1NFUlQodXNlZFNsb3RzIDw9IGNhY2hlU2l6ZSk7CisgICAgQVNT
RVJUKDAgPD0gY2FjaGVTaXplKTsKKyAgICBpZiAoIWNhY2hlU2l6ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICh1c2VkU2xvdHMgPT0gY2FjaGVTaXplKSB7CisgICAgICAgIGlmICgh
Zm9yY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFJlbGVhc2VMaXN0
VG9TcGFucyByZWxlYXNlcyB0aGUgbG9jaywgc28gd2UgaGF2ZSB0byBtYWtlIGFsbCB0aGUKKyAg
ICAgICAgLy8gdXBkYXRlcyB0byB0aGUgY2VudHJhbCBsaXN0IGJlZm9yZSBjYWxsaW5nIGl0Lgor
ICAgICAgICBjYWNoZVNpemUtLTsKKyAgICAgICAgdXNlZFNsb3RzLS07CisgICAgICAgIFJlbGVh
c2VMaXN0VG9TcGFucyh0Y1Nsb3RzW3VzZWRTbG90c10uaGVhZCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBjYWNoZVNpemUtLTsKICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBj
YWNoZV9zaXplXy0tOwotICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUQ01hbGxvY19DZW50cmFs
X0ZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgTikgewot
ICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gIGlmIChOID09IG51bV9vYmplY3RzX3RvX21v
dmVbc2l6ZV9jbGFzc19dICYmCi0gICAgTWFrZUNhY2hlU3BhY2UoKSkgewotICAgIGludCBzbG90
ID0gdXNlZF9zbG90c18rKzsKLSAgICBBU1NFUlQoc2xvdCA+PTApOwotICAgIEFTU0VSVChzbG90
IDwga051bVRyYW5zZmVyRW50cmllcyk7Ci0gICAgVENFbnRyeSAqZW50cnkgPSAmdGNfc2xvdHNf
W3Nsb3RdOwotICAgIGVudHJ5LT5oZWFkID0gc3RhcnQ7Ci0gICAgZW50cnktPnRhaWwgPSBlbmQ7
Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJlbGVhc2VMaXN0VG9TcGFucyhzdGFydCk7Cit2b2lkIFRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5k
LCBpbnQgTikKK3sKKyAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrKTsKKyAgICBpZiAoTiA9PSBu
dW1PYmplY3RzVG9Nb3ZlW3NpemVDbGFzc10KKyAgICAgICAgJiYgTWFrZUNhY2hlU3BhY2UoKSkg
eworICAgICAgICBpbnQgc2xvdCA9IHVzZWRTbG90cysrOworICAgICAgICBBU1NFUlQoc2xvdCA+
PTApOworICAgICAgICBBU1NFUlQoc2xvdCA8IGtOdW1UcmFuc2ZlckVudHJpZXMpOworICAgICAg
ICBUQ0VudHJ5KiBlbnRyeSA9ICZ0Y1Nsb3RzW3Nsb3RdOworICAgICAgICBlbnRyeS0+aGVhZCA9
IHN0YXJ0OworICAgICAgICBlbnRyeS0+dGFpbCA9IGVuZDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSZWxlYXNlTGlzdFRvU3BhbnMoc3RhcnQpOwogfQogCi12b2lkIFRDTWFsbG9jX0Nl
bnRyYWxfRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCwgaW50
ICpOKSB7Ci0gIGludCBudW0gPSAqTjsKLSAgQVNTRVJUKG51bSA+IDApOwotCi0gIFNwaW5Mb2Nr
SG9sZGVyIGgoJmxvY2tfKTsKLSAgaWYgKG51bSA9PSBudW1fb2JqZWN0c190b19tb3ZlW3NpemVf
Y2xhc3NfXSAmJiB1c2VkX3Nsb3RzXyA+IDApIHsKLSAgICBpbnQgc2xvdCA9IC0tdXNlZF9zbG90
c187Ci0gICAgQVNTRVJUKHNsb3QgPj0gMCk7Ci0gICAgVENFbnRyeSAqZW50cnkgPSAmdGNfc2xv
dHNfW3Nsb3RdOwotICAgICpzdGFydCA9IGVudHJ5LT5oZWFkOwotICAgICplbmQgPSBlbnRyeS0+
dGFpbDsKLSAgICByZXR1cm47Ci0gIH0KK3ZvaWQgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlJl
bW92ZVJhbmdlKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCwgaW50ICpOKQoreworICAgIGludCBu
dW0gPSAqTjsKKyAgICBBU1NFUlQobnVtID4gMCk7CiAKLSAgLy8gVE9ETzogUHJlZmV0Y2ggbXVs
dGlwbGUgVENFbnRyaWVzPwotICB2b2lkICp0YWlsID0gRmV0Y2hGcm9tU3BhbnNTYWZlKCk7Ci0g
IGlmICghdGFpbCkgewotICAgIC8vIFdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBtZW1vcnkuCi0g
ICAgKnN0YXJ0ID0gKmVuZCA9IE5VTEw7Ci0gICAgKk4gPSAwOwotICAgIHJldHVybjsKLSAgfQor
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAgIGlmIChudW0gPT0gbnVtT2JqZWN0c1Rv
TW92ZVtzaXplQ2xhc3NdICYmIHVzZWRTbG90cyA+IDApIHsKKyAgICAgICAgaW50IHNsb3QgPSAt
LXVzZWRTbG90czsKKyAgICAgICAgQVNTRVJUKHNsb3QgPj0gMCk7CisgICAgICAgIFRDRW50cnkq
IGVudHJ5ID0gJnRjU2xvdHNbc2xvdF07CisgICAgICAgICpzdGFydCA9IGVudHJ5LT5oZWFkOwor
ICAgICAgICAqZW5kID0gZW50cnktPnRhaWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
U0xMX1NldE5leHQodGFpbCwgTlVMTCk7Ci0gIHZvaWQgKmhlYWQgPSB0YWlsOwotICBpbnQgY291
bnQgPSAxOwotICB3aGlsZSAoY291bnQgPCBudW0pIHsKLSAgICB2b2lkICp0ID0gRmV0Y2hGcm9t
U3BhbnMoKTsKLSAgICBpZiAoIXQpIGJyZWFrOwotICAgIFNMTF9QdXNoKCZoZWFkLCB0KTsKLSAg
ICBjb3VudCsrOwotICB9Ci0gICpzdGFydCA9IGhlYWQ7Ci0gICplbmQgPSB0YWlsOwotICAqTiA9
IGNvdW50OwotfQorICAgIC8vIFRPRE86IFByZWZldGNoIG11bHRpcGxlIFRDRW50cmllcz8KKyAg
ICB2b2lkKiB0YWlsID0gRmV0Y2hGcm9tU3BhbnNTYWZlKCk7CisgICAgaWYgKCF0YWlsKSB7Cisg
ICAgICAgIC8vIFdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBtZW1vcnkuCisgICAgICAgICpzdGFy
dCA9ICplbmQgPSAwOworICAgICAgICAqTiA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
KyAgICBTTExTZXROZXh0KHRhaWwsIDApOworICAgIHZvaWQqIGhlYWQgPSB0YWlsOworICAgIGlu
dCBjb3VudCA9IDE7CisgICAgd2hpbGUgKGNvdW50IDwgbnVtKSB7CisgICAgICAgIHZvaWQqIHQg
PSBGZXRjaEZyb21TcGFucygpOworICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgU0xMUHVzaCgmaGVhZCwgdCk7CisgICAgICAgIGNvdW50Kys7CisgICAgfQorICAg
ICpzdGFydCA9IGhlYWQ7CisgICAgKmVuZCA9IHRhaWw7CisgICAgKk4gPSBjb3VudDsKK30KIAot
dm9pZCogVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKCkgewot
ICB2b2lkICp0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgaWYgKCF0KSB7Ci0gICAgUG9wdWxhdGUo
KTsKLSAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgfQotICByZXR1cm4gdDsKK3ZvaWQqIFRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFuc1NhZmUoKQoreworICAgIHZvaWQq
IHQgPSBGZXRjaEZyb21TcGFucygpOworICAgIGlmICghdCkgeworICAgICAgICBQb3B1bGF0ZSgp
OworICAgICAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKKyAgICB9CisgICAgcmV0dXJuIHQ7CiB9
CiAKLXZvaWQqIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zKCkgewot
ICBpZiAoRExMX0lzRW1wdHkoJm5vbmVtcHR5XykpIHJldHVybiBOVUxMOwotICBTcGFuKiBzcGFu
ID0gbm9uZW1wdHlfLm5leHQ7Cit2b2lkKiBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RmV0Y2hG
cm9tU3BhbnMoKQoreworICAgIGlmIChETExfSXNFbXB0eSgmbm9uZW1wdHkpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBTcGFuKiBzcGFuID0gbm9uZW1wdHkubmV4dDsKIAotICBBU1NFUlQoc3Bh
bi0+b2JqZWN0cyAhPSBOVUxMKTsKLSAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pOwotICBz
cGFuLT5yZWZjb3VudCsrOwotICB2b2lkKiByZXN1bHQgPSBzcGFuLT5vYmplY3RzOwotICBzcGFu
LT5vYmplY3RzID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocmVzdWx0KSk7Ci0gIGlmIChz
cGFuLT5vYmplY3RzID09IE5VTEwpIHsKLSAgICAvLyBNb3ZlIHRvIGVtcHR5IGxpc3QKLSAgICBE
TExfUmVtb3ZlKHNwYW4pOwotICAgIERMTF9QcmVwZW5kKCZlbXB0eV8sIHNwYW4pOwotICAgIEV2
ZW50KHNwYW4sICdFJywgMCk7Ci0gIH0KLSAgY291bnRlcl8tLTsKLSAgcmV0dXJuIHJlc3VsdDsK
KyAgICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyk7CisgICAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNw
YW4pOworICAgIHNwYW4tPnJlZmNvdW50Kys7CisgICAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2Jq
ZWN0czsKKyAgICBzcGFuLT5vYmplY3RzID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocmVz
dWx0KSk7CisgICAgaWYgKCFzcGFuLT5vYmplY3RzKSB7CisgICAgICAgIC8vIE1vdmUgdG8gZW1w
dHkgbGlzdAorICAgICAgICBETExSZW1vdmUoc3Bhbik7CisgICAgICAgIERMTFByZXBlbmQoJmVt
cHR5LCBzcGFuKTsKKyAgICAgICAgRXZlbnQoc3BhbiwgJ0UnLCAwKTsKKyAgICB9CisgICAgY291
bnRlci0tOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIEZldGNoIG1lbW9yeSBmcm9tIHRo
ZSBzeXN0ZW0gYW5kIGFkZCB0byB0aGUgY2VudHJhbCBjYWNoZSBmcmVlbGlzdC4KLUFMV0FZU19J
TkxJTkUgdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpQb3B1bGF0ZSgpIHsKLSAgLy8g
UmVsZWFzZSBjZW50cmFsIGxpc3QgbG9jayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKLSAg
bG9ja18uVW5sb2NrKCk7Ci0gIGNvbnN0IHNpemVfdCBucGFnZXMgPSBjbGFzc190b19wYWdlc1tz
aXplX2NsYXNzX107Ci0KLSAgU3Bhbiogc3BhbjsKLSAgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgo
JnBhZ2VoZWFwX2xvY2spOwotICAgIHNwYW4gPSBwYWdlaGVhcC0+TmV3KG5wYWdlcyk7Ci0gICAg
aWYgKHNwYW4pIHBhZ2VoZWFwLT5SZWdpc3RlclNpemVDbGFzcyhzcGFuLCBzaXplX2NsYXNzXyk7
Ci0gIH0KLSAgaWYgKHNwYW4gPT0gTlVMTCkgeworQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9j
Q2VudHJhbEZyZWVMaXN0OjpQb3B1bGF0ZSgpCit7CisgICAgLy8gUmVsZWFzZSBjZW50cmFsIGxp
c3QgbG9jayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKKyAgICBsb2NrLlVubG9jaygpOwor
ICAgIGNvbnN0IHNpemVfdCBucGFnZXMgPSBjbGFzc190b19wYWdlc1tzaXplQ2xhc3NdOworCisg
ICAgU3Bhbiogc3BhbjsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFw
TG9jayk7CisgICAgICAgIHNwYW4gPSBwYWdlaGVhcC0+TmV3KG5wYWdlcyk7CisgICAgICAgIGlm
IChzcGFuKQorICAgICAgICAgICAgcGFnZWhlYXAtPlJlZ2lzdGVyU2l6ZUNsYXNzKHNwYW4sIHNp
emVDbGFzcyk7CisgICAgfQorICAgIGlmICghc3BhbikgewogI2lmIEhBVkUoRVJSTk9fSCkKLSAg
ICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKKyAgICAgICAgTUVT
U0FHRSgiYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7CiAjZWxpZiBPUyhXSU5ET1dT
KQotICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgOjpHZXRMYXN0RXJyb3Io
KSk7CisgICAgICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgOjpHZXRMYXN0
RXJyb3IoKSk7CiAjZWxzZQotICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAg
ICAgICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogI2VuZGlmCi0gICAgbG9ja18u
TG9jaygpOwotICAgIHJldHVybjsKLSAgfQotICBBU1NFUlRfU1BBTl9DT01NSVRURUQoc3Bhbik7
Ci0gIEFTU0VSVChzcGFuLT5sZW5ndGggPT0gbnBhZ2VzKTsKLSAgLy8gQ2FjaGUgc2l6ZWNsYXNz
IGluZm8gZWFnZXJseS4gIExvY2tpbmcgaXMgbm90IG5lY2Vzc2FyeS4KLSAgLy8gKEluc3RlYWQg
b2YgYmVpbmcgZWFnZXIsIHdlIGNvdWxkIGp1c3QgcmVwbGFjZSBhbnkgc3RhbGUgaW5mbwotICAv
LyBhYm91dCB0aGlzIHNwYW4sIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIG5vIGJldHRlciBpbiBwcmFj
dGljZS4pCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKLSAgICBwYWdl
aGVhcC0+Q2FjaGVTaXplQ2xhc3Moc3Bhbi0+c3RhcnQgKyBpLCBzaXplX2NsYXNzXyk7Ci0gIH0K
LQotICAvLyBTcGxpdCB0aGUgYmxvY2sgaW50byBwaWVjZXMgYW5kIGFkZCB0byB0aGUgZnJlZS1s
aXN0Ci0gIC8vIFRPRE86IGNvbG9yaW5nIG9mIG9iamVjdHMgdG8gYXZvaWQgY2FjaGUgY29uZmxp
Y3RzPwotICB2b2lkKiogdGFpbCA9ICZzcGFuLT5vYmplY3RzOwotICBjaGFyKiBwdHIgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KTsKLSAgY2hhciog
bGltaXQgPSBwdHIgKyAobnBhZ2VzIDw8IGtQYWdlU2hpZnQpOwotICBjb25zdCBzaXplX3Qgc2l6
ZSA9IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZV9jbGFzc18pOwotICBpbnQgbnVtID0gMDsKLSAgY2hh
ciogbnB0cjsKLSAgd2hpbGUgKChucHRyID0gcHRyICsgc2l6ZSkgPD0gbGltaXQpIHsKLSAgICAq
dGFpbCA9IHB0cjsKLSAgICB0YWlsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCoqPihwdHIp
OwotICAgIHB0ciA9IG5wdHI7Ci0gICAgbnVtKys7Ci0gIH0KLSAgQVNTRVJUKHB0ciA8PSBsaW1p
dCk7Ci0gICp0YWlsID0gTlVMTDsKLSAgc3Bhbi0+cmVmY291bnQgPSAwOyAvLyBObyBzdWItb2Jq
ZWN0IGluIHVzZSB5ZXQKLQotICAvLyBBZGQgc3BhbiB0byBsaXN0IG9mIG5vbi1lbXB0eSBzcGFu
cwotICBsb2NrXy5Mb2NrKCk7Ci0gIERMTF9QcmVwZW5kKCZub25lbXB0eV8sIHNwYW4pOwotICBj
b3VudGVyXyArPSBudW07CisgICAgICAgIGxvY2suTG9jaygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFuKTsKKyAgICBBU1NFUlQoc3Bhbi0+
bGVuZ3RoID09IG5wYWdlcyk7CisgICAgLy8gQ2FjaGUgc2l6ZWNsYXNzIGluZm8gZWFnZXJseS4g
TG9ja2luZyBpcyBub3QgbmVjZXNzYXJ5LgorICAgIC8vIChJbnN0ZWFkIG9mIGJlaW5nIGVhZ2Vy
LCB3ZSBjb3VsZCBqdXN0IHJlcGxhY2UgYW55IHN0YWxlIGluZm8KKyAgICAvLyBhYm91dCB0aGlz
IHNwYW4sIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIG5vIGJldHRlciBpbiBwcmFjdGljZS4pCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBucGFnZXM7IGkrKykKKyAgICAgICAgcGFnZWhlYXAtPkNh
Y2hlU2l6ZUNsYXNzKHNwYW4tPnN0YXJ0ICsgaSwgc2l6ZUNsYXNzKTsKKworICAgIC8vIFNwbGl0
IHRoZSBibG9jayBpbnRvIHBpZWNlcyBhbmQgYWRkIHRvIHRoZSBmcmVlLWxpc3QKKyAgICAvLyBU
T0RPOiBjb2xvcmluZyBvZiBvYmplY3RzIHRvIGF2b2lkIGNhY2hlIGNvbmZsaWN0cz8KKyAgICB2
b2lkKiogdGFpbCA9ICZzcGFuLT5vYmplY3RzOworICAgIGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQpOworICAgIGNoYXIqIGxpbWl0
ID0gcHRyICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0KTsKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9
IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZUNsYXNzKTsKKyAgICBpbnQgbnVtID0gMDsKKyAgICBjaGFy
KiBucHRyOworICAgIHdoaWxlICgobnB0ciA9IHB0ciArIHNpemUpIDw9IGxpbWl0KSB7CisgICAg
ICAgICp0YWlsID0gcHRyOworICAgICAgICB0YWlsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9p
ZCoqPihwdHIpOworICAgICAgICAgcHRyID0gbnB0cjsKKyAgICAgICAgbnVtKys7CisgICAgfQor
ICAgIEFTU0VSVChwdHIgPD0gbGltaXQpOworICAgICp0YWlsID0gMDsKKyAgICBzcGFuLT5yZWZj
b3VudCA9IDA7IC8vIE5vIHN1Yi1vYmplY3QgaW4gdXNlIHlldAorCisgICAgLy8gQWRkIHNwYW4g
dG8gbGlzdCBvZiBub24tZW1wdHkgc3BhbnMKKyAgICBsb2NrLkxvY2soKTsKKyAgICBETExQcmVw
ZW5kKCZub25lbXB0eSwgc3Bhbik7CisgICAgY291bnRlciArPSBudW07CiB9CiAKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gVENNYWxsb2NfVGhyZWFkQ2FjaGUgaW1wbGVtZW50YXRpb24KKy8vIFRDTWFsbG9j
VGhyZWFkQ2FjaGUgaW1wbGVtZW50YXRpb24KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxpbmUgYm9vbCBU
Q01hbGxvY19UaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlvbihzaXplX3QgaykgewotICBpZiAo
Ynl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsKLSAgICBQaWNrTmV4dFNhbXBsZShrKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBieXRlc191bnRpbF9zYW1wbGVfIC09IGs7Citp
bmxpbmUgYm9vbCBUQ01hbGxvY1RocmVhZENhY2hlOjpTYW1wbGVBbGxvY2F0aW9uKHNpemVfdCBr
KQoreworICAgIGlmIChieXRlc1VudGlsU2FtcGxlIDwgaykgeworICAgICAgICBQaWNrTmV4dFNh
bXBsZShrKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGJ5dGVzVW50aWxTYW1w
bGUgLT0gazsKICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotdm9pZCBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6SW5pdChUaHJlYWRJZGVudGlmaWVyIHRpZCkgewotICBzaXplXyA9IDA7Ci0gIG5l
eHRfID0gTlVMTDsKLSAgcHJldl8gPSBOVUxMOwotICB0aWRfICA9IHRpZDsKLSAgaW5fc2V0c3Bl
Y2lmaWNfID0gZmFsc2U7Ci0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3Nlczsg
KytjbCkgewotICAgIGxpc3RfW2NsXS5Jbml0KCk7Ci0gIH0KLQotICAvLyBJbml0aWFsaXplIFJO
RyAtLSBydW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29kIHZhbHVlcwotICBieXRlc191bnRp
bF9zYW1wbGVfID0gMDsKLSAgcm5kXyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4odGhpcykpOwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsr
KSB7Ci0gICAgUGlja05leHRTYW1wbGUoc3RhdGljX2Nhc3Q8c2l6ZV90PihGTEFHU190Y21hbGxv
Y19zYW1wbGVfcGFyYW1ldGVyICogMikpOwotICB9CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFk
Q2FjaGU6OkNsZWFudXAoKSB7Ci0gIC8vIFB1dCB1bnVzZWQgbWVtb3J5IGJhY2sgaW50byBjZW50
cmFsIGNhY2hlCi0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkg
ewotICAgIGlmIChsaXN0X1tjbF0ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICBSZWxlYXNlVG9DZW50
cmFsQ2FjaGUoY2wsIGxpc3RfW2NsXS5sZW5ndGgoKSk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQpCit7CisgICAgc2l6ZSA9IDA7CisgICAgbmV4
dCA9IDA7CisgICAgcHJldiA9IDA7CisgICAgdGlkICA9IHRpZDsKKyAgICBpblNldHNwZWNpZmlj
ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2Ns
KQorICAgICAgICBsaXN0W2NsXS5Jbml0KCk7CisKKyAgICAvLyBJbml0aWFsaXplIFJORyAtLSBy
dW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29kIHZhbHVlcworICAgIGJ5dGVzVW50aWxTYW1w
bGUgPSAwOworICAgIHJuZCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4odGhpcykpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspCisg
ICAgICAgIFBpY2tOZXh0U2FtcGxlKHN0YXRpY19jYXN0PHNpemVfdD4oRkxBR1NfdGNtYWxsb2Nf
c2FtcGxlX3BhcmFtZXRlciAqIDIpKTsKK30KKwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpD
bGVhbnVwKCkKK3sKKyAgICAvLyBQdXQgdW51c2VkIG1lbW9yeSBiYWNrIGludG8gY2VudHJhbCBj
YWNoZQorICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkKKyAg
ICAgICAgaWYgKGxpc3RbY2xdLmxlbmd0aCgpID4gMCkKKyAgICAgICAgICAgIFJlbGVhc2VUb0Nl
bnRyYWxDYWNoZShjbCwgbGlzdFtjbF0ubGVuZ3RoKCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkFsbG9jYXRlKHNpemVfdCBzaXplKQoreworICAgIEFT
U0VSVChzaXplIDw9IGtNYXhTaXplKTsKKyAgICBjb25zdCBzaXplX3QgY2wgPSBTaXplQ2xhc3Mo
c2l6ZSk7CisgICAgRnJlZUxpc3QqIHBMaXN0ID0gJmxpc3RbY2xdOworICAgIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworICAgIGlmIChwTGlzdC0+ZW1wdHko
KSkgeworICAgICAgICBGZXRjaEZyb21DZW50cmFsQ2FjaGUoY2wsIGFsbG9jYXRpb25TaXplKTsK
KyAgICAgICAgaWYgKHBMaXN0LT5lbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkFs
bG9jYXRlKHNpemVfdCBzaXplKSB7Ci0gIEFTU0VSVChzaXplIDw9IGtNYXhTaXplKTsKLSAgY29u
c3Qgc2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOwotICBGcmVlTGlzdCogbGlzdCA9ICZsaXN0
X1tjbF07Ci0gIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwot
ICBpZiAobGlzdC0+ZW1wdHkoKSkgewotICAgIEZldGNoRnJvbUNlbnRyYWxDYWNoZShjbCwgYWxs
b2NhdGlvblNpemUpOwotICAgIGlmIChsaXN0LT5lbXB0eSgpKSByZXR1cm4gTlVMTDsKLSAgfQot
ICBzaXplXyAtPSBhbGxvY2F0aW9uU2l6ZTsKLSAgcmV0dXJuIGxpc3QtPlBvcCgpOworICAgIHNp
emUgLT0gYWxsb2NhdGlvblNpemU7CisgICAgcmV0dXJuIHBMaXN0LT5Qb3AoKTsKIH0KIAotaW5s
aW5lIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXpl
X3QgY2wpIHsKLSAgc2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gIEZyZWVMaXN0KiBs
aXN0ID0gJmxpc3RfW2NsXTsKLSAgbGlzdC0+UHVzaChwdHIpOwotICAvLyBJZiBlbm91Z2ggZGF0
YSBpcyBmcmVlLCBwdXQgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKLSAgaWYgKGxpc3QtPmxlbmd0
aCgpID4ga01heEZyZWVMaXN0TGVuZ3RoKSB7Ci0gICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNs
LCBudW1fb2JqZWN0c190b19tb3ZlW2NsXSk7Ci0gIH0KLSAgaWYgKHNpemVfID49IHBlcl90aHJl
YWRfY2FjaGVfc2l6ZSkgU2NhdmVuZ2UoKTsKK2lubGluZSB2b2lkIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3QgY2wpCit7CisgICAgc2l6ZSArPSBCeXRl
U2l6ZUZvckNsYXNzKGNsKTsKKyAgICBGcmVlTGlzdCogcExpc3QgPSAmbGlzdFtjbF07CisgICAg
cExpc3QtPlB1c2gocHRyKTsKKyAgICAvLyBJZiBlbm91Z2ggZGF0YSBpcyBmcmVlLCBwdXQgYmFj
ayBpbnRvIGNlbnRyYWwgY2FjaGUKKyAgICBpZiAocExpc3QtPmxlbmd0aCgpID4ga01heEZyZWVM
aXN0TGVuZ3RoKQorICAgICAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIG51bU9iamVjdHNU
b01vdmVbY2xdKTsKKyAgICBpZiAoc2l6ZSA+PSBwZXJUaHJlYWRDYWNoZVNpemUpCisgICAgICAg
IFNjYXZlbmdlKCk7CiB9CiAKIC8vIFJlbW92ZSBzb21lIG9iamVjdHMgb2YgY2xhc3MgImNsIiBm
cm9tIGNlbnRyYWwgY2FjaGUgYW5kIGFkZCB0byB0aHJlYWQgaGVhcAotQUxXQVlTX0lOTElORSB2
b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUoc2l6ZV90IGNs
LCBzaXplX3QgYWxsb2NhdGlvblNpemUpIHsKLSAgaW50IGZldGNoX2NvdW50ID0gbnVtX29iamVj
dHNfdG9fbW92ZVtjbF07Ci0gIHZvaWQgKnN0YXJ0LCAqZW5kOwotICBjZW50cmFsX2NhY2hlW2Ns
XS5SZW1vdmVSYW5nZSgmc3RhcnQsICZlbmQsICZmZXRjaF9jb3VudCk7Ci0gIGxpc3RfW2NsXS5Q
dXNoUmFuZ2UoZmV0Y2hfY291bnQsIHN0YXJ0LCBlbmQpOwotICBzaXplXyArPSBhbGxvY2F0aW9u
U2l6ZSAqIGZldGNoX2NvdW50OworQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU6OkZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2wsIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSkKK3sKKyAgICBpbnQgZmV0Y2hDb3VudCA9IG51bU9iamVjdHNUb01vdmVbY2xdOworICAgIHZv
aWQqIHN0YXJ0OworICAgIHZvaWQqIGVuZDsKKyAgICBjZW50cmFsQ2FjaGVbY2xdLlJlbW92ZVJh
bmdlKCZzdGFydCwgJmVuZCwgJmZldGNoQ291bnQpOworICAgIGxpc3RbY2xdLlB1c2hSYW5nZShm
ZXRjaENvdW50LCBzdGFydCwgZW5kKTsKKyAgICBzaXplICs9IGFsbG9jYXRpb25TaXplICogZmV0
Y2hDb3VudDsKIH0KIAogLy8gUmVtb3ZlIHNvbWUgb2JqZWN0cyBvZiBjbGFzcyAiY2wiIGZyb20g
dGhyZWFkIGhlYXAgYW5kIGFkZCB0byBjZW50cmFsIGNhY2hlCi1pbmxpbmUgdm9pZCBUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgaW50IE4pIHsK
LSAgQVNTRVJUKE4gPiAwKTsKLSAgRnJlZUxpc3QqIHNyYyA9ICZsaXN0X1tjbF07Ci0gIGlmIChO
ID4gc3JjLT5sZW5ndGgoKSkgTiA9IHNyYy0+bGVuZ3RoKCk7Ci0gIHNpemVfIC09IE4qQnl0ZVNp
emVGb3JDbGFzcyhjbCk7Ci0KLSAgLy8gV2UgcmV0dXJuIHByZXBhY2thZ2VkIGNoYWlucyBvZiB0
aGUgY29ycmVjdCBzaXplIHRvIHRoZSBjZW50cmFsIGNhY2hlLgotICAvLyBUT0RPOiBVc2UgdGhl
IHNhbWUgZm9ybWF0IGludGVybmFsbHkgaW4gdGhlIHRocmVhZCBjYWNoZXM/Ci0gIGludCBiYXRj
aF9zaXplID0gbnVtX29iamVjdHNfdG9fbW92ZVtjbF07Ci0gIHdoaWxlIChOID4gYmF0Y2hfc2l6
ZSkgewotICAgIHZvaWQgKnRhaWwsICpoZWFkOwotICAgIHNyYy0+UG9wUmFuZ2UoYmF0Y2hfc2l6
ZSwgJmhlYWQsICZ0YWlsKTsKLSAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShoZWFk
LCB0YWlsLCBiYXRjaF9zaXplKTsKLSAgICBOIC09IGJhdGNoX3NpemU7Ci0gIH0KLSAgdm9pZCAq
dGFpbCwgKmhlYWQ7Ci0gIHNyYy0+UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWlsKTsKLSAgY2VudHJh
bF9jYWNoZVtjbF0uSW5zZXJ0UmFuZ2UoaGVhZCwgdGFpbCwgTik7CitpbmxpbmUgdm9pZCBUQ01h
bGxvY1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBpbnQgTikK
K3sKKyAgICBBU1NFUlQoTiA+IDApOworICAgIEZyZWVMaXN0KiBzcmMgPSAmbGlzdFtjbF07Cisg
ICAgaWYgKE4gPiBzcmMtPmxlbmd0aCgpKQorICAgICAgICBOID0gc3JjLT5sZW5ndGgoKTsKKyAg
ICBzaXplIC09IE4qQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisKKyAgICAvLyBXZSByZXR1cm4gcHJl
cGFja2FnZWQgY2hhaW5zIG9mIHRoZSBjb3JyZWN0IHNpemUgdG8gdGhlIGNlbnRyYWwgY2FjaGUu
CisgICAgLy8gVE9ETzogVXNlIHRoZSBzYW1lIGZvcm1hdCBpbnRlcm5hbGx5IGluIHRoZSB0aHJl
YWQgY2FjaGVzPworICAgIGludCBiYXRjaFNpemUgPSBudW1PYmplY3RzVG9Nb3ZlW2NsXTsKKyAg
ICB3aGlsZSAoTiA+IGJhdGNoU2l6ZSkgeworICAgICAgICB2b2lkKiB0YWlsOworICAgICAgICB2
b2lkKiBoZWFkOworICAgICAgICBzcmMtPlBvcFJhbmdlKGJhdGNoU2l6ZSwgJmhlYWQsICZ0YWls
KTsKKyAgICAgICAgY2VudHJhbENhY2hlW2NsXS5JbnNlcnRSYW5nZShoZWFkLCB0YWlsLCBiYXRj
aFNpemUpOworICAgICAgICBOIC09IGJhdGNoU2l6ZTsKKyAgICB9CisgICAgdm9pZCogdGFpbDsK
KyAgICB2b2lkKiBoZWFkOworICAgIHNyYy0+UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWlsKTsKKyAg
ICBjZW50cmFsQ2FjaGVbY2xdLkluc2VydFJhbmdlKGhlYWQsIHRhaWwsIE4pOwogfQogCiAvLyBS
ZWxlYXNlIGlkbGUgbWVtb3J5IHRvIHRoZSBjZW50cmFsIGNhY2hlCi1pbmxpbmUgdm9pZCBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6U2NhdmVuZ2UoKSB7Ci0gIC8vIElmIHRoZSBsb3ctd2F0ZXIgbWFy
ayBmb3IgdGhlIGZyZWUgbGlzdCBpcyBMLCBpdCBtZWFucyB3ZSB3b3VsZAotICAvLyBub3QgaGF2
ZSBoYWQgdG8gYWxsb2NhdGUgYW55dGhpbmcgZnJvbSB0aGUgY2VudHJhbCBjYWNoZSBldmVuIGlm
Ci0gIC8vIHdlIGhhZCByZWR1Y2VkIHRoZSBmcmVlIGxpc3Qgc2l6ZSBieSBMLiAgV2UgYWltIHRv
IGdldCBjbG9zZXIgdG8KLSAgLy8gdGhhdCBzaXR1YXRpb24gYnkgZHJvcHBpbmcgTC8yIG5vZGVz
IGZyb20gdGhlIGZyZWUgbGlzdC4gIFRoaXMKLSAgLy8gbWF5IG5vdCByZWxlYXNlIG11Y2ggbWVt
b3J5LCBidXQgaWYgc28gd2Ugd2lsbCBjYWxsIHNjYXZlbmdlIGFnYWluCi0gIC8vIHByZXR0eSBz
b29uIGFuZCB0aGUgbG93LXdhdGVyIG1hcmtzIHdpbGwgYmUgaGlnaCBvbiB0aGF0IGNhbGwuCi0g
IC8vaW50NjQgc3RhcnQgPSBDeWNsZUNsb2NrOjpOb3coKTsKLQotICBmb3IgKHNpemVfdCBjbCA9
IDA7IGNsIDwga051bUNsYXNzZXM7IGNsKyspIHsKLSAgICBGcmVlTGlzdCogbGlzdCA9ICZsaXN0
X1tjbF07Ci0gICAgY29uc3QgaW50IGxvd21hcmsgPSBsaXN0LT5sb3d3YXRlcm1hcmsoKTsKLSAg
ICBpZiAobG93bWFyayA+IDApIHsKLSAgICAgIGNvbnN0IGludCBkcm9wID0gKGxvd21hcmsgPiAx
KSA/IGxvd21hcmsvMiA6IDE7Ci0gICAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIGRyb3Ap
OwotICAgIH0KLSAgICBsaXN0LT5jbGVhcl9sb3d3YXRlcm1hcmsoKTsKLSAgfQotCi0gIC8vaW50
NjQgZmluaXNoID0gQ3ljbGVDbG9jazo6Tm93KCk7Ci0gIC8vQ3ljbGVUaW1lciBjdDsKLSAgLy9N
RVNTQUdFKCJHQzogJS4wZiBuc1xuIiwgY3QuQ3ljbGVzVG9Vc2VjKGZpbmlzaC1zdGFydCkqMTAw
MC4wKTsKLX0KLQotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUoc2l6
ZV90IGspIHsKLSAgLy8gTWFrZSBuZXh0ICJyYW5kb20iIG51bWJlcgotICAvLyB4XjMyK3heMjIr
eF4yK3heMSsxIGlzIGEgcHJpbWl0aXZlIHBvbHlub21pYWwgZm9yIHJhbmRvbSBudW1iZXJzCi0g
IHN0YXRpYyBjb25zdCB1aW50MzJfdCBrUG9seSA9ICgxIDw8IDIyKSB8ICgxIDw8IDIpIHwgKDEg
PDwgMSkgfCAoMSA8PCAwKTsKLSAgdWludDMyX3QgciA9IHJuZF87Ci0gIHJuZF8gPSAociA8PCAx
KSBeICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocikgPj4gMzEpICYga1BvbHkpOwotCi0gIC8vIE5l
eHQgcG9pbnQgaXMgInJuZF8gJSAoc2FtcGxlX3BlcmlvZCkiLiAgSS5lLiwgYXZlcmFnZQotICAv
LyBpbmNyZW1lbnQgaXMgInNhbXBsZV9wZXJpb2QvMiIuCi0gIGNvbnN0IGludCBmbGFnX3ZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyKTsKLSAg
c3RhdGljIGludCBsYXN0X2ZsYWdfdmFsdWUgPSAtMTsKLQotICBpZiAoZmxhZ192YWx1ZSAhPSBs
YXN0X2ZsYWdfdmFsdWUpIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZzYW1wbGVfcGVyaW9kX2xv
Y2spOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCAoc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YocHJpbWVzX2xpc3QpL3NpemVvZihwcmltZXNfbGlzdFswXSkpIC0gMSk7IGkrKykgewot
ICAgICAgaWYgKHByaW1lc19saXN0W2ldID49IGZsYWdfdmFsdWUpIHsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9CitpbmxpbmUgdm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpTY2F2ZW5nZSgpCit7
CisgICAgLy8gSWYgdGhlIGxvdy13YXRlciBtYXJrIGZvciB0aGUgZnJlZSBsaXN0IGlzIEwsIGl0
IG1lYW5zIHdlIHdvdWxkCisgICAgLy8gbm90IGhhdmUgaGFkIHRvIGFsbG9jYXRlIGFueXRoaW5n
IGZyb20gdGhlIGNlbnRyYWwgY2FjaGUgZXZlbiBpZgorICAgIC8vIHdlIGhhZCByZWR1Y2VkIHRo
ZSBmcmVlIGxpc3Qgc2l6ZSBieSBMLiBXZSBhaW0gdG8gZ2V0IGNsb3NlciB0bworICAgIC8vIHRo
YXQgc2l0dWF0aW9uIGJ5IGRyb3BwaW5nIEwvMiBub2RlcyBmcm9tIHRoZSBmcmVlIGxpc3QuIFRo
aXMKKyAgICAvLyBtYXkgbm90IHJlbGVhc2UgbXVjaCBtZW1vcnksIGJ1dCBpZiBzbyB3ZSB3aWxs
IGNhbGwgc2NhdmVuZ2UgYWdhaW4KKyAgICAvLyBwcmV0dHkgc29vbiBhbmQgdGhlIGxvdy13YXRl
ciBtYXJrcyB3aWxsIGJlIGhpZ2ggb24gdGhhdCBjYWxsLgorCisgICAgLy8gaW50NjQgc3RhcnQg
PSBDeWNsZUNsb2NrOjpOb3coKTsKKworICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVt
Q2xhc3NlczsgY2wrKykgeworICAgICAgICBGcmVlTGlzdCogcExpc3QgPSAmbGlzdFtjbF07Cisg
ICAgICAgIGNvbnN0IGludCBsb3dtYXJrID0gcExpc3QtPmxvd3dhdGVybWFyaygpOworICAgICAg
ICBpZiAobG93bWFyayA+IDApIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcm9wID0gKGxvd21h
cmsgPiAxKSA/IGxvd21hcmsgLyAyIDogMTsKKyAgICAgICAgICAgIFJlbGVhc2VUb0NlbnRyYWxD
YWNoZShjbCwgZHJvcCk7CisgICAgICAgIH0KKyAgICAgICAgcExpc3QtPmNsZWFyTG93d2F0ZXJt
YXJrKCk7CiAgICAgfQotICAgIHNhbXBsZV9wZXJpb2QgPSBwcmltZXNfbGlzdFtpXTsKLSAgICBs
YXN0X2ZsYWdfdmFsdWUgPSBmbGFnX3ZhbHVlOwotICB9Ci0KLSAgYnl0ZXNfdW50aWxfc2FtcGxl
XyArPSBybmRfICUgc2FtcGxlX3BlcmlvZDsKLQotICBpZiAoayA+IChzdGF0aWNfY2FzdDxzaXpl
X3Q+KC0xKSA+PiAyKSkgewotICAgIC8vIElmIHRoZSB1c2VyIGhhcyBhc2tlZCBmb3IgYSBodWdl
IGFsbG9jYXRpb24gdGhlbiBpdCBpcyBwb3NzaWJsZQotICAgIC8vIGZvciB0aGUgY29kZSBiZWxv
dyB0byBsb29wIGluZmluaXRlbHkuICBKdXN0IHJldHVybiAobm90ZSB0aGF0Ci0gICAgLy8gdGhp
cyB0aHJvd3Mgb2ZmIHRoZSBzYW1wbGluZyBhY2N1cmFjeSBzb21ld2hhdCwgYnV0IGEgdXNlciB3
aG8KLSAgICAvLyBpcyBhbGxvY2F0aW5nIG1vcmUgdGhhbiAxRyBvZiBtZW1vcnkgYXQgYSB0aW1l
IGNhbiBsaXZlIHdpdGggYQotICAgIC8vIG1pbm9yIGluYWNjdXJhY3kgaW4gcHJvZmlsaW5nIG9m
IHNtYWxsIGFsbG9jYXRpb25zLCBhbmQgYWxzbwotICAgIC8vIHdvdWxkIHJhdGhlciBub3Qgd2Fp
dCBmb3IgdGhlIGxvb3AgYmVsb3cgdG8gdGVybWluYXRlKS4KLSAgICByZXR1cm47Ci0gIH0KIAot
ICB3aGlsZSAoYnl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsKLSAgICAvLyBJbmNyZWFzZSBieXRl
c191bnRpbF9zYW1wbGVfIGJ5IGVub3VnaCBhdmVyYWdlIHNhbXBsaW5nIHBlcmlvZHMKLSAgICAv
LyAoc2FtcGxlX3BlcmlvZCA+PiAxKSB0byBhbGxvdyB1cyB0byBzYW1wbGUgcGFzdCB0aGUgY3Vy
cmVudAotICAgIC8vIGFsbG9jYXRpb24uCi0gICAgYnl0ZXNfdW50aWxfc2FtcGxlXyArPSAoc2Ft
cGxlX3BlcmlvZCA+PiAxKTsKLSAgfQotCi0gIGJ5dGVzX3VudGlsX3NhbXBsZV8gLT0gazsKLX0K
KyAgICAvLyBpbnQ2NCBmaW5pc2ggPSBDeWNsZUNsb2NrOjpOb3coKTsKKyAgICAvLyBDeWNsZVRp
bWVyIGN0OworICAgIC8vIE1FU1NBR0UoIkdDOiAlLjBmIG5zXG4iLCBjdC5DeWNsZXNUb1VzZWMo
ZmluaXNoLXN0YXJ0KSoxMDAwLjApOworfQorCit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlBp
Y2tOZXh0U2FtcGxlKHNpemVfdCBrKQoreworICAgIC8vIE1ha2UgbmV4dCAicmFuZG9tIiBudW1i
ZXIKKyAgICAvLyB4XjMyK3heMjIreF4yK3heMSsxIGlzIGEgcHJpbWl0aXZlIHBvbHlub21pYWwg
Zm9yIHJhbmRvbSBudW1iZXJzCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtQb2x5ID0gKDEg
PDwgMjIpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApOworICAgIHVpbnQzMl90IHIg
PSBybmQ7CisgICAgcm5kID0gKHIgPDwgMSkgXiAoKHN0YXRpY19jYXN0PGludDMyX3Q+KHIpID4+
IDMxKSAmIGtQb2x5KTsKKworICAgIC8vIE5leHQgcG9pbnQgaXMgInJuZCAlIChzYW1wbGVfcGVy
aW9kKSIuIEkuZS4sIGF2ZXJhZ2UKKyAgICAvLyBpbmNyZW1lbnQgaXMgInNhbXBsZV9wZXJpb2Qv
MiIuCisgICAgY29uc3QgaW50IGZsYWdWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oRkxBR1NfdGNt
YWxsb2Nfc2FtcGxlX3BhcmFtZXRlcik7CisgICAgc3RhdGljIGludCBsYXN0RmxhZ1ZhbHVlID0g
LTE7CisKKyAgICBpZiAoZmxhZ1ZhbHVlICE9IGxhc3RGbGFnVmFsdWUpIHsKKyAgICAgICAgU3Bp
bkxvY2tIb2xkZXIgaCgmc2FtcGxlX3BlcmlvZF9sb2NrKTsKKyAgICAgICAgaW50IGk7CisgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCAoc3RhdGljX2Nhc3Q8aW50PihzaXplb2YocHJpbWVzTGlzdCkg
LyBzaXplb2YocHJpbWVzTGlzdFswXSkpIC0gMSk7IGkrKykKKyAgICAgICAgICAgIGlmIChwcmlt
ZXNMaXN0W2ldID49IGZsYWdWYWx1ZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
c2FtcGxlX3BlcmlvZCA9IHByaW1lc0xpc3RbaV07CisgICAgICAgIGxhc3RGbGFnVmFsdWUgPSBm
bGFnVmFsdWU7CisgICAgfQorCisgICAgYnl0ZXNVbnRpbFNhbXBsZSArPSBybmQgJSBzYW1wbGVf
cGVyaW9kOworCisgICAgaWYgKGsgPiAoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkgPj4gMikpCisg
ICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBhc2tlZCBmb3IgYSBodWdlIGFsbG9jYXRpb24gdGhl
biBpdCBpcyBwb3NzaWJsZQorICAgICAgICAvLyBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gbG9vcCBp
bmZpbml0ZWx5LiBKdXN0IHJldHVybiAobm90ZSB0aGF0CisgICAgICAgIC8vIHRoaXMgdGhyb3dz
IG9mZiB0aGUgc2FtcGxpbmcgYWNjdXJhY3kgc29tZXdoYXQsIGJ1dCBhIHVzZXIgd2hvCisgICAg
ICAgIC8vIGlzIGFsbG9jYXRpbmcgbW9yZSB0aGFuIDFHIG9mIG1lbW9yeSBhdCBhIHRpbWUgY2Fu
IGxpdmUgd2l0aCBhCisgICAgICAgIC8vIG1pbm9yIGluYWNjdXJhY3kgaW4gcHJvZmlsaW5nIG9m
IHNtYWxsIGFsbG9jYXRpb25zLCBhbmQgYWxzbworICAgICAgICAvLyB3b3VsZCByYXRoZXIgbm90
IHdhaXQgZm9yIHRoZSBsb29wIGJlbG93IHRvIHRlcm1pbmF0ZSkuCisgICAgICAgIHJldHVybjsK
IAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpIHsKLSAgLy8gVGhlcmUg
aXMgYSBzbGlnaHQgcG90ZW50aWFsIHJhY2UgaGVyZSBiZWNhdXNlIG9mIGRvdWJsZS1jaGVja2Vk
Ci0gIC8vIGxvY2tpbmcgaWRpb20uICBIb3dldmVyLCBhcyBsb25nIGFzIHRoZSBwcm9ncmFtIGRv
ZXMgYSBzbWFsbAotICAvLyBhbGxvY2F0aW9uIGJlZm9yZSBzd2l0Y2hpbmcgdG8gbXVsdGktdGhy
ZWFkZWQgbW9kZSwgd2Ugd2lsbCBiZQotICAvLyBmaW5lLiAgV2UgaW5jcmVhc2UgdGhlIGNoYW5j
ZXMgb2YgZG9pbmcgc3VjaCBhIHNtYWxsIGFsbG9jYXRpb24KLSAgLy8gYnkgZG9pbmcgb25lIGlu
IHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgbW9kdWxlX2VudGVyX2V4aXRfaG9vawotICAvLyBvYmpl
Y3QgZGVjbGFyZWQgYmVsb3cuCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwot
ICBpZiAoIXBoaW5pdGVkKSB7CisgICAgd2hpbGUgKGJ5dGVzVW50aWxTYW1wbGUgPCBrKQorICAg
ICAgICAvLyBJbmNyZWFzZSBieXRlc1VudGlsU2FtcGxlIGJ5IGVub3VnaCBhdmVyYWdlIHNhbXBs
aW5nIHBlcmlvZHMKKyAgICAgICAgLy8gKHNhbXBsZV9wZXJpb2QgPj4gMSkgdG8gYWxsb3cgdXMg
dG8gc2FtcGxlIHBhc3QgdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gYWxsb2NhdGlvbi4KKyAgICAg
ICAgYnl0ZXNVbnRpbFNhbXBsZSArPSAoc2FtcGxlX3BlcmlvZCA+PiAxKTsKKworICAgIGJ5dGVz
VW50aWxTYW1wbGUgLT0gazsKK30KKwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0TW9k
dWxlKCkKK3sKKyAgICAvLyBUaGVyZSBpcyBhIHNsaWdodCBwb3RlbnRpYWwgcmFjZSBoZXJlIGJl
Y2F1c2Ugb2YgZG91YmxlLWNoZWNrZWQKKyAgICAvLyBsb2NraW5nIGlkaW9tLiBIb3dldmVyLCBh
cyBsb25nIGFzIHRoZSBwcm9ncmFtIGRvZXMgYSBzbWFsbAorICAgIC8vIGFsbG9jYXRpb24gYmVm
b3JlIHN3aXRjaGluZyB0byBtdWx0aS10aHJlYWRlZCBtb2RlLCB3ZSB3aWxsIGJlCisgICAgLy8g
ZmluZS4gV2UgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgZG9pbmcgc3VjaCBhIHNtYWxsIGFsbG9j
YXRpb24KKyAgICAvLyBieSBkb2luZyBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBtb2R1
bGVfZW50ZXJfZXhpdF9ob29rCisgICAgLy8gb2JqZWN0IGRlY2xhcmVkIGJlbG93LgorICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgaWYgKCFwaGluaXRlZCkgewogI2lm
ZGVmIFdURl9DSEFOR0VTCi0gICAgSW5pdFRTRCgpOworICAgICAgICBJbml0VFNEKCk7CiAjZW5k
aWYKLSAgICBJbml0U2l6ZUNsYXNzZXMoKTsKLSAgICB0aHJlYWRoZWFwX2FsbG9jYXRvci5Jbml0
KCk7Ci0gICAgc3Bhbl9hbGxvY2F0b3IuSW5pdCgpOwotICAgIHNwYW5fYWxsb2NhdG9yLk5ldygp
OyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCi0gICAgc3Bhbl9hbGxvY2F0b3IuTmV3KCk7IC8v
IFJlZHVjZSBjYWNoZSBjb25mbGljdHMKLSAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5Jbml0KCk7
Ci0gICAgRExMX0luaXQoJnNhbXBsZWRfb2JqZWN0cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrTnVtQ2xhc3NlczsgKytpKSB7Ci0gICAgICBjZW50cmFsX2NhY2hlW2ldLkluaXQoaSk7
Ci0gICAgfQotICAgIHBhZ2VoZWFwLT5pbml0KCk7Ci0gICAgcGhpbml0ZWQgPSAxOworICAgICAg
ICBJbml0U2l6ZUNsYXNzZXMoKTsKKyAgICAgICAgdGhyZWFkaGVhcEFsbG9jYXRvci5Jbml0KCk7
CisgICAgICAgIHNwYW5BbGxvY2F0b3IuSW5pdCgpOworICAgICAgICBzcGFuQWxsb2NhdG9yLk5l
dygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCisgICAgICAgIHNwYW5BbGxvY2F0b3IuTmV3
KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKKyAgICAgICAgc3RhY2t0cmFjZV9hbGxvY2F0
b3IuSW5pdCgpOworICAgICAgICBETExJbml0KCZzYW1wbGVkT2JqZWN0cyk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwga051bUNsYXNzZXM7ICsraSkKKyAgICAgICAgICAgIGNlbnRy
YWxDYWNoZVtpXS5Jbml0KGkpOworICAgICAgICBwYWdlaGVhcC0+aW5pdCgpOworICAgICAgICBw
aGluaXRlZCA9IDE7CiAjaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQotICAg
IEZhc3RNYWxsb2Nab25lOjppbml0KCk7CisgICAgICAgIEZhc3RNYWxsb2Nab25lOjppbml0KCk7
CiAjZW5kaWYKLSAgfQorICAgIH0KIH0KIAotaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBU
Q01hbGxvY19UaHJlYWRDYWNoZTo6TmV3SGVhcChUaHJlYWRJZGVudGlmaWVyIHRpZCkgewotICAv
LyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0byB0aGUgbGlua2VkIGxpc3QKLSAgVENNYWxs
b2NfVGhyZWFkQ2FjaGUgKmhlYXAgPSB0aHJlYWRoZWFwX2FsbG9jYXRvci5OZXcoKTsKLSAgaGVh
cC0+SW5pdCh0aWQpOwotICBoZWFwLT5uZXh0XyA9IHRocmVhZF9oZWFwczsKLSAgaGVhcC0+cHJl
dl8gPSBOVUxMOwotICBpZiAodGhyZWFkX2hlYXBzICE9IE5VTEwpIHRocmVhZF9oZWFwcy0+cHJl
dl8gPSBoZWFwOwotICB0aHJlYWRfaGVhcHMgPSBoZWFwOwotICB0aHJlYWRfaGVhcF9jb3VudCsr
OwotICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKLSAgcmV0dXJuIGhlYXA7CitpbmxpbmUg
VENNYWxsb2NUaHJlYWRDYWNoZSogVENNYWxsb2NUaHJlYWRDYWNoZTo6TmV3SGVhcChUaHJlYWRJ
ZGVudGlmaWVyIHRpZCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIGhlYXAgYW5kIGFkZCBpdCB0byB0
aGUgbGlua2VkIGxpc3QKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwID0gdGhyZWFkaGVh
cEFsbG9jYXRvci5OZXcoKTsKKyAgICBoZWFwLT5Jbml0KHRpZCk7CisgICAgaGVhcC0+bmV4dCA9
IHRocmVhZEhlYXBzOworICAgIGhlYXAtPnByZXYgPSAwOworICAgIGlmICh0aHJlYWRIZWFwcykK
KyAgICAgICAgdGhyZWFkSGVhcHMtPnByZXYgPSBoZWFwOworICAgIHRocmVhZEhlYXBzID0gaGVh
cDsKKyAgICB0aHJlYWRfaGVhcF9jb3VudCsrOworICAgIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6
ZSgpOworICAgIHJldHVybiBoZWFwOwogfQogCi1pbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUq
IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRUaHJlYWRIZWFwKCkgeworaW5saW5lIFRDTWFsbG9j
VGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldFRocmVhZEhlYXAoKQorewogI2lm
ZGVmIEhBVkVfVExTCiAgICAgLy8gX190aHJlYWQgaXMgZmFzdGVyLCBidXQgb25seSB3aGVuIHRo
ZSBrZXJuZWwgc3VwcG9ydHMgaXQKLSAgaWYgKEtlcm5lbFN1cHBvcnRzVExTKCkpCi0gICAgcmV0
dXJuIHRocmVhZGxvY2FsX2hlYXA7CisgICAgaWYgKEtlcm5lbFN1cHBvcnRzVExTKCkpCisgICAg
ICAgIHJldHVybiB0aHJlYWRsb2NhbEhlYXA7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KFRsc0dldFZhbHVlKHRsc0luZGV4
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRDTWFsbG9jVGhyZWFkQ2FjaGUqPihUbHNHZXRW
YWx1ZSh0bHNJbmRleCkpOwogI2Vsc2UKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VENNYWxsb2Nf
VGhyZWFkQ2FjaGUqPihwdGhyZWFkX2dldHNwZWNpZmljKGhlYXBfa2V5KSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRDTWFsbG9jVGhyZWFkQ2FjaGUqPihwdGhyZWFkX2dldHNwZWNpZmljKGhl
YXBfa2V5KSk7CiAjZW5kaWYKIH0KIAotaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKSB7Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBw
dHIgPSBOVUxMOwotICBpZiAoIXRzZF9pbml0ZWQpIHsKLSAgICBJbml0TW9kdWxlKCk7Ci0gIH0g
ZWxzZSB7Ci0gICAgcHRyID0gR2V0VGhyZWFkSGVhcCgpOwotICB9Ci0gIGlmIChwdHIgPT0gTlVM
TCkgcHRyID0gQ3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpOwotICByZXR1cm4gcHRyOworaW5saW5l
IFRDTWFsbG9jVGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlKCkKK3sK
KyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBwdHIgPSAwOworICAgIGlmICghdHNkSW5pdGVkKQor
ICAgICAgICBJbml0TW9kdWxlKCk7CisgICAgZWxzZQorICAgICAgICBwdHIgPSBHZXRUaHJlYWRI
ZWFwKCk7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHB0ciA9IENyZWF0ZUNhY2hlSWZOZWNlc3Nh
cnkoKTsKKyAgICByZXR1cm4gcHRyOwogfQogCi0vLyBJbiBkZWxldGlvbiBwYXRocywgd2UgZG8g
bm90IHRyeSB0byBjcmVhdGUgYSB0aHJlYWQtY2FjaGUuICBUaGlzIGlzCisvLyBJbiBkZWxldGlv
biBwYXRocywgd2UgZG8gbm90IHRyeSB0byBjcmVhdGUgYSB0aHJlYWQtY2FjaGUuIFRoaXMgaXMK
IC8vIGJlY2F1c2Ugd2UgbWF5IGJlIGluIHRoZSB0aHJlYWQgZGVzdHJ1Y3Rpb24gY29kZSBhbmQg
bWF5IGhhdmUKIC8vIGFscmVhZHkgY2xlYW5lZCB1cCB0aGUgY2FjaGUgZm9yIHRoaXMgdGhyZWFk
LgotaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0
Q2FjaGVJZlByZXNlbnQoKSB7Ci0gIGlmICghdHNkX2luaXRlZCkgcmV0dXJuIE5VTEw7Ci0gIHZv
aWQqIGNvbnN0IHAgPSBHZXRUaHJlYWRIZWFwKCk7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0
PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocCk7CitpbmxpbmUgVENNYWxsb2NUaHJlYWRDYWNoZSog
VENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKQoreworICAgIGlmICghdHNk
SW5pdGVkKQorICAgICAgICByZXR1cm4gMDsKKyAgICB2b2lkKiBjb25zdCBwID0gR2V0VGhyZWFk
SGVhcCgpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRDTWFsbG9jVGhyZWFkQ2FjaGUq
PihwKTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdFRTRCgpIHsKLSAgQVNT
RVJUKCF0c2RfaW5pdGVkKTsKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6SW5pdFRTRCgpCit7
CisgICAgQVNTRVJUKCF0c2RJbml0ZWQpOwogI2lmIFVTRShQVEhSRUFEX0dFVFNQRUNJRklDX0RJ
UkVDVCkKLSAgcHRocmVhZF9rZXlfaW5pdF9ucChoZWFwX2tleSwgRGVzdHJveVRocmVhZENhY2hl
KTsKKyAgICBwdGhyZWFkX2tleV9pbml0X25wKGhlYXBfa2V5LCBEZXN0cm95VGhyZWFkQ2FjaGUp
OwogI2Vsc2UKLSAgcHRocmVhZF9rZXlfY3JlYXRlKCZoZWFwX2tleSwgRGVzdHJveVRocmVhZENh
Y2hlKTsKKyAgICBwdGhyZWFkX2tleV9jcmVhdGUoJmhlYXBfa2V5LCBEZXN0cm95VGhyZWFkQ2Fj
aGUpOwogI2VuZGlmCiAjaWYgT1MoV0lORE9XUykKLSAgdGxzSW5kZXggPSBUbHNBbGxvYygpOwor
ICAgIHRsc0luZGV4ID0gVGxzQWxsb2MoKTsKICNlbmRpZgotICB0c2RfaW5pdGVkID0gdHJ1ZTsK
KyAgICB0c2RJbml0ZWQgPSB0cnVlOwogICAgIAogI2lmICFPUyhXSU5ET1dTKQotICAvLyBXZSBt
YXkgaGF2ZSB1c2VkIGEgZmFrZSBwdGhyZWFkX3QgZm9yIHRoZSBtYWluIHRocmVhZC4gIEZpeCBp
dC4KLSAgcHRocmVhZF90IHplcm87Ci0gIG1lbXNldCgmemVybywgMCwgc2l6ZW9mKHplcm8pKTsK
KyAgICAvLyBXZSBtYXkgaGF2ZSB1c2VkIGEgZmFrZSBwdGhyZWFkX3QgZm9yIHRoZSBtYWluIHRo
cmVhZC4gRml4IGl0LgorICAgIHB0aHJlYWRfdCB6ZXJvOworICAgIG1lbXNldCgmemVybywgMCwg
c2l6ZW9mKHplcm8pKTsKICNlbmRpZgogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBTcGluTG9ja0hv
bGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExv
Y2spOwogI2Vsc2UKLSAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VS
VChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogI2VuZGlmCi0gIGZvciAoVENNYWxsb2NfVGhyZWFk
Q2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7CisgICAg
Zm9yIChUQ01hbGxvY1RocmVhZENhY2hlKiBoID0gdGhyZWFkSGVhcHM7IGg7IGggPSBoLT5uZXh0
KQogI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKGgtPnRpZF8gPT0gMCkgewotICAgICAgaC0+dGlk
XyA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotICAgIH0KKyAgICAgICAgaWYgKCFoLT50aWQpCisg
ICAgICAgICAgICBoLT50aWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICNlbHNlCi0gICAgaWYg
KHB0aHJlYWRfZXF1YWwoaC0+dGlkXywgemVybykpIHsKLSAgICAgIGgtPnRpZF8gPSBwdGhyZWFk
X3NlbGYoKTsKLSAgICB9CisgICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGgtPnRpZCwgemVybykp
CisgICAgICAgICAgICBoLT50aWQgPSBwdGhyZWFkX3NlbGYoKTsKICNlbmRpZgotICB9CiB9CiAK
LVRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJ
Zk5lY2Vzc2FyeSgpIHsKLSAgLy8gSW5pdGlhbGl6ZSBwZXItdGhyZWFkIGRhdGEgaWYgbmVjZXNz
YXJ5Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gTlVMTDsKLSAgewotICAgIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworVENNYWxsb2NUaHJlYWRDYWNoZSogVENNYWxs
b2NUaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpCit7CisgICAgLy8gSW5pdGlh
bGl6ZSBwZXItdGhyZWFkIGRhdGEgaWYgbmVjZXNzYXJ5CisgICAgVENNYWxsb2NUaHJlYWRDYWNo
ZSogaGVhcCA9IDA7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExv
Y2spOwogCiAjaWYgT1MoV0lORE9XUykKLSAgICBEV09SRCBtZTsKLSAgICBpZiAoIXRzZF9pbml0
ZWQpIHsKLSAgICAgIG1lID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgbWUgPSBHZXRDdXJyZW50
VGhyZWFkSWQoKTsKLSAgICB9CisgICAgICAgIERXT1JEIG1lOworICAgICAgICBpZiAoIXRzZElu
aXRlZCkKKyAgICAgICAgICAgIG1lID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWUg
PSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICNlbHNlCi0gICAgLy8gRWFybHkgb24gaW4gZ2xpYmMn
cyBsaWZlLCB3ZSBjYW5ub3QgZXZlbiBjYWxsIHB0aHJlYWRfc2VsZigpCi0gICAgcHRocmVhZF90
IG1lOwotICAgIGlmICghdHNkX2luaXRlZCkgewotICAgICAgbWVtc2V0KCZtZSwgMCwgc2l6ZW9m
KG1lKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgfQor
ICAgICAgICAvLyBFYXJseSBvbiBpbiBnbGliYydzIGxpZmUsIHdlIGNhbm5vdCBldmVuIGNhbGwg
cHRocmVhZF9zZWxmKCkKKyAgICAgICAgcHRocmVhZF90IG1lOworICAgICAgICBpZiAoIXRzZElu
aXRlZCkKKyAgICAgICAgICAgIG1lbXNldCgmbWUsIDAsIHNpemVvZihtZSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtZSA9IHB0aHJlYWRfc2VsZigpOwogI2VuZGlmCiAKLSAgICAvLyBU
aGlzIG1heSBiZSBhIHJlY3Vyc2l2ZSBtYWxsb2MgY2FsbCBmcm9tIHB0aHJlYWRfc2V0c3BlY2lm
aWMoKQotICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIGhlYXAgZm9yIHRoaXMgdGhyZWFkIGhhcyBh
bHJlYWR5IGJlZW4gY3JlYXRlZAotICAgIC8vIGFuZCBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3Qu
ICBTbyB3ZSBzZWFyY2ggZm9yIHRoYXQgZmlyc3QuCi0gICAgZm9yIChUQ01hbGxvY19UaHJlYWRD
YWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAhPSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKKyAgICAg
ICAgLy8gVGhpcyBtYXkgYmUgYSByZWN1cnNpdmUgbWFsbG9jIGNhbGwgZnJvbSBwdGhyZWFkX3Nl
dHNwZWNpZmljKCkKKyAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aGUgaGVhcCBmb3IgdGhpcyB0
aHJlYWQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkCisgICAgICAgIC8vIGFuZCBhZGRlZCB0byB0
aGUgbGlua2VkIGxpc3QuIFNvIHdlIHNlYXJjaCBmb3IgdGhhdCBmaXJzdC4KKyAgICAgICAgZm9y
IChUQ01hbGxvY1RocmVhZENhY2hlKiBoID0gdGhyZWFkSGVhcHM7IGg7IGggPSBoLT5uZXh0KSB7
CiAjaWYgT1MoV0lORE9XUykKLSAgICAgIGlmIChoLT50aWRfID09IG1lKSB7CisgICAgICAgICAg
ICBpZiAoaC0+dGlkID09IG1lKSB7CiAjZWxzZQotICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaC0+
dGlkXywgbWUpKSB7CisgICAgICAgICAgICBpZiAocHRocmVhZF9lcXVhbChoLT50aWQsIG1lKSkg
ewogI2VuZGlmCi0gICAgICAgIGhlYXAgPSBoOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAg
ICB9CisgICAgICAgICAgICAgICAgaGVhcCA9IGg7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmIChoZWFwID09IE5VTEwpIGhlYXAgPSBO
ZXdIZWFwKG1lKTsKLSAgfQorICAgICAgICBpZiAoIWhlYXApCisgICAgICAgICAgICBoZWFwID0g
TmV3SGVhcChtZSk7CisgICAgfQogCi0gIC8vIFdlIGNhbGwgcHRocmVhZF9zZXRzcGVjaWZpYygp
IG91dHNpZGUgdGhlIGxvY2sgYmVjYXVzZSBpdCBtYXkKLSAgLy8gY2FsbCBtYWxsb2MoKSByZWN1
cnNpdmVseS4gIFRoZSByZWN1cnNpdmUgY2FsbCB3aWxsIG5ldmVyIGdldAotICAvLyBoZXJlIGFn
YWluIGJlY2F1c2UgaXQgd2lsbCBmaW5kIHRoZSBhbHJlYWR5IGFsbG9jYXRlZCBoZWFwIGluIHRo
ZQotICAvLyBsaW5rZWQgbGlzdCBvZiBoZWFwcy4KLSAgaWYgKCFoZWFwLT5pbl9zZXRzcGVjaWZp
Y18gJiYgdHNkX2luaXRlZCkgewotICAgIGhlYXAtPmluX3NldHNwZWNpZmljXyA9IHRydWU7Ci0g
ICAgc2V0VGhyZWFkSGVhcChoZWFwKTsKLSAgfQotICByZXR1cm4gaGVhcDsKKyAgICAvLyBXZSBj
YWxsIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBvdXRzaWRlIHRoZSBsb2NrIGJlY2F1c2UgaXQgbWF5
CisgICAgLy8gY2FsbCBtYWxsb2MoKSByZWN1cnNpdmVseS4gVGhlIHJlY3Vyc2l2ZSBjYWxsIHdp
bGwgbmV2ZXIgZ2V0CisgICAgLy8gaGVyZSBhZ2FpbiBiZWNhdXNlIGl0IHdpbGwgZmluZCB0aGUg
YWxyZWFkeSBhbGxvY2F0ZWQgaGVhcCBpbiB0aGUKKyAgICAvLyBsaW5rZWQgbGlzdCBvZiBoZWFw
cy4KKyAgICBpZiAoIWhlYXAtPmluU2V0c3BlY2lmaWMgJiYgdHNkSW5pdGVkKSB7CisgICAgICAg
IGhlYXAtPmluU2V0c3BlY2lmaWMgPSB0cnVlOworICAgICAgICBzZXRUaHJlYWRIZWFwKGhlYXAp
OworICAgIH0KKyAgICByZXR1cm4gaGVhcDsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6QmVjb21lSWRsZSgpIHsKLSAgaWYgKCF0c2RfaW5pdGVkKSByZXR1cm47ICAgICAgICAgICAg
ICAvLyBObyBjYWNoZXMgeWV0Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gR2V0VGhy
ZWFkSGVhcCgpOwotICBpZiAoaGVhcCA9PSBOVUxMKSByZXR1cm47ICAgICAgICAgICAgIC8vIE5v
IHRocmVhZCBjYWNoZSB0byByZW1vdmUKLSAgaWYgKGhlYXAtPmluX3NldHNwZWNpZmljXykgcmV0
dXJuOyAgICAvLyBEbyBub3QgZGlzdHVyYiB0aGUgYWN0aXZlIGNhbGxlcgordm9pZCBUQ01hbGxv
Y1RocmVhZENhY2hlOjpCZWNvbWVJZGxlKCkKK3sKKyAgICBpZiAoIXRzZEluaXRlZCkKKyAgICAg
ICAgcmV0dXJuOyAvLyBObyBjYWNoZXMgeWV0CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVh
cCA9IEdldFRocmVhZEhlYXAoKTsKKyAgICBpZiAoIWhlYXApCisgICAgICAgIHJldHVybjsgLy8g
Tm8gdGhyZWFkIGNhY2hlIHRvIHJlbW92ZQorICAgIGlmIChoZWFwLT5pblNldHNwZWNpZmljKQor
ICAgICAgICByZXR1cm47IC8vIERvIG5vdCBkaXN0dXJiIHRoZSBhY3RpdmUgY2FsbGVyCiAKLSAg
aGVhcC0+aW5fc2V0c3BlY2lmaWNfID0gdHJ1ZTsKLSAgc2V0VGhyZWFkSGVhcChOVUxMKTsKKyAg
ICBoZWFwLT5pblNldHNwZWNpZmljID0gdHJ1ZTsKKyAgICBzZXRUaHJlYWRIZWFwKDApOwogI2lm
ZGVmIEhBVkVfVExTCi0gIC8vIEFsc28gdXBkYXRlIHRoZSBjb3B5IGluIF9fdGhyZWFkCi0gIHRo
cmVhZGxvY2FsX2hlYXAgPSBOVUxMOworICAgIC8vIEFsc28gdXBkYXRlIHRoZSBjb3B5IGluIF9f
dGhyZWFkCisgICAgdGhyZWFkbG9jYWxIZWFwID0gMDsKICNlbmRpZgotICBoZWFwLT5pbl9zZXRz
cGVjaWZpY18gPSBmYWxzZTsKLSAgaWYgKEdldFRocmVhZEhlYXAoKSA9PSBoZWFwKSB7Ci0gICAg
Ly8gU29tZWhvdyBoZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8gbWFs
bG9jCi0gICAgLy8gZnJvbSBwdGhyZWFkX3NldHNwZWNpZmljLiAgV2UgZ2l2ZSB1cCBpbiB0aGlz
IGNhc2UuCi0gICAgcmV0dXJuOwotICB9CisgICAgaGVhcC0+aW5TZXRzcGVjaWZpYyA9IGZhbHNl
OworICAgIGlmIChHZXRUaHJlYWRIZWFwKCkgPT0gaGVhcCkKKyAgICAgICAgLy8gU29tZWhvdyBo
ZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8gbWFsbG9jCisgICAgICAg
IC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gV2UgZ2l2ZSB1cCBpbiB0aGlzIGNhc2UuCisg
ICAgICAgIHJldHVybjsKIAotICAvLyBXZSBjYW4gbm93IGdldCByaWQgb2YgdGhlIGhlYXAKLSAg
RGVsZXRlQ2FjaGUoaGVhcCk7CisgICAgLy8gV2UgY2FuIG5vdyBnZXQgcmlkIG9mIHRoZSBoZWFw
CisgICAgRGVsZXRlQ2FjaGUoaGVhcCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6
OkRlc3Ryb3lUaHJlYWRDYWNoZSh2b2lkKiBwdHIpIHsKLSAgLy8gTm90ZSB0aGF0ICJwdHIiIGNh
bm5vdCBiZSBOVUxMIHNpbmNlIHB0aHJlYWQgcHJvbWlzZXMgbm90Ci0gIC8vIHRvIGludm9rZSB0
aGUgZGVzdHJ1Y3RvciBvbiBOVUxMIHZhbHVlcywgYnV0IGZvciBzYWZldHksCi0gIC8vIHdlIGNo
ZWNrIGFueXdheS4KLSAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm47Cit2b2lkIFRDTWFsbG9jVGhy
ZWFkQ2FjaGU6OkRlc3Ryb3lUaHJlYWRDYWNoZSh2b2lkKiBwdHIpCit7CisgICAgLy8gTm90ZSB0
aGF0ICJwdHIiIGNhbm5vdCBiZSAwIHNpbmNlIHB0aHJlYWQgcHJvbWlzZXMgbm90CisgICAgLy8g
dG8gaW52b2tlIHRoZSBkZXN0cnVjdG9yIG9uIDAgdmFsdWVzLCBidXQgZm9yIHNhZmV0eSwKKyAg
ICAvLyB3ZSBjaGVjayBhbnl3YXkuCisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKICNp
ZmRlZiBIQVZFX1RMUwotICAvLyBQcmV2ZW50IGZhc3QgcGF0aCBvZiBHZXRUaHJlYWRIZWFwKCkg
ZnJvbSByZXR1cm5pbmcgaGVhcC4KLSAgdGhyZWFkbG9jYWxfaGVhcCA9IE5VTEw7CisgICAgLy8g
UHJldmVudCBmYXN0IHBhdGggb2YgR2V0VGhyZWFkSGVhcCgpIGZyb20gcmV0dXJuaW5nIGhlYXAu
CisgICAgdGhyZWFkbG9jYWxIZWFwID0gMDsKICNlbmRpZgotICBEZWxldGVDYWNoZShyZWludGVy
cHJldF9jYXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocHRyKSk7CisgICAgRGVsZXRlQ2FjaGUo
cmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY1RocmVhZENhY2hlKj4ocHRyKSk7CiB9CiAKLXZvaWQg
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlbGV0ZUNhY2hlKFRDTWFsbG9jX1RocmVhZENhY2hlKiBo
ZWFwKSB7Ci0gIC8vIFJlbW92ZSBhbGwgbWVtb3J5IGZyb20gaGVhcAotICBoZWFwLT5DbGVhbnVw
KCk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkRlbGV0ZUNhY2hlKFRDTWFsbG9jVGhyZWFk
Q2FjaGUqIGhlYXApCit7CisgICAgLy8gUmVtb3ZlIGFsbCBtZW1vcnkgZnJvbSBoZWFwCisgICAg
aGVhcC0+Q2xlYW51cCgpOwogCi0gIC8vIFJlbW92ZSBmcm9tIGxpbmtlZCBsaXN0Ci0gIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBpZiAoaGVhcC0+bmV4dF8gIT0gTlVMTCkg
aGVhcC0+bmV4dF8tPnByZXZfID0gaGVhcC0+cHJldl87Ci0gIGlmIChoZWFwLT5wcmV2XyAhPSBO
VUxMKSBoZWFwLT5wcmV2Xy0+bmV4dF8gPSBoZWFwLT5uZXh0XzsKLSAgaWYgKHRocmVhZF9oZWFw
cyA9PSBoZWFwKSB0aHJlYWRfaGVhcHMgPSBoZWFwLT5uZXh0XzsKLSAgdGhyZWFkX2hlYXBfY291
bnQtLTsKLSAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7CisgICAgLy8gUmVtb3ZlIGZyb20g
bGlua2VkIGxpc3QKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIGlm
IChoZWFwLT5uZXh0KQorICAgICAgICBoZWFwLT5uZXh0LT5wcmV2ID0gaGVhcC0+cHJldjsKKyAg
ICBpZiAoaGVhcC0+cHJldikKKyAgICAgICAgaGVhcC0+cHJldi0+bmV4dCA9IGhlYXAtPm5leHQ7
CisgICAgaWYgKHRocmVhZEhlYXBzID09IGhlYXApCisgICAgICAgIHRocmVhZEhlYXBzID0gaGVh
cC0+bmV4dDsKKyAgICB0aHJlYWRfaGVhcF9jb3VudC0tOworICAgIFJlY29tcHV0ZVRocmVhZENh
Y2hlU2l6ZSgpOwogCi0gIHRocmVhZGhlYXBfYWxsb2NhdG9yLkRlbGV0ZShoZWFwKTsKKyAgICB0
aHJlYWRoZWFwQWxsb2NhdG9yLkRlbGV0ZShoZWFwKTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCkgewotICAvLyBEaXZpZGUgYXZhaWxh
YmxlIHNwYWNlIGFjcm9zcyB0aHJlYWRzCi0gIGludCBuID0gdGhyZWFkX2hlYXBfY291bnQgPiAw
ID8gdGhyZWFkX2hlYXBfY291bnQgOiAxOwotICBzaXplX3Qgc3BhY2UgPSBvdmVyYWxsX3RocmVh
ZF9jYWNoZV9zaXplIC8gbjsKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhy
ZWFkQ2FjaGVTaXplKCkKK3sKKyAgICAvLyBEaXZpZGUgYXZhaWxhYmxlIHNwYWNlIGFjcm9zcyB0
aHJlYWRzCisgICAgaW50IG4gPSB0aHJlYWRfaGVhcF9jb3VudCA+IDAgPyB0aHJlYWRfaGVhcF9j
b3VudCA6IDE7CisgICAgc2l6ZV90IHNwYWNlID0gb3ZlcmFsbFRocmVhZENhY2hlc2l6ZSAvIG47
CiAKLSAgLy8gTGltaXQgdG8gYWxsb3dlZCByYW5nZQotICBpZiAoc3BhY2UgPCBrTWluVGhyZWFk
Q2FjaGVTaXplKSBzcGFjZSA9IGtNaW5UaHJlYWRDYWNoZVNpemU7Ci0gIGlmIChzcGFjZSA+IGtN
YXhUaHJlYWRDYWNoZVNpemUpIHNwYWNlID0ga01heFRocmVhZENhY2hlU2l6ZTsKKyAgICAvLyBM
aW1pdCB0byBhbGxvd2VkIHJhbmdlCisgICAgaWYgKHNwYWNlIDwga01pblRocmVhZENhY2hlU2l6
ZSkKKyAgICAgICAgc3BhY2UgPSBrTWluVGhyZWFkQ2FjaGVTaXplOworICAgIGlmIChzcGFjZSA+
IGtNYXhUaHJlYWRDYWNoZVNpemUpCisgICAgICAgIHNwYWNlID0ga01heFRocmVhZENhY2hlU2l6
ZTsKIAotICBwZXJfdGhyZWFkX2NhY2hlX3NpemUgPSBzcGFjZTsKKyAgICBwZXJUaHJlYWRDYWNo
ZVNpemUgPSBzcGFjZTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UHJpbnQoKSBj
b25zdCB7Ci0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewot
ICAgIE1FU1NBR0UoIiAgICAgICU1IiBQUkl1UyAiIDogJTRkIGxlbjsgJTRkIGxvXG4iLAordm9p
ZCBUQ01hbGxvY1RocmVhZENhY2hlOjpQcmludCgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
Y2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgICAgIE1FU1NBR0UoIiAgICAg
ICU1IiBQUkl1UyAiIDogJTRkIGxlbjsgJTRkIGxvXG4iLAogICAgICAgICAgICAgQnl0ZVNpemVG
b3JDbGFzcyhjbCksCi0gICAgICAgICAgICBsaXN0X1tjbF0ubGVuZ3RoKCksCi0gICAgICAgICAg
ICBsaXN0X1tjbF0ubG93d2F0ZXJtYXJrKCkpOwotICB9CisgICAgICAgICAgICBsaXN0W2NsXS5s
ZW5ndGgoKSwKKyAgICAgICAgICAgIGxpc3RbY2xdLmxvd3dhdGVybWFyaygpKTsKKyAgICB9CiB9
CiAKIC8vIEV4dHJhY3QgaW50ZXJlc3Rpbmcgc3RhdHMKIHN0cnVjdCBUQ01hbGxvY1N0YXRzIHsK
LSAgdWludDY0X3Qgc3lzdGVtX2J5dGVzOyAgICAgICAgLy8gQnl0ZXMgYWxsb2NlZCBmcm9tIHN5
c3RlbQotICB1aW50NjRfdCB0aHJlYWRfYnl0ZXM7ICAgICAgICAvLyBCeXRlcyBpbiB0aHJlYWQg
Y2FjaGVzCi0gIHVpbnQ2NF90IGNlbnRyYWxfYnl0ZXM7ICAgICAgIC8vIEJ5dGVzIGluIGNlbnRy
YWwgY2FjaGUKLSAgdWludDY0X3QgdHJhbnNmZXJfYnl0ZXM7ICAgICAgLy8gQnl0ZXMgaW4gY2Vu
dHJhbCB0cmFuc2ZlciBjYWNoZQotICB1aW50NjRfdCBwYWdlaGVhcF9ieXRlczsgICAgICAvLyBC
eXRlcyBpbiBwYWdlIGhlYXAKLSAgdWludDY0X3QgbWV0YWRhdGFfYnl0ZXM7ICAgICAgLy8gQnl0
ZXMgYWxsb2NlZCBmb3IgbWV0YWRhdGEKKyAgICB1aW50NjRfdCBzeXN0ZW1CeXRlczsgLy8gQnl0
ZXMgYWxsb2NlZCBmcm9tIHN5c3RlbQorICAgIHVpbnQ2NF90IHRocmVhZEJ5dGVzOyAvLyBCeXRl
cyBpbiB0aHJlYWQgY2FjaGVzCisgICAgdWludDY0X3QgY2VudHJhbEJ5dGVzOyAvLyBCeXRlcyBp
biBjZW50cmFsIGNhY2hlCisgICAgdWludDY0X3QgdHJhbnNmZXJCeXRlczsgLy8gQnl0ZXMgaW4g
Y2VudHJhbCB0cmFuc2ZlciBjYWNoZQorICAgIHVpbnQ2NF90IHBhZ2VoZWFwQnl0ZXM7IC8vIEJ5
dGVzIGluIHBhZ2UgaGVhcAorICAgIHVpbnQ2NF90IG1ldGFkYXRhQnl0ZXM7IC8vIEJ5dGVzIGFs
bG9jZWQgZm9yIG1ldGFkYXRhCiB9OwogCiAjaWZuZGVmIFdURl9DSEFOR0VTCi0vLyBHZXQgc3Rh
dHMgaW50byAiciIuICBBbHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMgaWYgY2xhc3NfY291
bnQgIT0gTlVMTAotc3RhdGljIHZvaWQgRXh0cmFjdFN0YXRzKFRDTWFsbG9jU3RhdHMqIHIsIHVp
bnQ2NF90KiBjbGFzc19jb3VudCkgewotICByLT5jZW50cmFsX2J5dGVzID0gMDsKLSAgci0+dHJh
bnNmZXJfYnl0ZXMgPSAwOwotICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsr
Y2wpIHsKLSAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7
Ci0gICAgY29uc3QgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRjX2xlbmd0aCgp
OwotICAgIHItPmNlbnRyYWxfYnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXpl
Rm9yQ2xhc3MoY2wpKSAqIGxlbmd0aDsKLSAgICByLT50cmFuc2Zlcl9ieXRlcyArPQotICAgICAg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRjX2xlbmd0aDsK
LSAgICBpZiAoY2xhc3NfY291bnQpIGNsYXNzX2NvdW50W2NsXSA9IGxlbmd0aCArIHRjX2xlbmd0
aDsKLSAgfQotCi0gIC8vIEFkZCBzdGF0cyBmcm9tIHBlci10aHJlYWQgaGVhcHMKLSAgci0+dGhy
ZWFkX2J5dGVzID0gMDsKLSAgeyAvLyBzY29wZQotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOwotICAgIGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVh
cHM7IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7Ci0gICAgICByLT50aHJlYWRfYnl0ZXMgKz0g
aC0+U2l6ZSgpOwotICAgICAgaWYgKGNsYXNzX2NvdW50KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICAgIGNsYXNzX2NvdW50
W2NsXSArPSBoLT5mcmVlbGlzdF9sZW5ndGgoY2wpOworLy8gR2V0IHN0YXRzIGludG8gInIiLiBB
bHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMgaWYgY2xhc3NDb3VudCAhPSAwCitzdGF0aWMg
dm9pZCBFeHRyYWN0U3RhdHMoVENNYWxsb2NTdGF0cyogciwgdWludDY0X3QqIGNsYXNzQ291bnQp
Cit7CisgICAgci0+Y2VudHJhbEJ5dGVzID0gMDsKKyAgICByLT50cmFuc2ZlckJ5dGVzID0gMDsK
KyAgICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAgICAgICAg
Y29uc3QgaW50IGxlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0ubGVuZ3RoKCk7CisgICAgICAgIGNv
bnN0IGludCB0Y0xlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0udGNMZW5ndGgoKTsKKyAgICAgICAg
ci0+Y2VudHJhbEJ5dGVzICs9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNz
KGNsKSkgKiBsZW5ndGg7CisgICAgICAgIHItPnRyYW5zZmVyQnl0ZXMgKz0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRjTGVuZ3RoOworICAgICAgICBpZiAo
Y2xhc3NDb3VudCkKKyAgICAgICAgICAgIGNsYXNzQ291bnRbY2xdID0gbGVuZ3RoICsgdGNMZW5n
dGg7CisgICAgfQorCisgICAgLy8gQWRkIHN0YXRzIGZyb20gcGVyLXRocmVhZCBoZWFwcworICAg
IHItPnRocmVhZEJ5dGVzID0gMDsKKyAgICB7IC8vIHNjb3BlCisgICAgICAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIGZvciAoVENNYWxsb2NUaHJlYWRDYWNoZSog
aCA9IHRocmVhZEhlYXBzOyBoOyBoID0gaC0+bmV4dCkgeworICAgICAgICAgICAgci0+dGhyZWFk
Qnl0ZXMgKz0gaC0+U2l6ZSgpOworICAgICAgICAgICAgaWYgKGNsYXNzQ291bnQpCisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKQorICAg
ICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSArPSBoLT5mcmVlbGlzdGxlbmd0aChjbCk7
CiAgICAgICAgIH0KLSAgICAgIH0KICAgICB9Ci0gIH0KIAotICB7IC8vc2NvcGUKLSAgICBTcGlu
TG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICByLT5zeXN0ZW1fYnl0ZXMgPSBwYWdl
aGVhcC0+U3lzdGVtQnl0ZXMoKTsKLSAgICByLT5tZXRhZGF0YV9ieXRlcyA9IG1ldGFkYXRhX3N5
c3RlbV9ieXRlczsKLSAgICByLT5wYWdlaGVhcF9ieXRlcyA9IHBhZ2VoZWFwLT5GcmVlQnl0ZXMo
KTsKLSAgfQorICAgIHsgLy8gc2NvcGUKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhl
YXBMb2NrKTsKKyAgICAgICAgci0+c3lzdGVtQnl0ZXMgPSBwYWdlaGVhcC0+U3lzdGVtQnl0ZXMo
KTsKKyAgICAgICAgci0+bWV0YWRhdGFCeXRlcyA9IG1ldGFkYXRhU3lzdGVtQnl0ZXM7CisgICAg
ICAgIHItPnBhZ2VoZWFwQnl0ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7CisgICAgfQogfQog
I2VuZGlmCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKIC8vIFdSSVRFIHN0YXRzIHRvICJvdXQiCiBz
dGF0aWMgdm9pZCBEdW1wU3RhdHMoVENNYWxsb2NfUHJpbnRlciogb3V0LCBpbnQgbGV2ZWwpIHsK
LSAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgdWludDY0X3QgY2xhc3NfY291bnRba051bUNsYXNz
ZXNdOwotICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAobGV2ZWwgPj0gMiA/IGNsYXNzX2NvdW50IDog
TlVMTCkpOworICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CisgICAgdWludDY0X3QgY2xhc3NDb3Vu
dFtrTnVtQ2xhc3Nlc107CisgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgKGxldmVsID49IDIgPyBj
bGFzc0NvdW50IDogMCkpOworCisgICAgaWYgKGxldmVsID49IDIpIHsKKyAgICAgICAgb3V0LT5w
cmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
Iik7CisgICAgICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOworICAgICAgICBmb3IgKGludCBj
bCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAgICAgICAgICAgIGlmIChjbGFzc0Nv
dW50W2NsXSA+IDApIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBjbGFzc0J5dGVzID0gY2xh
c3NDb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKKyAgICAgICAgICAgICAgICBjdW11
bGF0aXZlICs9IGNsYXNzQnl0ZXM7CisgICAgICAgICAgICAgICAgb3V0LT5wcmludGYoImNsYXNz
ICUzZCBbICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCisgICAgICAgICAgICAgICAgICAgICIlOCIg
UFJJdTY0ICIgb2JqczsgJTUuMWYgTUI7ICU1LjFmIGN1bSBNQlxuIiwKKyAgICAgICAgICAgICAg
ICAgICAgY2wsIEJ5dGVTaXplRm9yQ2xhc3MoY2wpLAorICAgICAgICAgICAgICAgICAgICBjbGFz
c0NvdW50W2NsXSwKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NCeXRlcyAvIDEwNDg1NzYuMCwK
KyAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAotICBpZiAobGV2ZWwgPj0gMikgewotICAgIG91dC0+cHJpbnRmKCIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAg
IHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOwotICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVt
Q2xhc3NlczsgKytjbCkgewotICAgICAgaWYgKGNsYXNzX2NvdW50W2NsXSA+IDApIHsKLSAgICAg
ICAgdWludDY0X3QgY2xhc3NfYnl0ZXMgPSBjbGFzc19jb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNs
YXNzKGNsKTsKLSAgICAgICAgY3VtdWxhdGl2ZSArPSBjbGFzc19ieXRlczsKLSAgICAgICAgb3V0
LT5wcmludGYoImNsYXNzICUzZCBbICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCi0gICAgICAgICAg
ICAgICAgIiU4IiBQUkl1NjQgIiBvYmpzOyAlNS4xZiBNQjsgJTUuMWYgY3VtIE1CXG4iLAotICAg
ICAgICAgICAgICAgIGNsLCBCeXRlU2l6ZUZvckNsYXNzKGNsKSwKLSAgICAgICAgICAgICAgICBj
bGFzc19jb3VudFtjbF0sCi0gICAgICAgICAgICAgICAgY2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAs
Ci0gICAgICAgICAgICAgICAgY3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7Ci0gICAgICB9CisgICAg
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIHBhZ2VoZWFwLT5E
dW1wKG91dCk7CiAgICAgfQogCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7
Ci0gICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKLSAgfQotCi0gIGNvbnN0IHVpbnQ2NF90IGJ5dGVz
X2luX3VzZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0gc3RhdHMudGhyZWFkX2J5dGVzOworICAgIGNvbnN0IHVpbnQ2NF90IGJ5dGVzSW5Vc2UgPSBz
dGF0cy5zeXN0ZW1CeXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRz
LnBhZ2VoZWFwQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5j
ZW50cmFsQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy50cmFu
c2ZlckJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFk
Qnl0ZXM7CiAKLSAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIgorICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgICAgICAgIk1BTExPQzog
JTEyIiBQUkl1NjQgIiBIZWFwIHNpemVcbiIKICAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQ
Ukl1NjQgIiBCeXRlcyBpbiB1c2UgYnkgYXBwbGljYXRpb25cbiIKICAgICAgICAgICAgICAgIk1B
TExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHBhZ2UgaGVhcFxuIgpAQCAtMzM3OSwx
NSArMzQ4MywxNSBAQCBzdGF0aWMgdm9pZCBEdW1wU3RhdHMoVENNYWxsb2NfUHJpbnRlcioKICAg
ICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBUaHJlYWQgaGVhcHMgaW4gdXNlXG4i
CiAgICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgTWV0YWRhdGEgYWxsb2NhdGVk
XG4iCiAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIsCi0gICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9ieXRlcywKLSAgICAg
ICAgICAgICAgYnl0ZXNfaW5fdXNlLAotICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVhcF9ieXRl
cywKLSAgICAgICAgICAgICAgc3RhdHMuY2VudHJhbF9ieXRlcywKLSAgICAgICAgICAgICAgc3Rh
dHMudHJhbnNmZXJfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0YXRzLnRocmVhZF9ieXRlcywKLSAg
ICAgICAgICAgICAgdWludDY0X3Qoc3Bhbl9hbGxvY2F0b3IuaW51c2UoKSksCi0gICAgICAgICAg
ICAgIHVpbnQ2NF90KHRocmVhZGhlYXBfYWxsb2NhdG9yLmludXNlKCkpLAotICAgICAgICAgICAg
ICBzdGF0cy5tZXRhZGF0YV9ieXRlcyk7CisgICAgICAgICAgICAgIHN0YXRzLnN5c3RlbUJ5dGVz
LAorICAgICAgICAgICAgICBieXRlc0luVXNlLAorICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVh
cEJ5dGVzLAorICAgICAgICAgICAgICBzdGF0cy5jZW50cmFsQnl0ZXMsCisgICAgICAgICAgICAg
IHN0YXRzLnRyYW5zZmVyQnl0ZXMsCisgICAgICAgICAgICAgIHN0YXRzLnRocmVhZEJ5dGVzLAor
ICAgICAgICAgICAgICB1aW50NjRfdChzcGFuQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICAg
ICAgICB1aW50NjRfdCh0aHJlYWRoZWFwQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICAgICAg
ICBzdGF0cy5tZXRhZGF0YUJ5dGVzKTsKIH0KIAogc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQg
bGV2ZWwpIHsKQEAgLTM0MDAsNDUgKzM1MDQsNDMgQEAgc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhp
bnQgbGV2ZWwpIHsKIH0KIAogc3RhdGljIHZvaWQqKiBEdW1wU3RhY2tUcmFjZXMoKSB7Ci0gIC8v
IENvdW50IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQKLSAgaW50IG5lZWRlZF9zbG90cyA9IDA7Ci0g
IHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBmb3IgKFNwYW4q
IHMgPSBzYW1wbGVkX29iamVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZF9vYmplY3RzOyBzID0gcy0+
bmV4dCkgewotICAgICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNr
VHJhY2UqPihzLT5vYmplY3RzKTsKLSAgICAgIG5lZWRlZF9zbG90cyArPSAzICsgc3RhY2stPmRl
cHRoOworICAgIC8vIENvdW50IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQKKyAgICBpbnQgbmVlZGVk
U2xvdHMgPSAwOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2Nr
KTsKKyAgICAgICAgZm9yIChTcGFuKiBzID0gc2FtcGxlZE9iamVjdHMubmV4dDsgcyAhPSAmc2Ft
cGxlZE9iamVjdHM7IHMgPSBzLT5uZXh0KSB7CisgICAgICAgICAgICBTdGFja1RyYWNlKiBzdGFj
ayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOworICAgICAgICAg
ICAgbmVlZGVkU2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0aDsKKyAgICAgICAgfQorICAgICAgICBu
ZWVkZWRTbG90cyArPSAxMDA7IC8vIFNsb3AgaW4gY2FzZSBzYW1wbGUgZ3Jvd3MKKyAgICAgICAg
bmVlZGVkU2xvdHMgKz0gbmVlZGVkU2xvdHMgLyA4OyAvLyBBbiBleHRyYSAxMi41JSBzbG9wCiAg
ICAgfQotICAgIG5lZWRlZF9zbG90cyArPSAxMDA7ICAgICAgICAgICAgLy8gU2xvcCBpbiBjYXNl
IHNhbXBsZSBncm93cwotICAgIG5lZWRlZF9zbG90cyArPSBuZWVkZWRfc2xvdHMvODsgLy8gQW4g
ZXh0cmEgMTIuNSUgc2xvcAotICB9CiAKLSAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lkKltuZWVk
ZWRfc2xvdHNdOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICBNRVNTQUdFKCJ0Y21hbGxv
YzogY291bGQgbm90IGFsbG9jYXRlICVkIHNsb3RzIGZvciBzdGFjayB0cmFjZXNcbiIsCi0gICAg
ICAgICAgICBuZWVkZWRfc2xvdHMpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgICAgdm9pZCoq
IHJlc3VsdCA9IG5ldyB2b2lkKltuZWVkZWRTbG90c107CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgTUVTU0FHRSgidGNtYWxsb2M6IGNvdWxkIG5vdCBhbGxvY2F0ZSAlZCBzbG90cyBmb3Ig
c3RhY2sgdHJhY2VzXG4iLAorICAgICAgICAgICAgbmVlZGVkU2xvdHMpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAg
IGludCB1c2VkU2xvdHMgPSAwOworICAgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRPYmplY3RzLm5l
eHQ7IHMgIT0gJnNhbXBsZWRPYmplY3RzOyBzID0gcy0+bmV4dCkgeworICAgICAgICBBU1NFUlQo
dXNlZFNsb3RzIDwgbmVlZGVkU2xvdHMpOyAvLyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1p
bmF0b3IKKyAgICAgICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNr
VHJhY2UqPihzLT5vYmplY3RzKTsKKyAgICAgICAgaWYgKHVzZWRTbG90cyArIDMgKyBzdGFjay0+
ZGVwdGggPj0gbmVlZGVkU2xvdHMpCisgICAgICAgICAgICAvLyBObyBtb3JlIHJvb20KKyAgICAg
ICAgICAgIGJyZWFrOwogCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBp
bnQgdXNlZF9zbG90cyA9IDA7Ci0gIGZvciAoU3BhbiogcyA9IHNhbXBsZWRfb2JqZWN0cy5uZXh0
OyBzICE9ICZzYW1wbGVkX29iamVjdHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAgQVNTRVJUKHVzZWRf
c2xvdHMgPCBuZWVkZWRfc2xvdHMpOyAgLy8gTmVlZCB0byBsZWF2ZSByb29tIGZvciB0ZXJtaW5h
dG9yCi0gICAgU3RhY2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2Uq
PihzLT5vYmplY3RzKTsKLSAgICBpZiAodXNlZF9zbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0g
bmVlZGVkX3Nsb3RzKSB7Ci0gICAgICAvLyBObyBtb3JlIHJvb20KLSAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzBdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMV0gPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFjay0+c2l6ZSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xv
dHMrMl0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFjay0+ZGVwdGgpOwotICAgIGZvciAo
aW50IGQgPSAwOyBkIDwgc3RhY2stPmRlcHRoOyBkKyspIHsKLSAgICAgIHJlc3VsdFt1c2VkX3Ns
b3RzKzMrZF0gPSBzdGFjay0+c3RhY2tbZF07CisgICAgICAgIHJlc3VsdFt1c2VkU2xvdHMrMF0g
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKKyAg
ICAgICAgcmVzdWx0W3VzZWRTbG90cysxXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNr
LT5zaXplKTsKKyAgICAgICAgcmVzdWx0W3VzZWRTbG90cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHN0YWNrLT5kZXB0aCk7CisgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc3RhY2st
PmRlcHRoOyBkKyspCisgICAgICAgICAgICByZXN1bHRbdXNlZFNsb3RzKzMrZF0gPSBzdGFjay0+
c3RhY2tbZF07CisgICAgICAgIHVzZWRTbG90cyArPSAzICsgc3RhY2stPmRlcHRoOwogICAgIH0K
LSAgICB1c2VkX3Nsb3RzICs9IDMgKyBzdGFjay0+ZGVwdGg7Ci0gIH0KLSAgcmVzdWx0W3VzZWRf
c2xvdHNdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pigw
KSk7Ci0gIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0W3VzZWRTbG90c10gPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDApKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogI2VuZGlmCiAKQEAgLTM0NDYsMTAzICszNTQ4LDExMCBAQCBzdGF0aWMgdm9pZCoq
IER1bXBTdGFja1RyYWNlcygpIHsKIAogLy8gVENNYWxsb2MncyBzdXBwb3J0IGZvciBleHRyYSBt
YWxsb2MgaW50ZXJmYWNlcwogY2xhc3MgVENNYWxsb2NJbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBN
YWxsb2NFeHRlbnNpb24gewotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIq
IGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgpIHsKLSAgICBBU1NFUlQoYnVmZmVyX2xlbmd0aCA+
IDApOwotICAgIFRDTWFsbG9jX1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGJ1ZmZlcl9sZW5ndGgp
OwotCi0gICAgLy8gUHJpbnQgbGV2ZWwgb25lIHN0YXRzIHVubGVzcyBsb3RzIG9mIHNwYWNlIGlz
IGF2YWlsYWJsZQotICAgIGlmIChidWZmZXJfbGVuZ3RoIDwgMTAwMDApIHsKLSAgICAgIER1bXBT
dGF0cygmcHJpbnRlciwgMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRl
ciwgMik7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwg
aW50IGJ1ZmZlckxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChidWZmZXJMZW5ndGggPiAw
KTsKKyAgICAgICAgVENNYWxsb2NfUHJpbnRlciBwcmludGVyKGJ1ZmZlciwgYnVmZmVyTGVuZ3Ro
KTsKKworICAgICAgICAvLyBQcmludCBsZXZlbCBvbmUgc3RhdHMgdW5sZXNzIGxvdHMgb2Ygc3Bh
Y2UgaXMgYXZhaWxhYmxlCisgICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxMDAwMCkKKyAgICAg
ICAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IER1bXBTdGF0cygmcHJpbnRlciwgMik7CiAgICAgfQotICB9CiAKLSAgdmlydHVhbCB2b2lkKiog
UmVhZFN0YWNrVHJhY2VzKCkgewotICAgIHJldHVybiBEdW1wU3RhY2tUcmFjZXMoKTsKLSAgfQor
ICAgIHZpcnR1YWwgdm9pZCoqIFJlYWRTdGFja1RyYWNlcygpCisgICAgeworICAgICAgICByZXR1
cm4gRHVtcFN0YWNrVHJhY2VzKCk7CisgICAgfQogCi0gIHZpcnR1YWwgYm9vbCBHZXROdW1lcmlj
UHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkgewotICAgIEFTU0VSVChu
YW1lICE9IE5VTEwpOworICAgIHZpcnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3Qg
Y2hhciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChuYW1lKTsK
IAotICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMi
KSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFjdFN0YXRz
KCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAg
ICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAtIHN0YXRzLmNl
bnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXM7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJnZW5lcmljLmhl
YXBfc2l6ZSIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRy
YWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRl
czsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInRj
bWFsbG9jLnNsYWNrX2J5dGVzIikgPT0gMCkgewotICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnl0
ZXMgaW4gdGhlIHBhZ2UgaGVhcCBhcmUgbm90IGZyYWdtZW50ZWQgdG9vCi0gICAgICAvLyBiYWRs
eSwgYW5kIGFyZSB0aGVyZWZvcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgotICAgICAgU3Bp
bkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+
RnJlZUJ5dGVzKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21w
KG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewot
ICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBv
dmVyYWxsX3RocmVhZF9jYWNoZV9zaXplOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJlYWRfY2FjaGVf
Ynl0ZXMiKSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFj
dFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRfYnl0ZXM7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJn
ZW5lcmljLmN1cnJlbnRfYWxsb2NhdGVkX2J5dGVzIikpIHsKKyAgICAgICAgICAgIFRDTWFsbG9j
U3RhdHMgc3RhdHM7CisgICAgICAgICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKyAgICAg
ICAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbUJ5dGVzCisgICAgICAgICAgICAgICAgICAgIC0g
c3RhdHMudGhyZWFkQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5jZW50cmFsQnl0
ZXMKKyAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5wYWdlaGVhcEJ5dGVzOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLSAgfQorICAg
ICAgICBpZiAoIXN0cmNtcChuYW1lLCAiZ2VuZXJpYy5oZWFwc2l6ZSIpKSB7CisgICAgICAgICAg
ICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywg
MCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1CeXRlczsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgInRj
bWFsbG9jLnNsYWNrX2J5dGVzIikpIHsKKyAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ5
dGVzIGluIHRoZSBwYWdlIGhlYXAgYXJlIG5vdCBmcmFnbWVudGVkIHRvbworICAgICAgICAgICAg
Ly8gYmFkbHksIGFuZCBhcmUgdGhlcmVmb3JlIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAg
ICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxsKCZwYWdlaGVhcExvY2spOworICAgICAgICAgICAg
KnZhbHVlID0gcGFnZWhlYXAtPkZyZWVCeXRlcygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAidGNtYWxsb2MubWF4X3Rv
dGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpKSB7CisgICAgICAgICAgICBTcGluTG9ja0hvbGRlciBs
bCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IG92ZXJhbGxUaHJlYWRDYWNo
ZXNpemU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gIHZpcnR1YWwg
Ym9vbCBTZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IHZhbHVlKSB7
Ci0gICAgQVNTRVJUKG5hbWUgIT0gTlVMTCk7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ0
Y21hbGxvYy5jdXJyZW50X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpKSB7CisgICAgICAgICAg
ICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAgICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywg
MCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRCeXRlczsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxv
Yy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewotICAgICAgLy8gQ2xpcCB0
aGUgdmFsdWUgdG8gYSByZWFzb25hYmxlIHJhbmdlCi0gICAgICBpZiAodmFsdWUgPCBrTWluVGhy
ZWFkQ2FjaGVTaXplKSB2YWx1ZSA9IGtNaW5UaHJlYWRDYWNoZVNpemU7Ci0gICAgICBpZiAodmFs
dWUgPiAoMTw8MzApKSB2YWx1ZSA9ICgxPDwzMCk7ICAgICAvLyBMaW1pdCB0byAxR0IKLQotICAg
ICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICBvdmVyYWxsX3RocmVh
ZF9jYWNoZV9zaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSk7Ci0gICAgICBUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsK
LSAgfQorICAgIHZpcnR1YWwgYm9vbCBTZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFt
ZSwgc2l6ZV90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5hbWUpOwogCi0gIHZpcnR1
YWwgdm9pZCBNYXJrVGhyZWFkSWRsZSgpIHsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6QmVj
b21lSWRsZSgpOwotICB9CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhf
dG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikpIHsKKyAgICAgICAgICAgIC8vIENsaXAgdGhlIHZh
bHVlIHRvIGEgcmVhc29uYWJsZSByYW5nZQorICAgICAgICAgICAgaWYgKHZhbHVlIDwga01pblRo
cmVhZENhY2hlU2l6ZSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGtNaW5UaHJlYWRDYWNoZVNp
emU7CisgICAgICAgICAgICBpZiAodmFsdWUgPiAoMSA8PCAzMCkpCisgICAgICAgICAgICAgICAg
dmFsdWUgPSAoMSA8PCAzMCk7IC8vIExpbWl0IHRvIDFHQgorCisgICAgICAgICAgICBTcGluTG9j
a0hvbGRlciBsbCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgICAgIG92ZXJhbGxUaHJlYWRDYWNo
ZXNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHZhbHVlKTsKKyAgICAgICAgICAgIFRDTWFsbG9j
VGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICB2aXJ0dWFsIHZvaWQgUmVsZWFzZUZyZWVNZW1vcnko
KSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAt
PlJlbGVhc2VGcmVlUGFnZXMoKTsKLSAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIE1hcmtUaHJlYWRJZGxlKCkKKyAgICB7CisgICAgICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
UmVsZWFzZUZyZWVNZW1vcnkoKQorICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFn
ZWhlYXBMb2NrKTsKKyAgICAgICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKKyAgICB9
CiB9OwogI2VuZGlmCiAKIC8vIFRoZSBjb25zdHJ1Y3RvciBhbGxvY2F0ZXMgYW4gb2JqZWN0IHRv
IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uCiAvLyBydW5zIGJlZm9yZSBtYWluKCksIGFuZCB0
aGVyZWZvcmUgd2UgZG8gbm90IGhhdmUgYSBjaGFuY2UgdG8gYmVjb21lCi0vLyBtdWx0aS10aHJl
YWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uICBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQot
Ly8gaGVyZS4gIFByZXN1bWFibHkgYnkgdGhlIHRpbWUgdGhpcyBjb25zdHJ1Y3RvciBydW5zLCBn
bGliYyBpcyBpbgorLy8gbXVsdGktdGhyZWFkZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLiBXZSBh
bHNvIGNyZWF0ZSB0aGUgVFNEIGtleQorLy8gaGVyZS4gUHJlc3VtYWJseSBieSB0aGUgdGltZSB0
aGlzIGNvbnN0cnVjdG9yIHJ1bnMsIGdsaWJjIGlzIGluCiAvLyBnb29kIGVub3VnaCBzaGFwZSB0
byBoYW5kbGUgcHRocmVhZF9rZXlfY3JlYXRlKCkuCiAvLwogLy8gVGhlIGNvbnN0cnVjdG9yIGFs
c28gdGFrZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHRlbGwgU1RMIHRvIHVzZQotLy8gdGNtYWxsb2Mu
ICBXZSB3YW50IHRvIGRvIHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KKy8v
IHRjbWFsbG9jLiBXZSB3YW50IHRvIGRvIHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGlt
ZSwgc28KIC8vIGFsbCB1c2VyIFNUTCBhbGxvY2F0aW9ucyBnbyB0aHJvdWdoIHRjbWFsbG9jICh3
aGljaCB3b3JrcyByZWFsbHkKIC8vIHdlbGwgZm9yIFNUTCkuCiAvLwpAQCAtMzU2MSw3ICszNjcw
LDcgQEAgY2xhc3MgVENNYWxsb2NHdWFyZCB7CiAjZW5kaWYKICNlbmRpZgogICAgIGZyZWUobWFs
bG9jKDEpKTsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdFRTRCgpOworICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkluaXRUU0QoKTsKICAgICBmcmVlKG1hbGxvYygxKSk7CiAjaWZuZGVm
IFdURl9DSEFOR0VTCiAgICAgTWFsbG9jRXh0ZW5zaW9uOjpSZWdpc3RlcihuZXcgVENNYWxsb2NJ
bXBsZW1lbnRhdGlvbik7CkBAIC0zNTcxLDcgKzM2ODAsNyBAQCBjbGFzcyBUQ01hbGxvY0d1YXJk
IHsKICNpZm5kZWYgV1RGX0NIQU5HRVMKICAgflRDTWFsbG9jR3VhcmQoKSB7CiAgICAgY29uc3Qg
Y2hhciogZW52ID0gZ2V0ZW52KCJNQUxMT0NTVEFUUyIpOwotICAgIGlmIChlbnYgIT0gTlVMTCkg
eworICAgIGlmIChlbnYpIHsKICAgICAgIGludCBsZXZlbCA9IGF0b2koZW52KTsKICAgICAgIGlm
IChsZXZlbCA8IDEpIGxldmVsID0gMTsKICAgICAgIFByaW50U3RhdHMobGV2ZWwpOwpAQCAtMzU5
NCwzMyArMzcwMywzMiBAQCBzdGF0aWMgVENNYWxsb2NHdWFyZCBtb2R1bGVfZW50ZXJfZXhpdF9o
CiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKIAotc3RhdGljIFNwYW4qIERvU2FtcGxlZEFsbG9jYXRp
b24oc2l6ZV90IHNpemUpIHsKLQotICAvLyBHcmFiIHRoZSBzdGFjayB0cmFjZSBvdXRzaWRlIHRo
ZSBoZWFwIGxvY2sKLSAgU3RhY2tUcmFjZSB0bXA7Ci0gIHRtcC5kZXB0aCA9IEdldFN0YWNrVHJh
Y2UodG1wLnN0YWNrLCBrTWF4U3RhY2tEZXB0aCwgMSk7Ci0gIHRtcC5zaXplID0gc2l6ZTsKLQot
ICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgLy8gQWxsb2NhdGUgc3Bhbgot
ICBTcGFuICpzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyhzaXplID09IDAgPyAxIDogc2l6ZSkp
OwotICBpZiAoc3BhbiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KK3N0YXRpYyBT
cGFuKiBEb1NhbXBsZWRBbGxvY2F0aW9uKHNpemVfdCBzaXplKQorewogCi0gIC8vIEFsbG9jYXRl
IHN0YWNrIHRyYWNlCi0gIFN0YWNrVHJhY2UgKnN0YWNrID0gc3RhY2t0cmFjZV9hbGxvY2F0b3Iu
TmV3KCk7Ci0gIGlmIChzdGFjayA9PSBOVUxMKSB7Ci0gICAgLy8gU2FtcGxpbmcgZmFpbGVkIGJl
Y2F1c2Ugb2YgbGFjayBvZiBtZW1vcnkKLSAgICByZXR1cm4gc3BhbjsKLSAgfQorICAgIC8vIEdy
YWIgdGhlIHN0YWNrIHRyYWNlIG91dHNpZGUgdGhlIGhlYXAgbG9jaworICAgIFN0YWNrVHJhY2Ug
dG1wOworICAgIHRtcC5kZXB0aCA9IEdldFN0YWNrVHJhY2UodG1wLnN0YWNrLCBrTWF4U3RhY2tE
ZXB0aCwgMSk7CisgICAgdG1wLnNpemUgPSBzaXplOworCisgICAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBMb2NrKTsKKyAgICAvLyBBbGxvY2F0ZSBzcGFuCisgICAgU3Bhbiogc3BhbiA9IHBh
Z2VoZWFwLT5OZXcocGFnZXMoIXNpemUgPyAxIDogc2l6ZSkpOworICAgIGlmICghc3BhbikKKyAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgKnN0YWNrID0gdG1wOwotICBzcGFuLT5zYW1wbGUgPSAxOwot
ICBzcGFuLT5vYmplY3RzID0gc3RhY2s7Ci0gIERMTF9QcmVwZW5kKCZzYW1wbGVkX29iamVjdHMs
IHNwYW4pOworICAgIC8vIEFsbG9jYXRlIHN0YWNrIHRyYWNlCisgICAgU3RhY2tUcmFjZSogc3Rh
Y2sgPSBzdGFja3RyYWNlX2FsbG9jYXRvci5OZXcoKTsKKyAgICBpZiAoIXN0YWNrKQorICAgICAg
ICAvLyBTYW1wbGluZyBmYWlsZWQgYmVjYXVzZSBvZiBsYWNrIG9mIG1lbW9yeQorICAgICAgICBy
ZXR1cm4gc3BhbjsKKworICAgICpzdGFjayA9IHRtcDsKKyAgICBzcGFuLT5zYW1wbGUgPSAxOwor
ICAgIHNwYW4tPm9iamVjdHMgPSBzdGFjazsKKyAgICBETExQcmVwZW5kKCZzYW1wbGVkT2JqZWN0
cywgc3Bhbik7CiAKLSAgcmV0dXJuIHNwYW47CisgICAgcmV0dXJuIHNwYW47CiB9CiAjZW5kaWYK
IApAQCAtMzYzNyw3ICszNzQ1LDggQEAgc3RhdGljIGlubGluZSB2b2lkKiBDaGVja2VkTWFsbG9j
UmVzdWx0KAogICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQqIFNwYW5U
b01hbGxvY1Jlc3VsdChTcGFuICpzcGFuKSB7CitzdGF0aWMgaW5saW5lIHZvaWQqIFNwYW5Ub01h
bGxvY1Jlc3VsdChTcGFuKiBzcGFuKQorewogICBBU1NFUlRfU1BBTl9DT01NSVRURUQoc3Bhbik7
CiAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhzcGFuLT5zdGFydCwgMCk7CiAgIHJldHVybgpA
QCAtMzY0Nyw0NyArMzc1Niw0NSBAQCBzdGF0aWMgaW5saW5lIHZvaWQqIFNwYW5Ub01hbGxvY1Jl
c3VsdChTCiAjaWZkZWYgV1RGX0NIQU5HRVMKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJl
PgogI2VuZGlmCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkKiBkb19tYWxsb2Moc2l6ZV90IHNp
emUpIHsKLSAgdm9pZCogcmV0ID0gTlVMTDsKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQqIGRv
TWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHZvaWQqIHJldCA9IDA7CiAKICNpZmRlZiBXVEZf
Q0hBTkdFUwogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4oKSk7CiAjZW5kaWYKIAotICAvLyBUaGUg
Zm9sbG93aW5nIGNhbGwgZm9yY2VzIG1vZHVsZSBpbml0aWFsaXphdGlvbgotICBUQ01hbGxvY19U
aHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOworICAg
IC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBmb3JjZXMgbW9kdWxlIGluaXRpYWxpemF0aW9uCisgICAg
VENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hl
KCk7CiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gIGlmICgoRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3Bh
cmFtZXRlciA+IDApICYmIGhlYXAtPlNhbXBsZUFsbG9jYXRpb24oc2l6ZSkpIHsKLSAgICBTcGFu
KiBzcGFuID0gRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplKTsKLSAgICBpZiAoc3BhbiAhPSBOVUxM
KSB7Ci0gICAgICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7Ci0gICAgfQotICB9IGVs
c2UKLSNlbmRpZgotICBpZiAoc2l6ZSA+IGtNYXhTaXplKSB7Ci0gICAgLy8gVXNlIHBhZ2UtbGV2
ZWwgYWxsb2NhdG9yCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAg
U3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOwotICAgIGlmIChzcGFuICE9
IE5VTEwpIHsKLSAgICAgIHJldCA9IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKLSAgICB9Ci0g
IH0gZWxzZSB7Ci0gICAgLy8gVGhlIGNvbW1vbiBjYXNlLCBhbmQgYWxzbyB0aGUgc2ltcGxlc3Qu
ICBUaGlzIGp1c3QgcG9wcyB0aGUKLSAgICAvLyBzaXplLWFwcHJvcHJpYXRlIGZyZWVsaXN0LCBh
ZmVyIHJlcGxlbmlzaGluZyBpdCBpZiBpdCdzIGVtcHR5LgotICAgIHJldCA9IENoZWNrZWRNYWxs
b2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoc2l6ZSkpOwotICB9Ci0gIGlmICghcmV0KSB7CisgICAg
aWYgKChGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyID4gMCkgJiYgaGVhcC0+U2FtcGxl
QWxsb2NhdGlvbihzaXplKSkgeworICAgICAgICBTcGFuKiBzcGFuID0gRG9TYW1wbGVkQWxsb2Nh
dGlvbihzaXplKTsKKyAgICAgICAgaWYgKHNwYW4pCisgICAgICAgICAgICByZXQgPSBTcGFuVG9N
YWxsb2NSZXN1bHQoc3Bhbik7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICBpZiAoc2l6ZSA+IGtN
YXhTaXplKSB7CisgICAgICAgIC8vIFVzZSBwYWdlLWxldmVsIGFsbG9jYXRvcgorICAgICAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICBTcGFuKiBzcGFuID0gcGFn
ZWhlYXAtPk5ldyhwYWdlcyhzaXplKSk7CisgICAgICAgIGlmIChzcGFuKQorICAgICAgICAgICAg
cmV0ID0gU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAgIH0gZWxzZQorICAgICAgICAvLyBU
aGUgY29tbW9uIGNhc2UsIGFuZCBhbHNvIHRoZSBzaW1wbGVzdC4gVGhpcyBqdXN0IHBvcHMgdGhl
CisgICAgICAgIC8vIHNpemUtYXBwcm9wcmlhdGUgZnJlZWxpc3QsIGFmZXIgcmVwbGVuaXNoaW5n
IGl0IGlmIGl0J3MgZW1wdHkuCisgICAgICAgIHJldCA9IENoZWNrZWRNYWxsb2NSZXN1bHQoaGVh
cC0+QWxsb2NhdGUoc2l6ZSkpOworICAgIGlmICghcmV0KQogI2lmZGVmIFdURl9DSEFOR0VTCi0g
ICAgaWYgKGNyYXNoT25GYWlsdXJlKSAvLyBUaGlzIGJyYW5jaCBzaG91bGQgYmUgb3B0aW1pemVk
IG91dCBieSB0aGUgY29tcGlsZXIuCi0gICAgICAgIENSQVNIKCk7CisgICAgICAgIGlmIChjcmFz
aE9uRmFpbHVyZSkgLy8gVGhpcyBicmFuY2ggc2hvdWxkIGJlIG9wdGltaXplZCBvdXQgYnkgdGhl
IGNvbXBpbGVyLgorICAgICAgICAgICAgQ1JBU0goKTsKICNlbHNlCi0gICAgZXJybm8gPSBFTk9N
RU07CisgICAgICAgIGVycm5vID0gRU5PTUVNOwogI2VuZGlmCi0gIH0KLSAgcmV0dXJuIHJldDsK
KyAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvX2ZyZWUo
dm9pZCogcHRyKSB7CitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvRnJlZSh2b2lkKiBwdHIp
Cit7CiAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuOwogICBBU1NFUlQocGFnZWhlYXAgIT0gTlVM
TCk7ICAvLyBTaG91bGQgbm90IGNhbGwgZnJlZSgpIGJlZm9yZSBtYWxsb2MoKQogICBjb25zdCBQ
YWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7
CkBAIC0zNzAzLDIxICszODEwLDIxIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZG9fZnJl
ZSh2b2lkKgogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCiAgICAgQVNTRVJUKCFwYWdlaGVh
cC0+R2V0RGVzY3JpcHRvcihwKS0+c2FtcGxlKTsKICNlbmRpZgotICAgIFRDTWFsbG9jX1RocmVh
ZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCk7
CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6Okdl
dENhY2hlSWZQcmVzZW50KCk7CiAgICAgaWYgKGhlYXAgIT0gTlVMTCkgewogICAgICAgaGVhcC0+
RGVhbGxvY2F0ZShwdHIsIGNsKTsKICAgICB9IGVsc2UgewogICAgICAgLy8gRGVsZXRlIGRpcmVj
dGx5IGludG8gY2VudHJhbCBjYWNoZQotICAgICAgU0xMX1NldE5leHQocHRyLCBOVUxMKTsKLSAg
ICAgIGNlbnRyYWxfY2FjaGVbY2xdLkluc2VydFJhbmdlKHB0ciwgcHRyLCAxKTsKKyAgICAgIFNM
TFNldE5leHQocHRyLCAwKTsKKyAgICAgIGNlbnRyYWxDYWNoZVtjbF0uSW5zZXJ0UmFuZ2UocHRy
LCBwdHIsIDEpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogICAgIEFT
U0VSVChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSAlIGtQYWdlU2l6ZSA9PSAwKTsK
ICAgICBBU1NFUlQoc3BhbiAhPSBOVUxMICYmIHNwYW4tPnN0YXJ0ID09IHApOwogI2lmbmRlZiBO
T19UQ01BTExPQ19TQU1QTEVTCiAgICAgaWYgKHNwYW4tPnNhbXBsZSkgewotICAgICAgRExMX1Jl
bW92ZShzcGFuKTsKKyAgICAgIERMTFJlbW92ZShzcGFuKTsKICAgICAgIHN0YWNrdHJhY2VfYWxs
b2NhdG9yLkRlbGV0ZShyZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzcGFuLT5vYmplY3Rz
KSk7CiAgICAgICBzcGFuLT5vYmplY3RzID0gTlVMTDsKICAgICB9CkBAIC0zNzMxLDEwOCArMzgz
OCwxMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkb19mcmVlKHZvaWQqCiAvLwogLy8g
Tm90ZTogdGhpcyBjb2RlIGNhbiBiZSBzbG93LCBhbmQgY2FuIHNpZ25pZmljYW50bHkgZnJhZ21l
bnQgbWVtb3J5LgogLy8gVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgbWVtYWxpZ24vcG9zaXhfbWVt
YWxpZ24vdmFsbG9jL3B2YWxsb2Mgd2lsbAotLy8gbm90IGJlIGludm9rZWQgdmVyeSBvZnRlbi4g
IFRoaXMgcmVxdWlyZW1lbnQgc2ltcGxpZmllcyBvdXIKKy8vIG5vdCBiZSBpbnZva2VkIHZlcnkg
b2Z0ZW4uIFRoaXMgcmVxdWlyZW1lbnQgc2ltcGxpZmllcyBvdXIKIC8vIGltcGxlbWVudGF0aW9u
IGFuZCBhbGxvd3MgdXMgdG8gdHVuZSBmb3IgZXhwZWN0ZWQgYWxsb2NhdGlvbgogLy8gcGF0dGVy
bnMuCi1zdGF0aWMgdm9pZCogZG9fbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkg
ewotICBBU1NFUlQoKGFsaWduICYgKGFsaWduIC0gMSkpID09IDApOwotICBBU1NFUlQoYWxpZ24g
PiAwKTsKLSAgaWYgKHBhZ2VoZWFwID09IE5VTEwpIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0
TW9kdWxlKCk7Ci0KLSAgLy8gQWxsb2NhdGUgYXQgbGVhc3Qgb25lIGJ5dGUgdG8gYXZvaWQgYm91
bmRhcnkgY29uZGl0aW9ucyBiZWxvdwotICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gMTsKLQotICBp
ZiAoc2l6ZSA8PSBrTWF4U2l6ZSAmJiBhbGlnbiA8IGtQYWdlU2l6ZSkgewotICAgIC8vIFNlYXJj
aCB0aHJvdWdoIGFjY2VwdGFibGUgc2l6ZSBjbGFzc2VzIGxvb2tpbmcgZm9yIG9uZSB3aXRoCi0g
ICAgLy8gZW5vdWdoIGFsaWdubWVudC4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0Ci0g
ICAgLy8gSW5pdFNpemVDbGFzc2VzKCkgY3VycmVudGx5IHByb2R1Y2VzIHNldmVyYWwgc2l6ZSBj
bGFzc2VzIHRoYXQKLSAgICAvLyBhcmUgYWxpZ25lZCBhdCBwb3dlcnMgb2YgdHdvLiAgV2Ugd2ls
bCB3YXN0ZSB0aW1lIGFuZCBzcGFjZSBpZgotICAgIC8vIHdlIG1pc3MgaW4gdGhlIHNpemUgY2xh
c3MgYXJyYXksIGJ1dCB0aGF0IGlzIGRlZW1lZCBhY2NlcHRhYmxlCi0gICAgLy8gc2luY2UgbWVt
YWxpZ24oKSBzaG91bGQgYmUgdXNlZCByYXJlbHkuCi0gICAgc2l6ZV90IGNsID0gU2l6ZUNsYXNz
KHNpemUpOwotICAgIHdoaWxlIChjbCA8IGtOdW1DbGFzc2VzICYmICgoY2xhc3NfdG9fc2l6ZVtj
bF0gJiAoYWxpZ24gLSAxKSkgIT0gMCkpIHsKLSAgICAgIGNsKys7Ci0gICAgfQotICAgIGlmIChj
bCA8IGtOdW1DbGFzc2VzKSB7Ci0gICAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCA9IFRD
TWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOwotICAgICAgcmV0dXJuIENoZWNrZWRNYWxs
b2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoY2xhc3NfdG9fc2l6ZVtjbF0pKTsKK3N0YXRpYyB2b2lk
KiBkb01lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKCEo
YWxpZ24gJiAoYWxpZ24gLSAxKSkpOworICAgIEFTU0VSVChhbGlnbiA+IDApOworICAgIGlmICgh
cGFnZWhlYXApCisgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUoKTsKKwor
ICAgIC8vIEFsbG9jYXRlIGF0IGxlYXN0IG9uZSBieXRlIHRvIGF2b2lkIGJvdW5kYXJ5IGNvbmRp
dGlvbnMgYmVsb3cKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHNpemUgPSAxOworCisgICAgaWYg
KHNpemUgPD0ga01heFNpemUgJiYgYWxpZ24gPCBrUGFnZVNpemUpIHsKKyAgICAgICAgLy8gU2Vh
cmNoIHRocm91Z2ggYWNjZXB0YWJsZSBzaXplIGNsYXNzZXMgbG9va2luZyBmb3Igb25lIHdpdGgK
KyAgICAgICAgLy8gZW5vdWdoIGFsaWdubWVudC4gVGhpcyBkZXBlbmRzIG9uIHRoZSBmYWN0IHRo
YXQKKyAgICAgICAgLy8gSW5pdFNpemVDbGFzc2VzKCkgY3VycmVudGx5IHByb2R1Y2VzIHNldmVy
YWwgc2l6ZSBjbGFzc2VzIHRoYXQKKyAgICAgICAgLy8gYXJlIGFsaWduZWQgYXQgcG93ZXJzIG9m
IHR3by4gV2Ugd2lsbCB3YXN0ZSB0aW1lIGFuZCBzcGFjZSBpZgorICAgICAgICAvLyB3ZSBtaXNz
IGluIHRoZSBzaXplIGNsYXNzIGFycmF5LCBidXQgdGhhdCBpcyBkZWVtZWQgYWNjZXB0YWJsZQor
ICAgICAgICAvLyBzaW5jZSBtZW1hbGlnbigpIHNob3VsZCBiZSB1c2VkIHJhcmVseS4KKyAgICAg
ICAgc2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNpemUpOworICAgICAgICB3aGlsZSAoY2wgPCBrTnVt
Q2xhc3NlcyAmJiAoY2xhc3NUb3NpemVbY2xdICYgKGFsaWduIC0gMSkpKQorICAgICAgICBjbCsr
OworICAgICAgICBpZiAoY2wgPCBrTnVtQ2xhc3NlcykgeworICAgICAgICAgICAgVENNYWxsb2NU
aHJlYWRDYWNoZSogaGVhcCA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CisgICAg
ICAgICAgICByZXR1cm4gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShjbGFzc1Rv
c2l6ZVtjbF0pKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIC8vIFdlIHdpbGwgYWxsb2Nh
dGUgZGlyZWN0bHkgZnJvbSB0aGUgcGFnZSBoZWFwCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOworICAgIC8vIFdlIHdpbGwgYWxsb2NhdGUgZGlyZWN0bHkgZnJvbSB0aGUgcGFn
ZSBoZWFwCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKIAotICBpZiAoYWxp
Z24gPD0ga1BhZ2VTaXplKSB7Ci0gICAgLy8gQW55IHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiB3aWxs
IGJlIGZpbmUKLSAgICAvLyBUT0RPOiBXZSBjb3VsZCBwdXQgdGhlIHJlc3Qgb2YgdGhpcyBwYWdl
IGluIHRoZSBhcHByb3ByaWF0ZQotICAgIC8vIFRPRE86IGNhY2hlIGJ1dCBpdCBkb2VzIG5vdCBz
ZWVtIHdvcnRoIGl0LgotICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNpemUp
KTsKLSAgICByZXR1cm4gc3BhbiA9PSBOVUxMID8gTlVMTCA6IFNwYW5Ub01hbGxvY1Jlc3VsdChz
cGFuKTsKLSAgfQorICAgIGlmIChhbGlnbiA8PSBrUGFnZVNpemUpIHsKKyAgICAgICAgLy8gQW55
IHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiB3aWxsIGJlIGZpbmUKKyAgICAgICAgLy8gVE9ETzogV2Ug
Y291bGQgcHV0IHRoZSByZXN0IG9mIHRoaXMgcGFnZSBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgLy8gVE9ETzogY2FjaGUgYnV0IGl0IGRvZXMgbm90IHNlZW0gd29ydGggaXQuCisgICAgICAg
IFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNpemUpKTsKKyAgICAgICAgcmV0dXJu
ICFzcGFuID8gMCA6IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKKyAgICB9CiAKLSAgLy8gQWxs
b2NhdGUgZXh0cmEgcGFnZXMgYW5kIGNhcnZlIG9mZiBhbiBhbGlnbmVkIHBvcnRpb24KLSAgY29u
c3QgTGVuZ3RoIGFsbG9jID0gcGFnZXMoc2l6ZSArIGFsaWduKTsKLSAgU3Bhbiogc3BhbiA9IHBh
Z2VoZWFwLT5OZXcoYWxsb2MpOwotICBpZiAoc3BhbiA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQot
ICAvLyBTa2lwIHN0YXJ0aW5nIHBvcnRpb24gc28gdGhhdCB3ZSBlbmQgdXAgYWxpZ25lZAotICBM
ZW5ndGggc2tpcCA9IDA7Ci0gIHdoaWxlICgoKChzcGFuLT5zdGFydCtza2lwKSA8PCBrUGFnZVNo
aWZ0KSAmIChhbGlnbiAtIDEpKSAhPSAwKSB7Ci0gICAgc2tpcCsrOwotICB9Ci0gIEFTU0VSVChz
a2lwIDwgYWxsb2MpOwotICBpZiAoc2tpcCA+IDApIHsKLSAgICBTcGFuKiByZXN0ID0gcGFnZWhl
YXAtPlNwbGl0KHNwYW4sIHNraXApOwotICAgIHBhZ2VoZWFwLT5EZWxldGUoc3Bhbik7Ci0gICAg
c3BhbiA9IHJlc3Q7Ci0gIH0KKyAgICAvLyBBbGxvY2F0ZSBleHRyYSBwYWdlcyBhbmQgY2FydmUg
b2ZmIGFuIGFsaWduZWQgcG9ydGlvbgorICAgIGNvbnN0IExlbmd0aCBhbGxvYyA9IHBhZ2VzKHNp
emUgKyBhbGlnbik7CisgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcoYWxsb2MpOworICAg
IGlmICghc3BhbikKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgLy8gU2tpcCB0cmFpbGluZyBwb3J0
aW9uIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gcmV0dXJuCi0gIGNvbnN0IExlbmd0aCBuZWVkZWQg
PSBwYWdlcyhzaXplKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+PSBuZWVkZWQpOwotICBpZiAo
c3Bhbi0+bGVuZ3RoID4gbmVlZGVkKSB7Ci0gICAgU3BhbiogdHJhaWxlciA9IHBhZ2VoZWFwLT5T
cGxpdChzcGFuLCBuZWVkZWQpOwotICAgIHBhZ2VoZWFwLT5EZWxldGUodHJhaWxlcik7Ci0gIH0K
LSAgcmV0dXJuIFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKKyAgICAvLyBTa2lwIHN0YXJ0aW5n
IHBvcnRpb24gc28gdGhhdCB3ZSBlbmQgdXAgYWxpZ25lZAorICAgIExlbmd0aCBza2lwID0gMDsK
KyAgICB3aGlsZSAoKChzcGFuLT5zdGFydCtza2lwKSA8PCBrUGFnZVNoaWZ0KSAmIChhbGlnbiAt
IDEpKQorICAgICAgICBza2lwKys7CisgICAgQVNTRVJUKHNraXAgPCBhbGxvYyk7CisgICAgaWYg
KHNraXAgPiAwKSB7CisgICAgICAgIFNwYW4qIHJlc3QgPSBwYWdlaGVhcC0+U3BsaXQoc3Bhbiwg
c2tpcCk7CisgICAgICAgIHBhZ2VoZWFwLT5EZWxldGUoc3Bhbik7CisgICAgICAgIHNwYW4gPSBy
ZXN0OworICAgIH0KKworICAgIC8vIFNraXAgdHJhaWxpbmcgcG9ydGlvbiB0aGF0IHdlIGRvIG5v
dCBuZWVkIHRvIHJldHVybgorICAgIGNvbnN0IExlbmd0aCBuZWVkZWQgPSBwYWdlcyhzaXplKTsK
KyAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID49IG5lZWRlZCk7CisgICAgaWYgKHNwYW4tPmxlbmd0
aCA+IG5lZWRlZCkgeworICAgICAgICBTcGFuKiB0cmFpbGVyID0gcGFnZWhlYXAtPlNwbGl0KHNw
YW4sIG5lZWRlZCk7CisgICAgICAgIHBhZ2VoZWFwLT5EZWxldGUodHJhaWxlcik7CisgICAgfQor
ICAgIHJldHVybiBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7CiB9CiAjZW5kaWYKIAogLy8gSGVs
cGVycyBmb3IgdXNlIGJ5IGV4cG9ydGVkIHJvdXRpbmVzIGJlbG93OgogCiAjaWZuZGVmIFdURl9D
SEFOR0VTCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9fbWFsbG9jX3N0YXRzKCkgewotICBQcmludFN0
YXRzKDEpOworc3RhdGljIGlubGluZSB2b2lkIGRvTWFsbG9jU3RhdHMoKQoreworICAgIFByaW50
U3RhdHMoMSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBpbnQgZG9fbWFsbG9wdChpbnQs
IGludCkgewotICByZXR1cm4gMTsgICAgIC8vIEluZGljYXRlcyBlcnJvcgorc3RhdGljIGlubGlu
ZSBpbnQgZG9NYWxsb3B0KGludCwgaW50KQoreworICAgIHJldHVybiAxOyAvLyBJbmRpY2F0ZXMg
ZXJyb3IKIH0KIAotI2lmZGVmIEhBVkVfU1RSVUNUX01BTExJTkZPICAvLyBtYWxsaW5mbyBpc24n
dCBkZWZpbmVkIG9uIGZyZWVic2QsIGZvciBpbnN0YW5jZQotc3RhdGljIGlubGluZSBzdHJ1Y3Qg
bWFsbGluZm8gZG9fbWFsbGluZm8oKSB7Ci0gIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gIEV4dHJh
Y3RTdGF0cygmc3RhdHMsIE5VTEwpOwotCi0gIC8vIEp1c3Qgc29tZSBvZiB0aGUgZmllbGRzIGFy
ZSBmaWxsZWQgaW4uCi0gIHN0cnVjdCBtYWxsaW5mbyBpbmZvOwotICBtZW1zZXQoJmluZm8sIDAs
IHNpemVvZihpbmZvKSk7Ci0KLSAgLy8gVW5mb3J0dW5hdGVseSwgdGhlIHN0cnVjdCBjb250YWlu
cyAiaW50IiBmaWVsZCwgc28gc29tZSBvZiB0aGUKLSAgLy8gc2l6ZSB2YWx1ZXMgd2lsbCBiZSB0
cnVuY2F0ZWQuCi0gIGluZm8uYXJlbmEgICAgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0
ZW1fYnl0ZXMpOwotICBpbmZvLmZzbWJsa3MgICA9IHN0YXRpY19jYXN0PGludD4oc3RhdHMudGhy
ZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0YXRzLmNl
bnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHMu
dHJhbnNmZXJfYnl0ZXMpOwotICBpbmZvLmZvcmRibGtzICA9IHN0YXRpY19jYXN0PGludD4oc3Rh
dHMucGFnZWhlYXBfYnl0ZXMpOwotICBpbmZvLnVvcmRibGtzICA9IHN0YXRpY19jYXN0PGludD4o
c3RhdHMuc3lzdGVtX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
IHN0YXRzLnRocmVhZF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LSBzdGF0cy5jZW50cmFsX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzKTsKKyNpZmRlZiBIQVZFX1NUUlVDVF9NQUxMSU5G
TyAvLyBtYWxsaW5mbyBpc24ndCBkZWZpbmVkIG9uIGZyZWVic2QsIGZvciBpbnN0YW5jZQorc3Rh
dGljIGlubGluZSBzdHJ1Y3QgbWFsbGluZm8gZG9NYWxsaW5mbygpCit7CisgICAgVENNYWxsb2NT
dGF0cyBzdGF0czsKKyAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKworICAgIC8vIEp1c3Qg
c29tZSBvZiB0aGUgZmllbGRzIGFyZSBmaWxsZWQgaW4uCisgICAgc3RydWN0IG1hbGxpbmZvIGlu
Zm87CisgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwogCi0gIHJldHVybiBpbmZv
OworICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZSBzdHJ1Y3QgY29udGFpbnMgImludCIgZmllbGQs
IHNvIHNvbWUgb2YgdGhlCisgICAgLy8gc2l6ZSB2YWx1ZXMgd2lsbCBiZSB0cnVuY2F0ZWQuCisg
ICAgaW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnN5c3RlbUJ5dGVzKTsK
KyAgICBpbmZvLmZzbWJsa3MgICA9IHN0YXRpY19jYXN0PGludD4oc3RhdHMudGhyZWFkQnl0ZXMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHMuY2VudHJhbEJ5dGVz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0YXRzLnRyYW5zZmVyQnl0
ZXMpOworICAgIGluZm8uZm9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5wYWdlaGVh
cEJ5dGVzKTsKKyAgICBpbmZvLnVvcmRibGtzICA9IHN0YXRpY19jYXN0PGludD4oc3RhdHMuc3lz
dGVtQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhy
ZWFkQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2Vu
dHJhbEJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRy
YW5zZmVyQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMu
cGFnZWhlYXBCeXRlcyk7CisKKyAgICByZXR1cm4gaW5mbzsKIH0KICNlbmRpZgogCkBAIC0zODQ4
LDcgKzM5NjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYWxsaW5mbyBkb19tYWxsaW5mCiAj
aWZuZGVmIFdURl9DSEFOR0VTCiBleHRlcm4gIkMiIAogI2Vsc2UKLSNkZWZpbmUgZG9fbWFsbG9j
IGRvX21hbGxvYzxjcmFzaE9uRmFpbHVyZT4KKyNkZWZpbmUgZG9NYWxsb2MgZG9NYWxsb2M8Y3Jh
c2hPbkZhaWx1cmU+CiAKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lO
TElORSB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKQEAgLTM4NzAsMTkgKzM5ODIsMTkgQEAgdm9pZCog
bWFsbG9jKHNpemVfdCBzaXplKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikK
ICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVybmFsOjpW
YWxpZGF0aW9uQnVmZmVyU2l6ZSA8PSBzaXplKSAgLy8gSWYgb3ZlcmZsb3cgd291bGQgb2NjdXIu
Li4KICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKHNpemUg
KyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IGRv
TWFsbG9jKHNpemUgKyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVh
ZGVyKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KHJl
c3VsdCk7Ci0gICAgaGVhZGVyLT5tX3NpemUgPSBzaXplOworICAgIGhlYWRlci0+bXNpemUgPSBz
aXplOwogICAgIGhlYWRlci0+bV90eXBlID0gSW50ZXJuYWw6OkFsbG9jVHlwZU1hbGxvYzsKICAg
ICBoZWFkZXItPm1fcHJlZml4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEludGVybmFsOjpWYWxp
ZGF0aW9uUHJlZml4KTsKICAgICByZXN1bHQgPSBoZWFkZXIgKyAxOwogICAgICpJbnRlcm5hbDo6
ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgocmVzdWx0KSA9IEludGVybmFsOjpWYWxpZGF0aW9u
U3VmZml4OwogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2Vsc2UKLSAgICB2b2lk
KiByZXN1bHQgPSBkb19tYWxsb2Moc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gZG9NYWxsb2Mo
c2l6ZSk7CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwpAQCAtMzkwNSwxMCArNDAxNywx
MCBAQCB2b2lkIGZyZWUodm9pZCogcHRyKSB7CiAKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocHRy
KTsKICAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlciogaGVhZGVyID0gSW50ZXJuYWw6OmZh
c3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKHB0cik7Ci0gICAgbWVtc2V0KHB0ciwgMHhDQywgaGVh
ZGVyLT5tX3NpemUpOwotICAgIGRvX2ZyZWUoaGVhZGVyKTsKKyAgICBtZW1zZXQocHRyLCAweEND
LCBoZWFkZXItPm1zaXplKTsKKyAgICBkb0ZyZWUoaGVhZGVyKTsKICNlbHNlCi0gICAgZG9fZnJl
ZShwdHIpOworICAgIGRvRnJlZShwdHIpOwogI2VuZGlmCiB9CiAKQEAgLTM5MTgsMTggKzQwMzAs
MTggQEAgZXh0ZXJuICJDIgogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAKLXZvaWQqIGZhc3RDYWxsb2Mo
c2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCit2b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuLCBz
aXplX3QgZWxlbXNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jPHRydWU+KG4sIGVs
ZW1fc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jPHRydWU+KG4sIGVsZW1zaXplKTsK
ICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0
ZShyZXN1bHQpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVHJ5TWFsbG9jUmV0
dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkKK1RyeU1h
bGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtc2l6ZSkK
IHsKLSAgICB2b2lkKiByZXN1bHQgPSBjYWxsb2M8ZmFsc2U+KG4sIGVsZW1fc2l6ZSk7CisgICAg
dm9pZCogcmVzdWx0ID0gY2FsbG9jPGZhbHNlPihuLCBlbGVtc2l6ZSk7CiAjaWYgRU5BQkxFKFdU
Rl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICNl
bmRpZgpAQCAtMzkzOSwxMiArNDA1MSwxMyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0
Q2FsbG9jKHNpemVfCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KIEFMV0FZU19JTkxJ
TkUKICNlbmRpZgotdm9pZCogY2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbV9zaXplKSB7Ci0g
IHNpemVfdCB0b3RhbEJ5dGVzID0gbiAqIGVsZW1fc2l6ZTsKK3ZvaWQqIGNhbGxvYyhzaXplX3Qg
biwgc2l6ZV90IGVsZW1zaXplKQoreworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gbiAqIGVsZW1z
aXplOwogICAgIAotICAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZsb3cKLSAgaWYgKG4gPiAxICYm
IGVsZW1fc2l6ZSAmJiAodG90YWxCeXRlcyAvIGVsZW1fc2l6ZSkgIT0gbikKLSAgICByZXR1cm4g
MDsKKyAgICAvLyBQcm90ZWN0IGFnYWluc3Qgb3ZlcmZsb3cKKyAgICBpZiAobiA+IDEgJiYgZWxl
bXNpemUgJiYgKHRvdGFsQnl0ZXMgLyBlbGVtc2l6ZSkgIT0gbikKKyAgICAgICAgcmV0dXJuIDA7
CiAKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIHZvaWQqIHJlc3VsdCA9
IG1hbGxvYzxjcmFzaE9uRmFpbHVyZT4odG90YWxCeXRlcyk7CkBAIC0zOTU0LDE2ICs0MDY3LDE1
IEBAIHZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkKICAgICBtZW1zZXQo
cmVzdWx0LCAwLCB0b3RhbEJ5dGVzKTsKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsK
ICNlbHNlCi0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKHRvdGFsQnl0ZXMpOwotICAgIGlm
IChyZXN1bHQgIT0gTlVMTCkgeworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWFsbG9jKHRvdGFsQnl0
ZXMpOworICAgIGlmIChyZXN1bHQpCiAgICAgICAgIG1lbXNldChyZXN1bHQsIDAsIHRvdGFsQnl0
ZXMpOwotICAgIH0KICNlbmRpZgogCiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gIE1hbGxvY0hvb2s6
Okludm9rZU5ld0hvb2socmVzdWx0LCB0b3RhbEJ5dGVzKTsKKyAgICBNYWxsb2NIb29rOjpJbnZv
a2VOZXdIb29rKHJlc3VsdCwgdG90YWxCeXRlcyk7CiAjZW5kaWYKLSAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBTaW5jZSBjZnJlZSBpc24ndCB1c2VkIGFueXdo
ZXJlLCB3ZSBkb24ndCBjb21waWxlIGl0IGluLgpAQCAtMzk3NSw3ICs0MDg3LDcgQEAgdm9pZCBj
ZnJlZSh2b2lkKiBwdHIpIHsKICNpZm5kZWYgV1RGX0NIQU5HRVMKICAgICBNYWxsb2NIb29rOjpJ
bnZva2VEZWxldGVIb29rKHB0cik7CiAjZW5kaWYKLSAgZG9fZnJlZShwdHIpOworICAgIGRvRnJl
ZShwdHIpOwogfQogI2VuZGlmCiAKQEAgLTM5ODUsMjQgKzQwOTcsMjQgQEAgZXh0ZXJuICJDIgog
dGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5FIHZvaWQqIHJlYWxs
b2Modm9pZCosIHNpemVfdCk7CiAKLXZvaWQqIGZhc3RSZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNp
emVfdCBuZXdfc2l6ZSkKK3ZvaWQqIGZhc3RSZWFsbG9jKHZvaWQqIG9sZHB0ciwgc2l6ZV90IG5l
d1NpemUpCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBmYXN0TWFs
bG9jVmFsaWRhdGUob2xkX3B0cik7CisgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKG9sZHB0cik7CiAj
ZW5kaWYKLSAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPHRydWU+KG9sZF9wdHIsIG5ld19zaXpl
KTsKKyAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPHRydWU+KG9sZHB0ciwgbmV3U2l6ZSk7CiAj
aWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUo
cmVzdWx0KTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRyeU1hbGxvY1JldHVy
blZhbHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBuZXdfc2l6ZSkKK1Ry
eU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQqIG9sZHB0ciwgc2l6ZV90IG5l
d1NpemUpCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBmYXN0TWFs
bG9jVmFsaWRhdGUob2xkX3B0cik7CisgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKG9sZHB0cik7CiAj
ZW5kaWYKLSAgICB2b2lkKiByZXN1bHQgPSByZWFsbG9jPGZhbHNlPihvbGRfcHRyLCBuZXdfc2l6
ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzxmYWxzZT4ob2xkcHRyLCBuZXdTaXplKTsK
ICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0
ZShyZXN1bHQpOwogI2VuZGlmCkBAIC00MDEyLDEwOSArNDEyNCwxMDggQEAgVHJ5TWFsbG9jUmV0
dXJuVmFsdWUgdHJ5RmFzdFJlYWxsb2Modm9pZAogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1
cmU+CiBBTFdBWVNfSU5MSU5FCiAjZW5kaWYKLXZvaWQqIHJlYWxsb2Modm9pZCogb2xkX3B0ciwg
c2l6ZV90IG5ld19zaXplKSB7Ci0gIGlmIChvbGRfcHRyID09IE5VTEwpIHsKK3ZvaWQqIHJlYWxs
b2Modm9pZCogb2xkcHRyLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBpZiAoIW9sZHB0cikgewog
I2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgdm9pZCogcmVzdWx0ID0gbWFs
bG9jPGNyYXNoT25GYWlsdXJlPihuZXdfc2l6ZSk7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1h
bGxvYzxjcmFzaE9uRmFpbHVyZT4obmV3U2l6ZSk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9
IGRvX21hbGxvYyhuZXdfc2l6ZSk7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGRvTWFsbG9jKG5l
d1NpemUpOwogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hv
b2socmVzdWx0LCBuZXdfc2l6ZSk7CisgICAgICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2so
cmVzdWx0LCBuZXdTaXplKTsKICNlbmRpZgogI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
fQotICBpZiAobmV3X3NpemUgPT0gMCkgeworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICBpZiAoIW5ld1NpemUpIHsKICNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29r
OjpJbnZva2VEZWxldGVIb29rKG9sZF9wdHIpOworICAgICAgICBNYWxsb2NIb29rOjpJbnZva2VE
ZWxldGVIb29rKG9sZHB0cik7CiAjZW5kaWYKLSAgICBmcmVlKG9sZF9wdHIpOwotICAgIHJldHVy
biBOVUxMOwotICB9CisgICAgICAgIGZyZWUob2xkcHRyKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBpZiAoc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVybmFsOjpWYWxpZGF0aW9uQnVmZmVy
U2l6ZSA8PSBuZXdfc2l6ZSkgIC8vIElmIG92ZXJmbG93IHdvdWxkIG9jY3VyLi4uCisgICAgaWYg
KHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBJbnRlcm5hbDo6VmFsaWRhdGlv
bkJ1ZmZlclNpemUgPD0gbmV3U2l6ZSkgLy8gSWYgb3ZlcmZsb3cgd291bGQgb2NjdXIuLi4KICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgSW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqIGhlYWRlciA9
IEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihvbGRfcHRyKTsKLSAgICBmYXN0
TWFsbG9jVmFsaWRhdGUob2xkX3B0cik7Ci0gICAgb2xkX3B0ciA9IGhlYWRlcjsKLSAgICBoZWFk
ZXItPm1fc2l6ZSA9IG5ld19zaXplOwotICAgIG5ld19zaXplICs9IEludGVybmFsOjpWYWxpZGF0
aW9uQnVmZmVyU2l6ZTsKLSNlbmRpZgotCi0gIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgb2xkIGVu
dHJ5Ci0gIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9sZF9w
dHIpID4+IGtQYWdlU2hpZnQ7Ci0gIHNpemVfdCBjbCA9IHBhZ2VoZWFwLT5HZXRTaXplQ2xhc3NJ
ZkNhY2hlZChwKTsKLSAgU3BhbiAqc3BhbiA9IE5VTEw7Ci0gIHNpemVfdCBvbGRfc2l6ZTsKLSAg
aWYgKGNsID09IDApIHsKLSAgICBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3IocCk7Ci0g
ICAgY2wgPSBzcGFuLT5zaXplY2xhc3M7Ci0gICAgcGFnZWhlYXAtPkNhY2hlU2l6ZUNsYXNzKHAs
IGNsKTsKLSAgfQotICBpZiAoY2wgIT0gMCkgewotICAgIG9sZF9zaXplID0gQnl0ZVNpemVGb3JD
bGFzcyhjbCk7Ci0gIH0gZWxzZSB7Ci0gICAgQVNTRVJUKHNwYW4gIT0gTlVMTCk7Ci0gICAgb2xk
X3NpemUgPSBzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKLSAgfQotCi0gIC8vIFJlYWxsb2Nh
dGUgaWYgdGhlIG5ldyBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBvbGQgc2l6ZSwKLSAgLy8gb3Ig
aWYgdGhlIG5ldyBzaXplIGlzIHNpZ25pZmljYW50bHkgc21hbGxlciB0aGFuIHRoZSBvbGQgc2l6
ZS4KLSAgaWYgKChuZXdfc2l6ZSA+IG9sZF9zaXplKSB8fCAoQWxsb2NhdGlvblNpemUobmV3X3Np
emUpIDwgb2xkX3NpemUpKSB7Ci0gICAgLy8gTmVlZCB0byByZWFsbG9jYXRlCi0gICAgdm9pZCog
bmV3X3B0ciA9IGRvX21hbGxvYyhuZXdfc2l6ZSk7Ci0gICAgaWYgKG5ld19wdHIgPT0gTlVMTCkg
ewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVh
ZGVyKiBoZWFkZXIgPSBJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIob2xkcHRy
KTsKKyAgICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkcHRyKTsKKyAgICBvbGRwdHIgPSBoZWFkZXI7
CisgICAgaGVhZGVyLT5tc2l6ZSA9IG5ld1NpemU7CisgICAgbmV3U2l6ZSArPSBJbnRlcm5hbDo6
VmFsaWRhdGlvbkJ1ZmZlclNpemU7CisjZW5kaWYKKworICAgIC8vIEdldCB0aGUgc2l6ZSBvZiB0
aGUgb2xkIGVudHJ5CisgICAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ob2xkcHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIHNpemVfdCBjbCA9IHBhZ2VoZWFwLT5H
ZXRTaXplQ2xhc3NJZkNhY2hlZChwKTsKKyAgICBTcGFuKiBzcGFuID0gMDsKKyAgICBzaXplX3Qg
b2xkc2l6ZTsKKyAgICBpZiAoIWNsKSB7CisgICAgICAgIHNwYW4gPSBwYWdlaGVhcC0+R2V0RGVz
Y3JpcHRvcihwKTsKKyAgICAgICAgY2wgPSBzcGFuLT5zaXplY2xhc3M7CisgICAgICAgIHBhZ2Vo
ZWFwLT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7CisgICAgfQorICAgIGlmIChjbCkKKyAgICAgICAg
b2xkc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoc3Bhbik7CisgICAgICAgIG9sZHNpemUgPSBzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsK
KyAgICB9CisKKyAgICAvLyBSZWFsbG9jYXRlIGlmIHRoZSBuZXcgc2l6ZSBpcyBsYXJnZXIgdGhh
biB0aGUgb2xkIHNpemUsCisgICAgLy8gb3IgaWYgdGhlIG5ldyBzaXplIGlzIHNpZ25pZmljYW50
bHkgc21hbGxlciB0aGFuIHRoZSBvbGQgc2l6ZS4KKyAgICBpZiAoKG5ld1NpemUgPiBvbGRzaXpl
KSB8fCAoQWxsb2NhdGlvblNpemUobmV3U2l6ZSkgPCBvbGRzaXplKSkgeworICAgICAgICAvLyBO
ZWVkIHRvIHJlYWxsb2NhdGUKKyAgICAgICAgdm9pZCogbmV3cHRyID0gZG9NYWxsb2MobmV3U2l6
ZSk7CisgICAgICAgIGlmICghbmV3cHRyKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAjaWZuZGVm
IFdURl9DSEFOR0VTCi0gICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhuZXdfcHRyLCBuZXdf
c2l6ZSk7CisgICAgICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2sobmV3cHRyLCBuZXdTaXpl
KTsKICNlbmRpZgotICAgIG1lbWNweShuZXdfcHRyLCBvbGRfcHRyLCAoKG9sZF9zaXplIDwgbmV3
X3NpemUpID8gb2xkX3NpemUgOiBuZXdfc2l6ZSkpOworICAgICAgICBtZW1jcHkobmV3cHRyLCBv
bGRwdHIsICgob2xkc2l6ZSA8IG5ld1NpemUpID8gb2xkc2l6ZSA6IG5ld1NpemUpKTsKICNpZm5k
ZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZF9wdHIp
OworICAgICAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKG9sZHB0cik7CiAjZW5kaWYK
LSAgICAvLyBXZSBjb3VsZCB1c2UgYSB2YXJpYW50IG9mIGRvX2ZyZWUoKSB0aGF0IGxldmVyYWdl
cyB0aGUgZmFjdAotICAgIC8vIHRoYXQgd2UgYWxyZWFkeSBrbm93IHRoZSBzaXplY2xhc3Mgb2Yg
b2xkX3B0ci4gIFRoZSBiZW5lZml0Ci0gICAgLy8gd291bGQgYmUgc21hbGwsIHNvIGRvbid0IGJv
dGhlci4KLSAgICBkb19mcmVlKG9sZF9wdHIpOworICAgICAgICAvLyBXZSBjb3VsZCB1c2UgYSB2
YXJpYW50IG9mIGRvRnJlZSgpIHRoYXQgbGV2ZXJhZ2VzIHRoZSBmYWN0CisgICAgICAgIC8vIHRo
YXQgd2UgYWxyZWFkeSBrbm93IHRoZSBzaXplY2xhc3Mgb2Ygb2xkcHRyLiBUaGUgYmVuZWZpdAor
ICAgICAgICAvLyB3b3VsZCBiZSBzbWFsbCwgc28gZG9uJ3QgYm90aGVyLgorICAgICAgICBkb0Zy
ZWUob2xkcHRyKTsKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIG5ld19w
dHIgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KG5ld19wdHIpICsg
MTsKLSAgICAqSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uU3VmZml4KG5ld19wdHIpID0g
SW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CisgICAgICAgIG5ld3B0ciA9IHN0YXRpY19jYXN0
PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4obmV3cHRyKSArIDE7CisgICAgICAgICpJbnRl
cm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgobmV3cHRyKSA9IEludGVybmFsOjpWYWxp
ZGF0aW9uU3VmZml4OwogI2VuZGlmCi0gICAgcmV0dXJuIG5ld19wdHI7Ci0gIH0gZWxzZSB7Cisg
ICAgICAgIHJldHVybiBuZXdwdHI7CisgICAgfQogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElE
QVRJT04pCi0gICAgb2xkX3B0ciA9IHN0YXRpY19jYXN0PEludGVybmFsOjpWYWxpZGF0aW9uSGVh
ZGVyKj4ob2xkX3B0cikgKyAxOyAvLyBTZXQgb2xkX3B0ciBiYWNrIHRvIHRoZSB1c2VyIHBvaW50
ZXIuCi0gICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1ZmZpeChvbGRfcHRyKSA9
IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OworICAgIG9sZHB0ciA9IHN0YXRpY19jYXN0PElu
dGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4ob2xkcHRyKSArIDE7IC8vIFNldCBvbGRwdHIgYmFj
ayB0byB0aGUgdXNlciBwb2ludGVyLgorICAgICpJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRp
b25TdWZmaXgob2xkcHRyKSA9IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OwogI2VuZGlmCi0g
ICAgcmV0dXJuIG9sZF9wdHI7Ci0gIH0KKyAgICByZXR1cm4gb2xkcHRyOwogfQogCiAjaWZkZWYg
V1RGX0NIQU5HRVMKLSN1bmRlZiBkb19tYWxsb2MKKyN1bmRlZiBkb01hbGxvYwogI2Vsc2UKIAog
c3RhdGljIFNwaW5Mb2NrIHNldF9uZXdfaGFuZGxlcl9sb2NrID0gU1BJTkxPQ0tfSU5JVElBTEla
RVI7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCogY3BwX2FsbG9jKHNpemVfdCBzaXplLCBib29sIG5v
dGhyb3cpIHsKLSAgZm9yICg7OykgewotICAgIHZvaWQqIHAgPSBkb19tYWxsb2Moc2l6ZSk7Cisg
ICAgZm9yICg7OykgeworICAgICAgICB2b2lkKiBwID0gZG9NYWxsb2Moc2l6ZSk7CiAjaWZkZWYg
UFJFQU5TSU5FVwotICAgIHJldHVybiBwOworICAgICAgICByZXR1cm4gcDsKICNlbHNlCi0gICAg
aWYgKHAgPT0gTlVMTCkgeyAgLy8gYWxsb2NhdGlvbiBmYWlsZWQKLSAgICAgIC8vIEdldCB0aGUg
Y3VycmVudCBuZXcgaGFuZGxlci4gIE5COiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAotICAgICAgLy8g
dGhyZWFkLXNhZmUuICBXZSBtYWtlIGEgZmVlYmxlIHN0YWIgYXQgbWFraW5nIGl0IHNvIGhlcmUs
IGJ1dAotICAgICAgLy8gdGhpcyBsb2NrIG9ubHkgcHJvdGVjdHMgYWdhaW5zdCB0Y21hbGxvYyBp
bnRlcmZlcmluZyB3aXRoCi0gICAgICAvLyBpdHNlbGYsIG5vdCB3aXRoIG90aGVyIGxpYnJhcmll
cyBjYWxsaW5nIHNldF9uZXdfaGFuZGxlci4KLSAgICAgIHN0ZDo6bmV3X2hhbmRsZXIgbmg7Ci0g
ICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnNldF9uZXdfaGFuZGxlcl9sb2NrKTsK
LSAgICAgICAgbmggPSBzdGQ6OnNldF9uZXdfaGFuZGxlcigwKTsKLSAgICAgICAgKHZvaWQpIHN0
ZDo6c2V0X25ld19oYW5kbGVyKG5oKTsKLSAgICAgIH0KKyAgICAgICAgaWYgKCFwKSB7IC8vIGFs
bG9jYXRpb24gZmFpbGVkCisgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbmV3IGhhbmRs
ZXIuIE5COiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICAgICAgICAgICAgLy8gdGhyZWFkLXNhZmUu
IFdlIG1ha2UgYSBmZWVibGUgc3RhYiBhdCBtYWtpbmcgaXQgc28gaGVyZSwgYnV0CisgICAgICAg
ICAgICAvLyB0aGlzIGxvY2sgb25seSBwcm90ZWN0cyBhZ2FpbnN0IHRjbWFsbG9jIGludGVyZmVy
aW5nIHdpdGgKKyAgICAgICAgICAgIC8vIGl0c2VsZiwgbm90IHdpdGggb3RoZXIgbGlicmFyaWVz
IGNhbGxpbmcgc2V0X25ld19oYW5kbGVyLgorICAgICAgICAgICAgc3RkOjpuZXdfaGFuZGxlciBu
aDsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZzZXRf
bmV3X2hhbmRsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgbmggPSBzdGQ6OnNldF9uZXdfaGFu
ZGxlcigwKTsKKyAgICAgICAgICAgICAgICAodm9pZCkgc3RkOjpzZXRfbmV3X2hhbmRsZXIobmgp
OworICAgICAgICAgICAgfQogICAgICAgLy8gSWYgbm8gbmV3X2hhbmRsZXIgaXMgZXN0YWJsaXNo
ZWQsIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4KICAgICAgIGlmICghbmgpIHsKICAgICAgICAgaWYg
KG5vdGhyb3cpIHJldHVybiAwOwpAQCAtNDEzMywxMjcgKzQyNDQsMTMwIEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCogY3BwX2FsbG9jKHNpemVfdCBzaXoKICAgICAgIHJldHVybiBwOwogICAgIH0KICNl
bmRpZgotICB9CisKKyAgICB9CiB9CiAKICNpZiBFTkFCTEUoR0xPQkFMX0ZBU1RNQUxMT0NfTkVX
KQogCiB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUpIHsKLSAgdm9pZCogcCA9IGNwcF9h
bGxvYyhzaXplLCBmYWxzZSk7Ci0gIC8vIFdlIGtlZXAgdGhpcyBuZXh0IGluc3RydWN0aW9uIG91
dCBvZiBjcHBfYWxsb2MgZm9yIGEgcmVhc29uOiB3aGVuCi0gIC8vIGl0J3MgaW4sIGFuZCBuZXcg
anVzdCBjYWxscyBjcHBfYWxsb2MsIHRoZSBvcHRpbWl6ZXIgbWF5IGZvbGQgdGhlCi0gIC8vIG5l
dyBjYWxsIGludG8gY3BwX2FsbG9jLCB3aGljaCBtZXNzZXMgdXAgb3VyIHdob2xlIHNlY3Rpb24t
YmFzZWQKLSAgLy8gc3RhY2t0cmFjaW5nIChzZWUgQVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4g
IFRoaXMgZW5zdXJlcyBjcHBfYWxsb2MKLSAgLy8gaXNuJ3QgdGhlIGxhc3QgdGhpbmcgdGhpcyBm
biBjYWxscywgYW5kIHByZXZlbnRzIHRoZSBmb2xkaW5nLgotICBNYWxsb2NIb29rOjpJbnZva2VO
ZXdIb29rKHAsIHNpemUpOwotICByZXR1cm4gcDsKKyAgICB2b2lkKiBwID0gY3BwX2FsbG9jKHNp
emUsIGZhbHNlKTsKKyAgICAvLyBXZSBrZWVwIHRoaXMgbmV4dCBpbnN0cnVjdGlvbiBvdXQgb2Yg
Y3BwX2FsbG9jIGZvciBhIHJlYXNvbjogd2hlbgorICAgIC8vIGl0J3MgaW4sIGFuZCBuZXcganVz
dCBjYWxscyBjcHBfYWxsb2MsIHRoZSBvcHRpbWl6ZXIgbWF5IGZvbGQgdGhlCisgICAgLy8gbmV3
IGNhbGwgaW50byBjcHBfYWxsb2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1i
YXNlZAorICAgIC8vIHN0YWNrdHJhY2luZyAoc2VlIEFUVFJJQlVURV9TRUNUSU9OLCBhYm92ZSku
IFRoaXMgZW5zdXJlcyBjcHBfYWxsb2MKKyAgICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlz
IGZuIGNhbGxzLCBhbmQgcHJldmVudHMgdGhlIGZvbGRpbmcuCisgICAgTWFsbG9jSG9vazo6SW52
b2tlTmV3SG9vayhwLCBzaXplKTsKKyAgICByZXR1cm4gcDsKIH0KIAogdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9fVEhST1cgewotICB2b2lk
KiBwID0gY3BwX2FsbG9jKHNpemUsIHRydWUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29r
KHAsIHNpemUpOwotICByZXR1cm4gcDsKKyAgICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIHRy
dWUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7CisgICAgcmV0dXJu
IHA7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIF9fVEhST1cgewotICBNYWxs
b2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOworICAgIE1hbGxvY0hv
b2s6Okludm9rZURlbGV0ZUhvb2socCk7CisgICAgZG9GcmVlKHApOwogfQogCiB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSh2b2lkKiBwLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9fVEhST1cgewotICBN
YWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOworICAgIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7CisgICAgZG9GcmVlKHApOwogfQogCiB2b2lkKiBv
cGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUs
IGZhbHNlKTsKLSAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9h
bGxvYyBmb3IgYSByZWFzb246IHdoZW4KLSAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxz
IGNwcF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKLSAgLy8gbmV3IGNhbGwgaW50
byBjcHBfYWxsb2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1iYXNlZAotICAv
LyBzdGFja3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiAgVGhpcyBlbnN1
cmVzIGNwcF9hbGxvYwotICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlzIGZuIGNhbGxzLCBh
bmQgcHJldmVudHMgdGhlIGZvbGRpbmcuCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwg
c2l6ZSk7Ci0gIHJldHVybiBwOworICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2Up
OworICAgIC8vIFdlIGtlZXAgdGhpcyBuZXh0IGluc3RydWN0aW9uIG91dCBvZiBjcHBfYWxsb2Mg
Zm9yIGEgcmVhc29uOiB3aGVuCisgICAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxzIGNw
cF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKKyAgICAvLyBuZXcgY2FsbCBpbnRv
IGNwcF9hbGxvYywgd2hpY2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCisgICAg
Ly8gc3RhY2t0cmFjaW5nIChzZWUgQVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4gVGhpcyBlbnN1
cmVzIGNwcF9hbGxvYworICAgIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMs
IGFuZCBwcmV2ZW50cyB0aGUgZm9sZGluZy4KKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29r
KHAsIHNpemUpOworICAgIHJldHVybiBwOwogfQogCiB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXpl
X3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgdm9pZCogcCA9IGNw
cF9hbGxvYyhzaXplLCB0cnVlKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXpl
KTsKLSAgcmV0dXJuIHA7CisgICAgdm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCB0cnVlKTsKKyAg
ICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOworICAgIHJldHVybiBwOwogfQog
CiB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHApIF9fVEhST1cgewotICBNYWxsb2NIb29r
OjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOworICAgIE1hbGxvY0hvb2s6Oklu
dm9rZURlbGV0ZUhvb2socCk7CisgICAgZG9GcmVlKHApOwogfQogCiB2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdKHZvaWQqIHAsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9v
azo6SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKICNlbmRpZgogCiBl
eHRlcm4gIkMiIHZvaWQqIG1lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpIF9fVEhS
T1cgewotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihhbGlnbiwgc2l6ZSk7Ci0gIE1hbGxv
Y0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB2b2lkKiByZXN1bHQgPSBkb01lbWFsaWduKGFsaWduLCBzaXplKTsKKyAgICBNYWxsb2NIb29r
OjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
ZXh0ZXJuICJDIiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCoqIHJlc3VsdF9wdHIsIHNpemVfdCBh
bGlnbiwgc2l6ZV90IHNpemUpCitleHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiog
cmVzdWx0cHRyLCBzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKQogICAgIF9fVEhST1cgewotICBp
ZiAoKChhbGlnbiAlIHNpemVvZih2b2lkKikpICE9IDApIHx8Ci0gICAgICAoKGFsaWduICYgKGFs
aWduIC0gMSkpICE9IDApIHx8Ci0gICAgICAoYWxpZ24gPT0gMCkpIHsKLSAgICByZXR1cm4gRUlO
VkFMOwotICB9CisgICAgaWYgKChhbGlnbiAlIHNpemVvZih2b2lkKikpCisgICAgICAgIHx8IChh
bGlnbiAmIChhbGlnbiAtIDEpKQorICAgICAgICB8fCAoIWFsaWduKSkKKyAgICAgICAgcmV0dXJu
IEVJTlZBTDsKIAotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihhbGlnbiwgc2l6ZSk7Ci0g
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgaWYgKHJlc3VsdCA9
PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVOT01FTTsKLSAgfSBlbHNlIHsKLSAgICAqcmVzdWx0X3B0
ciA9IHJlc3VsdDsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01lbWFsaWduKGFsaWduLCBzaXplKTsK
KyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHJldHVybiBFTk9NRU07CisgICAgKnJlc3VsdHB0ciA9IHJlc3VsdDsK
ICAgICByZXR1cm4gMDsKLSAgfQogfQogCiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplID0gMDsKIAog
ZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IHNpemUpIF9fVEhST1cgewotICAvLyBBbGxv
Y2F0ZSBwYWdlLWFsaWduZWQgb2JqZWN0IG9mIGxlbmd0aCA+PSBzaXplIGJ5dGVzCi0gIGlmIChw
YWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0gIHZvaWQqIHJlc3VsdCA9
IGRvX21lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAgIC8vIEFsbG9jYXRlIHBhZ2Ut
YWxpZ25lZCBvYmplY3Qgb2YgbGVuZ3RoID49IHNpemUgYnl0ZXMKKyAgICBpZiAoIXBhZ2VzaXpl
KQorICAgICAgICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgdm9pZCogcmVzdWx0ID0g
ZG9NZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGV4dGVybiAiQyIgdm9p
ZCogcHZhbGxvYyhzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIC8vIFJvdW5kIHVwIHNpemUgdG8g
YSBtdWx0aXBsZSBvZiBwYWdlc2l6ZQotICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBn
ZXRwYWdlc2l6ZSgpOwotICBzaXplID0gKHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6
ZSAtIDEpOwotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7Ci0g
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAvLyBSb3VuZCB1cCBzaXplIHRvIGEgbXVsdGlwbGUgb2YgcGFnZXNpemUKKyAgICBp
ZiAoIXBhZ2VzaXplKQorICAgICAgICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgc2l6
ZSA9IChzaXplICsgcGFnZXNpemUgLSAxKSAmIH4ocGFnZXNpemUgLSAxKTsKKyAgICB2b2lkKiBy
ZXN1bHQgPSBkb01lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKKyAgICBNYWxsb2NIb29rOjpJbnZv
a2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZXh0ZXJu
ICJDIiB2b2lkIG1hbGxvY19zdGF0cyh2b2lkKSB7Ci0gIGRvX21hbGxvY19zdGF0cygpOworZXh0
ZXJuICJDIiB2b2lkIG1hbGxvY19zdGF0cyh2b2lkKQoreworICAgIGRvTWFsbG9jU3RhdHMoKTsK
IH0KIAotZXh0ZXJuICJDIiBpbnQgbWFsbG9wdChpbnQgY21kLCBpbnQgdmFsdWUpIHsKLSAgcmV0
dXJuIGRvX21hbGxvcHQoY21kLCB2YWx1ZSk7CitleHRlcm4gIkMiIGludCBtYWxsb3B0KGludCBj
bWQsIGludCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZG9NYWxsb3B0KGNtZCwgdmFsdWUpOwogfQog
CiAjaWZkZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8KLWV4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZv
IG1hbGxpbmZvKHZvaWQpIHsKLSAgcmV0dXJuIGRvX21hbGxpbmZvKCk7CitleHRlcm4gIkMiIHN0
cnVjdCBtYWxsaW5mbyBtYWxsaW5mbyh2b2lkKQoreworICAgIHJldHVybiBkb01hbGxpbmZvKCk7
CiB9CiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBTb21lIGxpYnJhcnkgcm91dGluZXMgb24g
UmVkSGF0IDkgYWxsb2NhdGUgbWVtb3J5IHVzaW5nIG1hbGxvYygpCi0vLyBhbmQgZnJlZSBpdCB1
c2luZyBfX2xpYmNfZnJlZSgpIChvciB2aWNlLXZlcnNhKS4gIFNpbmNlIHdlIHByb3ZpZGUKKy8v
IGFuZCBmcmVlIGl0IHVzaW5nIF9fbGliY19mcmVlKCkgKG9yIHZpY2UtdmVyc2EpLiBTaW5jZSB3
ZSBwcm92aWRlCiAvLyBvdXIgb3duIGltcGxlbWVudGF0aW9ucyBvZiBtYWxsb2MvZnJlZSwgd2Ug
bmVlZCB0byBtYWtlIHN1cmUgdGhhdAogLy8gdGhlIF9fbGliY19YWFggdmFyaWFudHMgKGRlZmlu
ZWQgYXMgcGFydCBvZiBnbGliYykgYWxzbyBwb2ludCB0bwogLy8gdGhlIHNhbWUgaW1wbGVtZW50
YXRpb25zLgpAQCAtNDI5OSwxMSArNDQxMywxMCBAQCBleHRlcm4gIkMiIHsKIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIG9mIGNhbGxpbmcgTWFsbG9jSG9vayBt
ZXRob2QKIC8vIGZyb20gdGhlIHN0YWNrIGZyYW1lIG9mIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9u
OwogLy8gaGVhcC1jaGVja2VyIGhhbmRsZXMgdGhpcyBzcGVjaWFsIGNhc2UgZXhwbGljaXRseS4K
LXN0YXRpYyB2b2lkICpNZW1hbGlnbk92ZXJyaWRlKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUs
IGNvbnN0IHZvaWQgKmNhbGxlcikKLSAgICBfX1RIUk9XIHsKLSAgdm9pZCogcmVzdWx0ID0gZG9f
bWVtYWxpZ24oYWxpZ24sIHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3Vs
dCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1bHQ7CitzdGF0aWMgdm9pZCAqTWVtYWxpZ25PdmVycmlk
ZShzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplLCBjb25zdCB2b2lkICpjYWxsZXIpIF9fVEhST1cg
eworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAgIE1hbGxv
Y0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogdm9pZCAqKCpfX21lbWFsaWduX2hvb2spKHNpemVfdCwgc2l6ZV90LCBjb25zdCB2b2lkICop
ID0gTWVtYWxpZ25PdmVycmlkZTsKIApAQCAtNDMxNSwxMiArNDQyOCwxMiBAQCB2b2lkIHJlbGVh
c2VGYXN0TWFsbG9jRnJlZU1lbW9yeSgpCiAgICAgLy8gRmx1c2ggZnJlZSBwYWdlcyBpbiB0aGUg
Y3VycmVudCB0aHJlYWQgY2FjaGUgYmFjayB0byB0aGUgcGFnZSBoZWFwLgogICAgIC8vIExvdyB3
YXRlcm1hcmsgbWVjaGFuaXNtIGluIFNjYXZlbmdlKCkgcHJldmVudHMgZnVsbCByZXR1cm4gb24g
dGhlIGZpcnN0IHBhc3MuCiAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGZsdXNoZXMgZXZlcnl0aGlu
Zy4KLSAgICBpZiAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlID0gVENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkpIHsKKyAgICBpZiAoVENNYWxsb2NUaHJl
YWRDYWNoZSogdGhyZWFkQ2FjaGUgPSBUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRDYWNoZUlmUHJl
c2VudCgpKSB7CiAgICAgICAgIHRocmVhZENhY2hlLT5TY2F2ZW5nZSgpOwogICAgICAgICB0aHJl
YWRDYWNoZS0+U2NhdmVuZ2UoKTsKICAgICB9CiAKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogICAgIHBh
Z2VoZWFwLT5SZWxlYXNlRnJlZVBhZ2VzKCk7CiB9CiAgICAgCkBAIC00MzI4LDE4ICs0NDQxLDE4
IEBAIEZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWMKIHsKICAgICBGYXN0
TWFsbG9jU3RhdGlzdGljcyBzdGF0aXN0aWNzOwogCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hv
bGRlcigmcGFnZWhlYXBfbG9jayk7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmcGFn
ZWhlYXBMb2NrKTsKICAgICBzdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlcyA9IHN0YXRpY19jYXN0
PHNpemVfdD4ocGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCkpOwogICAgIHN0YXRpc3RpY3MuY29tbWl0
dGVkVk1CeXRlcyA9IHN0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzIC0gcGFnZWhlYXAtPlJldHVy
bmVkQnl0ZXMoKTsKIAogICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyA9IDA7CiAgICAgZm9y
ICh1bnNpZ25lZCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICAgICAgY29u
c3QgaW50IGxlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOwotICAgICAgICBjb25z
dCBpbnQgdGNfbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0udGNfbGVuZ3RoKCk7CisgICAgICAg
IGNvbnN0IGludCBsZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xdLmxlbmd0aCgpOworICAgICAgICBj
b25zdCBpbnQgdGNMZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xdLnRjTGVuZ3RoKCk7CiAKLSAgICAg
ICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpICogKGxl
bmd0aCArIHRjX2xlbmd0aCk7CisgICAgICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyArPSBC
eXRlU2l6ZUZvckNsYXNzKGNsKSAqIChsZW5ndGggKyB0Y0xlbmd0aCk7CiAgICAgfQotICAgIGZv
ciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlID0gdGhyZWFkX2hlYXBzOyB0aHJl
YWRDYWNoZSA7IHRocmVhZENhY2hlID0gdGhyZWFkQ2FjaGUtPm5leHRfKQorICAgIGZvciAoVENN
YWxsb2NUaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSB0aHJlYWRIZWFwczsgdGhyZWFkQ2FjaGUg
OyB0aHJlYWRDYWNoZSA9IHRocmVhZENhY2hlLT5uZXh0KQogICAgICAgICBzdGF0aXN0aWNzLmZy
ZWVMaXN0Qnl0ZXMgKz0gdGhyZWFkQ2FjaGUtPlNpemUoKTsKIAogICAgIHJldHVybiBzdGF0aXN0
aWNzOwpAQCAtNDM0OCw3ICs0NDYxLDcgQEAgRmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxv
Y1N0YXRpc3RpYwogc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHB0cikKIHsKICNp
ZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIHJldHVybiBJbnRlcm5hbDo6ZmFz
dE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIoY29uc3RfY2FzdDx2b2lkKj4ocHRyKSktPm1fc2l6ZTsK
KyAgICByZXR1cm4gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKGNvbnN0X2Nh
c3Q8dm9pZCo+KHB0cikpLT5tc2l6ZTsKICNlbHNlCiAgICAgY29uc3QgUGFnZUlEIHAgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OwogICAgIFNwYW4qIHNw
YW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvckVuc3VyZVNhZmUocCk7CkBAIC00MzU2LDcgKzQ0
NjksNyBAQCBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCogcHRyKQogICAgIGlmICgh
c3BhbiB8fCBzcGFuLT5mcmVlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGZvciAodm9pZCog
ZnJlZSA9IHNwYW4tPm9iamVjdHM7IGZyZWUgIT0gTlVMTDsgZnJlZSA9ICooKHZvaWQqKikgZnJl
ZSkpIHsKKyAgICBmb3IgKHZvaWQqIGZyZWUgPSBzcGFuLT5vYmplY3RzOyBmcmVlOyBmcmVlID0g
Kigodm9pZCoqKSBmcmVlKSkgewogICAgICAgICBpZiAocHRyID09IGZyZWUpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkBAIC00MzgyLDEzICs0NDk1LDEzIEBAIHB1YmxpYzoKICAgICBi
b29sIGlzRnJlZU9iamVjdCh2bV9hZGRyZXNzX3QgcHRyKSBjb25zdCB7IHJldHVybiBpc0ZyZWVP
YmplY3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKSk7IH0KICAgICBzaXplX3QgZnJlZU9i
amVjdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmVlT2JqZWN0cy5zaXplKCk7IH0KIAotICAg
IHZvaWQgZmluZEZyZWVPYmplY3RzKFRDTWFsbG9jX1RocmVhZENhY2hlKiB0aHJlYWRDYWNoZSkK
KyAgICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRDYWNo
ZSkKICAgICB7Ci0gICAgICAgIGZvciAoOyB0aHJlYWRDYWNoZTsgdGhyZWFkQ2FjaGUgPSAodGhy
ZWFkQ2FjaGUtPm5leHRfID8gbV9yZWFkZXIodGhyZWFkQ2FjaGUtPm5leHRfKSA6IDApKQorICAg
ICAgICBmb3IgKDsgdGhyZWFkQ2FjaGU7IHRocmVhZENhY2hlID0gKHRocmVhZENhY2hlLT5uZXh0
ID8gbV9yZWFkZXIodGhyZWFkQ2FjaGUtPm5leHQpIDogMCkpCiAgICAgICAgICAgICB0aHJlYWRD
YWNoZS0+ZW51bWVyYXRlRnJlZU9iamVjdHMoKnRoaXMsIG1fcmVhZGVyKTsKICAgICB9CiAKLSAg
ICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiBj
ZW50cmFsRnJlZUxpc3QsIHNpemVfdCBudW1TaXplcywgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dFBhZGRlZCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQorICAgIHZvaWQgZmluZEZyZWVPYmplY3Rz
KFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKiBjZW50cmFsRnJlZUxpc3QsIHNpemVfdCBu
dW1TaXplcywgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqIHJlbW90ZUNlbnRyYWxGcmVl
TGlzdCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TaXplczsg
aSsrKQogICAgICAgICAgICAgY2VudHJhbEZyZWVMaXN0W2ldLmVudW1lcmF0ZUZyZWVPYmplY3Rz
KCp0aGlzLCBtX3JlYWRlciwgcmVtb3RlQ2VudHJhbEZyZWVMaXN0ICsgaSk7CkBAIC00NDY5LDcg
KzQ1ODIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVmVjdG9yPHZtX3JhbmdlX3QsIDEwMjQ+IGFs
bG9jYXRlZFBvaW50ZXJzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29hbGVz
Y2VkU3BhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFNwYW4gKnRoZVNwYW4gPSBtX2Nv
YWxlc2NlZFNwYW5zW2ldOworICAgICAgICAgICAgU3BhbiogdGhlU3BhbiA9IG1fY29hbGVzY2Vk
U3BhbnNbaV07CiAgICAgICAgICAgICBpZiAodGhlU3Bhbi0+ZnJlZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIApAQCAtNDU4NCwxNyArNDY5NywxNyBAQCBrZXJuX3JldHVybl90IEZhc3RN
YWxsb2Nab25lOjplbnVtZXJhdGUoCiAgICAgSW5pdFNpemVDbGFzc2VzKCk7CiAKICAgICBGYXN0
TWFsbG9jWm9uZSogbXpvbmUgPSBtZW1vcnlSZWFkZXIocmVpbnRlcnByZXRfY2FzdDxGYXN0TWFs
bG9jWm9uZSo+KHpvbmVBZGRyZXNzKSk7Ci0gICAgVENNYWxsb2NfUGFnZUhlYXAqIHBhZ2VIZWFw
ID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3BhZ2VIZWFwKTsKLSAgICBUQ01hbGxvY19UaHJlYWRD
YWNoZSoqIHRocmVhZEhlYXBzUG9pbnRlciA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV90aHJlYWRI
ZWFwcyk7Ci0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZEhlYXBzID0gbWVtb3J5UmVh
ZGVyKCp0aHJlYWRIZWFwc1BvaW50ZXIpOworICAgIFRDTWFsbG9jUGFnZUhlYXAqIHBhZ2VIZWFw
ID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3BhZ2VIZWFwKTsKKyAgICBUQ01hbGxvY1RocmVhZENh
Y2hlKiogdGhyZWFkSGVhcHNQb2ludGVyID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3RocmVhZEhl
YXBzKTsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRIZWFwcyA9IG1lbW9yeVJlYWRl
cigqdGhyZWFkSGVhcHNQb2ludGVyKTsKIAotICAgIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQ
YWRkZWQqIGNlbnRyYWxDYWNoZXMgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fY2VudHJhbENhY2hl
cywgc2l6ZW9mKFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQpICoga051bUNsYXNzZXMp
OworICAgIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKiBjZW50cmFsQ2FjaGVzID0gbWVt
b3J5UmVhZGVyKG16b25lLT5tX2NlbnRyYWxDYWNoZXMsIHNpemVvZihUQ01hbGxvY0NlbnRyYWxG
cmVlTGlzdFBhZGRlZCkgKiBrTnVtQ2xhc3Nlcyk7CiAKICAgICBGcmVlT2JqZWN0RmluZGVyIGZp
bmRlcihtZW1vcnlSZWFkZXIpOwogICAgIGZpbmRlci5maW5kRnJlZU9iamVjdHModGhyZWFkSGVh
cHMpOwogICAgIGZpbmRlci5maW5kRnJlZU9iamVjdHMoY2VudHJhbENhY2hlcywga051bUNsYXNz
ZXMsIG16b25lLT5tX2NlbnRyYWxDYWNoZXMpOwogCi0gICAgVENNYWxsb2NfUGFnZUhlYXA6OlBh
Z2VNYXAqIHBhZ2VNYXAgPSAmcGFnZUhlYXAtPnBhZ2VtYXBfOworICAgIFRDTWFsbG9jUGFnZUhl
YXA6OlBhZ2VNYXAqIHBhZ2VNYXAgPSAmcGFnZUhlYXAtPnBhZ2VtYXA7CiAgICAgUGFnZU1hcEZy
ZWVPYmplY3RGaW5kZXIgcGFnZU1hcEZpbmRlcihtZW1vcnlSZWFkZXIsIGZpbmRlcik7CiAgICAg
cGFnZU1hcC0+dmlzaXRWYWx1ZXMocGFnZU1hcEZpbmRlciwgbWVtb3J5UmVhZGVyKTsKIApAQCAt
NDYwNiw3ICs0NzE5LDcgQEAga2Vybl9yZXR1cm5fdCBGYXN0TWFsbG9jWm9uZTo6ZW51bWVyYXRl
KAogICAgIHBhZ2VNYXAtPnZpc2l0QWxsb2NhdGlvbnMoYWRtaW5SZWdpb25SZWNvcmRlciwgbWVt
b3J5UmVhZGVyKTsKIAogICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBzcGFuQWxsb2NhdG9y
ID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3NwYW5BbGxvY2F0b3IpOwotICAgIFBhZ2VIZWFwQWxs
b2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiogcGFnZUhlYXBBbGxvY2F0b3IgPSBtZW1vcnlS
ZWFkZXIobXpvbmUtPm1fcGFnZUhlYXBBbGxvY2F0b3IpOworICAgIFBhZ2VIZWFwQWxsb2NhdG9y
PFRDTWFsbG9jVGhyZWFkQ2FjaGU+KiBwYWdlSGVhcEFsbG9jYXRvciA9IG1lbW9yeVJlYWRlciht
em9uZS0+bV9wYWdlSGVhcEFsbG9jYXRvcik7CiAKICAgICBzcGFuQWxsb2NhdG9yLT5yZWNvcmRB
ZG1pbmlzdHJhdGl2ZVJlZ2lvbnMoYWRtaW5SZWdpb25SZWNvcmRlciwgbWVtb3J5UmVhZGVyKTsK
ICAgICBwYWdlSGVhcEFsbG9jYXRvci0+cmVjb3JkQWRtaW5pc3RyYXRpdmVSZWdpb25zKGFkbWlu
UmVnaW9uUmVjb3JkZXIsIG1lbW9yeVJlYWRlcik7CkBAIC00NjM0LDcgKzQ3NDcsNyBAQCB2b2lk
KiBGYXN0TWFsbG9jWm9uZTo6em9uZUNhbGxvYyhtYWxsb2NfCiB2b2lkIEZhc3RNYWxsb2Nab25l
Ojp6b25lRnJlZShtYWxsb2Nfem9uZV90Kiwgdm9pZCogcHRyKQogewogICAgIC8vIER1ZSB0byA8
cmRhcjovL3Byb2JsZW0vNTY3MTM1Nz4gem9uZUZyZWUgbWF5IGJlIGNhbGxlZCBieSB0aGUgc3lz
dGVtIGZyZWUgZXZlbiBpZiB0aGUgcG9pbnRlcgotICAgIC8vIGlzIG5vdCBpbiB0aGlzIHpvbmUu
ICBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHBvaW50ZXIgYmVpbmcgZnJlZWQgd2FzIG5vdCBhbGxv
Y2F0ZWQgYnkgYW55CisgICAgLy8gaXMgbm90IGluIHRoaXMgem9uZS4gV2hlbiB0aGlzIGhhcHBl
bnMsIHRoZSBwb2ludGVyIGJlaW5nIGZyZWVkIHdhcyBub3QgYWxsb2NhdGVkIGJ5IGFueQogICAg
IC8vIHpvbmUgc28gd2UgbmVlZCB0byBwcmludCBhIHVzZWZ1bCBlcnJvciBmb3IgdGhlIGFwcGxp
Y2F0aW9uIGRldmVsb3Blci4KICAgICBtYWxsb2NfcHJpbnRmKCIqKiogZXJyb3IgZm9yIG9iamVj
dCAlcDogcG9pbnRlciBiZWluZyBmcmVlZCB3YXMgbm90IGFsbG9jYXRlZFxuIiwgcHRyKTsKIH0K
QEAgLTQ2NjQsNyArNDc3Nyw3IEBAIG1hbGxvY19pbnRyb3NwZWN0aW9uX3QganNjb3JlX2Zhc3Rt
YWxsb2MKICAgICB9OwogfQogCi1GYXN0TWFsbG9jWm9uZTo6RmFzdE1hbGxvY1pvbmUoVENNYWxs
b2NfUGFnZUhlYXAqIHBhZ2VIZWFwLCBUQ01hbGxvY19UaHJlYWRDYWNoZSoqIHRocmVhZEhlYXBz
LCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiBjZW50cmFsQ2FjaGVzLCBQYWdlSGVh
cEFsbG9jYXRvcjxTcGFuPiogc3BhbkFsbG9jYXRvciwgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxs
b2NfVGhyZWFkQ2FjaGU+KiBwYWdlSGVhcEFsbG9jYXRvcikKK0Zhc3RNYWxsb2Nab25lOjpGYXN0
TWFsbG9jWm9uZShUQ01hbGxvY1BhZ2VIZWFwKiBwYWdlSGVhcCwgVENNYWxsb2NUaHJlYWRDYWNo
ZSoqIHRocmVhZEhlYXBzLCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCogY2VudHJhbENh
Y2hlcywgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4qIHNwYW5BbGxvY2F0b3IsIFBhZ2VIZWFwQWxs
b2NhdG9yPFRDTWFsbG9jVGhyZWFkQ2FjaGU+KiBwYWdlSGVhcEFsbG9jYXRvcikKICAgICA6IG1f
cGFnZUhlYXAocGFnZUhlYXApCiAgICAgLCBtX3RocmVhZEhlYXBzKHRocmVhZEhlYXBzKQogICAg
ICwgbV9jZW50cmFsQ2FjaGVzKGNlbnRyYWxDYWNoZXMpCkBAIC00Njg4LDcgKzQ4MDEsNyBAQCBG
YXN0TWFsbG9jWm9uZTo6RmFzdE1hbGxvY1pvbmUoVENNYWxsb2NfCiAKIHZvaWQgRmFzdE1hbGxv
Y1pvbmU6OmluaXQoKQogewotICAgIHN0YXRpYyBGYXN0TWFsbG9jWm9uZSB6b25lKHBhZ2VoZWFw
LCAmdGhyZWFkX2hlYXBzLCBzdGF0aWNfY2FzdDxUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFk
ZGVkKj4oY2VudHJhbF9jYWNoZSksICZzcGFuX2FsbG9jYXRvciwgJnRocmVhZGhlYXBfYWxsb2Nh
dG9yKTsKKyAgICBzdGF0aWMgRmFzdE1hbGxvY1pvbmUgem9uZShwYWdlaGVhcCwgJnRocmVhZEhl
YXBzLCBzdGF0aWNfY2FzdDxUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCo+KGNlbnRyYWxD
YWNoZSksICZzcGFuQWxsb2NhdG9yLCAmdGhyZWFkaGVhcEFsbG9jYXRvcik7CiB9CiAKICNlbmRp
ZiAvLyBPUyhEQVJXSU4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173971</attachid>
            <date>2012-11-13 13:35:30 -0800</date>
            <delta_ts>2012-11-13 13:38:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89366-20121113133347.patch</filename>
            <type>text/plain</type>
            <size>22106</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzQ0NzMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEyLTExLTEzICBCcmVudCBGdWxnaGFtIDxiZnVs
Z2hhbUB3ZWJraXQub3JnPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAgPGFsZXguY2hyaXN0ZW5zZW5A
ZmxleHNpbS5jb20+CisKKyAgICAgICAgRmFzdE1hbGxvYy5jcHAgbmVlZHMgdG8gYmUgcmVvcmRl
cmVkIGJlZm9yZSBwYWRkaW5nIGJ1ZyBjYW4gYmUgZml4ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MzY2CisKKyAgICAgICAgTm90ZTogVGhpcyBm
aWxlIHZpb2xhdGVzIFN0eWxlIHJ1bGVzLiAgVGhpcyBjaGFuZ2Ugb25seSBtb3ZlcworICAgICAg
ICB0aGUgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCBjbGFzcyBkZWNsYXJhdGlvbiBhbmQgdGhl
IHZhcmlvdXMKKyAgICAgICAgRmFzdE1hbGxvY1pvbmUgbWV0aG9kcyBlYXJsaWVyIGluIHRoZSBm
aWxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL0Zhc3RNYWxsb2MuY3BwOgorICAgICAgICBSZW9yZGVyZWQgZGVmaW5pdGlvbnMgdG8gcHJl
cGFyZSBmb3IgYWRkaW5nIHNwZWNpYWxpemVkIHRlbXBsYXRlCisgICAgICAgIChXVEYpOgorICAg
ICAgICAoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
X0NlbnRyYWxfRnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX0NlbnRy
YWxfRnJlZUxpc3Q6OnRjX2xlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3Q6OmVudW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAgKFRDTWFsbG9jX0NlbnRy
YWxfRnJlZUxpc3RQYWRkZWQpOgorICAgICAgICAoRmFzdE1hbGxvY1pvbmUpOgorICAgICAgICAo
V1RGOjpGYXN0TWFsbG9jWm9uZTo6Z29vZFNpemUpOgorICAgICAgICAoV1RGOjpGYXN0TWFsbG9j
Wm9uZTo6Y2hlY2spOgorICAgICAgICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6cHJpbnQpOgorICAg
ICAgICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6bG9nKToKKyAgICAgICAgKFdURjo6RmFzdE1hbGxv
Y1pvbmU6OmZvcmNlTG9jayk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpmb3JjZVVu
bG9jayk6CisgICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpzdGF0aXN0aWNzKToKKyAgICAg
ICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OnpvbmVWYWxsb2MpOgorICAgICAgICAoV1RGOjpGYXN0
TWFsbG9jWm9uZTo6em9uZURlc3Ryb3kpOgorICAgICAgICAoV1RGOjpLZXJuZWxTdXBwb3J0c1RM
Uyk6CisgICAgICAgIChXVEY6OkNoZWNrSWZLZXJuZWxTdXBwb3J0c1RMUyk6CisgICAgICAgIChU
Q01hbGxvY19UaHJlYWRDYWNoZSk6CisKIDIwMTItMTEtMTEgIEtlbmljaGkgSXNoaWJhc2hpICA8
YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdURlN0cmluZzo6dXRmOCgpIHNob3VsZCBo
YXZlIGEgbW9kZSBvZiBjb252ZXJzaW9uIHRvIHVzZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxMzQ0NzMpCisrKyBTb3VyY2UvV1RGL3d0
Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk2LDEwMyArNDk2LDYgQEAgbmFt
ZXNwYWNlIFdURiB7CiAjZGVmaW5lIE1FU1NBR0UgTE9HX0VSUk9SCiAjZGVmaW5lIENIRUNLX0NP
TkRJVElPTiBBU1NFUlQKIAotI2lmIE9TKERBUldJTikKLXN0cnVjdCBTcGFuOwotY2xhc3MgVENN
YWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZDsKLWNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFwOwot
Y2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGU7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mg
UGFnZUhlYXBBbGxvY2F0b3I7Ci0KLWNsYXNzIEZhc3RNYWxsb2Nab25lIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBpbml0KCk7Ci0KLSAgICBzdGF0aWMga2Vybl9yZXR1cm5fdCBlbnVtZXJh
dGUodGFza190LCB2b2lkKiwgdW5zaWduZWQgdHlwZU1tYXNrLCB2bV9hZGRyZXNzX3Qgem9uZUFk
ZHJlc3MsIG1lbW9yeV9yZWFkZXJfdCwgdm1fcmFuZ2VfcmVjb3JkZXJfdCk7Ci0gICAgc3RhdGlj
IHNpemVfdCBnb29kU2l6ZShtYWxsb2Nfem9uZV90Kiwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIHNp
emU7IH0KLSAgICBzdGF0aWMgYm9vbGVhbl90IGNoZWNrKG1hbGxvY196b25lX3QqKSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgc3RhdGljIHZvaWQgIHByaW50KG1hbGxvY196b25lX3QqLCBib29sZWFu
X3QpIHsgfQotICAgIHN0YXRpYyB2b2lkIGxvZyhtYWxsb2Nfem9uZV90Kiwgdm9pZCopIHsgfQot
ICAgIHN0YXRpYyB2b2lkIGZvcmNlTG9jayhtYWxsb2Nfem9uZV90KikgeyB9Ci0gICAgc3RhdGlj
IHZvaWQgZm9yY2VVbmxvY2sobWFsbG9jX3pvbmVfdCopIHsgfQotICAgIHN0YXRpYyB2b2lkIHN0
YXRpc3RpY3MobWFsbG9jX3pvbmVfdCosIG1hbGxvY19zdGF0aXN0aWNzX3QqIHN0YXRzKSB7IG1l
bXNldChzdGF0cywgMCwgc2l6ZW9mKG1hbGxvY19zdGF0aXN0aWNzX3QpKTsgfQotCi1wcml2YXRl
OgotICAgIEZhc3RNYWxsb2Nab25lKFRDTWFsbG9jX1BhZ2VIZWFwKiwgVENNYWxsb2NfVGhyZWFk
Q2FjaGUqKiwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCosIFBhZ2VIZWFwQWxsb2Nh
dG9yPFNwYW4+KiwgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+Kik7Ci0g
ICAgc3RhdGljIHNpemVfdCBzaXplKG1hbGxvY196b25lX3QqLCBjb25zdCB2b2lkKik7Ci0gICAg
c3RhdGljIHZvaWQqIHpvbmVNYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCk7Ci0gICAgc3Rh
dGljIHZvaWQqIHpvbmVDYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCBudW1JdGVtcywgc2l6
ZV90IHNpemUpOwotICAgIHN0YXRpYyB2b2lkIHpvbmVGcmVlKG1hbGxvY196b25lX3QqLCB2b2lk
Kik7Ci0gICAgc3RhdGljIHZvaWQqIHpvbmVSZWFsbG9jKG1hbGxvY196b25lX3QqLCB2b2lkKiwg
c2l6ZV90KTsKLSAgICBzdGF0aWMgdm9pZCogem9uZVZhbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6
ZV90KSB7IExPR19FUlJPUigidmFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQiKTsgcmV0dXJuIDA7IH0K
LSAgICBzdGF0aWMgdm9pZCB6b25lRGVzdHJveShtYWxsb2Nfem9uZV90KikgeyB9Ci0KLSAgICBt
YWxsb2Nfem9uZV90IG1fem9uZTsKLSAgICBUQ01hbGxvY19QYWdlSGVhcCogbV9wYWdlSGVhcDsK
LSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSoqIG1fdGhyZWFkSGVhcHM7Ci0gICAgVENNYWxsb2Nf
Q2VudHJhbF9GcmVlTGlzdFBhZGRlZCogbV9jZW50cmFsQ2FjaGVzOwotICAgIFBhZ2VIZWFwQWxs
b2NhdG9yPFNwYW4+KiBtX3NwYW5BbGxvY2F0b3I7Ci0gICAgUGFnZUhlYXBBbGxvY2F0b3I8VENN
YWxsb2NfVGhyZWFkQ2FjaGU+KiBtX3BhZ2VIZWFwQWxsb2NhdG9yOwotfTsKLQotI2VuZGlmCi0K
LSNlbmRpZgotCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0vLyBUaGlzICNpZmRlZiBzaG91bGQgYWxt
b3N0IG5ldmVyIGJlIHNldC4gIFNldCBOT19UQ01BTExPQ19TQU1QTEVTIGlmCi0vLyB5b3UncmUg
cG9ydGluZyB0byBhIHN5c3RlbSB3aGVyZSB5b3UgcmVhbGx5IGNhbid0IGdldCBhIHN0YWNrdHJh
Y2UuCi0jaWZkZWYgTk9fVENNQUxMT0NfU0FNUExFUwotLy8gV2UgdXNlICNkZWZpbmUgc28gY29k
ZSBjb21waWxlcyBldmVuIGlmIHlvdSAjaW5jbHVkZSBzdGFja3RyYWNlLmggc29tZWhvdy4KLSMg
ZGVmaW5lIEdldFN0YWNrVHJhY2Uoc3RhY2ssIGRlcHRoLCBza2lwKSAgKDApCi0jZWxzZQotIyBp
bmNsdWRlIDxnb29nbGUvc3RhY2t0cmFjZS5oPgotI2VuZGlmCi0jZW5kaWYKLQotLy8gRXZlbiBp
ZiB3ZSBoYXZlIHN1cHBvcnQgZm9yIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluIHRoZSBjb21waWxl
cgotLy8gYW5kIGxpbmtlciwgdGhlIE9TIG1heSBub3Qgc3VwcG9ydCBpdC4gIFdlIG5lZWQgdG8g
Y2hlY2sgdGhhdCBhdAotLy8gcnVudGltZS4gIFJpZ2h0IG5vdywgd2UgaGF2ZSB0byBrZWVwIGEg
bWFudWFsIHNldCBvZiAiYmFkIiBPU2VzLgotI2lmIGRlZmluZWQoSEFWRV9UTFMpCi0gIHN0YXRp
YyBib29sIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsgICAgICAvLyBiZSBjb25zZXJ2YXRp
dmUKLSAgc3RhdGljIGlubGluZSBib29sIEtlcm5lbFN1cHBvcnRzVExTKCkgewotICAgIHJldHVy
biBrZXJuZWxfc3VwcG9ydHNfdGxzOwotICB9Ci0jIGlmICFIQVZFX0RFQ0xfVU5BTUUgICAvLyBp
ZiB0b28gb2xkIGZvciB1bmFtZSwgcHJvYmFibHkgdG9vIG9sZCBmb3IgVExTCi0gICAgc3RhdGlj
IHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkgewotICAgICAga2VybmVsX3N1cHBvcnRz
X3RscyA9IGZhbHNlOwotICAgIH0KLSMgZWxzZQotIyAgIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+
ICAgIC8vIERFQ0xfVU5BTUUgY2hlY2tlZCBmb3IgPHN5cy91dHNuYW1lLmg+IHRvbwotICAgIHN0
YXRpYyB2b2lkIENoZWNrSWZLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIHN0cnVjdCB1dHNu
YW1lIGJ1ZjsKLSAgICAgIGlmICh1bmFtZSgmYnVmKSAhPSAwKSB7ICAgLy8gc2hvdWxkIGJlIGlt
cG9zc2libGUKLSAgICAgICAgTUVTU0FHRSgidW5hbWUgZmFpbGVkIGFzc3VtaW5nIG5vIFRMUyBz
dXBwb3J0IChlcnJubz0lZClcbiIsIGVycm5vKTsKLSAgICAgICAga2VybmVsX3N1cHBvcnRzX3Rs
cyA9IGZhbHNlOwotICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKGJ1Zi5zeXNuYW1lLCAibGlu
dXgiKSA9PSAwKSB7Ci0gICAgICAgIC8vIFRoZSBsaW51eCBjYXNlOiB0aGUgZmlyc3Qga2VybmVs
IHRvIHN1cHBvcnQgVExTIHdhcyAyLjYuMAotICAgICAgICBpZiAoYnVmLnJlbGVhc2VbMF0gPCAn
MicgJiYgYnVmLnJlbGVhc2VbMV0gPT0gJy4nKSAgICAvLyAwLnggb3IgMS54Ci0gICAgICAgICAg
a2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOwotICAgICAgICBlbHNlIGlmIChidWYucmVsZWFz
ZVswXSA9PSAnMicgJiYgYnVmLnJlbGVhc2VbMV0gPT0gJy4nICYmCi0gICAgICAgICAgICAgICAg
IGJ1Zi5yZWxlYXNlWzJdID49ICcwJyAmJiBidWYucmVsZWFzZVsyXSA8ICc2JyAmJgotICAgICAg
ICAgICAgICAgICBidWYucmVsZWFzZVszXSA9PSAnLicpICAgICAgICAgICAgICAgICAgICAgICAv
LyAyLjAgLSAyLjUKLSAgICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gZmFsc2U7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gdHJ1ZTsKLSAgICAgIH0g
ZWxzZSB7ICAgICAgICAvLyBzb21lIG90aGVyIGtlcm5lbCwgd2UnbGwgYmUgb3B0aW1pc2l0aWMK
LSAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IHRydWU7Ci0gICAgICB9Ci0gICAgICAvLyBU
T0RPKGNzaWx2ZXJzKTogVkxPRygxKSB0aGUgdGxzIHN0YXR1cyBvbmNlIHdlIHN1cHBvcnQgUkFX
X1ZMT0cKLSAgICB9Ci0jICBlbmRpZiAgLy8gSEFWRV9ERUNMX1VOQU1FCi0jZW5kaWYgICAgLy8g
SEFWRV9UTFMKLQotLy8gX19USFJPVyBpcyBkZWZpbmVkIGluIGdsaWJjIHN5c3RlbXMuICBJdCBt
ZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKLS8vICJUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIg
dGhyb3cgYW4gZXhjZXB0aW9uLiIgIEl0J3MgYW4gb3B0aW9uYWwKLS8vIG9wdGltaXphdGlvbiB0
b29sLCBidXQgd2UgbWF5IG5lZWQgdG8gdXNlIGl0IHRvIG1hdGNoIGdsaWJjIHByb3RvdHlwZXMu
Ci0jaWZuZGVmIF9fVEhST1cgICAgLy8gSSBndWVzcyB3ZSdyZSBub3Qgb24gYSBnbGliYyBzeXN0
ZW0KLSMgZGVmaW5lIF9fVEhST1cgICAvLyBfX1RIUk9XIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9u
LCBzbyBvayB0byBtYWtlIGl0ICIiCi0jZW5kaWYKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBDb25maWd1
cmF0aW9uCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwNjYsNyArOTY5LDcgQEAgY2xhc3MgUGFnZUhlYXBB
bGxvY2F0b3IgewogICB9CiAjZW5kaWYKIH07Ci0KKwkKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IFNwYW4gLSBhIGNvbnRpZ3VvdXMgcnVuIG9mIHBhZ2VzCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA
IC0xMjA0LDYgKzExMDcsMjQyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBETExfUHJlcGVuZChTcGFu
KiBsaXMKICAgbGlzdC0+bmV4dCA9IHNwYW47CiB9CiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGF0YSBr
ZXB0IHBlciBzaXplLWNsYXNzIGluIGNlbnRyYWwgY2FjaGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFz
cyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0IHsKKyBwdWJsaWM6CisgIHZvaWQgSW5pdChzaXpl
X3QgY2wpOworCisgIC8vIFRoZXNlIG1ldGhvZHMgYWxsIGRvIGludGVybmFsIGxvY2tpbmcuCisK
KyAgLy8gSW5zZXJ0IHRoZSBzcGVjaWZpZWQgcmFuZ2UgaW50byB0aGUgY2VudHJhbCBmcmVlbGlz
dC4gIE4gaXMgdGhlIG51bWJlciBvZgorICAvLyBlbGVtZW50cyBpbiB0aGUgcmFuZ2UuCisgIHZv
aWQgSW5zZXJ0UmFuZ2Uodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCwgaW50IE4pOworCisgIC8vIFJl
dHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZmV0Y2hlZCBlbGVtZW50cyBpbnRvIE4uCisgIHZv
aWQgUmVtb3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQgKk4pOworCisgIC8v
IFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCisgIHNpemVfdCBs
ZW5ndGgoKSB7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOworICAgIHJldHVybiBjb3Vu
dGVyXzsKKyAgfQorCisgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4g
dGhlIHRyYW5zZmVyIGNhY2hlLgorICBpbnQgdGNfbGVuZ3RoKCkgeworICAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJmxvY2tfKTsKKyAgICByZXR1cm4gdXNlZF9zbG90c18gKiBudW1fb2JqZWN0c190b19t
b3ZlW3NpemVfY2xhc3NfXTsKKyAgfQorCisjaWZkZWYgV1RGX0NIQU5HRVMKKyAgdGVtcGxhdGUg
PGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3Rz
KEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlciwgVENNYWxsb2NfQ2VudHJhbF9G
cmVlTGlzdCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQorICB7CisgICAgZm9yIChTcGFuKiBzcGFu
ID0gJmVtcHR5Xzsgc3BhbiAmJiBzcGFuICE9ICZlbXB0eV87IHNwYW4gPSAoc3Bhbi0+bmV4dCA/
IHJlYWRlcihzcGFuLT5uZXh0KSA6IDApKQorICAgICAgQVNTRVJUKCFzcGFuLT5vYmplY3RzKTsK
KworICAgIEFTU0VSVCghbm9uZW1wdHlfLm9iamVjdHMpOworICAgIHN0YXRpYyBjb25zdCBwdHJk
aWZmX3Qgbm9uZW1wdHlPZmZzZXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmbm9u
ZW1wdHlfKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHRoaXMpOworCisgICAgU3Bh
biogcmVtb3RlTm9uZW1wdHkgPSByZWludGVycHJldF9jYXN0PFNwYW4qPihyZWludGVycHJldF9j
YXN0PGNoYXIqPihyZW1vdGVDZW50cmFsRnJlZUxpc3QpICsgbm9uZW1wdHlPZmZzZXQpOworICAg
IFNwYW4qIHJlbW90ZVNwYW4gPSBub25lbXB0eV8ubmV4dDsKKworICAgIGZvciAoU3Bhbiogc3Bh
biA9IHJlYWRlcihyZW1vdGVTcGFuKTsgc3BhbiAmJiByZW1vdGVTcGFuICE9IHJlbW90ZU5vbmVt
cHR5OyByZW1vdGVTcGFuID0gc3Bhbi0+bmV4dCwgc3BhbiA9IChzcGFuLT5uZXh0ID8gcmVhZGVy
KHNwYW4tPm5leHQpIDogMCkpIHsKKyAgICAgIGZvciAodm9pZCogbmV4dE9iamVjdCA9IHNwYW4t
Pm9iamVjdHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5r
ZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCisgICAgICAgIGZp
bmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgcHJpdmF0ZToK
KyAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKKyAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNh
Y2hlIGFuZCByZXR1cm4uCisgIC8vIFJldHVybiBOVUxMIGlmIG5vIGZyZWUgZW50cmllcyBpbiBj
YWNoZS4KKyAgdm9pZCogRmV0Y2hGcm9tU3BhbnMoKTsKKworICAvLyBSRVFVSVJFUzogbG9ja18g
aXMgaGVsZAorICAvLyBSZW1vdmUgb2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4gIEZldGNo
ZXMKKyAgLy8gZnJvbSBwYWdlaGVhcCBpZiBjYWNoZSBpcyBlbXB0eS4gIE9ubHkgcmV0dXJucwor
ICAvLyBOVUxMIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAgdm9pZCogRmV0Y2hGcm9tU3BhbnNT
YWZlKCk7CisKKyAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKKyAgLy8gUmVsZWFzZSBhIGxp
bmtlZCBsaXN0IG9mIG9iamVjdHMgdG8gc3BhbnMuCisgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxl
YXNlIGxvY2tfLgorICB2b2lkIFJlbGVhc2VMaXN0VG9TcGFucyh2b2lkICpzdGFydCk7CisKKyAg
Ly8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKKyAgLy8gUmVsZWFzZSBhbiBvYmplY3QgdG8gc3Bh
bnMuCisgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgorICBBTFdBWVNfSU5MSU5F
IHZvaWQgUmVsZWFzZVRvU3BhbnModm9pZCogb2JqZWN0KTsKKworICAvLyBSRVFVSVJFUzogbG9j
a18gaXMgaGVsZAorICAvLyBQb3B1bGF0ZSBjYWNoZSBieSBmZXRjaGluZyBmcm9tIHRoZSBwYWdl
IGhlYXAuCisgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgorICBBTFdBWVNfSU5M
SU5FIHZvaWQgUG9wdWxhdGUoKTsKKworICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkLgorICAv
LyBUcmllcyB0byBtYWtlIHJvb20gZm9yIGEgVENFbnRyeS4gIElmIHRoZSBjYWNoZSBpcyBmdWxs
IGl0IHdpbGwgdHJ5IHRvCisgIC8vIGV4cGFuZCBpdCBhdCB0aGUgY29zdCBvZiBzb21lIG90aGVy
IGNhY2hlIHNpemUuICBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMKKyAgLy8gbm8gc3BhY2UuCisg
IGJvb2wgTWFrZUNhY2hlU3BhY2UoKTsKKworICAvLyBSRVFVSVJFUzogbG9ja18gZm9yIGxvY2tl
ZF9zaXplX2NsYXNzIGlzIGhlbGQuCisgIC8vIFBpY2tzIGEgInJhbmRvbSIgc2l6ZSBjbGFzcyB0
byBzdGVhbCBUQ0VudHJ5IHNsb3QgZnJvbS4gIEluIHJlYWxpdHkgaXQKKyAgLy8ganVzdCBpdGVy
YXRlcyBvdmVyIHRoZSBzaXplY2xhc3NlcyBidXQgZG9lcyBzbyB3aXRob3V0IHRha2luZyBhIGxv
Y2suCisgIC8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgorICAvLyBNYXkgdGVtcG9yYXJpbHkg
bG9jayBhICJyYW5kb20iIHNpemUgY2xhc3MuCisgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wg
RXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6ZV90IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNl
KTsKKworICAvLyBSRVFVSVJFUzogbG9ja18gaXMgKm5vdCogaGVsZC4KKyAgLy8gVHJpZXMgdG8g
c2hyaW5rIHRoZSBDYWNoZS4gIElmIGZvcmNlIGlzIHRydWUgaXQgd2lsbCByZWxhc2Ugb2JqZWN0
cyB0bworICAvLyBzcGFucyBpZiBpdCBhbGxvd3MgaXQgdG8gc2hyaW5rIHRoZSBjYWNoZS4gIFJl
dHVybiBmYWxzZSBpZiBpdCBmYWlsZWQgdG8KKyAgLy8gc2hyaW5rIHRoZSBjYWNoZS4gIERlY3Jl
bWVudHMgY2FjaGVfc2l6ZV8gb24gc3VjY2Vlc3MuCisgIC8vIE1heSB0ZW1wb3JhcmlseSB0YWtl
IGxvY2tfLiAgSWYgaXQgdGFrZXMgbG9ja18sIHRoZSBsb2NrZWRfc2l6ZV9jbGFzcworICAvLyBs
b2NrIGlzIHJlbGVhc2VkIHRvIHRoZSB0aHJlYWQgZnJvbSBob2xkaW5nIHR3byBzaXplIGNsYXNz
IGxvY2tzCisgIC8vIGNvbmN1cnJlbnRseSB3aGljaCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2su
CisgIGJvb2wgU2hyaW5rQ2FjaGUoaW50IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNlKTsK
KworICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuICBjYWNoZWRf
ZW50cmllcyBhbmQgY2FjaGVfc2l6ZV8KKyAgLy8gbWF5IGJlIGxvb2tlZCBhdCB3aXRob3V0IGhv
bGRpbmcgdGhlIGxvY2suCisgIFNwaW5Mb2NrIGxvY2tfOworCisgIC8vIFdlIGtlZXAgbGlua2Vk
IGxpc3RzIG9mIGVtcHR5IGFuZCBub24tZW1wdHkgc3BhbnMuCisgIHNpemVfdCAgIHNpemVfY2xh
c3NfOyAgICAgLy8gTXkgc2l6ZSBjbGFzcworICBTcGFuICAgICBlbXB0eV87ICAgICAgICAgIC8v
IER1bW15IGhlYWRlciBmb3IgbGlzdCBvZiBlbXB0eSBzcGFucworICBTcGFuICAgICBub25lbXB0
eV87ICAgICAgIC8vIER1bW15IGhlYWRlciBmb3IgbGlzdCBvZiBub24tZW1wdHkgc3BhbnMKKyAg
c2l6ZV90ICAgY291bnRlcl87ICAgICAgICAvLyBOdW1iZXIgb2YgZnJlZSBvYmplY3RzIGluIGNh
Y2hlIGVudHJ5CisKKyAgLy8gSGVyZSB3ZSByZXNlcnZlIHNwYWNlIGZvciBUQ0VudHJ5IGNhY2hl
IHNsb3RzLiAgU2luY2Ugb25lIHNpemUgY2xhc3MgY2FuCisgIC8vIGVuZCB1cCBnZXR0aW5nIGFs
bCB0aGUgVENFbnRyaWVzIHF1b3RhIGluIHRoZSBzeXN0ZW0gd2UganVzdCBwcmVhbGxvY2F0ZQor
ICAvLyBzdWZmaWNpZW50IG51bWJlciBvZiBlbnRyaWVzIGhlcmUuCisgIFRDRW50cnkgdGNfc2xv
dHNfW2tOdW1UcmFuc2ZlckVudHJpZXNdOworCisgIC8vIE51bWJlciBvZiBjdXJyZW50bHkgdXNl
ZCBjYWNoZWQgZW50cmllcyBpbiB0Y19zbG90c18uICBUaGlzIHZhcmlhYmxlIGlzCisgIC8vIHVw
ZGF0ZWQgdW5kZXIgYSBsb2NrIGJ1dCBjYW4gYmUgcmVhZCB3aXRob3V0IG9uZS4KKyAgaW50MzJf
dCB1c2VkX3Nsb3RzXzsKKyAgLy8gVGhlIGN1cnJlbnQgbnVtYmVyIG9mIHNsb3RzIGZvciB0aGlz
IHNpemUgY2xhc3MuICBUaGlzIGlzIGFuCisgIC8vIGFkYXB0aXZlIHZhbHVlIHRoYXQgaXMgaW5j
cmVhc2VkIGlmIHRoZXJlIGlzIGxvdHMgb2YgdHJhZmZpYworICAvLyBvbiBhIGdpdmVuIHNpemUg
Y2xhc3MuCisgIGludDMyX3QgY2FjaGVfc2l6ZV87Cit9OworCisjaWYgQ09NUElMRVIoQ0xBTkcp
ICYmIGRlZmluZWQoX19oYXNfd2FybmluZykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CisjaWYgX19oYXNfd2FybmluZygiLVd1bnVzZWQtcHJpdmF0ZS1maWVsZCIpCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcHJpdmF0ZS1maWVsZCIKKyNlbmRpZgor
I2VuZGlmCisKKy8vIFBhZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVsdGlwbGUgb2Yg
NjQgYnl0ZXMKK2NsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMg
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7CisgcHJpdmF0ZToKKyAgY2hhciBwYWRfWyg2NCAt
IChzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCkgJSA2NCkpICUgNjRdOworfTsKKwor
I2lmIENPTVBJTEVSKENMQU5HKSAmJiBkZWZpbmVkKF9faGFzX3dhcm5pbmcpCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworI2lmIE9TKERBUldJTikKK3N0cnVjdCBTcGFu
OworY2xhc3MgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZDsKK2NsYXNzIFRDTWFsbG9j
X1BhZ2VIZWFwOworY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGU7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgUGFnZUhlYXBBbGxvY2F0b3I7CisKK2NsYXNzIEZhc3RNYWxsb2Nab25lIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0KCk7CisKKyAgICBzdGF0aWMga2Vybl9yZXR1
cm5fdCBlbnVtZXJhdGUodGFza190LCB2b2lkKiwgdW5zaWduZWQgdHlwZU1tYXNrLCB2bV9hZGRy
ZXNzX3Qgem9uZUFkZHJlc3MsIG1lbW9yeV9yZWFkZXJfdCwgdm1fcmFuZ2VfcmVjb3JkZXJfdCk7
CisgICAgc3RhdGljIHNpemVfdCBnb29kU2l6ZShtYWxsb2Nfem9uZV90Kiwgc2l6ZV90IHNpemUp
IHsgcmV0dXJuIHNpemU7IH0KKyAgICBzdGF0aWMgYm9vbGVhbl90IGNoZWNrKG1hbGxvY196b25l
X3QqKSB7IHJldHVybiB0cnVlOyB9CisgICAgc3RhdGljIHZvaWQgIHByaW50KG1hbGxvY196b25l
X3QqLCBib29sZWFuX3QpIHsgfQorICAgIHN0YXRpYyB2b2lkIGxvZyhtYWxsb2Nfem9uZV90Kiwg
dm9pZCopIHsgfQorICAgIHN0YXRpYyB2b2lkIGZvcmNlTG9jayhtYWxsb2Nfem9uZV90KikgeyB9
CisgICAgc3RhdGljIHZvaWQgZm9yY2VVbmxvY2sobWFsbG9jX3pvbmVfdCopIHsgfQorICAgIHN0
YXRpYyB2b2lkIHN0YXRpc3RpY3MobWFsbG9jX3pvbmVfdCosIG1hbGxvY19zdGF0aXN0aWNzX3Qq
IHN0YXRzKSB7IG1lbXNldChzdGF0cywgMCwgc2l6ZW9mKG1hbGxvY19zdGF0aXN0aWNzX3QpKTsg
fQorCitwcml2YXRlOgorICAgIEZhc3RNYWxsb2Nab25lKFRDTWFsbG9jX1BhZ2VIZWFwKiwgVENN
YWxsb2NfVGhyZWFkQ2FjaGUqKiwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCosIFBh
Z2VIZWFwQWxsb2NhdG9yPFNwYW4+KiwgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFk
Q2FjaGU+Kik7CisgICAgc3RhdGljIHNpemVfdCBzaXplKG1hbGxvY196b25lX3QqLCBjb25zdCB2
b2lkKik7CisgICAgc3RhdGljIHZvaWQqIHpvbmVNYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVf
dCk7CisgICAgc3RhdGljIHZvaWQqIHpvbmVDYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCBu
dW1JdGVtcywgc2l6ZV90IHNpemUpOworICAgIHN0YXRpYyB2b2lkIHpvbmVGcmVlKG1hbGxvY196
b25lX3QqLCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQqIHpvbmVSZWFsbG9jKG1hbGxvY196b25l
X3QqLCB2b2lkKiwgc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogem9uZVZhbGxvYyhtYWxsb2Nf
em9uZV90Kiwgc2l6ZV90KSB7IExPR19FUlJPUigidmFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQiKTsg
cmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgdm9pZCB6b25lRGVzdHJveShtYWxsb2Nfem9uZV90Kikg
eyB9CisKKyAgICBtYWxsb2Nfem9uZV90IG1fem9uZTsKKyAgICBUQ01hbGxvY19QYWdlSGVhcCog
bV9wYWdlSGVhcDsKKyAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSoqIG1fdGhyZWFkSGVhcHM7Cisg
ICAgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCogbV9jZW50cmFsQ2FjaGVzOworICAg
IFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBtX3NwYW5BbGxvY2F0b3I7CisgICAgUGFnZUhlYXBB
bGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+KiBtX3BhZ2VIZWFwQWxsb2NhdG9yOworfTsK
KworI2VuZGlmCisKKyNlbmRpZgorCisjaWZuZGVmIFdURl9DSEFOR0VTCisvLyBUaGlzICNpZmRl
ZiBzaG91bGQgYWxtb3N0IG5ldmVyIGJlIHNldC4gIFNldCBOT19UQ01BTExPQ19TQU1QTEVTIGlm
CisvLyB5b3UncmUgcG9ydGluZyB0byBhIHN5c3RlbSB3aGVyZSB5b3UgcmVhbGx5IGNhbid0IGdl
dCBhIHN0YWNrdHJhY2UuCisjaWZkZWYgTk9fVENNQUxMT0NfU0FNUExFUworLy8gV2UgdXNlICNk
ZWZpbmUgc28gY29kZSBjb21waWxlcyBldmVuIGlmIHlvdSAjaW5jbHVkZSBzdGFja3RyYWNlLmgg
c29tZWhvdy4KKyMgZGVmaW5lIEdldFN0YWNrVHJhY2Uoc3RhY2ssIGRlcHRoLCBza2lwKSAgKDAp
CisjZWxzZQorIyBpbmNsdWRlIDxnb29nbGUvc3RhY2t0cmFjZS5oPgorI2VuZGlmCisjZW5kaWYK
KworLy8gRXZlbiBpZiB3ZSBoYXZlIHN1cHBvcnQgZm9yIHRocmVhZC1sb2NhbCBzdG9yYWdlIGlu
IHRoZSBjb21waWxlcgorLy8gYW5kIGxpbmtlciwgdGhlIE9TIG1heSBub3Qgc3VwcG9ydCBpdC4g
IFdlIG5lZWQgdG8gY2hlY2sgdGhhdCBhdAorLy8gcnVudGltZS4gIFJpZ2h0IG5vdywgd2UgaGF2
ZSB0byBrZWVwIGEgbWFudWFsIHNldCBvZiAiYmFkIiBPU2VzLgorI2lmIGRlZmluZWQoSEFWRV9U
TFMpCisgIHN0YXRpYyBib29sIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsgICAgICAvLyBi
ZSBjb25zZXJ2YXRpdmUKKyAgc3RhdGljIGlubGluZSBib29sIEtlcm5lbFN1cHBvcnRzVExTKCkg
eworICAgIHJldHVybiBrZXJuZWxfc3VwcG9ydHNfdGxzOworICB9CisjIGlmICFIQVZFX0RFQ0xf
VU5BTUUgICAvLyBpZiB0b28gb2xkIGZvciB1bmFtZSwgcHJvYmFibHkgdG9vIG9sZCBmb3IgVExT
CisgICAgc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkgeworICAgICAga2Vy
bmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOworICAgIH0KKyMgZWxzZQorIyAgIGluY2x1ZGUgPHN5
cy91dHNuYW1lLmg+ICAgIC8vIERFQ0xfVU5BTUUgY2hlY2tlZCBmb3IgPHN5cy91dHNuYW1lLmg+
IHRvbworICAgIHN0YXRpYyB2b2lkIENoZWNrSWZLZXJuZWxTdXBwb3J0c1RMUygpIHsKKyAgICAg
IHN0cnVjdCB1dHNuYW1lIGJ1ZjsKKyAgICAgIGlmICh1bmFtZSgmYnVmKSAhPSAwKSB7ICAgLy8g
c2hvdWxkIGJlIGltcG9zc2libGUKKyAgICAgICAgTUVTU0FHRSgidW5hbWUgZmFpbGVkIGFzc3Vt
aW5nIG5vIFRMUyBzdXBwb3J0IChlcnJubz0lZClcbiIsIGVycm5vKTsKKyAgICAgICAga2VybmVs
X3N1cHBvcnRzX3RscyA9IGZhbHNlOworICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKGJ1Zi5z
eXNuYW1lLCAibGludXgiKSA9PSAwKSB7CisgICAgICAgIC8vIFRoZSBsaW51eCBjYXNlOiB0aGUg
Zmlyc3Qga2VybmVsIHRvIHN1cHBvcnQgVExTIHdhcyAyLjYuMAorICAgICAgICBpZiAoYnVmLnJl
bGVhc2VbMF0gPCAnMicgJiYgYnVmLnJlbGVhc2VbMV0gPT0gJy4nKSAgICAvLyAwLnggb3IgMS54
CisgICAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOworICAgICAgICBlbHNlIGlm
IChidWYucmVsZWFzZVswXSA9PSAnMicgJiYgYnVmLnJlbGVhc2VbMV0gPT0gJy4nICYmCisgICAg
ICAgICAgICAgICAgIGJ1Zi5yZWxlYXNlWzJdID49ICcwJyAmJiBidWYucmVsZWFzZVsyXSA8ICc2
JyAmJgorICAgICAgICAgICAgICAgICBidWYucmVsZWFzZVszXSA9PSAnLicpICAgICAgICAgICAg
ICAgICAgICAgICAvLyAyLjAgLSAyLjUKKyAgICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0g
ZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gdHJ1
ZTsKKyAgICAgIH0gZWxzZSB7ICAgICAgICAvLyBzb21lIG90aGVyIGtlcm5lbCwgd2UnbGwgYmUg
b3B0aW1pc2l0aWMKKyAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IHRydWU7CisgICAgICB9
CisgICAgICAvLyBUT0RPKGNzaWx2ZXJzKTogVkxPRygxKSB0aGUgdGxzIHN0YXR1cyBvbmNlIHdl
IHN1cHBvcnQgUkFXX1ZMT0cKKyAgICB9CisjICBlbmRpZiAgLy8gSEFWRV9ERUNMX1VOQU1FCisj
ZW5kaWYgICAgLy8gSEFWRV9UTFMKKworLy8gX19USFJPVyBpcyBkZWZpbmVkIGluIGdsaWJjIHN5
c3RlbXMuICBJdCBtZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKKy8vICJUaGlzIGZ1bmN0aW9u
IHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uLiIgIEl0J3MgYW4gb3B0aW9uYWwKKy8vIG9w
dGltaXphdGlvbiB0b29sLCBidXQgd2UgbWF5IG5lZWQgdG8gdXNlIGl0IHRvIG1hdGNoIGdsaWJj
IHByb3RvdHlwZXMuCisjaWZuZGVmIF9fVEhST1cgICAgLy8gSSBndWVzcyB3ZSdyZSBub3Qgb24g
YSBnbGliYyBzeXN0ZW0KKyMgZGVmaW5lIF9fVEhST1cgICAvLyBfX1RIUk9XIGlzIGp1c3QgYW4g
b3B0aW1pemF0aW9uLCBzbyBvayB0byBtYWtlIGl0ICIiCisjZW5kaWYKKwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogLy8gU3RhY2sgdHJhY2VzIGtlcHQgZm9yIHNhbXBsZWQgYWxsb2NhdGlvbnMKIC8v
ICAgVGhlIGZvbGxvd2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFnZWhlYXBfbG9ja18uCkBA
IC0yMzUzLDE0NSArMjQ5Miw2IEBAIGNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlIHsKIH07CiAK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gRGF0YSBrZXB0IHBlciBzaXplLWNsYXNzIGluIGNlbnRyYWwgY2Fj
aGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0IHsKLSBw
dWJsaWM6Ci0gIHZvaWQgSW5pdChzaXplX3QgY2wpOwotCi0gIC8vIFRoZXNlIG1ldGhvZHMgYWxs
IGRvIGludGVybmFsIGxvY2tpbmcuCi0KLSAgLy8gSW5zZXJ0IHRoZSBzcGVjaWZpZWQgcmFuZ2Ug
aW50byB0aGUgY2VudHJhbCBmcmVlbGlzdC4gIE4gaXMgdGhlIG51bWJlciBvZgotICAvLyBlbGVt
ZW50cyBpbiB0aGUgcmFuZ2UuCi0gIHZvaWQgSW5zZXJ0UmFuZ2Uodm9pZCAqc3RhcnQsIHZvaWQg
KmVuZCwgaW50IE4pOwotCi0gIC8vIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZmV0Y2hl
ZCBlbGVtZW50cyBpbnRvIE4uCi0gIHZvaWQgUmVtb3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2b2lk
ICoqZW5kLCBpbnQgKk4pOwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVj
dHMgaW4gY2FjaGUuCi0gIHNpemVfdCBsZW5ndGgoKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgm
bG9ja18pOwotICAgIHJldHVybiBjb3VudGVyXzsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG51
bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gdGhlIHRyYW5zZmVyIGNhY2hlLgotICBpbnQgdGNfbGVu
Z3RoKCkgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tfKTsKLSAgICByZXR1cm4gdXNlZF9z
bG90c18gKiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NfXTsKLSAgfQotCi0jaWZkZWYg
V1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgotICB2
b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJl
YWRlciwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQot
ICB7Ci0gICAgZm9yIChTcGFuKiBzcGFuID0gJmVtcHR5Xzsgc3BhbiAmJiBzcGFuICE9ICZlbXB0
eV87IHNwYW4gPSAoc3Bhbi0+bmV4dCA/IHJlYWRlcihzcGFuLT5uZXh0KSA6IDApKQotICAgICAg
QVNTRVJUKCFzcGFuLT5vYmplY3RzKTsKLQotICAgIEFTU0VSVCghbm9uZW1wdHlfLm9iamVjdHMp
OwotICAgIHN0YXRpYyBjb25zdCBwdHJkaWZmX3Qgbm9uZW1wdHlPZmZzZXQgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPigmbm9uZW1wdHlfKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KHRoaXMpOwotCi0gICAgU3BhbiogcmVtb3RlTm9uZW1wdHkgPSByZWludGVycHJldF9j
YXN0PFNwYW4qPihyZWludGVycHJldF9jYXN0PGNoYXIqPihyZW1vdGVDZW50cmFsRnJlZUxpc3Qp
ICsgbm9uZW1wdHlPZmZzZXQpOwotICAgIFNwYW4qIHJlbW90ZVNwYW4gPSBub25lbXB0eV8ubmV4
dDsKLQotICAgIGZvciAoU3Bhbiogc3BhbiA9IHJlYWRlcihyZW1vdGVTcGFuKTsgc3BhbiAmJiBy
ZW1vdGVTcGFuICE9IHJlbW90ZU5vbmVtcHR5OyByZW1vdGVTcGFuID0gc3Bhbi0+bmV4dCwgc3Bh
biA9IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4tPm5leHQpIDogMCkpIHsKLSAgICAgIGZvciAo
dm9pZCogbmV4dE9iamVjdCA9IHNwYW4tPm9iamVjdHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3Qg
PSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihu
ZXh0T2JqZWN0KSkpCi0gICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKLSAgICB9Ci0g
IH0KLSNlbmRpZgotCi0gcHJpdmF0ZToKLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAg
Ly8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hlIGFuZCByZXR1cm4uCi0gIC8vIFJldHVybiBOVUxM
IGlmIG5vIGZyZWUgZW50cmllcyBpbiBjYWNoZS4KLSAgdm9pZCogRmV0Y2hGcm9tU3BhbnMoKTsK
LQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBSZW1vdmUgb2JqZWN0IGZyb20g
Y2FjaGUgYW5kIHJldHVybi4gIEZldGNoZXMKLSAgLy8gZnJvbSBwYWdlaGVhcCBpZiBjYWNoZSBp
cyBlbXB0eS4gIE9ubHkgcmV0dXJucwotICAvLyBOVUxMIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4K
LSAgdm9pZCogRmV0Y2hGcm9tU3BhbnNTYWZlKCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlz
IGhlbGQKLSAgLy8gUmVsZWFzZSBhIGxpbmtlZCBsaXN0IG9mIG9iamVjdHMgdG8gc3BhbnMuCi0g
IC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgotICB2b2lkIFJlbGVhc2VMaXN0VG9T
cGFucyh2b2lkICpzdGFydCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8g
UmVsZWFzZSBhbiBvYmplY3QgdG8gc3BhbnMuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNl
IGxvY2tfLgotICBBTFdBWVNfSU5MSU5FIHZvaWQgUmVsZWFzZVRvU3BhbnModm9pZCogb2JqZWN0
KTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgaGVsZAotICAvLyBQb3B1bGF0ZSBjYWNoZSBi
eSBmZXRjaGluZyBmcm9tIHRoZSBwYWdlIGhlYXAuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSByZWxl
YXNlIGxvY2tfLgotICBBTFdBWVNfSU5MSU5FIHZvaWQgUG9wdWxhdGUoKTsKLQotICAvLyBSRVFV
SVJFUzogbG9jayBpcyBoZWxkLgotICAvLyBUcmllcyB0byBtYWtlIHJvb20gZm9yIGEgVENFbnRy
eS4gIElmIHRoZSBjYWNoZSBpcyBmdWxsIGl0IHdpbGwgdHJ5IHRvCi0gIC8vIGV4cGFuZCBpdCBh
dCB0aGUgY29zdCBvZiBzb21lIG90aGVyIGNhY2hlIHNpemUuICBSZXR1cm4gZmFsc2UgaWYgdGhl
cmUgaXMKLSAgLy8gbm8gc3BhY2UuCi0gIGJvb2wgTWFrZUNhY2hlU3BhY2UoKTsKLQotICAvLyBS
RVFVSVJFUzogbG9ja18gZm9yIGxvY2tlZF9zaXplX2NsYXNzIGlzIGhlbGQuCi0gIC8vIFBpY2tz
IGEgInJhbmRvbSIgc2l6ZSBjbGFzcyB0byBzdGVhbCBUQ0VudHJ5IHNsb3QgZnJvbS4gIEluIHJl
YWxpdHkgaXQKLSAgLy8ganVzdCBpdGVyYXRlcyBvdmVyIHRoZSBzaXplY2xhc3NlcyBidXQgZG9l
cyBzbyB3aXRob3V0IHRha2luZyBhIGxvY2suCi0gIC8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
LgotICAvLyBNYXkgdGVtcG9yYXJpbHkgbG9jayBhICJyYW5kb20iIHNpemUgY2xhc3MuCi0gIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6ZV90IGxvY2tl
ZF9zaXplX2NsYXNzLCBib29sIGZvcmNlKTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgKm5v
dCogaGVsZC4KLSAgLy8gVHJpZXMgdG8gc2hyaW5rIHRoZSBDYWNoZS4gIElmIGZvcmNlIGlzIHRy
dWUgaXQgd2lsbCByZWxhc2Ugb2JqZWN0cyB0bwotICAvLyBzcGFucyBpZiBpdCBhbGxvd3MgaXQg
dG8gc2hyaW5rIHRoZSBjYWNoZS4gIFJldHVybiBmYWxzZSBpZiBpdCBmYWlsZWQgdG8KLSAgLy8g
c2hyaW5rIHRoZSBjYWNoZS4gIERlY3JlbWVudHMgY2FjaGVfc2l6ZV8gb24gc3VjY2Vlc3MuCi0g
IC8vIE1heSB0ZW1wb3JhcmlseSB0YWtlIGxvY2tfLiAgSWYgaXQgdGFrZXMgbG9ja18sIHRoZSBs
b2NrZWRfc2l6ZV9jbGFzcwotICAvLyBsb2NrIGlzIHJlbGVhc2VkIHRvIHRoZSB0aHJlYWQgZnJv
bSBob2xkaW5nIHR3byBzaXplIGNsYXNzIGxvY2tzCi0gIC8vIGNvbmN1cnJlbnRseSB3aGljaCBj
b3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCi0gIGJvb2wgU2hyaW5rQ2FjaGUoaW50IGxvY2tlZF9z
aXplX2NsYXNzLCBib29sIGZvcmNlKTsKLQotICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgYWxsIHRo
ZSBkYXRhIG1lbWJlcnMuICBjYWNoZWRfZW50cmllcyBhbmQgY2FjaGVfc2l6ZV8KLSAgLy8gbWF5
IGJlIGxvb2tlZCBhdCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suCi0gIFNwaW5Mb2NrIGxvY2tf
OwotCi0gIC8vIFdlIGtlZXAgbGlua2VkIGxpc3RzIG9mIGVtcHR5IGFuZCBub24tZW1wdHkgc3Bh
bnMuCi0gIHNpemVfdCAgIHNpemVfY2xhc3NfOyAgICAgLy8gTXkgc2l6ZSBjbGFzcwotICBTcGFu
ICAgICBlbXB0eV87ICAgICAgICAgIC8vIER1bW15IGhlYWRlciBmb3IgbGlzdCBvZiBlbXB0eSBz
cGFucwotICBTcGFuICAgICBub25lbXB0eV87ICAgICAgIC8vIER1bW15IGhlYWRlciBmb3IgbGlz
dCBvZiBub24tZW1wdHkgc3BhbnMKLSAgc2l6ZV90ICAgY291bnRlcl87ICAgICAgICAvLyBOdW1i
ZXIgb2YgZnJlZSBvYmplY3RzIGluIGNhY2hlIGVudHJ5Ci0KLSAgLy8gSGVyZSB3ZSByZXNlcnZl
IHNwYWNlIGZvciBUQ0VudHJ5IGNhY2hlIHNsb3RzLiAgU2luY2Ugb25lIHNpemUgY2xhc3MgY2Fu
Ci0gIC8vIGVuZCB1cCBnZXR0aW5nIGFsbCB0aGUgVENFbnRyaWVzIHF1b3RhIGluIHRoZSBzeXN0
ZW0gd2UganVzdCBwcmVhbGxvY2F0ZQotICAvLyBzdWZmaWNpZW50IG51bWJlciBvZiBlbnRyaWVz
IGhlcmUuCi0gIFRDRW50cnkgdGNfc2xvdHNfW2tOdW1UcmFuc2ZlckVudHJpZXNdOwotCi0gIC8v
IE51bWJlciBvZiBjdXJyZW50bHkgdXNlZCBjYWNoZWQgZW50cmllcyBpbiB0Y19zbG90c18uICBU
aGlzIHZhcmlhYmxlIGlzCi0gIC8vIHVwZGF0ZWQgdW5kZXIgYSBsb2NrIGJ1dCBjYW4gYmUgcmVh
ZCB3aXRob3V0IG9uZS4KLSAgaW50MzJfdCB1c2VkX3Nsb3RzXzsKLSAgLy8gVGhlIGN1cnJlbnQg
bnVtYmVyIG9mIHNsb3RzIGZvciB0aGlzIHNpemUgY2xhc3MuICBUaGlzIGlzIGFuCi0gIC8vIGFk
YXB0aXZlIHZhbHVlIHRoYXQgaXMgaW5jcmVhc2VkIGlmIHRoZXJlIGlzIGxvdHMgb2YgdHJhZmZp
YwotICAvLyBvbiBhIGdpdmVuIHNpemUgY2xhc3MuCi0gIGludDMyX3QgY2FjaGVfc2l6ZV87Ci19
OwotCi0jaWYgQ09NUElMRVIoQ0xBTkcpICYmIGRlZmluZWQoX19oYXNfd2FybmluZykKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jaWYgX19oYXNfd2FybmluZygiLVd1bnVzZWQtcHJp
dmF0ZS1maWVsZCIpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQt
cHJpdmF0ZS1maWVsZCIKLSNlbmRpZgotI2VuZGlmCi0KLS8vIFBhZCBlYWNoIENlbnRyYWxDYWNo
ZSBvYmplY3QgdG8gbXVsdGlwbGUgb2YgNjQgYnl0ZXMKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7Ci0gcHJp
dmF0ZToKLSAgY2hhciBwYWRfWyg2NCAtIChzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dCkgJSA2NCkpICUgNjRdOwotfTsKLQotI2lmIENPTVBJTEVSKENMQU5HKSAmJiBkZWZpbmVkKF9f
aGFzX3dhcm5pbmcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyBHbG9iYWwgdmFyaWFibGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAo=
</data>
<flag name="review"
          id="188842"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>